Implement -freuse-stack= option
[official-gcc.git] / gcc / doc / invoke.texi
blobca313bea9f198606a8ed4b62c9a7e7ce02304c24
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, 2011, 2012
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.
7 @ignore
8 @c man begin INCLUDE
9 @include gcc-vers.texi
10 @c man end
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, 2011,
15 2012
16 Free Software Foundation, Inc.
18 Permission is granted to copy, distribute and/or modify this document
19 under the terms of the GNU Free Documentation License, Version 1.3 or
20 any later version published by the Free Software Foundation; with the
21 Invariant Sections being ``GNU General Public License'' and ``Funding
22 Free Software'', the Front-Cover texts being (a) (see below), and with
23 the Back-Cover Texts being (b) (see below).  A copy of the license is
24 included in the gfdl(7) man page.
26 (a) The FSF's Front-Cover Text is:
28      A GNU Manual
30 (b) The FSF's Back-Cover Text is:
32      You have freedom to copy and modify this GNU Manual, like GNU
33      software.  Copies published by the Free Software Foundation raise
34      funds for GNU development.
35 @c man end
36 @c Set file name and title for the man page.
37 @setfilename gcc
38 @settitle GNU project C and C++ compiler
39 @c man begin SYNOPSIS
40 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
41     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
42     [@option{-W}@var{warn}@dots{}] [@option{-Wpedantic}]
43     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
44     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
45     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
46     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
48 Only the most useful options are listed here; see below for the
49 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
50 @c man end
51 @c man begin SEEALSO
52 gpl(7), gfdl(7), fsf-funding(7),
53 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
54 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
55 @file{ld}, @file{binutils} and @file{gdb}.
56 @c man end
57 @c man begin BUGS
58 For instructions on reporting bugs, see
59 @w{@value{BUGURL}}.
60 @c man end
61 @c man begin AUTHOR
62 See the Info entry for @command{gcc}, or
63 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
64 for contributors to GCC@.
65 @c man end
66 @end ignore
68 @node Invoking GCC
69 @chapter GCC Command Options
70 @cindex GCC command options
71 @cindex command options
72 @cindex options, GCC command
74 @c man begin DESCRIPTION
75 When you invoke GCC, it normally does preprocessing, compilation,
76 assembly and linking.  The ``overall options'' allow you to stop this
77 process at an intermediate stage.  For example, the @option{-c} option
78 says not to run the linker.  Then the output consists of object files
79 output by the assembler.
81 Other options are passed on to one stage of processing.  Some options
82 control the preprocessor and others the compiler itself.  Yet other
83 options control the assembler and linker; most of these are not
84 documented here, since you rarely need to use any of them.
86 @cindex C compilation options
87 Most of the command-line options that you can use with GCC are useful
88 for C programs; when an option is only useful with another language
89 (usually C++), the explanation says so explicitly.  If the description
90 for a particular option does not mention a source language, you can use
91 that option with all supported languages.
93 @cindex C++ compilation options
94 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
95 options for compiling C++ programs.
97 @cindex grouping options
98 @cindex options, grouping
99 The @command{gcc} program accepts options and file names as operands.  Many
100 options have multi-letter names; therefore multiple single-letter options
101 may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
102 -v}}.
104 @cindex order of options
105 @cindex options, order
106 You can mix options and other arguments.  For the most part, the order
107 you use doesn't matter.  Order does matter when you use several
108 options of the same kind; for example, if you specify @option{-L} more
109 than once, the directories are searched in the order specified.  Also,
110 the placement of the @option{-l} option is significant.
112 Many options have long names starting with @samp{-f} or with
113 @samp{-W}---for example,
114 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
115 these have both positive and negative forms; the negative form of
116 @option{-ffoo} is @option{-fno-foo}.  This manual documents
117 only one of these two forms, whichever one is not the default.
119 @c man end
121 @xref{Option Index}, for an index to GCC's options.
123 @menu
124 * Option Summary::      Brief list of all options, without explanations.
125 * Overall Options::     Controlling the kind of output:
126                         an executable, object files, assembler files,
127                         or preprocessed source.
128 * Invoking G++::        Compiling C++ programs.
129 * C Dialect Options::   Controlling the variant of C language compiled.
130 * C++ Dialect Options:: Variations on C++.
131 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
132                         and Objective-C++.
133 * Language Independent Options:: Controlling how diagnostics should be
134                         formatted.
135 * Warning Options::     How picky should the compiler be?
136 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
137 * Optimize Options::    How much optimization?
138 * Preprocessor Options:: Controlling header files and macro definitions.
139                          Also, getting dependency information for Make.
140 * Assembler Options::   Passing options to the assembler.
141 * Link Options::        Specifying libraries and so on.
142 * Directory Options::   Where to find header files and libraries.
143                         Where to find the compiler executable files.
144 * Spec Files::          How to pass switches to sub-processes.
145 * Target Options::      Running a cross-compiler, or an old version of GCC.
146 * Submodel Options::    Specifying minor hardware or convention variations,
147                         such as 68010 vs 68020.
148 * Code Gen Options::    Specifying conventions for function calls, data layout
149                         and register usage.
150 * Environment Variables:: Env vars that affect GCC.
151 * Precompiled Headers:: Compiling a header once, and using it many times.
152 @end menu
154 @c man begin OPTIONS
156 @node Option Summary
157 @section Option Summary
159 Here is a summary of all the options, grouped by type.  Explanations are
160 in the following sections.
162 @table @emph
163 @item Overall Options
164 @xref{Overall Options,,Options Controlling the Kind of Output}.
165 @gccoptlist{-c  -S  -E  -o @var{file}  -no-canonical-prefixes  @gol
166 -pipe  -pass-exit-codes  @gol
167 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
168 --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
169 -fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file}}
171 @item C Language Options
172 @xref{C Dialect Options,,Options Controlling C Dialect}.
173 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
174 -aux-info @var{filename} -fallow-parameterless-variadic-functions @gol
175 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
176 -fhosted  -ffreestanding -fopenmp -fms-extensions -fplan9-extensions @gol
177 -trigraphs  -traditional  -traditional-cpp @gol
178 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
179 -fsigned-bitfields  -fsigned-char @gol
180 -funsigned-bitfields  -funsigned-char}
182 @item C++ Language Options
183 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
184 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
185 -fconstexpr-depth=@var{n}  -ffriend-injection @gol
186 -fno-elide-constructors @gol
187 -fno-enforce-eh-specs @gol
188 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
189 -fno-implicit-templates @gol
190 -fno-implicit-inline-templates @gol
191 -fno-implement-inlines  -fms-extensions @gol
192 -fno-nonansi-builtins  -fnothrow-opt  -fno-operator-names @gol
193 -fno-optional-diags  -fpermissive @gol
194 -fno-pretty-templates @gol
195 -frepo  -fno-rtti  -fstats  -ftemplate-backtrace-limit=@var{n} @gol
196 -ftemplate-depth=@var{n} @gol
197 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
198 -fno-default-inline  -fvisibility-inlines-hidden @gol
199 -fvisibility-ms-compat @gol
200 -Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
201 -Wdelete-non-virtual-dtor -Wliteral-suffix -Wnarrowing @gol
202 -Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
203 -Weffc++  -Wstrict-null-sentinel @gol
204 -Wno-non-template-friend  -Wold-style-cast @gol
205 -Woverloaded-virtual  -Wno-pmf-conversions @gol
206 -Wsign-promo}
208 @item Objective-C and Objective-C++ Language Options
209 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
210 Objective-C and Objective-C++ Dialects}.
211 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
212 -fgnu-runtime  -fnext-runtime @gol
213 -fno-nil-receivers @gol
214 -fobjc-abi-version=@var{n} @gol
215 -fobjc-call-cxx-cdtors @gol
216 -fobjc-direct-dispatch @gol
217 -fobjc-exceptions @gol
218 -fobjc-gc @gol
219 -fobjc-nilcheck @gol
220 -fobjc-std=objc1 @gol
221 -freplace-objc-classes @gol
222 -fzero-link @gol
223 -gen-decls @gol
224 -Wassign-intercept @gol
225 -Wno-protocol  -Wselector @gol
226 -Wstrict-selector-match @gol
227 -Wundeclared-selector}
229 @item Language Independent Options
230 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
231 @gccoptlist{-fmessage-length=@var{n}  @gol
232 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
233 -fno-diagnostics-show-option -fno-diagnostics-show-caret}
235 @item Warning Options
236 @xref{Warning Options,,Options to Request or Suppress Warnings}.
237 @gccoptlist{-fsyntax-only  -fmax-errors=@var{n}  -Wpedantic @gol
238 -pedantic-errors @gol
239 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds @gol
240 -Wno-attributes -Wno-builtin-macro-redefined @gol
241 -Wc++-compat -Wc++11-compat -Wcast-align  -Wcast-qual  @gol
242 -Wchar-subscripts -Wclobbered  -Wcomment @gol
243 -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wno-deprecated  @gol
244 -Wno-deprecated-declarations -Wdisabled-optimization  @gol
245 -Wno-div-by-zero -Wdouble-promotion -Wempty-body  -Wenum-compare @gol
246 -Wno-endif-labels -Werror  -Werror=* @gol
247 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
248 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
249 -Wformat-security  -Wformat-y2k @gol
250 -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol
251 -Wignored-qualifiers @gol
252 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
253 -Winit-self  -Winline -Wmaybe-uninitialized @gol
254 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
255 -Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
256 -Wlogical-op -Wlong-long @gol
257 -Wmain -Wmaybe-uninitialized -Wmissing-braces  -Wmissing-field-initializers @gol
258 -Wmissing-include-dirs @gol
259 -Wno-mudflap @gol
260 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
261 -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
262 -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
263 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
264 -Wredundant-decls @gol
265 -Wreturn-type  -Wsequence-point  -Wshadow @gol
266 -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
267 -Wstack-usage=@var{len} -Wstrict-aliasing -Wstrict-aliasing=n @gol
268 -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
269 -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]} @gol
270 -Wmissing-format-attribute @gol
271 -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand @gol
272 -Wsystem-headers  -Wtrampolines  -Wtrigraphs  -Wtype-limits  -Wundef @gol
273 -Wuninitialized  -Wunknown-pragmas  -Wno-pragmas @gol
274 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
275 -Wunused-label  -Wunused-local-typedefs -Wunused-parameter @gol
276 -Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
277 -Wunused-but-set-parameter -Wunused-but-set-variable @gol
278 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
279 -Wvla -Wvolatile-register-var  -Wwrite-strings -Wzero-as-null-pointer-constant}
281 @item C and Objective-C-only Warning Options
282 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
283 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
284 -Wold-style-declaration  -Wold-style-definition @gol
285 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
286 -Wdeclaration-after-statement -Wpointer-sign}
288 @item Debugging Options
289 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
290 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
291 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
292 -fdisable-ipa-@var{pass_name} @gol
293 -fdisable-rtl-@var{pass_name} @gol
294 -fdisable-rtl-@var{pass-name}=@var{range-list} @gol
295 -fdisable-tree-@var{pass_name} @gol
296 -fdisable-tree-@var{pass-name}=@var{range-list} @gol
297 -fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
298 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
299 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
300 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
301 -fdump-passes @gol
302 -fdump-statistics @gol
303 -fdump-tree-all @gol
304 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
305 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
306 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
307 -fdump-tree-ch @gol
308 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
309 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
310 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
311 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
312 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
313 -fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
314 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
315 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
316 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
317 -fdump-tree-nrv -fdump-tree-vect @gol
318 -fdump-tree-sink @gol
319 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
320 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
321 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
322 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
323 -ftree-vectorizer-verbose=@var{n} @gol
324 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
325 -fdump-final-insns=@var{file} @gol
326 -fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
327 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
328 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
329 -fenable-@var{kind}-@var{pass} @gol
330 -fenable-@var{kind}-@var{pass}=@var{range-list} @gol
331 -fdebug-types-section @gol
332 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
333 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
334 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
335 -fstack-usage  -ftest-coverage  -ftime-report -fvar-tracking @gol
336 -fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
337 -g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
338 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
339 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
340 -gvms  -gxcoff  -gxcoff+ @gol
341 -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
342 -fdebug-prefix-map=@var{old}=@var{new} @gol
343 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
344 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
345 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
346 -print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
347 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
348 -print-sysroot -print-sysroot-headers-suffix @gol
349 -save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
351 @item Optimization Options
352 @xref{Optimize Options,,Options that Control Optimization}.
353 @gccoptlist{-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
354 -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
355 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
356 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
357 -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack @gol
358 -fcompare-elim -fcprop-registers -fcrossjumping @gol
359 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules @gol
360 -fcx-limited-range @gol
361 -fdata-sections -fdce -fdelayed-branch @gol
362 -fdelete-null-pointer-checks -fdevirtualize -fdse @gol
363 -fearly-inlining -fipa-sra -fexpensive-optimizations -ffat-lto-objects @gol
364 -ffast-math -ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
365 -fforward-propagate -ffp-contract=@var{style} -ffunction-sections @gol
366 -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-identity @gol
367 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
368 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
369 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg @gol
370 -fipa-pta -fipa-profile -fipa-pure-const -fipa-reference @gol
371 -fira-algorithm=@var{algorithm} @gol
372 -fira-region=@var{region} @gol
373 -fira-loop-pressure -fno-ira-share-save-slots @gol
374 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
375 -fivopts -fkeep-inline-functions -fkeep-static-consts @gol
376 -floop-block -floop-interchange -floop-strip-mine -floop-nest-optimize @gol
377 -floop-parallelize-all -flto -flto-compression-level @gol
378 -flto-partition=@var{alg} -flto-report -fmerge-all-constants @gol
379 -fmerge-constants -fmodulo-sched -fmodulo-sched-allow-regmoves @gol
380 -fmove-loop-invariants fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg @gol
381 -fno-default-inline @gol
382 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
383 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
384 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
385 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
386 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
387 -fpartial-inlining -fpeel-loops -fpredictive-commoning @gol
388 -fprefetch-loop-arrays @gol
389 -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
390 -fprofile-generate=@var{path} @gol
391 -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
392 -freciprocal-math -free -fregmove -frename-registers -freorder-blocks @gol
393 -freorder-blocks-and-partition -freorder-functions @gol
394 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
395 -frounding-math -fsched2-use-superblocks -fsched-pressure @gol
396 -fsched-spec-load -fsched-spec-load-dangerous @gol
397 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
398 -fsched-group-heuristic -fsched-critical-path-heuristic @gol
399 -fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
400 -fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
401 -fschedule-insns -fschedule-insns2 -fsection-anchors @gol
402 -fselective-scheduling -fselective-scheduling2 @gol
403 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
404 -fshrink-wrap -fsignaling-nans -fsingle-precision-constant @gol
405 -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol
406 -fstack-protector-all -fstrict-aliasing -fstrict-overflow @gol
407 -fthread-jumps -ftracer -ftree-bit-ccp @gol
408 -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
409 -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
410 -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol
411 -ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol
412 -ftree-loop-if-convert-stores -ftree-loop-im @gol
413 -ftree-phiprop -ftree-loop-distribution -ftree-loop-distribute-patterns @gol
414 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
415 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-partial-pre -ftree-pta @gol
416 -ftree-reassoc @gol
417 -ftree-sink -ftree-sra -ftree-switch-conversion -ftree-tail-merge @gol
418 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
419 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
420 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
421 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
422 -fwhole-program -fwpa -fuse-linker-plugin @gol
423 --param @var{name}=@var{value}
424 -O  -O0  -O1  -O2  -O3  -Os -Ofast}
426 @item Preprocessor Options
427 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
428 @gccoptlist{-A@var{question}=@var{answer} @gol
429 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
430 -C  -dD  -dI  -dM  -dN @gol
431 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
432 -idirafter @var{dir} @gol
433 -include @var{file}  -imacros @var{file} @gol
434 -iprefix @var{file}  -iwithprefix @var{dir} @gol
435 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
436 -imultilib @var{dir} -isysroot @var{dir} @gol
437 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
438 -P  -fdebug-cpp -ftrack-macro-expansion -fworking-directory @gol
439 -remap -trigraphs  -undef  -U@var{macro}  @gol
440 -Wp,@var{option} -Xpreprocessor @var{option} -no-integrated-cpp}
442 @item Assembler Option
443 @xref{Assembler Options,,Passing Options to the Assembler}.
444 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
446 @item Linker Options
447 @xref{Link Options,,Options for Linking}.
448 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
449 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
450 -s  -static  -static-libgcc  -static-libstdc++ -shared  @gol
451 -shared-libgcc  -symbolic @gol
452 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
453 -u @var{symbol}}
455 @item Directory Options
456 @xref{Directory Options,,Options for Directory Search}.
457 @gccoptlist{-B@var{prefix} -I@var{dir} -iplugindir=@var{dir} @gol
458 -iquote@var{dir} -L@var{dir} -specs=@var{file} -I- @gol
459 --sysroot=@var{dir}}
461 @item Machine Dependent Options
462 @xref{Submodel Options,,Hardware Models and Configurations}.
463 @c This list is ordered alphanumerically by subsection name.
464 @c Try and put the significant identifier (CPU or system) first,
465 @c so users have a clue at guessing where the ones they want will be.
467 @emph{Adapteva Epiphany Options}
468 @gccoptlist{-mhalf-reg-file -mprefer-short-insn-regs @gol
469 -mbranch-cost=@var{num} -mcmove -mnops=@var{num} -msoft-cmpsf @gol
470 -msplit-lohi -mpost-inc -mpost-modify -mstack-offset=@var{num} @gol
471 -mround-nearest -mlong-calls -mshort-calls -msmall16 @gol
472 -mfp-mode=@var{mode} -mvect-double -max-vect-align=@var{num} @gol
473 -msplit-vecmove-early -m1reg-@var{reg}}
475 @emph{ARM Options}
476 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
477 -mabi=@var{name} @gol
478 -mapcs-stack-check  -mno-apcs-stack-check @gol
479 -mapcs-float  -mno-apcs-float @gol
480 -mapcs-reentrant  -mno-apcs-reentrant @gol
481 -msched-prolog  -mno-sched-prolog @gol
482 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
483 -mfloat-abi=@var{name} @gol
484 -mfp16-format=@var{name}
485 -mthumb-interwork  -mno-thumb-interwork @gol
486 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
487 -mstructure-size-boundary=@var{n} @gol
488 -mabort-on-noreturn @gol
489 -mlong-calls  -mno-long-calls @gol
490 -msingle-pic-base  -mno-single-pic-base @gol
491 -mpic-register=@var{reg} @gol
492 -mnop-fun-dllimport @gol
493 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
494 -mpoke-function-name @gol
495 -mthumb  -marm @gol
496 -mtpcs-frame  -mtpcs-leaf-frame @gol
497 -mcaller-super-interworking  -mcallee-super-interworking @gol
498 -mtp=@var{name} -mtls-dialect=@var{dialect} @gol
499 -mword-relocations @gol
500 -mfix-cortex-m3-ldrd}
502 @emph{AVR Options}
503 @gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol
504 -mcall-prologues -mint8 -mno-interrupts -mrelax -mshort-calls @gol
505 -mstrict-X -mtiny-stack}
507 @emph{Blackfin Options}
508 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
509 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
510 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
511 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
512 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
513 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
514 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
515 -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
516 -micplb}
518 @emph{C6X Options}
519 @gccoptlist{-mbig-endian  -mlittle-endian -march=@var{cpu} @gol
520 -msim -msdata=@var{sdata-type}}
522 @emph{CRIS Options}
523 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
524 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
525 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
526 -mstack-align  -mdata-align  -mconst-align @gol
527 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
528 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
529 -mmul-bug-workaround  -mno-mul-bug-workaround}
531 @emph{CR16 Options}
532 @gccoptlist{-mmac @gol
533 -mcr16cplus -mcr16c @gol
534 -msim -mint32 -mbit-ops
535 -mdata-model=@var{model}}
537 @emph{Darwin Options}
538 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
539 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
540 -client_name  -compatibility_version  -current_version @gol
541 -dead_strip @gol
542 -dependency-file  -dylib_file  -dylinker_install_name @gol
543 -dynamic  -dynamiclib  -exported_symbols_list @gol
544 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
545 -force_flat_namespace  -headerpad_max_install_names @gol
546 -iframework @gol
547 -image_base  -init  -install_name  -keep_private_externs @gol
548 -multi_module  -multiply_defined  -multiply_defined_unused @gol
549 -noall_load   -no_dead_strip_inits_and_terms @gol
550 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
551 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
552 -private_bundle  -read_only_relocs  -sectalign @gol
553 -sectobjectsymbols  -whyload  -seg1addr @gol
554 -sectcreate  -sectobjectsymbols  -sectorder @gol
555 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
556 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
557 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
558 -single_module  -static  -sub_library  -sub_umbrella @gol
559 -twolevel_namespace  -umbrella  -undefined @gol
560 -unexported_symbols_list  -weak_reference_mismatches @gol
561 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
562 -mkernel -mone-byte-bool}
564 @emph{DEC Alpha Options}
565 @gccoptlist{-mno-fp-regs  -msoft-float @gol
566 -mieee  -mieee-with-inexact  -mieee-conformant @gol
567 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
568 -mtrap-precision=@var{mode}  -mbuild-constants @gol
569 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
570 -mbwx  -mmax  -mfix  -mcix @gol
571 -mfloat-vax  -mfloat-ieee @gol
572 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
573 -msmall-text  -mlarge-text @gol
574 -mmemory-latency=@var{time}}
576 @emph{FR30 Options}
577 @gccoptlist{-msmall-model -mno-lsim}
579 @emph{FRV Options}
580 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
581 -mhard-float  -msoft-float @gol
582 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
583 -mdouble  -mno-double @gol
584 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
585 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
586 -mlinked-fp  -mlong-calls  -malign-labels @gol
587 -mlibrary-pic  -macc-4  -macc-8 @gol
588 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
589 -moptimize-membar -mno-optimize-membar @gol
590 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
591 -mvliw-branch  -mno-vliw-branch @gol
592 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
593 -mno-nested-cond-exec  -mtomcat-stats @gol
594 -mTLS -mtls @gol
595 -mcpu=@var{cpu}}
597 @emph{GNU/Linux Options}
598 @gccoptlist{-mglibc -muclibc -mbionic -mandroid @gol
599 -tno-android-cc -tno-android-ld}
601 @emph{H8/300 Options}
602 @gccoptlist{-mrelax  -mh  -ms  -mn  -mexr -mno-exr  -mint32  -malign-300}
604 @emph{HPPA Options}
605 @gccoptlist{-march=@var{architecture-type} @gol
606 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
607 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
608 -mfixed-range=@var{register-range} @gol
609 -mjump-in-delay -mlinker-opt -mlong-calls @gol
610 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
611 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
612 -mno-jump-in-delay  -mno-long-load-store @gol
613 -mno-portable-runtime  -mno-soft-float @gol
614 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
615 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
616 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
617 -munix=@var{unix-std}  -nolibdld  -static  -threads}
619 @emph{i386 and x86-64 Options}
620 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
621 -mfpmath=@var{unit} @gol
622 -masm=@var{dialect}  -mno-fancy-math-387 @gol
623 -mno-fp-ret-in-387  -msoft-float @gol
624 -mno-wide-multiply  -mrtd  -malign-double @gol
625 -mpreferred-stack-boundary=@var{num} @gol
626 -mincoming-stack-boundary=@var{num} @gol
627 -mcld -mcx16 -msahf -mmovbe -mcrc32 @gol
628 -mrecip -mrecip=@var{opt} @gol
629 -mvzeroupper @gol
630 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
631 -mavx2 -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma @gol
632 -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt @gol
633 -mbmi2 -mrtm -mlwp -mthreads @gol
634 -mno-align-stringops  -minline-all-stringops @gol
635 -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
636 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
637 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
638 -mveclibabi=@var{type} -mvect8-ret-in-mem @gol
639 -mpc32 -mpc64 -mpc80 -mstackrealign @gol
640 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
641 -mcmodel=@var{code-model} -mabi=@var{name} -maddress-mode=@var{mode} @gol
642 -m32 -m64 -mx32 -mlarge-data-threshold=@var{num} @gol
643 -msse2avx -mfentry -m8bit-idiv @gol
644 -mavx256-split-unaligned-load -mavx256-split-unaligned-store}
646 @emph{i386 and x86-64 Windows Options}
647 @gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll @gol
648 -mnop-fun-dllimport -mthread @gol
649 -municode -mwin32 -mwindows -fno-set-stack-executable}
651 @emph{IA-64 Options}
652 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
653 -mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
654 -mconstant-gp  -mauto-pic  -mfused-madd @gol
655 -minline-float-divide-min-latency @gol
656 -minline-float-divide-max-throughput @gol
657 -mno-inline-float-divide @gol
658 -minline-int-divide-min-latency @gol
659 -minline-int-divide-max-throughput  @gol
660 -mno-inline-int-divide @gol
661 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
662 -mno-inline-sqrt @gol
663 -mdwarf2-asm -mearly-stop-bits @gol
664 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
665 -mtune=@var{cpu-type} -milp32 -mlp64 @gol
666 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
667 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
668 -msched-spec-ldc -msched-spec-control-ldc @gol
669 -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
670 -msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
671 -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
672 -msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
674 @emph{LM32 Options}
675 @gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
676 -msign-extend-enabled -muser-enabled}
678 @emph{M32R/D Options}
679 @gccoptlist{-m32r2 -m32rx -m32r @gol
680 -mdebug @gol
681 -malign-loops -mno-align-loops @gol
682 -missue-rate=@var{number} @gol
683 -mbranch-cost=@var{number} @gol
684 -mmodel=@var{code-size-model-type} @gol
685 -msdata=@var{sdata-type} @gol
686 -mno-flush-func -mflush-func=@var{name} @gol
687 -mno-flush-trap -mflush-trap=@var{number} @gol
688 -G @var{num}}
690 @emph{M32C Options}
691 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
693 @emph{M680x0 Options}
694 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
695 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
696 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
697 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
698 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
699 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
700 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
701 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
702 -mxgot -mno-xgot}
704 @emph{MCore Options}
705 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
706 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
707 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
708 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
709 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
711 @emph{MeP Options}
712 @gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
713 -mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
714 -mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
715 -mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
716 -mtiny=@var{n}}
718 @emph{MicroBlaze Options}
719 @gccoptlist{-msoft-float -mhard-float -msmall-divides -mcpu=@var{cpu} @gol
720 -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift @gol
721 -mxl-pattern-compare -mxl-stack-check -mxl-gp-opt -mno-clearbss @gol
722 -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt @gol
723 -mxl-mode-@var{app-model}}
725 @emph{MIPS Options}
726 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
727 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
728 -mips64  -mips64r2 @gol
729 -mips16  -mno-mips16  -mflip-mips16 @gol
730 -minterlink-mips16  -mno-interlink-mips16 @gol
731 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
732 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
733 -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
734 -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
735 -mfpu=@var{fpu-type} @gol
736 -msmartmips  -mno-smartmips @gol
737 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
738 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
739 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
740 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
741 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
742 -membedded-data  -mno-embedded-data @gol
743 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
744 -mcode-readable=@var{setting} @gol
745 -msplit-addresses  -mno-split-addresses @gol
746 -mexplicit-relocs  -mno-explicit-relocs @gol
747 -mcheck-zero-division  -mno-check-zero-division @gol
748 -mdivide-traps  -mdivide-breaks @gol
749 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
750 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
751 -mfix-24k -mno-fix-24k @gol
752 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
753 -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120 @gol
754 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
755 -mflush-func=@var{func}  -mno-flush-func @gol
756 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
757 -mfp-exceptions -mno-fp-exceptions @gol
758 -mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
759 -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address}
761 @emph{MMIX Options}
762 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
763 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
764 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
765 -mno-base-addresses  -msingle-exit  -mno-single-exit}
767 @emph{MN10300 Options}
768 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
769 -mno-am33 -mam33 -mam33-2 -mam34 @gol
770 -mtune=@var{cpu-type} @gol
771 -mreturn-pointer-on-d0 @gol
772 -mno-crt0  -mrelax -mliw -msetlb}
774 @emph{PDP-11 Options}
775 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
776 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
777 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
778 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
779 -mbranch-expensive  -mbranch-cheap @gol
780 -munix-asm  -mdec-asm}
782 @emph{picoChip Options}
783 @gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N} @gol
784 -msymbol-as-address -mno-inefficient-warnings}
786 @emph{PowerPC Options}
787 See RS/6000 and PowerPC Options.
789 @emph{RL78 Options}
790 @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=rl78}
792 @emph{RS/6000 and PowerPC Options}
793 @gccoptlist{-mcpu=@var{cpu-type} @gol
794 -mtune=@var{cpu-type} @gol
795 -mcmodel=@var{code-model} @gol
796 -mpower  -mno-power  -mpower2  -mno-power2 @gol
797 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
798 -maltivec  -mno-altivec @gol
799 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
800 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
801 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
802 -mfprnd  -mno-fprnd @gol
803 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
804 -mnew-mnemonics  -mold-mnemonics @gol
805 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
806 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
807 -malign-power  -malign-natural @gol
808 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
809 -msingle-float -mdouble-float -msimple-fpu @gol
810 -mstring  -mno-string  -mupdate  -mno-update @gol
811 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
812 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
813 -mstrict-align  -mno-strict-align  -mrelocatable @gol
814 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
815 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
816 -mdynamic-no-pic  -maltivec -mswdiv  -msingle-pic-base @gol
817 -mprioritize-restricted-insns=@var{priority} @gol
818 -msched-costly-dep=@var{dependence_type} @gol
819 -minsert-sched-nops=@var{scheme} @gol
820 -mcall-sysv  -mcall-netbsd @gol
821 -maix-struct-return  -msvr4-struct-return @gol
822 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
823 -mblock-move-inline-limit=@var{num} @gol
824 -misel -mno-isel @gol
825 -misel=yes  -misel=no @gol
826 -mspe -mno-spe @gol
827 -mspe=yes  -mspe=no @gol
828 -mpaired @gol
829 -mgen-cell-microcode -mwarn-cell-microcode @gol
830 -mvrsave -mno-vrsave @gol
831 -mmulhw -mno-mulhw @gol
832 -mdlmzb -mno-dlmzb @gol
833 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
834 -mprototype  -mno-prototype @gol
835 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
836 -msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread @gol
837 -mrecip -mrecip=@var{opt} -mno-recip -mrecip-precision @gol
838 -mno-recip-precision @gol
839 -mveclibabi=@var{type} -mfriz -mno-friz @gol
840 -mpointers-to-nested-functions -mno-pointers-to-nested-functions @gol
841 -msave-toc-indirect -mno-save-toc-indirect}
843 @emph{RX Options}
844 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
845 -mcpu=@gol
846 -mbig-endian-data -mlittle-endian-data @gol
847 -msmall-data @gol
848 -msim  -mno-sim@gol
849 -mas100-syntax -mno-as100-syntax@gol
850 -mrelax@gol
851 -mmax-constant-size=@gol
852 -mint-register=@gol
853 -mpid@gol
854 -msave-acc-in-interrupts}
856 @emph{S/390 and zSeries Options}
857 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
858 -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
859 -mlong-double-64 -mlong-double-128 @gol
860 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
861 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
862 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
863 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
864 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
866 @emph{Score Options}
867 @gccoptlist{-meb -mel @gol
868 -mnhwloop @gol
869 -muls @gol
870 -mmac @gol
871 -mscore5 -mscore5u -mscore7 -mscore7d}
873 @emph{SH Options}
874 @gccoptlist{-m1  -m2  -m2e @gol
875 -m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
876 -m3  -m3e @gol
877 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
878 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
879 -m5-64media  -m5-64media-nofpu @gol
880 -m5-32media  -m5-32media-nofpu @gol
881 -m5-compact  -m5-compact-nofpu @gol
882 -mb  -ml  -mdalign  -mrelax @gol
883 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
884 -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
885 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
886 -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
887 -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
888 -maccumulate-outgoing-args -minvalid-symbols -msoft-atomic -mhard-atomic @gol
889 -mbranch-cost=@var{num} -mcbranchdi -mcmpeqdi -mfused-madd -mno-fused-madd @gol
890 -mfsca -mno-fsca -mfsrra -mno-fsrra -mpretend-cmove -menable-tas}
892 @emph{Solaris 2 Options}
893 @gccoptlist{-mimpure-text  -mno-impure-text @gol
894 -pthreads -pthread}
896 @emph{SPARC Options}
897 @gccoptlist{-mcpu=@var{cpu-type} @gol
898 -mtune=@var{cpu-type} @gol
899 -mcmodel=@var{code-model} @gol
900 -mmemory-model=@var{mem-model} @gol
901 -m32  -m64  -mapp-regs  -mno-app-regs @gol
902 -mfaster-structs  -mno-faster-structs  -mflat  -mno-flat @gol
903 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
904 -mhard-quad-float  -msoft-quad-float @gol
905 -mlittle-endian @gol
906 -mstack-bias  -mno-stack-bias @gol
907 -munaligned-doubles  -mno-unaligned-doubles @gol
908 -mv8plus  -mno-v8plus  -mvis  -mno-vis @gol
909 -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
910 -mfmaf  -mno-fmaf  -mpopc  -mno-popc @gol
911 -mfix-at697f}
913 @emph{SPU Options}
914 @gccoptlist{-mwarn-reloc -merror-reloc @gol
915 -msafe-dma -munsafe-dma @gol
916 -mbranch-hints @gol
917 -msmall-mem -mlarge-mem -mstdmain @gol
918 -mfixed-range=@var{register-range} @gol
919 -mea32 -mea64 @gol
920 -maddress-space-conversion -mno-address-space-conversion @gol
921 -mcache-size=@var{cache-size} @gol
922 -matomic-updates -mno-atomic-updates}
924 @emph{System V Options}
925 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
927 @emph{TILE-Gx Options}
928 @gccoptlist{-mcpu=CPU -m32 -m64}
930 @emph{TILEPro Options}
931 @gccoptlist{-mcpu=CPU -m32}
933 @emph{V850 Options}
934 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
935 -mprolog-function  -mno-prolog-function  -mspace @gol
936 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
937 -mapp-regs  -mno-app-regs @gol
938 -mdisable-callt  -mno-disable-callt @gol
939 -mv850e2v3 @gol
940 -mv850e2 @gol
941 -mv850e1 -mv850es @gol
942 -mv850e @gol
943 -mv850  -mbig-switch}
945 @emph{VAX Options}
946 @gccoptlist{-mg  -mgnu  -munix}
948 @emph{VMS Options}
949 @gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64 @gol
950 -mpointer-size=@var{size}}
952 @emph{VxWorks Options}
953 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
954 -Xbind-lazy  -Xbind-now}
956 @emph{x86-64 Options}
957 See i386 and x86-64 Options.
959 @emph{Xstormy16 Options}
960 @gccoptlist{-msim}
962 @emph{Xtensa Options}
963 @gccoptlist{-mconst16 -mno-const16 @gol
964 -mfused-madd  -mno-fused-madd @gol
965 -mforce-no-pic @gol
966 -mserialize-volatile  -mno-serialize-volatile @gol
967 -mtext-section-literals  -mno-text-section-literals @gol
968 -mtarget-align  -mno-target-align @gol
969 -mlongcalls  -mno-longcalls}
971 @emph{zSeries Options}
972 See S/390 and zSeries Options.
974 @item Code Generation Options
975 @xref{Code Gen Options,,Options for Code Generation Conventions}.
976 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
977 -ffixed-@var{reg}  -fexceptions @gol
978 -fnon-call-exceptions  -fdelete-dead-exceptions  -funwind-tables @gol
979 -fasynchronous-unwind-tables @gol
980 -finhibit-size-directive  -finstrument-functions @gol
981 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
982 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
983 -fno-common  -fno-ident @gol
984 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
985 -fno-jump-tables @gol
986 -frecord-gcc-switches @gol
987 -freg-struct-return  -fshort-enums @gol
988 -fshort-double  -fshort-wchar @gol
989 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
990 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
991 -fno-stack-limit -fsplit-stack @gol
992 -fleading-underscore  -ftls-model=@var{model} @gol
993 -fstack-reuse=@var{reuse_level} @gol
994 -ftrapv  -fwrapv  -fbounds-check @gol
995 -fvisibility -fstrict-volatile-bitfields -fsync-libcalls}
996 @end table
998 @menu
999 * Overall Options::     Controlling the kind of output:
1000                         an executable, object files, assembler files,
1001                         or preprocessed source.
1002 * C Dialect Options::   Controlling the variant of C language compiled.
1003 * C++ Dialect Options:: Variations on C++.
1004 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
1005                         and Objective-C++.
1006 * Language Independent Options:: Controlling how diagnostics should be
1007                         formatted.
1008 * Warning Options::     How picky should the compiler be?
1009 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
1010 * Optimize Options::    How much optimization?
1011 * Preprocessor Options:: Controlling header files and macro definitions.
1012                          Also, getting dependency information for Make.
1013 * Assembler Options::   Passing options to the assembler.
1014 * Link Options::        Specifying libraries and so on.
1015 * Directory Options::   Where to find header files and libraries.
1016                         Where to find the compiler executable files.
1017 * Spec Files::          How to pass switches to sub-processes.
1018 * Target Options::      Running a cross-compiler, or an old version of GCC.
1019 @end menu
1021 @node Overall Options
1022 @section Options Controlling the Kind of Output
1024 Compilation can involve up to four stages: preprocessing, compilation
1025 proper, assembly and linking, always in that order.  GCC is capable of
1026 preprocessing and compiling several files either into several
1027 assembler input files, or into one assembler input file; then each
1028 assembler input file produces an object file, and linking combines all
1029 the object files (those newly compiled, and those specified as input)
1030 into an executable file.
1032 @cindex file name suffix
1033 For any given input file, the file name suffix determines what kind of
1034 compilation is done:
1036 @table @gcctabopt
1037 @item @var{file}.c
1038 C source code that must be preprocessed.
1040 @item @var{file}.i
1041 C source code that should not be preprocessed.
1043 @item @var{file}.ii
1044 C++ source code that should not be preprocessed.
1046 @item @var{file}.m
1047 Objective-C source code.  Note that you must link with the @file{libobjc}
1048 library to make an Objective-C program work.
1050 @item @var{file}.mi
1051 Objective-C source code that should not be preprocessed.
1053 @item @var{file}.mm
1054 @itemx @var{file}.M
1055 Objective-C++ source code.  Note that you must link with the @file{libobjc}
1056 library to make an Objective-C++ program work.  Note that @samp{.M} refers
1057 to a literal capital M@.
1059 @item @var{file}.mii
1060 Objective-C++ source code that should not be preprocessed.
1062 @item @var{file}.h
1063 C, C++, Objective-C or Objective-C++ header file to be turned into a
1064 precompiled header (default), or C, C++ header file to be turned into an
1065 Ada spec (via the @option{-fdump-ada-spec} switch).
1067 @item @var{file}.cc
1068 @itemx @var{file}.cp
1069 @itemx @var{file}.cxx
1070 @itemx @var{file}.cpp
1071 @itemx @var{file}.CPP
1072 @itemx @var{file}.c++
1073 @itemx @var{file}.C
1074 C++ source code that must be preprocessed.  Note that in @samp{.cxx},
1075 the last two letters must both be literally @samp{x}.  Likewise,
1076 @samp{.C} refers to a literal capital C@.
1078 @item @var{file}.mm
1079 @itemx @var{file}.M
1080 Objective-C++ source code that must be preprocessed.
1082 @item @var{file}.mii
1083 Objective-C++ source code that should not be preprocessed.
1085 @item @var{file}.hh
1086 @itemx @var{file}.H
1087 @itemx @var{file}.hp
1088 @itemx @var{file}.hxx
1089 @itemx @var{file}.hpp
1090 @itemx @var{file}.HPP
1091 @itemx @var{file}.h++
1092 @itemx @var{file}.tcc
1093 C++ header file to be turned into a precompiled header or Ada spec.
1095 @item @var{file}.f
1096 @itemx @var{file}.for
1097 @itemx @var{file}.ftn
1098 Fixed form Fortran source code that should not be preprocessed.
1100 @item @var{file}.F
1101 @itemx @var{file}.FOR
1102 @itemx @var{file}.fpp
1103 @itemx @var{file}.FPP
1104 @itemx @var{file}.FTN
1105 Fixed form Fortran source code that must be preprocessed (with the traditional
1106 preprocessor).
1108 @item @var{file}.f90
1109 @itemx @var{file}.f95
1110 @itemx @var{file}.f03
1111 @itemx @var{file}.f08
1112 Free form Fortran source code that should not be preprocessed.
1114 @item @var{file}.F90
1115 @itemx @var{file}.F95
1116 @itemx @var{file}.F03
1117 @itemx @var{file}.F08
1118 Free form Fortran source code that must be preprocessed (with the
1119 traditional preprocessor).
1121 @item @var{file}.go
1122 Go source code.
1124 @c FIXME: Descriptions of Java file types.
1125 @c @var{file}.java
1126 @c @var{file}.class
1127 @c @var{file}.zip
1128 @c @var{file}.jar
1130 @item @var{file}.ads
1131 Ada source code file that contains a library unit declaration (a
1132 declaration of a package, subprogram, or generic, or a generic
1133 instantiation), or a library unit renaming declaration (a package,
1134 generic, or subprogram renaming declaration).  Such files are also
1135 called @dfn{specs}.
1137 @item @var{file}.adb
1138 Ada source code file containing a library unit body (a subprogram or
1139 package body).  Such files are also called @dfn{bodies}.
1141 @c GCC also knows about some suffixes for languages not yet included:
1142 @c Pascal:
1143 @c @var{file}.p
1144 @c @var{file}.pas
1145 @c Ratfor:
1146 @c @var{file}.r
1148 @item @var{file}.s
1149 Assembler code.
1151 @item @var{file}.S
1152 @itemx @var{file}.sx
1153 Assembler code that must be preprocessed.
1155 @item @var{other}
1156 An object file to be fed straight into linking.
1157 Any file name with no recognized suffix is treated this way.
1158 @end table
1160 @opindex x
1161 You can specify the input language explicitly with the @option{-x} option:
1163 @table @gcctabopt
1164 @item -x @var{language}
1165 Specify explicitly the @var{language} for the following input files
1166 (rather than letting the compiler choose a default based on the file
1167 name suffix).  This option applies to all following input files until
1168 the next @option{-x} option.  Possible values for @var{language} are:
1169 @smallexample
1170 c  c-header  cpp-output
1171 c++  c++-header  c++-cpp-output
1172 objective-c  objective-c-header  objective-c-cpp-output
1173 objective-c++ objective-c++-header objective-c++-cpp-output
1174 assembler  assembler-with-cpp
1176 f77  f77-cpp-input f95  f95-cpp-input
1178 java
1179 @end smallexample
1181 @item -x none
1182 Turn off any specification of a language, so that subsequent files are
1183 handled according to their file name suffixes (as they are if @option{-x}
1184 has not been used at all).
1186 @item -pass-exit-codes
1187 @opindex pass-exit-codes
1188 Normally the @command{gcc} program exits with the code of 1 if any
1189 phase of the compiler returns a non-success return code.  If you specify
1190 @option{-pass-exit-codes}, the @command{gcc} program instead returns with
1191 the numerically highest error produced by any phase returning an error
1192 indication.  The C, C++, and Fortran front ends return 4 if an internal
1193 compiler error is encountered.
1194 @end table
1196 If you only want some of the stages of compilation, you can use
1197 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1198 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1199 @command{gcc} is to stop.  Note that some combinations (for example,
1200 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1202 @table @gcctabopt
1203 @item -c
1204 @opindex c
1205 Compile or assemble the source files, but do not link.  The linking
1206 stage simply is not done.  The ultimate output is in the form of an
1207 object file for each source file.
1209 By default, the object file name for a source file is made by replacing
1210 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1212 Unrecognized input files, not requiring compilation or assembly, are
1213 ignored.
1215 @item -S
1216 @opindex S
1217 Stop after the stage of compilation proper; do not assemble.  The output
1218 is in the form of an assembler code file for each non-assembler input
1219 file specified.
1221 By default, the assembler file name for a source file is made by
1222 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1224 Input files that don't require compilation are ignored.
1226 @item -E
1227 @opindex E
1228 Stop after the preprocessing stage; do not run the compiler proper.  The
1229 output is in the form of preprocessed source code, which is sent to the
1230 standard output.
1232 Input files that don't require preprocessing are ignored.
1234 @cindex output file option
1235 @item -o @var{file}
1236 @opindex o
1237 Place output in file @var{file}.  This applies regardless to whatever
1238 sort of output is being produced, whether it be an executable file,
1239 an object file, an assembler file or preprocessed C code.
1241 If @option{-o} is not specified, the default is to put an executable
1242 file in @file{a.out}, the object file for
1243 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1244 assembler file in @file{@var{source}.s}, a precompiled header file in
1245 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1246 standard output.
1248 @item -v
1249 @opindex v
1250 Print (on standard error output) the commands executed to run the stages
1251 of compilation.  Also print the version number of the compiler driver
1252 program and of the preprocessor and the compiler proper.
1254 @item -###
1255 @opindex ###
1256 Like @option{-v} except the commands are not executed and arguments
1257 are quoted unless they contain only alphanumeric characters or @code{./-_}.
1258 This is useful for shell scripts to capture the driver-generated command lines.
1260 @item -pipe
1261 @opindex pipe
1262 Use pipes rather than temporary files for communication between the
1263 various stages of compilation.  This fails to work on some systems where
1264 the assembler is unable to read from a pipe; but the GNU assembler has
1265 no trouble.
1267 @item --help
1268 @opindex help
1269 Print (on the standard output) a description of the command-line options
1270 understood by @command{gcc}.  If the @option{-v} option is also specified
1271 then @option{--help} is also passed on to the various processes
1272 invoked by @command{gcc}, so that they can display the command-line options
1273 they accept.  If the @option{-Wextra} option has also been specified
1274 (prior to the @option{--help} option), then command-line options that
1275 have no documentation associated with them are also displayed.
1277 @item --target-help
1278 @opindex target-help
1279 Print (on the standard output) a description of target-specific command-line
1280 options for each tool.  For some targets extra target-specific
1281 information may also be printed.
1283 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1284 Print (on the standard output) a description of the command-line
1285 options understood by the compiler that fit into all specified classes
1286 and qualifiers.  These are the supported classes:
1288 @table @asis
1289 @item @samp{optimizers}
1290 Display all of the optimization options supported by the
1291 compiler.
1293 @item @samp{warnings}
1294 Display all of the options controlling warning messages
1295 produced by the compiler.
1297 @item @samp{target}
1298 Display target-specific options.  Unlike the
1299 @option{--target-help} option however, target-specific options of the
1300 linker and assembler are not displayed.  This is because those
1301 tools do not currently support the extended @option{--help=} syntax.
1303 @item @samp{params}
1304 Display the values recognized by the @option{--param}
1305 option.
1307 @item @var{language}
1308 Display the options supported for @var{language}, where
1309 @var{language} is the name of one of the languages supported in this
1310 version of GCC@.
1312 @item @samp{common}
1313 Display the options that are common to all languages.
1314 @end table
1316 These are the supported qualifiers:
1318 @table @asis
1319 @item @samp{undocumented}
1320 Display only those options that are undocumented.
1322 @item @samp{joined}
1323 Display options taking an argument that appears after an equal
1324 sign in the same continuous piece of text, such as:
1325 @samp{--help=target}.
1327 @item @samp{separate}
1328 Display options taking an argument that appears as a separate word
1329 following the original option, such as: @samp{-o output-file}.
1330 @end table
1332 Thus for example to display all the undocumented target-specific
1333 switches supported by the compiler the following can be used:
1335 @smallexample
1336 --help=target,undocumented
1337 @end smallexample
1339 The sense of a qualifier can be inverted by prefixing it with the
1340 @samp{^} character, so for example to display all binary warning
1341 options (i.e., ones that are either on or off and that do not take an
1342 argument) that have a description, use:
1344 @smallexample
1345 --help=warnings,^joined,^undocumented
1346 @end smallexample
1348 The argument to @option{--help=} should not consist solely of inverted
1349 qualifiers.
1351 Combining several classes is possible, although this usually
1352 restricts the output by so much that there is nothing to display.  One
1353 case where it does work however is when one of the classes is
1354 @var{target}.  So for example to display all the target-specific
1355 optimization options the following can be used:
1357 @smallexample
1358 --help=target,optimizers
1359 @end smallexample
1361 The @option{--help=} option can be repeated on the command line.  Each
1362 successive use displays its requested class of options, skipping
1363 those that have already been displayed.
1365 If the @option{-Q} option appears on the command line before the
1366 @option{--help=} option, then the descriptive text displayed by
1367 @option{--help=} is changed.  Instead of describing the displayed
1368 options, an indication is given as to whether the option is enabled,
1369 disabled or set to a specific value (assuming that the compiler
1370 knows this at the point where the @option{--help=} option is used).
1372 Here is a truncated example from the ARM port of @command{gcc}:
1374 @smallexample
1375   % gcc -Q -mabi=2 --help=target -c
1376   The following options are target specific:
1377   -mabi=                                2
1378   -mabort-on-noreturn                   [disabled]
1379   -mapcs                                [disabled]
1380 @end smallexample
1382 The output is sensitive to the effects of previous command-line
1383 options, so for example it is possible to find out which optimizations
1384 are enabled at @option{-O2} by using:
1386 @smallexample
1387 -Q -O2 --help=optimizers
1388 @end smallexample
1390 Alternatively you can discover which binary optimizations are enabled
1391 by @option{-O3} by using:
1393 @smallexample
1394 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1395 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1396 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1397 @end smallexample
1399 @item -no-canonical-prefixes
1400 @opindex no-canonical-prefixes
1401 Do not expand any symbolic links, resolve references to @samp{/../}
1402 or @samp{/./}, or make the path absolute when generating a relative
1403 prefix.
1405 @item --version
1406 @opindex version
1407 Display the version number and copyrights of the invoked GCC@.
1409 @item -wrapper
1410 @opindex wrapper
1411 Invoke all subcommands under a wrapper program.  The name of the
1412 wrapper program and its parameters are passed as a comma separated
1413 list.
1415 @smallexample
1416 gcc -c t.c -wrapper gdb,--args
1417 @end smallexample
1419 @noindent
1420 This invokes all subprograms of @command{gcc} under
1421 @samp{gdb --args}, thus the invocation of @command{cc1} is
1422 @samp{gdb --args cc1 @dots{}}.
1424 @item -fplugin=@var{name}.so
1425 Load the plugin code in file @var{name}.so, assumed to be a
1426 shared object to be dlopen'd by the compiler.  The base name of
1427 the shared object file is used to identify the plugin for the
1428 purposes of argument parsing (See
1429 @option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1430 Each plugin should define the callback functions specified in the
1431 Plugins API.
1433 @item -fplugin-arg-@var{name}-@var{key}=@var{value}
1434 Define an argument called @var{key} with a value of @var{value}
1435 for the plugin called @var{name}.
1437 @item -fdump-ada-spec@r{[}-slim@r{]}
1438 For C and C++ source and include files, generate corresponding Ada
1439 specs. @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
1440 GNAT User's Guide}, which provides detailed documentation on this feature.
1442 @item -fdump-go-spec=@var{file}
1443 For input files in any language, generate corresponding Go
1444 declarations in @var{file}.  This generates Go @code{const},
1445 @code{type}, @code{var}, and @code{func} declarations which may be a
1446 useful way to start writing a Go interface to code written in some
1447 other language.
1449 @include @value{srcdir}/../libiberty/at-file.texi
1450 @end table
1452 @node Invoking G++
1453 @section Compiling C++ Programs
1455 @cindex suffixes for C++ source
1456 @cindex C++ source file suffixes
1457 C++ source files conventionally use one of the suffixes @samp{.C},
1458 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1459 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1460 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1461 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1462 files with these names and compiles them as C++ programs even if you
1463 call the compiler the same way as for compiling C programs (usually
1464 with the name @command{gcc}).
1466 @findex g++
1467 @findex c++
1468 However, the use of @command{gcc} does not add the C++ library.
1469 @command{g++} is a program that calls GCC and treats @samp{.c},
1470 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1471 files unless @option{-x} is used, and automatically specifies linking
1472 against the C++ library.  This program is also useful when
1473 precompiling a C header file with a @samp{.h} extension for use in C++
1474 compilations.  On many systems, @command{g++} is also installed with
1475 the name @command{c++}.
1477 @cindex invoking @command{g++}
1478 When you compile C++ programs, you may specify many of the same
1479 command-line options that you use for compiling programs in any
1480 language; or command-line options meaningful for C and related
1481 languages; or options that are meaningful only for C++ programs.
1482 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1483 explanations of options for languages related to C@.
1484 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1485 explanations of options that are meaningful only for C++ programs.
1487 @node C Dialect Options
1488 @section Options Controlling C Dialect
1489 @cindex dialect options
1490 @cindex language dialect options
1491 @cindex options, dialect
1493 The following options control the dialect of C (or languages derived
1494 from C, such as C++, Objective-C and Objective-C++) that the compiler
1495 accepts:
1497 @table @gcctabopt
1498 @cindex ANSI support
1499 @cindex ISO support
1500 @item -ansi
1501 @opindex ansi
1502 In C mode, this is equivalent to @option{-std=c90}. In C++ mode, it is
1503 equivalent to @option{-std=c++98}.
1505 This turns off certain features of GCC that are incompatible with ISO
1506 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1507 such as the @code{asm} and @code{typeof} keywords, and
1508 predefined macros such as @code{unix} and @code{vax} that identify the
1509 type of system you are using.  It also enables the undesirable and
1510 rarely used ISO trigraph feature.  For the C compiler,
1511 it disables recognition of C++ style @samp{//} comments as well as
1512 the @code{inline} keyword.
1514 The alternate keywords @code{__asm__}, @code{__extension__},
1515 @code{__inline__} and @code{__typeof__} continue to work despite
1516 @option{-ansi}.  You would not want to use them in an ISO C program, of
1517 course, but it is useful to put them in header files that might be included
1518 in compilations done with @option{-ansi}.  Alternate predefined macros
1519 such as @code{__unix__} and @code{__vax__} are also available, with or
1520 without @option{-ansi}.
1522 The @option{-ansi} option does not cause non-ISO programs to be
1523 rejected gratuitously.  For that, @option{-Wpedantic} is required in
1524 addition to @option{-ansi}.  @xref{Warning Options}.
1526 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1527 option is used.  Some header files may notice this macro and refrain
1528 from declaring certain functions or defining certain macros that the
1529 ISO standard doesn't call for; this is to avoid interfering with any
1530 programs that might use these names for other things.
1532 Functions that are normally built in but do not have semantics
1533 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1534 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1535 built-in functions provided by GCC}, for details of the functions
1536 affected.
1538 @item -std=
1539 @opindex std
1540 Determine the language standard. @xref{Standards,,Language Standards
1541 Supported by GCC}, for details of these standard versions.  This option
1542 is currently only supported when compiling C or C++.
1544 The compiler can accept several base standards, such as @samp{c90} or
1545 @samp{c++98}, and GNU dialects of those standards, such as
1546 @samp{gnu90} or @samp{gnu++98}.  When a base standard is specified, the
1547 compiler accepts all programs following that standard plus those
1548 using GNU extensions that do not contradict it.  For example,
1549 @option{-std=c90} turns off certain features of GCC that are
1550 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1551 keywords, but not other GNU extensions that do not have a meaning in
1552 ISO C90, such as omitting the middle term of a @code{?:}
1553 expression. On the other hand, by specifying a GNU dialect of a
1554 standard, all features the compiler support are enabled, even when
1555 those features change the meaning of the base standard and some
1556 strict-conforming programs may be rejected.  The particular standard
1557 is used by @option{-Wpedantic} to identify which features are GNU
1558 extensions given that version of the standard. For example
1559 @option{-std=gnu90 -Wpedantic} warns about C++ style @samp{//}
1560 comments, while @option{-std=gnu99 -Wpedantic} does not.
1562 A value for this option must be provided; possible values are
1564 @table @samp
1565 @item c90
1566 @itemx c89
1567 @itemx iso9899:1990
1568 Support all ISO C90 programs (certain GNU extensions that conflict
1569 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1571 @item iso9899:199409
1572 ISO C90 as modified in amendment 1.
1574 @item c99
1575 @itemx c9x
1576 @itemx iso9899:1999
1577 @itemx iso9899:199x
1578 ISO C99.  Note that this standard is not yet fully supported; see
1579 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1580 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1582 @item c11
1583 @itemx c1x
1584 @itemx iso9899:2011
1585 ISO C11, the 2011 revision of the ISO C standard.
1586 Support is incomplete and experimental.  The name @samp{c1x} is
1587 deprecated.
1589 @item gnu90
1590 @itemx gnu89
1591 GNU dialect of ISO C90 (including some C99 features). This
1592 is the default for C code.
1594 @item gnu99
1595 @itemx gnu9x
1596 GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC,
1597 this will become the default.  The name @samp{gnu9x} is deprecated.
1599 @item gnu11
1600 @item gnu1x
1601 GNU dialect of ISO C11.  Support is incomplete and experimental.  The
1602 name @samp{gnu1x} is deprecated.
1604 @item c++98
1605 @itemx c++03
1606 The 1998 ISO C++ standard plus the 2003 technical corrigendum and some
1607 additional defect reports. Same as @option{-ansi} for C++ code.
1609 @item gnu++98
1610 @itemx gnu++03
1611 GNU dialect of @option{-std=c++98}.  This is the default for
1612 C++ code.
1614 @item c++11
1615 @itemx c++0x
1616 The 2011 ISO C++ standard plus amendments.  Support for C++11 is still
1617 experimental, and may change in incompatible ways in future releases.
1618 The name @samp{c++0x} is deprecated.
1620 @item gnu++11
1621 @itemx gnu++0x
1622 GNU dialect of @option{-std=c++11}. Support for C++11 is still
1623 experimental, and may change in incompatible ways in future releases.
1624 The name @samp{gnu++0x} is deprecated.
1626 @item c++1y
1627 The next revision of the ISO C++ standard, tentatively planned for
1628 2017.  Support is highly experimental, and will almost certainly
1629 change in incompatible ways in future releases.
1631 @item gnu++1y
1632 GNU dialect of @option{-std=c++1y}.  Support is highly experimental,
1633 and will almost certainly change in incompatible ways in future
1634 releases.
1635 @end table
1637 @item -fgnu89-inline
1638 @opindex fgnu89-inline
1639 The option @option{-fgnu89-inline} tells GCC to use the traditional
1640 GNU semantics for @code{inline} functions when in C99 mode.
1641 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1642 is accepted and ignored by GCC versions 4.1.3 up to but not including
1643 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1644 C99 mode.  Using this option is roughly equivalent to adding the
1645 @code{gnu_inline} function attribute to all inline functions
1646 (@pxref{Function Attributes}).
1648 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1649 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1650 specifies the default behavior).  This option was first supported in
1651 GCC 4.3.  This option is not supported in @option{-std=c90} or
1652 @option{-std=gnu90} mode.
1654 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1655 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1656 in effect for @code{inline} functions.  @xref{Common Predefined
1657 Macros,,,cpp,The C Preprocessor}.
1659 @item -aux-info @var{filename}
1660 @opindex aux-info
1661 Output to the given filename prototyped declarations for all functions
1662 declared and/or defined in a translation unit, including those in header
1663 files.  This option is silently ignored in any language other than C@.
1665 Besides declarations, the file indicates, in comments, the origin of
1666 each declaration (source file and line), whether the declaration was
1667 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1668 @samp{O} for old, respectively, in the first character after the line
1669 number and the colon), and whether it came from a declaration or a
1670 definition (@samp{C} or @samp{F}, respectively, in the following
1671 character).  In the case of function definitions, a K&R-style list of
1672 arguments followed by their declarations is also provided, inside
1673 comments, after the declaration.
1675 @item -fallow-parameterless-variadic-functions
1676 Accept variadic functions without named parameters.
1678 Although it is possible to define such a function, this is not very
1679 useful as it is not possible to read the arguments.  This is only
1680 supported for C as this construct is allowed by C++.
1682 @item -fno-asm
1683 @opindex fno-asm
1684 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1685 keyword, so that code can use these words as identifiers.  You can use
1686 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1687 instead.  @option{-ansi} implies @option{-fno-asm}.
1689 In C++, this switch only affects the @code{typeof} keyword, since
1690 @code{asm} and @code{inline} are standard keywords.  You may want to
1691 use the @option{-fno-gnu-keywords} flag instead, which has the same
1692 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1693 switch only affects the @code{asm} and @code{typeof} keywords, since
1694 @code{inline} is a standard keyword in ISO C99.
1696 @item -fno-builtin
1697 @itemx -fno-builtin-@var{function}
1698 @opindex fno-builtin
1699 @cindex built-in functions
1700 Don't recognize built-in functions that do not begin with
1701 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1702 functions provided by GCC}, for details of the functions affected,
1703 including those which are not built-in functions when @option{-ansi} or
1704 @option{-std} options for strict ISO C conformance are used because they
1705 do not have an ISO standard meaning.
1707 GCC normally generates special code to handle certain built-in functions
1708 more efficiently; for instance, calls to @code{alloca} may become single
1709 instructions which adjust the stack directly, and calls to @code{memcpy}
1710 may become inline copy loops.  The resulting code is often both smaller
1711 and faster, but since the function calls no longer appear as such, you
1712 cannot set a breakpoint on those calls, nor can you change the behavior
1713 of the functions by linking with a different library.  In addition,
1714 when a function is recognized as a built-in function, GCC may use
1715 information about that function to warn about problems with calls to
1716 that function, or to generate more efficient code, even if the
1717 resulting code still contains calls to that function.  For example,
1718 warnings are given with @option{-Wformat} for bad calls to
1719 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1720 known not to modify global memory.
1722 With the @option{-fno-builtin-@var{function}} option
1723 only the built-in function @var{function} is
1724 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1725 function is named that is not built-in in this version of GCC, this
1726 option is ignored.  There is no corresponding
1727 @option{-fbuiltin-@var{function}} option; if you wish to enable
1728 built-in functions selectively when using @option{-fno-builtin} or
1729 @option{-ffreestanding}, you may define macros such as:
1731 @smallexample
1732 #define abs(n)          __builtin_abs ((n))
1733 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1734 @end smallexample
1736 @item -fhosted
1737 @opindex fhosted
1738 @cindex hosted environment
1740 Assert that compilation takes place in a hosted environment.  This implies
1741 @option{-fbuiltin}.  A hosted environment is one in which the
1742 entire standard library is available, and in which @code{main} has a return
1743 type of @code{int}.  Examples are nearly everything except a kernel.
1744 This is equivalent to @option{-fno-freestanding}.
1746 @item -ffreestanding
1747 @opindex ffreestanding
1748 @cindex hosted environment
1750 Assert that compilation takes place in a freestanding environment.  This
1751 implies @option{-fno-builtin}.  A freestanding environment
1752 is one in which the standard library may not exist, and program startup may
1753 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1754 This is equivalent to @option{-fno-hosted}.
1756 @xref{Standards,,Language Standards Supported by GCC}, for details of
1757 freestanding and hosted environments.
1759 @item -fopenmp
1760 @opindex fopenmp
1761 @cindex OpenMP parallel
1762 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1763 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1764 compiler generates parallel code according to the OpenMP Application
1765 Program Interface v3.0 @w{@uref{http://www.openmp.org/}}.  This option
1766 implies @option{-pthread}, and thus is only supported on targets that
1767 have support for @option{-pthread}.
1769 @item -fgnu-tm
1770 @opindex fgnu-tm
1771 When the option @option{-fgnu-tm} is specified, the compiler
1772 generates code for the Linux variant of Intel's current Transactional
1773 Memory ABI specification document (Revision 1.1, May 6 2009).  This is
1774 an experimental feature whose interface may change in future versions
1775 of GCC, as the official specification changes.  Please note that not
1776 all architectures are supported for this feature.
1778 For more information on GCC's support for transactional memory,
1779 @xref{Enabling libitm,,The GNU Transactional Memory Library,libitm,GNU
1780 Transactional Memory Library}.
1782 Note that the transactional memory feature is not supported with
1783 non-call exceptions (@option{-fnon-call-exceptions}).
1785 @item -fms-extensions
1786 @opindex fms-extensions
1787 Accept some non-standard constructs used in Microsoft header files.
1789 In C++ code, this allows member names in structures to be similar
1790 to previous types declarations.
1792 @smallexample
1793 typedef int UOW;
1794 struct ABC @{
1795   UOW UOW;
1797 @end smallexample
1799 Some cases of unnamed fields in structures and unions are only
1800 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1801 fields within structs/unions}, for details.
1803 @item -fplan9-extensions
1804 Accept some non-standard constructs used in Plan 9 code.
1806 This enables @option{-fms-extensions}, permits passing pointers to
1807 structures with anonymous fields to functions that expect pointers to
1808 elements of the type of the field, and permits referring to anonymous
1809 fields declared using a typedef.  @xref{Unnamed Fields,,Unnamed
1810 struct/union fields within structs/unions}, for details.  This is only
1811 supported for C, not C++.
1813 @item -trigraphs
1814 @opindex trigraphs
1815 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1816 options for strict ISO C conformance) implies @option{-trigraphs}.
1818 @cindex traditional C language
1819 @cindex C language, traditional
1820 @item -traditional
1821 @itemx -traditional-cpp
1822 @opindex traditional-cpp
1823 @opindex traditional
1824 Formerly, these options caused GCC to attempt to emulate a pre-standard
1825 C compiler.  They are now only supported with the @option{-E} switch.
1826 The preprocessor continues to support a pre-standard mode.  See the GNU
1827 CPP manual for details.
1829 @item -fcond-mismatch
1830 @opindex fcond-mismatch
1831 Allow conditional expressions with mismatched types in the second and
1832 third arguments.  The value of such an expression is void.  This option
1833 is not supported for C++.
1835 @item -flax-vector-conversions
1836 @opindex flax-vector-conversions
1837 Allow implicit conversions between vectors with differing numbers of
1838 elements and/or incompatible element types.  This option should not be
1839 used for new code.
1841 @item -funsigned-char
1842 @opindex funsigned-char
1843 Let the type @code{char} be unsigned, like @code{unsigned char}.
1845 Each kind of machine has a default for what @code{char} should
1846 be.  It is either like @code{unsigned char} by default or like
1847 @code{signed char} by default.
1849 Ideally, a portable program should always use @code{signed char} or
1850 @code{unsigned char} when it depends on the signedness of an object.
1851 But many programs have been written to use plain @code{char} and
1852 expect it to be signed, or expect it to be unsigned, depending on the
1853 machines they were written for.  This option, and its inverse, let you
1854 make such a program work with the opposite default.
1856 The type @code{char} is always a distinct type from each of
1857 @code{signed char} or @code{unsigned char}, even though its behavior
1858 is always just like one of those two.
1860 @item -fsigned-char
1861 @opindex fsigned-char
1862 Let the type @code{char} be signed, like @code{signed char}.
1864 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1865 the negative form of @option{-funsigned-char}.  Likewise, the option
1866 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1868 @item -fsigned-bitfields
1869 @itemx -funsigned-bitfields
1870 @itemx -fno-signed-bitfields
1871 @itemx -fno-unsigned-bitfields
1872 @opindex fsigned-bitfields
1873 @opindex funsigned-bitfields
1874 @opindex fno-signed-bitfields
1875 @opindex fno-unsigned-bitfields
1876 These options control whether a bit-field is signed or unsigned, when the
1877 declaration does not use either @code{signed} or @code{unsigned}.  By
1878 default, such a bit-field is signed, because this is consistent: the
1879 basic integer types such as @code{int} are signed types.
1880 @end table
1882 @node C++ Dialect Options
1883 @section Options Controlling C++ Dialect
1885 @cindex compiler options, C++
1886 @cindex C++ options, command-line
1887 @cindex options, C++
1888 This section describes the command-line options that are only meaningful
1889 for C++ programs; but you can also use most of the GNU compiler options
1890 regardless of what language your program is in.  For example, you
1891 might compile a file @code{firstClass.C} like this:
1893 @smallexample
1894 g++ -g -frepo -O -c firstClass.C
1895 @end smallexample
1897 @noindent
1898 In this example, only @option{-frepo} is an option meant
1899 only for C++ programs; you can use the other options with any
1900 language supported by GCC@.
1902 Here is a list of options that are @emph{only} for compiling C++ programs:
1904 @table @gcctabopt
1906 @item -fabi-version=@var{n}
1907 @opindex fabi-version
1908 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1909 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1910 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1911 the version that conforms most closely to the C++ ABI specification.
1912 Therefore, the ABI obtained using version 0 will change as ABI bugs
1913 are fixed.
1915 The default is version 2.
1917 Version 3 corrects an error in mangling a constant address as a
1918 template argument.
1920 Version 4, which first appeared in G++ 4.5, implements a standard
1921 mangling for vector types.
1923 Version 5, which first appeared in G++ 4.6, corrects the mangling of
1924 attribute const/volatile on function pointer types, decltype of a
1925 plain decl, and use of a function parameter in the declaration of
1926 another parameter.
1928 Version 6, which first appeared in G++ 4.7, corrects the promotion
1929 behavior of C++11 scoped enums and the mangling of template argument
1930 packs, const/static_cast, prefix ++ and --, and a class scope function
1931 used as a template argument.
1933 See also @option{-Wabi}.
1935 @item -fno-access-control
1936 @opindex fno-access-control
1937 Turn off all access checking.  This switch is mainly useful for working
1938 around bugs in the access control code.
1940 @item -fcheck-new
1941 @opindex fcheck-new
1942 Check that the pointer returned by @code{operator new} is non-null
1943 before attempting to modify the storage allocated.  This check is
1944 normally unnecessary because the C++ standard specifies that
1945 @code{operator new} only returns @code{0} if it is declared
1946 @samp{throw()}, in which case the compiler always checks the
1947 return value even without this option.  In all other cases, when
1948 @code{operator new} has a non-empty exception specification, memory
1949 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1950 @samp{new (nothrow)}.
1952 @item -fconstexpr-depth=@var{n}
1953 @opindex fconstexpr-depth
1954 Set the maximum nested evaluation depth for C++11 constexpr functions
1955 to @var{n}.  A limit is needed to detect endless recursion during
1956 constant expression evaluation.  The minimum specified by the standard
1957 is 512.
1959 @item -fdeduce-init-list
1960 @opindex fdeduce-init-list
1961 Enable deduction of a template type parameter as
1962 @code{std::initializer_list} from a brace-enclosed initializer list, i.e.@:
1964 @smallexample
1965 template <class T> auto forward(T t) -> decltype (realfn (t))
1967   return realfn (t);
1970 void f()
1972   forward(@{1,2@}); // call forward<std::initializer_list<int>>
1974 @end smallexample
1976 This deduction was implemented as a possible extension to the
1977 originally proposed semantics for the C++11 standard, but was not part
1978 of the final standard, so it is disabled by default.  This option is
1979 deprecated, and may be removed in a future version of G++.
1981 @item -ffriend-injection
1982 @opindex ffriend-injection
1983 Inject friend functions into the enclosing namespace, so that they are
1984 visible outside the scope of the class in which they are declared.
1985 Friend functions were documented to work this way in the old Annotated
1986 C++ Reference Manual, and versions of G++ before 4.1 always worked
1987 that way.  However, in ISO C++ a friend function that is not declared
1988 in an enclosing scope can only be found using argument dependent
1989 lookup.  This option causes friends to be injected as they were in
1990 earlier releases.
1992 This option is for compatibility, and may be removed in a future
1993 release of G++.
1995 @item -fno-elide-constructors
1996 @opindex fno-elide-constructors
1997 The C++ standard allows an implementation to omit creating a temporary
1998 that is only used to initialize another object of the same type.
1999 Specifying this option disables that optimization, and forces G++ to
2000 call the copy constructor in all cases.
2002 @item -fno-enforce-eh-specs
2003 @opindex fno-enforce-eh-specs
2004 Don't generate code to check for violation of exception specifications
2005 at run time.  This option violates the C++ standard, but may be useful
2006 for reducing code size in production builds, much like defining
2007 @samp{NDEBUG}.  This does not give user code permission to throw
2008 exceptions in violation of the exception specifications; the compiler
2009 still optimizes based on the specifications, so throwing an
2010 unexpected exception results in undefined behavior at run time.
2012 @item -ffor-scope
2013 @itemx -fno-for-scope
2014 @opindex ffor-scope
2015 @opindex fno-for-scope
2016 If @option{-ffor-scope} is specified, the scope of variables declared in
2017 a @i{for-init-statement} is limited to the @samp{for} loop itself,
2018 as specified by the C++ standard.
2019 If @option{-fno-for-scope} is specified, the scope of variables declared in
2020 a @i{for-init-statement} extends to the end of the enclosing scope,
2021 as was the case in old versions of G++, and other (traditional)
2022 implementations of C++.
2024 The default if neither flag is given to follow the standard,
2025 but to allow and give a warning for old-style code that would
2026 otherwise be invalid, or have different behavior.
2028 @item -fno-gnu-keywords
2029 @opindex fno-gnu-keywords
2030 Do not recognize @code{typeof} as a keyword, so that code can use this
2031 word as an identifier.  You can use the keyword @code{__typeof__} instead.
2032 @option{-ansi} implies @option{-fno-gnu-keywords}.
2034 @item -fno-implicit-templates
2035 @opindex fno-implicit-templates
2036 Never emit code for non-inline templates that are instantiated
2037 implicitly (i.e.@: by use); only emit code for explicit instantiations.
2038 @xref{Template Instantiation}, for more information.
2040 @item -fno-implicit-inline-templates
2041 @opindex fno-implicit-inline-templates
2042 Don't emit code for implicit instantiations of inline templates, either.
2043 The default is to handle inlines differently so that compiles with and
2044 without optimization need the same set of explicit instantiations.
2046 @item -fno-implement-inlines
2047 @opindex fno-implement-inlines
2048 To save space, do not emit out-of-line copies of inline functions
2049 controlled by @samp{#pragma implementation}.  This causes linker
2050 errors if these functions are not inlined everywhere they are called.
2052 @item -fms-extensions
2053 @opindex fms-extensions
2054 Disable Wpedantic warnings about constructs used in MFC, such as implicit
2055 int and getting a pointer to member function via non-standard syntax.
2057 @item -fno-nonansi-builtins
2058 @opindex fno-nonansi-builtins
2059 Disable built-in declarations of functions that are not mandated by
2060 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
2061 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
2063 @item -fnothrow-opt
2064 @opindex fnothrow-opt
2065 Treat a @code{throw()} exception specification as if it were a
2066 @code{noexcept} specification to reduce or eliminate the text size
2067 overhead relative to a function with no exception specification.  If
2068 the function has local variables of types with non-trivial
2069 destructors, the exception specification actually makes the
2070 function smaller because the EH cleanups for those variables can be
2071 optimized away.  The semantic effect is that an exception thrown out of
2072 a function with such an exception specification results in a call
2073 to @code{terminate} rather than @code{unexpected}.
2075 @item -fno-operator-names
2076 @opindex fno-operator-names
2077 Do not treat the operator name keywords @code{and}, @code{bitand},
2078 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
2079 synonyms as keywords.
2081 @item -fno-optional-diags
2082 @opindex fno-optional-diags
2083 Disable diagnostics that the standard says a compiler does not need to
2084 issue.  Currently, the only such diagnostic issued by G++ is the one for
2085 a name having multiple meanings within a class.
2087 @item -fpermissive
2088 @opindex fpermissive
2089 Downgrade some diagnostics about nonconformant code from errors to
2090 warnings.  Thus, using @option{-fpermissive} allows some
2091 nonconforming code to compile.
2093 @item -fno-pretty-templates
2094 @opindex fno-pretty-templates
2095 When an error message refers to a specialization of a function
2096 template, the compiler normally prints the signature of the
2097 template followed by the template arguments and any typedefs or
2098 typenames in the signature (e.g. @code{void f(T) [with T = int]}
2099 rather than @code{void f(int)}) so that it's clear which template is
2100 involved.  When an error message refers to a specialization of a class
2101 template, the compiler omits any template arguments that match
2102 the default template arguments for that template.  If either of these
2103 behaviors make it harder to understand the error message rather than
2104 easier, you can use @option{-fno-pretty-templates} to disable them.
2106 @item -frepo
2107 @opindex frepo
2108 Enable automatic template instantiation at link time.  This option also
2109 implies @option{-fno-implicit-templates}.  @xref{Template
2110 Instantiation}, for more information.
2112 @item -fno-rtti
2113 @opindex fno-rtti
2114 Disable generation of information about every class with virtual
2115 functions for use by the C++ run-time type identification features
2116 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
2117 of the language, you can save some space by using this flag.  Note that
2118 exception handling uses the same information, but G++ generates it as
2119 needed. The @samp{dynamic_cast} operator can still be used for casts that
2120 do not require run-time type information, i.e.@: casts to @code{void *} or to
2121 unambiguous base classes.
2123 @item -fstats
2124 @opindex fstats
2125 Emit statistics about front-end processing at the end of the compilation.
2126 This information is generally only useful to the G++ development team.
2128 @item -fstrict-enums
2129 @opindex fstrict-enums
2130 Allow the compiler to optimize using the assumption that a value of
2131 enumerated type can only be one of the values of the enumeration (as
2132 defined in the C++ standard; basically, a value that can be
2133 represented in the minimum number of bits needed to represent all the
2134 enumerators).  This assumption may not be valid if the program uses a
2135 cast to convert an arbitrary integer value to the enumerated type.
2137 @item -ftemplate-backtrace-limit=@var{n}
2138 @opindex ftemplate-backtrace-limit
2139 Set the maximum number of template instantiation notes for a single
2140 warning or error to @var{n}.  The default value is 10.
2142 @item -ftemplate-depth=@var{n}
2143 @opindex ftemplate-depth
2144 Set the maximum instantiation depth for template classes to @var{n}.
2145 A limit on the template instantiation depth is needed to detect
2146 endless recursions during template class instantiation.  ANSI/ISO C++
2147 conforming programs must not rely on a maximum depth greater than 17
2148 (changed to 1024 in C++11).  The default value is 900, as the compiler
2149 can run out of stack space before hitting 1024 in some situations.
2151 @item -fno-threadsafe-statics
2152 @opindex fno-threadsafe-statics
2153 Do not emit the extra code to use the routines specified in the C++
2154 ABI for thread-safe initialization of local statics.  You can use this
2155 option to reduce code size slightly in code that doesn't need to be
2156 thread-safe.
2158 @item -fuse-cxa-atexit
2159 @opindex fuse-cxa-atexit
2160 Register destructors for objects with static storage duration with the
2161 @code{__cxa_atexit} function rather than the @code{atexit} function.
2162 This option is required for fully standards-compliant handling of static
2163 destructors, but only works if your C library supports
2164 @code{__cxa_atexit}.
2166 @item -fno-use-cxa-get-exception-ptr
2167 @opindex fno-use-cxa-get-exception-ptr
2168 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2169 causes @code{std::uncaught_exception} to be incorrect, but is necessary
2170 if the runtime routine is not available.
2172 @item -fvisibility-inlines-hidden
2173 @opindex fvisibility-inlines-hidden
2174 This switch declares that the user does not attempt to compare
2175 pointers to inline functions or methods where the addresses of the two functions
2176 are taken in different shared objects.
2178 The effect of this is that GCC may, effectively, mark inline methods with
2179 @code{__attribute__ ((visibility ("hidden")))} so that they do not
2180 appear in the export table of a DSO and do not require a PLT indirection
2181 when used within the DSO@.  Enabling this option can have a dramatic effect
2182 on load and link times of a DSO as it massively reduces the size of the
2183 dynamic export table when the library makes heavy use of templates.
2185 The behavior of this switch is not quite the same as marking the
2186 methods as hidden directly, because it does not affect static variables
2187 local to the function or cause the compiler to deduce that
2188 the function is defined in only one shared object.
2190 You may mark a method as having a visibility explicitly to negate the
2191 effect of the switch for that method.  For example, if you do want to
2192 compare pointers to a particular inline method, you might mark it as
2193 having default visibility.  Marking the enclosing class with explicit
2194 visibility has no effect.
2196 Explicitly instantiated inline methods are unaffected by this option
2197 as their linkage might otherwise cross a shared library boundary.
2198 @xref{Template Instantiation}.
2200 @item -fvisibility-ms-compat
2201 @opindex fvisibility-ms-compat
2202 This flag attempts to use visibility settings to make GCC's C++
2203 linkage model compatible with that of Microsoft Visual Studio.
2205 The flag makes these changes to GCC's linkage model:
2207 @enumerate
2208 @item
2209 It sets the default visibility to @code{hidden}, like
2210 @option{-fvisibility=hidden}.
2212 @item
2213 Types, but not their members, are not hidden by default.
2215 @item
2216 The One Definition Rule is relaxed for types without explicit
2217 visibility specifications that are defined in more than one
2218 shared object: those declarations are permitted if they are
2219 permitted when this option is not used.
2220 @end enumerate
2222 In new code it is better to use @option{-fvisibility=hidden} and
2223 export those classes that are intended to be externally visible.
2224 Unfortunately it is possible for code to rely, perhaps accidentally,
2225 on the Visual Studio behavior.
2227 Among the consequences of these changes are that static data members
2228 of the same type with the same name but defined in different shared
2229 objects are different, so changing one does not change the other;
2230 and that pointers to function members defined in different shared
2231 objects may not compare equal.  When this flag is given, it is a
2232 violation of the ODR to define types with the same name differently.
2234 @item -fno-weak
2235 @opindex fno-weak
2236 Do not use weak symbol support, even if it is provided by the linker.
2237 By default, G++ uses weak symbols if they are available.  This
2238 option exists only for testing, and should not be used by end-users;
2239 it results in inferior code and has no benefits.  This option may
2240 be removed in a future release of G++.
2242 @item -nostdinc++
2243 @opindex nostdinc++
2244 Do not search for header files in the standard directories specific to
2245 C++, but do still search the other standard directories.  (This option
2246 is used when building the C++ library.)
2247 @end table
2249 In addition, these optimization, warning, and code generation options
2250 have meanings only for C++ programs:
2252 @table @gcctabopt
2253 @item -fno-default-inline
2254 @opindex fno-default-inline
2255 Do not assume @samp{inline} for functions defined inside a class scope.
2256 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
2257 functions have linkage like inline functions; they just aren't
2258 inlined by default.
2260 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2261 @opindex Wabi
2262 @opindex Wno-abi
2263 Warn when G++ generates code that is probably not compatible with the
2264 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
2265 all such cases, there are probably some cases that are not warned about,
2266 even though G++ is generating incompatible code.  There may also be
2267 cases where warnings are emitted even though the code that is generated
2268 is compatible.
2270 You should rewrite your code to avoid these warnings if you are
2271 concerned about the fact that code generated by G++ may not be binary
2272 compatible with code generated by other compilers.
2274 The known incompatibilities in @option{-fabi-version=2} (the default) include:
2276 @itemize @bullet
2278 @item
2279 A template with a non-type template parameter of reference type is
2280 mangled incorrectly:
2281 @smallexample
2282 extern int N;
2283 template <int &> struct S @{@};
2284 void n (S<N>) @{2@}
2285 @end smallexample
2287 This is fixed in @option{-fabi-version=3}.
2289 @item
2290 SIMD vector types declared using @code{__attribute ((vector_size))} are
2291 mangled in a non-standard way that does not allow for overloading of
2292 functions taking vectors of different sizes.
2294 The mangling is changed in @option{-fabi-version=4}.
2295 @end itemize
2297 The known incompatibilities in @option{-fabi-version=1} include:
2299 @itemize @bullet
2301 @item
2302 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2303 pack data into the same byte as a base class.  For example:
2305 @smallexample
2306 struct A @{ virtual void f(); int f1 : 1; @};
2307 struct B : public A @{ int f2 : 1; @};
2308 @end smallexample
2310 @noindent
2311 In this case, G++ places @code{B::f2} into the same byte
2312 as@code{A::f1}; other compilers do not.  You can avoid this problem
2313 by explicitly padding @code{A} so that its size is a multiple of the
2314 byte size on your platform; that causes G++ and other compilers to
2315 lay out @code{B} identically.
2317 @item
2318 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2319 tail padding when laying out virtual bases.  For example:
2321 @smallexample
2322 struct A @{ virtual void f(); char c1; @};
2323 struct B @{ B(); char c2; @};
2324 struct C : public A, public virtual B @{@};
2325 @end smallexample
2327 @noindent
2328 In this case, G++ does not place @code{B} into the tail-padding for
2329 @code{A}; other compilers do.  You can avoid this problem by
2330 explicitly padding @code{A} so that its size is a multiple of its
2331 alignment (ignoring virtual base classes); that causes G++ and other
2332 compilers to lay out @code{C} identically.
2334 @item
2335 Incorrect handling of bit-fields with declared widths greater than that
2336 of their underlying types, when the bit-fields appear in a union.  For
2337 example:
2339 @smallexample
2340 union U @{ int i : 4096; @};
2341 @end smallexample
2343 @noindent
2344 Assuming that an @code{int} does not have 4096 bits, G++ makes the
2345 union too small by the number of bits in an @code{int}.
2347 @item
2348 Empty classes can be placed at incorrect offsets.  For example:
2350 @smallexample
2351 struct A @{@};
2353 struct B @{
2354   A a;
2355   virtual void f ();
2358 struct C : public B, public A @{@};
2359 @end smallexample
2361 @noindent
2362 G++ places the @code{A} base class of @code{C} at a nonzero offset;
2363 it should be placed at offset zero.  G++ mistakenly believes that the
2364 @code{A} data member of @code{B} is already at offset zero.
2366 @item
2367 Names of template functions whose types involve @code{typename} or
2368 template template parameters can be mangled incorrectly.
2370 @smallexample
2371 template <typename Q>
2372 void f(typename Q::X) @{@}
2374 template <template <typename> class Q>
2375 void f(typename Q<int>::X) @{@}
2376 @end smallexample
2378 @noindent
2379 Instantiations of these templates may be mangled incorrectly.
2381 @end itemize
2383 It also warns about psABI-related changes.  The known psABI changes at this
2384 point include:
2386 @itemize @bullet
2388 @item
2389 For SysV/x86-64, unions with @code{long double} members are 
2390 passed in memory as specified in psABI.  For example:
2392 @smallexample
2393 union U @{
2394   long double ld;
2395   int i;
2397 @end smallexample
2399 @noindent
2400 @code{union U} is always passed in memory.
2402 @end itemize
2404 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2405 @opindex Wctor-dtor-privacy
2406 @opindex Wno-ctor-dtor-privacy
2407 Warn when a class seems unusable because all the constructors or
2408 destructors in that class are private, and it has neither friends nor
2409 public static member functions.
2411 @item -Wdelete-non-virtual-dtor @r{(C++ and Objective-C++ only)}
2412 @opindex Wdelete-non-virtual-dtor
2413 @opindex Wno-delete-non-virtual-dtor
2414 Warn when @samp{delete} is used to destroy an instance of a class that
2415 has virtual functions and non-virtual destructor. It is unsafe to delete
2416 an instance of a derived class through a pointer to a base class if the
2417 base class does not have a virtual destructor.  This warning is enabled
2418 by @option{-Wall}.
2420 @item -Wliteral-suffix @r{(C++ and Objective-C++ only)}
2421 @opindex Wliteral-suffix
2422 @opindex Wno-literal-suffix
2423 Warn when a string or character literal is followed by a ud-suffix which does
2424 not begin with an underscore.  As a conforming extension, GCC treats such
2425 suffixes as separate preprocessing tokens in order to maintain backwards
2426 compatibility with code that uses formatting macros from @code{<inttypes.h>}.
2427 For example:
2429 @smallexample
2430 #define __STDC_FORMAT_MACROS
2431 #include <inttypes.h>
2432 #include <stdio.h>
2434 int main() @{
2435   int64_t i64 = 123;
2436   printf("My int64: %"PRId64"\n", i64);
2438 @end smallexample
2440 In this case, @code{PRId64} is treated as a separate preprocessing token.
2442 This warning is enabled by default.
2444 @item -Wnarrowing @r{(C++ and Objective-C++ only)}
2445 @opindex Wnarrowing
2446 @opindex Wno-narrowing
2447 Warn when a narrowing conversion prohibited by C++11 occurs within
2448 @samp{@{ @}}, e.g.
2450 @smallexample
2451 int i = @{ 2.2 @}; // error: narrowing from double to int
2452 @end smallexample
2454 This flag is included in @option{-Wall} and @option{-Wc++11-compat}.
2456 With @option{-std=c++11}, @option{-Wno-narrowing} suppresses the diagnostic
2457 required by the standard.  Note that this does not affect the meaning
2458 of well-formed code; narrowing conversions are still considered
2459 ill-formed in SFINAE context.
2461 @item -Wnoexcept @r{(C++ and Objective-C++ only)}
2462 @opindex Wnoexcept
2463 @opindex Wno-noexcept
2464 Warn when a noexcept-expression evaluates to false because of a call
2465 to a function that does not have a non-throwing exception
2466 specification (i.e. @samp{throw()} or @samp{noexcept}) but is known by
2467 the compiler to never throw an exception.
2469 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2470 @opindex Wnon-virtual-dtor
2471 @opindex Wno-non-virtual-dtor
2472 Warn when a class has virtual functions and an accessible non-virtual
2473 destructor, in which case it is possible but unsafe to delete
2474 an instance of a derived class through a pointer to the base class.
2475 This warning is also enabled if @option{-Weffc++} is specified.
2477 @item -Wreorder @r{(C++ and Objective-C++ only)}
2478 @opindex Wreorder
2479 @opindex Wno-reorder
2480 @cindex reordering, warning
2481 @cindex warning for reordering of member initializers
2482 Warn when the order of member initializers given in the code does not
2483 match the order in which they must be executed.  For instance:
2485 @smallexample
2486 struct A @{
2487   int i;
2488   int j;
2489   A(): j (0), i (1) @{ @}
2491 @end smallexample
2493 @noindent
2494 The compiler rearranges the member initializers for @samp{i}
2495 and @samp{j} to match the declaration order of the members, emitting
2496 a warning to that effect.  This warning is enabled by @option{-Wall}.
2497 @end table
2499 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2501 @table @gcctabopt
2502 @item -Weffc++ @r{(C++ and Objective-C++ only)}
2503 @opindex Weffc++
2504 @opindex Wno-effc++
2505 Warn about violations of the following style guidelines from Scott Meyers'
2506 @cite{Effective C++, Second Edition} book:
2508 @itemize @bullet
2509 @item
2510 Item 11:  Define a copy constructor and an assignment operator for classes
2511 with dynamically allocated memory.
2513 @item
2514 Item 12:  Prefer initialization to assignment in constructors.
2516 @item
2517 Item 14:  Make destructors virtual in base classes.
2519 @item
2520 Item 15:  Have @code{operator=} return a reference to @code{*this}.
2522 @item
2523 Item 23:  Don't try to return a reference when you must return an object.
2525 @end itemize
2527 Also warn about violations of the following style guidelines from
2528 Scott Meyers' @cite{More Effective C++} book:
2530 @itemize @bullet
2531 @item
2532 Item 6:  Distinguish between prefix and postfix forms of increment and
2533 decrement operators.
2535 @item
2536 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2538 @end itemize
2540 When selecting this option, be aware that the standard library
2541 headers do not obey all of these guidelines; use @samp{grep -v}
2542 to filter out those warnings.
2544 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2545 @opindex Wstrict-null-sentinel
2546 @opindex Wno-strict-null-sentinel
2547 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2548 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2549 to @code{__null}.  Although it is a null pointer constant not a null pointer,
2550 it is guaranteed to be of the same size as a pointer.  But this use is
2551 not portable across different compilers.
2553 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2554 @opindex Wno-non-template-friend
2555 @opindex Wnon-template-friend
2556 Disable warnings when non-templatized friend functions are declared
2557 within a template.  Since the advent of explicit template specification
2558 support in G++, if the name of the friend is an unqualified-id (i.e.,
2559 @samp{friend foo(int)}), the C++ language specification demands that the
2560 friend declare or define an ordinary, nontemplate function.  (Section
2561 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2562 could be interpreted as a particular specialization of a templatized
2563 function.  Because this non-conforming behavior is no longer the default
2564 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2565 check existing code for potential trouble spots and is on by default.
2566 This new compiler behavior can be turned off with
2567 @option{-Wno-non-template-friend}, which keeps the conformant compiler code
2568 but disables the helpful warning.
2570 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2571 @opindex Wold-style-cast
2572 @opindex Wno-old-style-cast
2573 Warn if an old-style (C-style) cast to a non-void type is used within
2574 a C++ program.  The new-style casts (@samp{dynamic_cast},
2575 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2576 less vulnerable to unintended effects and much easier to search for.
2578 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2579 @opindex Woverloaded-virtual
2580 @opindex Wno-overloaded-virtual
2581 @cindex overloaded virtual function, warning
2582 @cindex warning for overloaded virtual function
2583 Warn when a function declaration hides virtual functions from a
2584 base class.  For example, in:
2586 @smallexample
2587 struct A @{
2588   virtual void f();
2591 struct B: public A @{
2592   void f(int);
2594 @end smallexample
2596 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2597 like:
2599 @smallexample
2600 B* b;
2601 b->f();
2602 @end smallexample
2604 @noindent
2605 fails to compile.
2607 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2608 @opindex Wno-pmf-conversions
2609 @opindex Wpmf-conversions
2610 Disable the diagnostic for converting a bound pointer to member function
2611 to a plain pointer.
2613 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
2614 @opindex Wsign-promo
2615 @opindex Wno-sign-promo
2616 Warn when overload resolution chooses a promotion from unsigned or
2617 enumerated type to a signed type, over a conversion to an unsigned type of
2618 the same size.  Previous versions of G++ tried to preserve
2619 unsignedness, but the standard mandates the current behavior.
2621 @smallexample
2622 struct A @{
2623   operator int ();
2624   A& operator = (int);
2627 main ()
2629   A a,b;
2630   a = b;
2632 @end smallexample
2634 @noindent
2635 In this example, G++ synthesizes a default @samp{A& operator =
2636 (const A&);}, while cfront uses the user-defined @samp{operator =}.
2637 @end table
2639 @node Objective-C and Objective-C++ Dialect Options
2640 @section Options Controlling Objective-C and Objective-C++ Dialects
2642 @cindex compiler options, Objective-C and Objective-C++
2643 @cindex Objective-C and Objective-C++ options, command-line
2644 @cindex options, Objective-C and Objective-C++
2645 (NOTE: This manual does not describe the Objective-C and Objective-C++
2646 languages themselves.  @xref{Standards,,Language Standards
2647 Supported by GCC}, for references.)
2649 This section describes the command-line options that are only meaningful
2650 for Objective-C and Objective-C++ programs, but you can also use most of
2651 the language-independent GNU compiler options.
2652 For example, you might compile a file @code{some_class.m} like this:
2654 @smallexample
2655 gcc -g -fgnu-runtime -O -c some_class.m
2656 @end smallexample
2658 @noindent
2659 In this example, @option{-fgnu-runtime} is an option meant only for
2660 Objective-C and Objective-C++ programs; you can use the other options with
2661 any language supported by GCC@.
2663 Note that since Objective-C is an extension of the C language, Objective-C
2664 compilations may also use options specific to the C front-end (e.g.,
2665 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2666 C++-specific options (e.g., @option{-Wabi}).
2668 Here is a list of options that are @emph{only} for compiling Objective-C
2669 and Objective-C++ programs:
2671 @table @gcctabopt
2672 @item -fconstant-string-class=@var{class-name}
2673 @opindex fconstant-string-class
2674 Use @var{class-name} as the name of the class to instantiate for each
2675 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2676 class name is @code{NXConstantString} if the GNU runtime is being used, and
2677 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2678 @option{-fconstant-cfstrings} option, if also present, overrides the
2679 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2680 to be laid out as constant CoreFoundation strings.
2682 @item -fgnu-runtime
2683 @opindex fgnu-runtime
2684 Generate object code compatible with the standard GNU Objective-C
2685 runtime.  This is the default for most types of systems.
2687 @item -fnext-runtime
2688 @opindex fnext-runtime
2689 Generate output compatible with the NeXT runtime.  This is the default
2690 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2691 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2692 used.
2694 @item -fno-nil-receivers
2695 @opindex fno-nil-receivers
2696 Assume that all Objective-C message dispatches (@code{[receiver
2697 message:arg]}) in this translation unit ensure that the receiver is
2698 not @code{nil}.  This allows for more efficient entry points in the
2699 runtime to be used.  This option is only available in conjunction with
2700 the NeXT runtime and ABI version 0 or 1.
2702 @item -fobjc-abi-version=@var{n}
2703 @opindex fobjc-abi-version
2704 Use version @var{n} of the Objective-C ABI for the selected runtime.
2705 This option is currently supported only for the NeXT runtime.  In that
2706 case, Version 0 is the traditional (32-bit) ABI without support for
2707 properties and other Objective-C 2.0 additions.  Version 1 is the
2708 traditional (32-bit) ABI with support for properties and other
2709 Objective-C 2.0 additions.  Version 2 is the modern (64-bit) ABI.  If
2710 nothing is specified, the default is Version 0 on 32-bit target
2711 machines, and Version 2 on 64-bit target machines.
2713 @item -fobjc-call-cxx-cdtors
2714 @opindex fobjc-call-cxx-cdtors
2715 For each Objective-C class, check if any of its instance variables is a
2716 C++ object with a non-trivial default constructor.  If so, synthesize a
2717 special @code{- (id) .cxx_construct} instance method which runs
2718 non-trivial default constructors on any such instance variables, in order,
2719 and then return @code{self}.  Similarly, check if any instance variable
2720 is a C++ object with a non-trivial destructor, and if so, synthesize a
2721 special @code{- (void) .cxx_destruct} method which runs
2722 all such default destructors, in reverse order.
2724 The @code{- (id) .cxx_construct} and @code{- (void) .cxx_destruct}
2725 methods thusly generated only operate on instance variables
2726 declared in the current Objective-C class, and not those inherited
2727 from superclasses.  It is the responsibility of the Objective-C
2728 runtime to invoke all such methods in an object's inheritance
2729 hierarchy.  The @code{- (id) .cxx_construct} methods are invoked
2730 by the runtime immediately after a new object instance is allocated;
2731 the @code{- (void) .cxx_destruct} methods are invoked immediately
2732 before the runtime deallocates an object instance.
2734 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2735 support for invoking the @code{- (id) .cxx_construct} and
2736 @code{- (void) .cxx_destruct} methods.
2738 @item -fobjc-direct-dispatch
2739 @opindex fobjc-direct-dispatch
2740 Allow fast jumps to the message dispatcher.  On Darwin this is
2741 accomplished via the comm page.
2743 @item -fobjc-exceptions
2744 @opindex fobjc-exceptions
2745 Enable syntactic support for structured exception handling in
2746 Objective-C, similar to what is offered by C++ and Java.  This option
2747 is required to use the Objective-C keywords @code{@@try},
2748 @code{@@throw}, @code{@@catch}, @code{@@finally} and
2749 @code{@@synchronized}.  This option is available with both the GNU
2750 runtime and the NeXT runtime (but not available in conjunction with
2751 the NeXT runtime on Mac OS X 10.2 and earlier).
2753 @item -fobjc-gc
2754 @opindex fobjc-gc
2755 Enable garbage collection (GC) in Objective-C and Objective-C++
2756 programs.  This option is only available with the NeXT runtime; the
2757 GNU runtime has a different garbage collection implementation that
2758 does not require special compiler flags.
2760 @item -fobjc-nilcheck
2761 @opindex fobjc-nilcheck
2762 For the NeXT runtime with version 2 of the ABI, check for a nil
2763 receiver in method invocations before doing the actual method call.
2764 This is the default and can be disabled using
2765 @option{-fno-objc-nilcheck}.  Class methods and super calls are never
2766 checked for nil in this way no matter what this flag is set to.
2767 Currently this flag does nothing when the GNU runtime, or an older
2768 version of the NeXT runtime ABI, is used.
2770 @item -fobjc-std=objc1
2771 @opindex fobjc-std
2772 Conform to the language syntax of Objective-C 1.0, the language
2773 recognized by GCC 4.0.  This only affects the Objective-C additions to
2774 the C/C++ language; it does not affect conformance to C/C++ standards,
2775 which is controlled by the separate C/C++ dialect option flags.  When
2776 this option is used with the Objective-C or Objective-C++ compiler,
2777 any Objective-C syntax that is not recognized by GCC 4.0 is rejected.
2778 This is useful if you need to make sure that your Objective-C code can
2779 be compiled with older versions of GCC@.
2781 @item -freplace-objc-classes
2782 @opindex freplace-objc-classes
2783 Emit a special marker instructing @command{ld(1)} not to statically link in
2784 the resulting object file, and allow @command{dyld(1)} to load it in at
2785 run time instead.  This is used in conjunction with the Fix-and-Continue
2786 debugging mode, where the object file in question may be recompiled and
2787 dynamically reloaded in the course of program execution, without the need
2788 to restart the program itself.  Currently, Fix-and-Continue functionality
2789 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2790 and later.
2792 @item -fzero-link
2793 @opindex fzero-link
2794 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2795 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2796 compile time) with static class references that get initialized at load time,
2797 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2798 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2799 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2800 for individual class implementations to be modified during program execution.
2801 The GNU runtime currently always retains calls to @code{objc_get_class("@dots{}")}
2802 regardless of command-line options.
2804 @item -gen-decls
2805 @opindex gen-decls
2806 Dump interface declarations for all classes seen in the source file to a
2807 file named @file{@var{sourcename}.decl}.
2809 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
2810 @opindex Wassign-intercept
2811 @opindex Wno-assign-intercept
2812 Warn whenever an Objective-C assignment is being intercepted by the
2813 garbage collector.
2815 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
2816 @opindex Wno-protocol
2817 @opindex Wprotocol
2818 If a class is declared to implement a protocol, a warning is issued for
2819 every method in the protocol that is not implemented by the class.  The
2820 default behavior is to issue a warning for every method not explicitly
2821 implemented in the class, even if a method implementation is inherited
2822 from the superclass.  If you use the @option{-Wno-protocol} option, then
2823 methods inherited from the superclass are considered to be implemented,
2824 and no warning is issued for them.
2826 @item -Wselector @r{(Objective-C and Objective-C++ only)}
2827 @opindex Wselector
2828 @opindex Wno-selector
2829 Warn if multiple methods of different types for the same selector are
2830 found during compilation.  The check is performed on the list of methods
2831 in the final stage of compilation.  Additionally, a check is performed
2832 for each selector appearing in a @code{@@selector(@dots{})}
2833 expression, and a corresponding method for that selector has been found
2834 during compilation.  Because these checks scan the method table only at
2835 the end of compilation, these warnings are not produced if the final
2836 stage of compilation is not reached, for example because an error is
2837 found during compilation, or because the @option{-fsyntax-only} option is
2838 being used.
2840 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
2841 @opindex Wstrict-selector-match
2842 @opindex Wno-strict-selector-match
2843 Warn if multiple methods with differing argument and/or return types are
2844 found for a given selector when attempting to send a message using this
2845 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2846 is off (which is the default behavior), the compiler omits such warnings
2847 if any differences found are confined to types that share the same size
2848 and alignment.
2850 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
2851 @opindex Wundeclared-selector
2852 @opindex Wno-undeclared-selector
2853 Warn if a @code{@@selector(@dots{})} expression referring to an
2854 undeclared selector is found.  A selector is considered undeclared if no
2855 method with that name has been declared before the
2856 @code{@@selector(@dots{})} expression, either explicitly in an
2857 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2858 an @code{@@implementation} section.  This option always performs its
2859 checks as soon as a @code{@@selector(@dots{})} expression is found,
2860 while @option{-Wselector} only performs its checks in the final stage of
2861 compilation.  This also enforces the coding style convention
2862 that methods and selectors must be declared before being used.
2864 @item -print-objc-runtime-info
2865 @opindex print-objc-runtime-info
2866 Generate C header describing the largest structure that is passed by
2867 value, if any.
2869 @end table
2871 @node Language Independent Options
2872 @section Options to Control Diagnostic Messages Formatting
2873 @cindex options to control diagnostics formatting
2874 @cindex diagnostic messages
2875 @cindex message formatting
2877 Traditionally, diagnostic messages have been formatted irrespective of
2878 the output device's aspect (e.g.@: its width, @dots{}).  You can use the
2879 options described below
2880 to control the formatting algorithm for diagnostic messages, 
2881 e.g.@: how many characters per line, how often source location
2882 information should be reported.  Note that some language front ends may not
2883 honor these options.
2885 @table @gcctabopt
2886 @item -fmessage-length=@var{n}
2887 @opindex fmessage-length
2888 Try to format error messages so that they fit on lines of about @var{n}
2889 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2890 the front ends supported by GCC@.  If @var{n} is zero, then no
2891 line-wrapping is done; each error message appears on a single
2892 line.
2894 @item -fdiagnostics-show-location=once
2895 @opindex fdiagnostics-show-location
2896 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2897 reporter to emit @emph{once} source location information; that is, in
2898 case the message is too long to fit on a single physical line and has to
2899 be wrapped, the source location won't be emitted (as prefix) again,
2900 over and over, in subsequent continuation lines.  This is the default
2901 behavior.
2903 @item -fdiagnostics-show-location=every-line
2904 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2905 messages reporter to emit the same source location information (as
2906 prefix) for physical lines that result from the process of breaking
2907 a message which is too long to fit on a single line.
2909 @item -fno-diagnostics-show-option
2910 @opindex fno-diagnostics-show-option
2911 @opindex fdiagnostics-show-option
2912 By default, each diagnostic emitted includes text indicating the
2913 command-line option that directly controls the diagnostic (if such an
2914 option is known to the diagnostic machinery).  Specifying the
2915 @option{-fno-diagnostics-show-option} flag suppresses that behavior.
2917 @item -fno-diagnostics-show-caret
2918 @opindex fno-diagnostics-show-caret
2919 @opindex fdiagnostics-show-caret
2920 By default, each diagnostic emitted includes the original source line
2921 and a caret '^' indicating the column.  This option suppresses this
2922 information.
2924 @end table
2926 @node Warning Options
2927 @section Options to Request or Suppress Warnings
2928 @cindex options to control warnings
2929 @cindex warning messages
2930 @cindex messages, warning
2931 @cindex suppressing warnings
2933 Warnings are diagnostic messages that report constructions that
2934 are not inherently erroneous but that are risky or suggest there
2935 may have been an error.
2937 The following language-independent options do not enable specific
2938 warnings but control the kinds of diagnostics produced by GCC@.
2940 @table @gcctabopt
2941 @cindex syntax checking
2942 @item -fsyntax-only
2943 @opindex fsyntax-only
2944 Check the code for syntax errors, but don't do anything beyond that.
2946 @item -fmax-errors=@var{n}
2947 @opindex fmax-errors
2948 Limits the maximum number of error messages to @var{n}, at which point
2949 GCC bails out rather than attempting to continue processing the source
2950 code.  If @var{n} is 0 (the default), there is no limit on the number
2951 of error messages produced.  If @option{-Wfatal-errors} is also
2952 specified, then @option{-Wfatal-errors} takes precedence over this
2953 option.
2955 @item -w
2956 @opindex w
2957 Inhibit all warning messages.
2959 @item -Werror
2960 @opindex Werror
2961 @opindex Wno-error
2962 Make all warnings into errors.
2964 @item -Werror=
2965 @opindex Werror=
2966 @opindex Wno-error=
2967 Make the specified warning into an error.  The specifier for a warning
2968 is appended, for example @option{-Werror=switch} turns the warnings
2969 controlled by @option{-Wswitch} into errors.  This switch takes a
2970 negative form, to be used to negate @option{-Werror} for specific
2971 warnings, for example @option{-Wno-error=switch} makes
2972 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
2973 is in effect.
2975 The warning message for each controllable warning includes the
2976 option that controls the warning.  That option can then be used with
2977 @option{-Werror=} and @option{-Wno-error=} as described above.
2978 (Printing of the option in the warning message can be disabled using the
2979 @option{-fno-diagnostics-show-option} flag.)
2981 Note that specifying @option{-Werror=}@var{foo} automatically implies
2982 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
2983 imply anything.
2985 @item -Wfatal-errors
2986 @opindex Wfatal-errors
2987 @opindex Wno-fatal-errors
2988 This option causes the compiler to abort compilation on the first error
2989 occurred rather than trying to keep going and printing further error
2990 messages.
2992 @end table
2994 You can request many specific warnings with options beginning
2995 @samp{-W}, for example @option{-Wimplicit} to request warnings on
2996 implicit declarations.  Each of these specific warning options also
2997 has a negative form beginning @samp{-Wno-} to turn off warnings; for
2998 example, @option{-Wno-implicit}.  This manual lists only one of the
2999 two forms, whichever is not the default.  For further,
3000 language-specific options also refer to @ref{C++ Dialect Options} and
3001 @ref{Objective-C and Objective-C++ Dialect Options}.
3003 When an unrecognized warning option is requested (e.g.,
3004 @option{-Wunknown-warning}), GCC emits a diagnostic stating
3005 that the option is not recognized.  However, if the @option{-Wno-} form
3006 is used, the behavior is slightly different: no diagnostic is
3007 produced for @option{-Wno-unknown-warning} unless other diagnostics
3008 are being produced.  This allows the use of new @option{-Wno-} options
3009 with old compilers, but if something goes wrong, the compiler
3010 warns that an unrecognized option is present.
3012 @table @gcctabopt
3013 @item -Wpedantic
3014 @itemx -pedantic
3015 @opindex pedantic
3016 @opindex Wpedantic
3017 Issue all the warnings demanded by strict ISO C and ISO C++;
3018 reject all programs that use forbidden extensions, and some other
3019 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
3020 version of the ISO C standard specified by any @option{-std} option used.
3022 Valid ISO C and ISO C++ programs should compile properly with or without
3023 this option (though a rare few require @option{-ansi} or a
3024 @option{-std} option specifying the required version of ISO C)@.  However,
3025 without this option, certain GNU extensions and traditional C and C++
3026 features are supported as well.  With this option, they are rejected.
3028 @option{-Wpedantic} does not cause warning messages for use of the
3029 alternate keywords whose names begin and end with @samp{__}.  Pedantic
3030 warnings are also disabled in the expression that follows
3031 @code{__extension__}.  However, only system header files should use
3032 these escape routes; application programs should avoid them.
3033 @xref{Alternate Keywords}.
3035 Some users try to use @option{-Wpedantic} to check programs for strict ISO
3036 C conformance.  They soon find that it does not do quite what they want:
3037 it finds some non-ISO practices, but not all---only those for which
3038 ISO C @emph{requires} a diagnostic, and some others for which
3039 diagnostics have been added.
3041 A feature to report any failure to conform to ISO C might be useful in
3042 some instances, but would require considerable additional work and would
3043 be quite different from @option{-Wpedantic}.  We don't have plans to
3044 support such a feature in the near future.
3046 Where the standard specified with @option{-std} represents a GNU
3047 extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
3048 corresponding @dfn{base standard}, the version of ISO C on which the GNU
3049 extended dialect is based.  Warnings from @option{-Wpedantic} are given
3050 where they are required by the base standard.  (It does not make sense
3051 for such warnings to be given only for features not in the specified GNU
3052 C dialect, since by definition the GNU dialects of C include all
3053 features the compiler supports with the given option, and there would be
3054 nothing to warn about.)
3056 @item -pedantic-errors
3057 @opindex pedantic-errors
3058 Like @option{-Wpedantic}, except that errors are produced rather than
3059 warnings.
3061 @item -Wall
3062 @opindex Wall
3063 @opindex Wno-all
3064 This enables all the warnings about constructions that some users
3065 consider questionable, and that are easy to avoid (or modify to
3066 prevent the warning), even in conjunction with macros.  This also
3067 enables some language-specific warnings described in @ref{C++ Dialect
3068 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
3070 @option{-Wall} turns on the following warning flags:
3072 @gccoptlist{-Waddress   @gol
3073 -Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
3074 -Wc++11-compat  @gol
3075 -Wchar-subscripts  @gol
3076 -Wenum-compare @r{(in C/Objc; this is on by default in C++)} @gol
3077 -Wimplicit-int @r{(C and Objective-C only)} @gol
3078 -Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
3079 -Wcomment  @gol
3080 -Wformat   @gol
3081 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
3082 -Wmaybe-uninitialized @gol
3083 -Wmissing-braces @r{(only for C/ObjC)} @gol
3084 -Wnonnull  @gol
3085 -Wparentheses  @gol
3086 -Wpointer-sign  @gol
3087 -Wreorder   @gol
3088 -Wreturn-type  @gol
3089 -Wsequence-point  @gol
3090 -Wsign-compare @r{(only in C++)}  @gol
3091 -Wstrict-aliasing  @gol
3092 -Wstrict-overflow=1  @gol
3093 -Wswitch  @gol
3094 -Wtrigraphs  @gol
3095 -Wuninitialized  @gol
3096 -Wunknown-pragmas  @gol
3097 -Wunused-function  @gol
3098 -Wunused-label     @gol
3099 -Wunused-value     @gol
3100 -Wunused-variable  @gol
3101 -Wvolatile-register-var @gol
3104 Note that some warning flags are not implied by @option{-Wall}.  Some of
3105 them warn about constructions that users generally do not consider
3106 questionable, but which occasionally you might wish to check for;
3107 others warn about constructions that are necessary or hard to avoid in
3108 some cases, and there is no simple way to modify the code to suppress
3109 the warning. Some of them are enabled by @option{-Wextra} but many of
3110 them must be enabled individually.
3112 @item -Wextra
3113 @opindex W
3114 @opindex Wextra
3115 @opindex Wno-extra
3116 This enables some extra warning flags that are not enabled by
3117 @option{-Wall}. (This option used to be called @option{-W}.  The older
3118 name is still supported, but the newer name is more descriptive.)
3120 @gccoptlist{-Wclobbered  @gol
3121 -Wempty-body  @gol
3122 -Wignored-qualifiers @gol
3123 -Wmissing-field-initializers  @gol
3124 -Wmissing-parameter-type @r{(C only)}  @gol
3125 -Wold-style-declaration @r{(C only)}  @gol
3126 -Woverride-init  @gol
3127 -Wsign-compare  @gol
3128 -Wtype-limits  @gol
3129 -Wuninitialized  @gol
3130 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)} @gol
3131 -Wunused-but-set-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
3134 The option @option{-Wextra} also prints warning messages for the
3135 following cases:
3137 @itemize @bullet
3139 @item
3140 A pointer is compared against integer zero with @samp{<}, @samp{<=},
3141 @samp{>}, or @samp{>=}.
3143 @item
3144 (C++ only) An enumerator and a non-enumerator both appear in a
3145 conditional expression.
3147 @item
3148 (C++ only) Ambiguous virtual bases.
3150 @item
3151 (C++ only) Subscripting an array that has been declared @samp{register}.
3153 @item
3154 (C++ only) Taking the address of a variable that has been declared
3155 @samp{register}.
3157 @item
3158 (C++ only) A base class is not initialized in a derived class' copy
3159 constructor.
3161 @end itemize
3163 @item -Wchar-subscripts
3164 @opindex Wchar-subscripts
3165 @opindex Wno-char-subscripts
3166 Warn if an array subscript has type @code{char}.  This is a common cause
3167 of error, as programmers often forget that this type is signed on some
3168 machines.
3169 This warning is enabled by @option{-Wall}.
3171 @item -Wcomment
3172 @opindex Wcomment
3173 @opindex Wno-comment
3174 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
3175 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
3176 This warning is enabled by @option{-Wall}.
3178 @item -Wno-coverage-mismatch
3179 @opindex Wno-coverage-mismatch
3180 Warn if feedback profiles do not match when using the
3181 @option{-fprofile-use} option.
3182 If a source file is changed between compiling with @option{-fprofile-gen} and
3183 with @option{-fprofile-use}, the files with the profile feedback can fail
3184 to match the source file and GCC cannot use the profile feedback
3185 information.  By default, this warning is enabled and is treated as an
3186 error.  @option{-Wno-coverage-mismatch} can be used to disable the
3187 warning or @option{-Wno-error=coverage-mismatch} can be used to
3188 disable the error.  Disabling the error for this warning can result in
3189 poorly optimized code and is useful only in the
3190 case of very minor changes such as bug fixes to an existing code-base.
3191 Completely disabling the warning is not recommended.
3193 @item -Wno-cpp
3194 @r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
3196 Suppress warning messages emitted by @code{#warning} directives.
3198 @item -Wdouble-promotion @r{(C, C++, Objective-C and Objective-C++ only)}
3199 @opindex Wdouble-promotion
3200 @opindex Wno-double-promotion
3201 Give a warning when a value of type @code{float} is implicitly
3202 promoted to @code{double}.  CPUs with a 32-bit ``single-precision''
3203 floating-point unit implement @code{float} in hardware, but emulate
3204 @code{double} in software.  On such a machine, doing computations
3205 using @code{double} values is much more expensive because of the
3206 overhead required for software emulation.
3208 It is easy to accidentally do computations with @code{double} because
3209 floating-point literals are implicitly of type @code{double}.  For
3210 example, in:
3211 @smallexample
3212 @group
3213 float area(float radius)
3215    return 3.14159 * radius * radius;
3217 @end group
3218 @end smallexample
3219 the compiler performs the entire computation with @code{double}
3220 because the floating-point literal is a @code{double}.
3222 @item -Wformat
3223 @opindex Wformat
3224 @opindex Wno-format
3225 @opindex ffreestanding
3226 @opindex fno-builtin
3227 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
3228 the arguments supplied have types appropriate to the format string
3229 specified, and that the conversions specified in the format string make
3230 sense.  This includes standard functions, and others specified by format
3231 attributes (@pxref{Function Attributes}), in the @code{printf},
3232 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
3233 not in the C standard) families (or other target-specific families).
3234 Which functions are checked without format attributes having been
3235 specified depends on the standard version selected, and such checks of
3236 functions without the attribute specified are disabled by
3237 @option{-ffreestanding} or @option{-fno-builtin}.
3239 The formats are checked against the format features supported by GNU
3240 libc version 2.2.  These include all ISO C90 and C99 features, as well
3241 as features from the Single Unix Specification and some BSD and GNU
3242 extensions.  Other library implementations may not support all these
3243 features; GCC does not support warning about features that go beyond a
3244 particular library's limitations.  However, if @option{-Wpedantic} is used
3245 with @option{-Wformat}, warnings are given about format features not
3246 in the selected standard version (but not for @code{strfmon} formats,
3247 since those are not in any version of the C standard).  @xref{C Dialect
3248 Options,,Options Controlling C Dialect}.
3250 Since @option{-Wformat} also checks for null format arguments for
3251 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
3253 @option{-Wformat} is included in @option{-Wall}.  For more control over some
3254 aspects of format checking, the options @option{-Wformat-y2k},
3255 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
3256 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
3257 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
3259 @item -Wformat-y2k
3260 @opindex Wformat-y2k
3261 @opindex Wno-format-y2k
3262 If @option{-Wformat} is specified, also warn about @code{strftime}
3263 formats that may yield only a two-digit year.
3265 @item -Wno-format-contains-nul
3266 @opindex Wno-format-contains-nul
3267 @opindex Wformat-contains-nul
3268 If @option{-Wformat} is specified, do not warn about format strings that
3269 contain NUL bytes.
3271 @item -Wno-format-extra-args
3272 @opindex Wno-format-extra-args
3273 @opindex Wformat-extra-args
3274 If @option{-Wformat} is specified, do not warn about excess arguments to a
3275 @code{printf} or @code{scanf} format function.  The C standard specifies
3276 that such arguments are ignored.
3278 Where the unused arguments lie between used arguments that are
3279 specified with @samp{$} operand number specifications, normally
3280 warnings are still given, since the implementation could not know what
3281 type to pass to @code{va_arg} to skip the unused arguments.  However,
3282 in the case of @code{scanf} formats, this option suppresses the
3283 warning if the unused arguments are all pointers, since the Single
3284 Unix Specification says that such unused arguments are allowed.
3286 @item -Wno-format-zero-length
3287 @opindex Wno-format-zero-length
3288 @opindex Wformat-zero-length
3289 If @option{-Wformat} is specified, do not warn about zero-length formats.
3290 The C standard specifies that zero-length formats are allowed.
3292 @item -Wformat-nonliteral
3293 @opindex Wformat-nonliteral
3294 @opindex Wno-format-nonliteral
3295 If @option{-Wformat} is specified, also warn if the format string is not a
3296 string literal and so cannot be checked, unless the format function
3297 takes its format arguments as a @code{va_list}.
3299 @item -Wformat-security
3300 @opindex Wformat-security
3301 @opindex Wno-format-security
3302 If @option{-Wformat} is specified, also warn about uses of format
3303 functions that represent possible security problems.  At present, this
3304 warns about calls to @code{printf} and @code{scanf} functions where the
3305 format string is not a string literal and there are no format arguments,
3306 as in @code{printf (foo);}.  This may be a security hole if the format
3307 string came from untrusted input and contains @samp{%n}.  (This is
3308 currently a subset of what @option{-Wformat-nonliteral} warns about, but
3309 in future warnings may be added to @option{-Wformat-security} that are not
3310 included in @option{-Wformat-nonliteral}.)
3312 @item -Wformat=2
3313 @opindex Wformat=2
3314 @opindex Wno-format=2
3315 Enable @option{-Wformat} plus format checks not included in
3316 @option{-Wformat}.  Currently equivalent to @option{-Wformat
3317 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
3319 @item -Wnonnull
3320 @opindex Wnonnull
3321 @opindex Wno-nonnull
3322 Warn about passing a null pointer for arguments marked as
3323 requiring a non-null value by the @code{nonnull} function attribute.
3325 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3326 can be disabled with the @option{-Wno-nonnull} option.
3328 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3329 @opindex Winit-self
3330 @opindex Wno-init-self
3331 Warn about uninitialized variables that are initialized with themselves.
3332 Note this option can only be used with the @option{-Wuninitialized} option.
3334 For example, GCC warns about @code{i} being uninitialized in the
3335 following snippet only when @option{-Winit-self} has been specified:
3336 @smallexample
3337 @group
3338 int f()
3340   int i = i;
3341   return i;
3343 @end group
3344 @end smallexample
3346 @item -Wimplicit-int @r{(C and Objective-C only)}
3347 @opindex Wimplicit-int
3348 @opindex Wno-implicit-int
3349 Warn when a declaration does not specify a type.
3350 This warning is enabled by @option{-Wall}.
3352 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3353 @opindex Wimplicit-function-declaration
3354 @opindex Wno-implicit-function-declaration
3355 Give a warning whenever a function is used before being declared. In
3356 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3357 enabled by default and it is made into an error by
3358 @option{-pedantic-errors}. This warning is also enabled by
3359 @option{-Wall}.
3361 @item -Wimplicit @r{(C and Objective-C only)}
3362 @opindex Wimplicit
3363 @opindex Wno-implicit
3364 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3365 This warning is enabled by @option{-Wall}.
3367 @item -Wignored-qualifiers @r{(C and C++ only)}
3368 @opindex Wignored-qualifiers
3369 @opindex Wno-ignored-qualifiers
3370 Warn if the return type of a function has a type qualifier
3371 such as @code{const}.  For ISO C such a type qualifier has no effect,
3372 since the value returned by a function is not an lvalue.
3373 For C++, the warning is only emitted for scalar types or @code{void}.
3374 ISO C prohibits qualified @code{void} return types on function
3375 definitions, so such return types always receive a warning
3376 even without this option.
3378 This warning is also enabled by @option{-Wextra}.
3380 @item -Wmain
3381 @opindex Wmain
3382 @opindex Wno-main
3383 Warn if the type of @samp{main} is suspicious.  @samp{main} should be
3384 a function with external linkage, returning int, taking either zero
3385 arguments, two, or three arguments of appropriate types.  This warning
3386 is enabled by default in C++ and is enabled by either @option{-Wall}
3387 or @option{-Wpedantic}.
3389 @item -Wmissing-braces
3390 @opindex Wmissing-braces
3391 @opindex Wno-missing-braces
3392 Warn if an aggregate or union initializer is not fully bracketed.  In
3393 the following example, the initializer for @samp{a} is not fully
3394 bracketed, but that for @samp{b} is fully bracketed.  This warning is
3395 enabled by @option{-Wall} in C.
3397 @smallexample
3398 int a[2][2] = @{ 0, 1, 2, 3 @};
3399 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3400 @end smallexample
3402 This warning is enabled by @option{-Wall}.
3404 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3405 @opindex Wmissing-include-dirs
3406 @opindex Wno-missing-include-dirs
3407 Warn if a user-supplied include directory does not exist.
3409 @item -Wparentheses
3410 @opindex Wparentheses
3411 @opindex Wno-parentheses
3412 Warn if parentheses are omitted in certain contexts, such
3413 as when there is an assignment in a context where a truth value
3414 is expected, or when operators are nested whose precedence people
3415 often get confused about.
3417 Also warn if a comparison like @samp{x<=y<=z} appears; this is
3418 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3419 interpretation from that of ordinary mathematical notation.
3421 Also warn about constructions where there may be confusion to which
3422 @code{if} statement an @code{else} branch belongs.  Here is an example of
3423 such a case:
3425 @smallexample
3426 @group
3428   if (a)
3429     if (b)
3430       foo ();
3431   else
3432     bar ();
3434 @end group
3435 @end smallexample
3437 In C/C++, every @code{else} branch belongs to the innermost possible
3438 @code{if} statement, which in this example is @code{if (b)}.  This is
3439 often not what the programmer expected, as illustrated in the above
3440 example by indentation the programmer chose.  When there is the
3441 potential for this confusion, GCC issues a warning when this flag
3442 is specified.  To eliminate the warning, add explicit braces around
3443 the innermost @code{if} statement so there is no way the @code{else}
3444 can belong to the enclosing @code{if}.  The resulting code
3445 looks like this:
3447 @smallexample
3448 @group
3450   if (a)
3451     @{
3452       if (b)
3453         foo ();
3454       else
3455         bar ();
3456     @}
3458 @end group
3459 @end smallexample
3461 Also warn for dangerous uses of the GNU extension to
3462 @code{?:} with omitted middle operand. When the condition
3463 in the @code{?}: operator is a boolean expression, the omitted value is
3464 always 1.  Often programmers expect it to be a value computed
3465 inside the conditional expression instead.
3467 This warning is enabled by @option{-Wall}.
3469 @item -Wsequence-point
3470 @opindex Wsequence-point
3471 @opindex Wno-sequence-point
3472 Warn about code that may have undefined semantics because of violations
3473 of sequence point rules in the C and C++ standards.
3475 The C and C++ standards defines the order in which expressions in a C/C++
3476 program are evaluated in terms of @dfn{sequence points}, which represent
3477 a partial ordering between the execution of parts of the program: those
3478 executed before the sequence point, and those executed after it.  These
3479 occur after the evaluation of a full expression (one which is not part
3480 of a larger expression), after the evaluation of the first operand of a
3481 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3482 function is called (but after the evaluation of its arguments and the
3483 expression denoting the called function), and in certain other places.
3484 Other than as expressed by the sequence point rules, the order of
3485 evaluation of subexpressions of an expression is not specified.  All
3486 these rules describe only a partial order rather than a total order,
3487 since, for example, if two functions are called within one expression
3488 with no sequence point between them, the order in which the functions
3489 are called is not specified.  However, the standards committee have
3490 ruled that function calls do not overlap.
3492 It is not specified when between sequence points modifications to the
3493 values of objects take effect.  Programs whose behavior depends on this
3494 have undefined behavior; the C and C++ standards specify that ``Between
3495 the previous and next sequence point an object shall have its stored
3496 value modified at most once by the evaluation of an expression.
3497 Furthermore, the prior value shall be read only to determine the value
3498 to be stored.''.  If a program breaks these rules, the results on any
3499 particular implementation are entirely unpredictable.
3501 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3502 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3503 diagnosed by this option, and it may give an occasional false positive
3504 result, but in general it has been found fairly effective at detecting
3505 this sort of problem in programs.
3507 The standard is worded confusingly, therefore there is some debate
3508 over the precise meaning of the sequence point rules in subtle cases.
3509 Links to discussions of the problem, including proposed formal
3510 definitions, may be found on the GCC readings page, at
3511 @uref{http://gcc.gnu.org/@/readings.html}.
3513 This warning is enabled by @option{-Wall} for C and C++.
3515 @item -Wreturn-type
3516 @opindex Wreturn-type
3517 @opindex Wno-return-type
3518 Warn whenever a function is defined with a return-type that defaults
3519 to @code{int}.  Also warn about any @code{return} statement with no
3520 return-value in a function whose return-type is not @code{void}
3521 (falling off the end of the function body is considered returning
3522 without a value), and about a @code{return} statement with an
3523 expression in a function whose return-type is @code{void}.
3525 For C++, a function without return type always produces a diagnostic
3526 message, even when @option{-Wno-return-type} is specified.  The only
3527 exceptions are @samp{main} and functions defined in system headers.
3529 This warning is enabled by @option{-Wall}.
3531 @item -Wswitch
3532 @opindex Wswitch
3533 @opindex Wno-switch
3534 Warn whenever a @code{switch} statement has an index of enumerated type
3535 and lacks a @code{case} for one or more of the named codes of that
3536 enumeration.  (The presence of a @code{default} label prevents this
3537 warning.)  @code{case} labels outside the enumeration range also
3538 provoke warnings when this option is used (even if there is a
3539 @code{default} label).
3540 This warning is enabled by @option{-Wall}.
3542 @item -Wswitch-default
3543 @opindex Wswitch-default
3544 @opindex Wno-switch-default
3545 Warn whenever a @code{switch} statement does not have a @code{default}
3546 case.
3548 @item -Wswitch-enum
3549 @opindex Wswitch-enum
3550 @opindex Wno-switch-enum
3551 Warn whenever a @code{switch} statement has an index of enumerated type
3552 and lacks a @code{case} for one or more of the named codes of that
3553 enumeration.  @code{case} labels outside the enumeration range also
3554 provoke warnings when this option is used.  The only difference
3555 between @option{-Wswitch} and this option is that this option gives a
3556 warning about an omitted enumeration code even if there is a
3557 @code{default} label.
3559 @item -Wsync-nand @r{(C and C++ only)}
3560 @opindex Wsync-nand
3561 @opindex Wno-sync-nand
3562 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3563 built-in functions are used.  These functions changed semantics in GCC 4.4.
3565 @item -Wtrigraphs
3566 @opindex Wtrigraphs
3567 @opindex Wno-trigraphs
3568 Warn if any trigraphs are encountered that might change the meaning of
3569 the program (trigraphs within comments are not warned about).
3570 This warning is enabled by @option{-Wall}.
3572 @item -Wunused-but-set-parameter
3573 @opindex Wunused-but-set-parameter
3574 @opindex Wno-unused-but-set-parameter
3575 Warn whenever a function parameter is assigned to, but otherwise unused
3576 (aside from its declaration).
3578 To suppress this warning use the @samp{unused} attribute
3579 (@pxref{Variable Attributes}).
3581 This warning is also enabled by @option{-Wunused} together with
3582 @option{-Wextra}.
3584 @item -Wunused-but-set-variable
3585 @opindex Wunused-but-set-variable
3586 @opindex Wno-unused-but-set-variable
3587 Warn whenever a local variable is assigned to, but otherwise unused
3588 (aside from its declaration).
3589 This warning is enabled by @option{-Wall}.
3591 To suppress this warning use the @samp{unused} attribute
3592 (@pxref{Variable Attributes}).
3594 This warning is also enabled by @option{-Wunused}, which is enabled
3595 by @option{-Wall}.
3597 @item -Wunused-function
3598 @opindex Wunused-function
3599 @opindex Wno-unused-function
3600 Warn whenever a static function is declared but not defined or a
3601 non-inline static function is unused.
3602 This warning is enabled by @option{-Wall}.
3604 @item -Wunused-label
3605 @opindex Wunused-label
3606 @opindex Wno-unused-label
3607 Warn whenever a label is declared but not used.
3608 This warning is enabled by @option{-Wall}.
3610 To suppress this warning use the @samp{unused} attribute
3611 (@pxref{Variable Attributes}).
3613 @item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
3614 @opindex Wunused-local-typedefs
3615 Warn when a typedef locally defined in a function is not used.
3616 This warning is enabled by @option{-Wall}.
3618 @item -Wunused-parameter
3619 @opindex Wunused-parameter
3620 @opindex Wno-unused-parameter
3621 Warn whenever a function parameter is unused aside from its declaration.
3623 To suppress this warning use the @samp{unused} attribute
3624 (@pxref{Variable Attributes}).
3626 @item -Wno-unused-result
3627 @opindex Wunused-result
3628 @opindex Wno-unused-result
3629 Do not warn if a caller of a function marked with attribute
3630 @code{warn_unused_result} (@pxref{Function Attributes}) does not use
3631 its return value. The default is @option{-Wunused-result}.
3633 @item -Wunused-variable
3634 @opindex Wunused-variable
3635 @opindex Wno-unused-variable
3636 Warn whenever a local variable or non-constant static variable is unused
3637 aside from its declaration.
3638 This warning is enabled by @option{-Wall}.
3640 To suppress this warning use the @samp{unused} attribute
3641 (@pxref{Variable Attributes}).
3643 @item -Wunused-value
3644 @opindex Wunused-value
3645 @opindex Wno-unused-value
3646 Warn whenever a statement computes a result that is explicitly not
3647 used. To suppress this warning cast the unused expression to
3648 @samp{void}. This includes an expression-statement or the left-hand
3649 side of a comma expression that contains no side effects. For example,
3650 an expression such as @samp{x[i,j]} causes a warning, while
3651 @samp{x[(void)i,j]} does not.
3653 This warning is enabled by @option{-Wall}.
3655 @item -Wunused
3656 @opindex Wunused
3657 @opindex Wno-unused
3658 All the above @option{-Wunused} options combined.
3660 In order to get a warning about an unused function parameter, you must
3661 either specify @option{-Wextra -Wunused} (note that @option{-Wall} implies
3662 @option{-Wunused}), or separately specify @option{-Wunused-parameter}.
3664 @item -Wuninitialized
3665 @opindex Wuninitialized
3666 @opindex Wno-uninitialized
3667 Warn if an automatic variable is used without first being initialized
3668 or if a variable may be clobbered by a @code{setjmp} call. In C++,
3669 warn if a non-static reference or non-static @samp{const} member
3670 appears in a class without constructors.
3672 If you want to warn about code that uses the uninitialized value of the
3673 variable in its own initializer, use the @option{-Winit-self} option.
3675 These warnings occur for individual uninitialized or clobbered
3676 elements of structure, union or array variables as well as for
3677 variables that are uninitialized or clobbered as a whole.  They do
3678 not occur for variables or elements declared @code{volatile}.  Because
3679 these warnings depend on optimization, the exact variables or elements
3680 for which there are warnings depends on the precise optimization
3681 options and version of GCC used.
3683 Note that there may be no warning about a variable that is used only
3684 to compute a value that itself is never used, because such
3685 computations may be deleted by data flow analysis before the warnings
3686 are printed.
3688 @item -Wmaybe-uninitialized
3689 @opindex Wmaybe-uninitialized
3690 @opindex Wno-maybe-uninitialized
3691 For an automatic variable, if there exists a path from the function
3692 entry to a use of the variable that is initialized, but there exist
3693 some other paths for which the variable is not initialized, the compiler
3694 emits a warning if it cannot prove the uninitialized paths are not
3695 executed at run time. These warnings are made optional because GCC is
3696 not smart enough to see all the reasons why the code might be correct
3697 in spite of appearing to have an error.  Here is one example of how
3698 this can happen:
3700 @smallexample
3701 @group
3703   int x;
3704   switch (y)
3705     @{
3706     case 1: x = 1;
3707       break;
3708     case 2: x = 4;
3709       break;
3710     case 3: x = 5;
3711     @}
3712   foo (x);
3714 @end group
3715 @end smallexample
3717 @noindent
3718 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3719 always initialized, but GCC doesn't know this. To suppress the
3720 warning, you need to provide a default case with assert(0) or
3721 similar code.
3723 @cindex @code{longjmp} warnings
3724 This option also warns when a non-volatile automatic variable might be
3725 changed by a call to @code{longjmp}.  These warnings as well are possible
3726 only in optimizing compilation.
3728 The compiler sees only the calls to @code{setjmp}.  It cannot know
3729 where @code{longjmp} will be called; in fact, a signal handler could
3730 call it at any point in the code.  As a result, you may get a warning
3731 even when there is in fact no problem because @code{longjmp} cannot
3732 in fact be called at the place that would cause a problem.
3734 Some spurious warnings can be avoided if you declare all the functions
3735 you use that never return as @code{noreturn}.  @xref{Function
3736 Attributes}.
3738 This warning is enabled by @option{-Wall} or @option{-Wextra}.
3740 @item -Wunknown-pragmas
3741 @opindex Wunknown-pragmas
3742 @opindex Wno-unknown-pragmas
3743 @cindex warning for unknown pragmas
3744 @cindex unknown pragmas, warning
3745 @cindex pragmas, warning of unknown
3746 Warn when a @code{#pragma} directive is encountered that is not understood by 
3747 GCC@.  If this command-line option is used, warnings are even issued
3748 for unknown pragmas in system header files.  This is not the case if
3749 the warnings are only enabled by the @option{-Wall} command-line option.
3751 @item -Wno-pragmas
3752 @opindex Wno-pragmas
3753 @opindex Wpragmas
3754 Do not warn about misuses of pragmas, such as incorrect parameters,
3755 invalid syntax, or conflicts between pragmas.  See also
3756 @option{-Wunknown-pragmas}.
3758 @item -Wstrict-aliasing
3759 @opindex Wstrict-aliasing
3760 @opindex Wno-strict-aliasing
3761 This option is only active when @option{-fstrict-aliasing} is active.
3762 It warns about code that might break the strict aliasing rules that the
3763 compiler is using for optimization.  The warning does not catch all
3764 cases, but does attempt to catch the more common pitfalls.  It is
3765 included in @option{-Wall}.
3766 It is equivalent to @option{-Wstrict-aliasing=3}
3768 @item -Wstrict-aliasing=n
3769 @opindex Wstrict-aliasing=n
3770 @opindex Wno-strict-aliasing=n
3771 This option is only active when @option{-fstrict-aliasing} is active.
3772 It warns about code that might break the strict aliasing rules that the
3773 compiler is using for optimization.
3774 Higher levels correspond to higher accuracy (fewer false positives).
3775 Higher levels also correspond to more effort, similar to the way @option{-O} 
3776 works.
3777 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=3}.
3779 Level 1: Most aggressive, quick, least accurate.
3780 Possibly useful when higher levels
3781 do not warn but @option{-fstrict-aliasing} still breaks the code, as it has very few
3782 false negatives.  However, it has many false positives.
3783 Warns for all pointer conversions between possibly incompatible types,
3784 even if never dereferenced.  Runs in the front end only.
3786 Level 2: Aggressive, quick, not too precise.
3787 May still have many false positives (not as many as level 1 though),
3788 and few false negatives (but possibly more than level 1).
3789 Unlike level 1, it only warns when an address is taken.  Warns about
3790 incomplete types.  Runs in the front end only.
3792 Level 3 (default for @option{-Wstrict-aliasing}):
3793 Should have very few false positives and few false
3794 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3795 Takes care of the common pun+dereference pattern in the front end:
3796 @code{*(int*)&some_float}.
3797 If optimization is enabled, it also runs in the back end, where it deals
3798 with multiple statement cases using flow-sensitive points-to information.
3799 Only warns when the converted pointer is dereferenced.
3800 Does not warn about incomplete types.
3802 @item -Wstrict-overflow
3803 @itemx -Wstrict-overflow=@var{n}
3804 @opindex Wstrict-overflow
3805 @opindex Wno-strict-overflow
3806 This option is only active when @option{-fstrict-overflow} is active.
3807 It warns about cases where the compiler optimizes based on the
3808 assumption that signed overflow does not occur.  Note that it does not
3809 warn about all cases where the code might overflow: it only warns
3810 about cases where the compiler implements some optimization.  Thus
3811 this warning depends on the optimization level.
3813 An optimization that assumes that signed overflow does not occur is
3814 perfectly safe if the values of the variables involved are such that
3815 overflow never does, in fact, occur.  Therefore this warning can
3816 easily give a false positive: a warning about code that is not
3817 actually a problem.  To help focus on important issues, several
3818 warning levels are defined.  No warnings are issued for the use of
3819 undefined signed overflow when estimating how many iterations a loop
3820 requires, in particular when determining whether a loop will be
3821 executed at all.
3823 @table @gcctabopt
3824 @item -Wstrict-overflow=1
3825 Warn about cases that are both questionable and easy to avoid.  For
3826 example,  with @option{-fstrict-overflow}, the compiler simplifies
3827 @code{x + 1 > x} to @code{1}.  This level of
3828 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3829 are not, and must be explicitly requested.
3831 @item -Wstrict-overflow=2
3832 Also warn about other cases where a comparison is simplified to a
3833 constant.  For example: @code{abs (x) >= 0}.  This can only be
3834 simplified when @option{-fstrict-overflow} is in effect, because
3835 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3836 zero.  @option{-Wstrict-overflow} (with no level) is the same as
3837 @option{-Wstrict-overflow=2}.
3839 @item -Wstrict-overflow=3
3840 Also warn about other cases where a comparison is simplified.  For
3841 example: @code{x + 1 > 1} is simplified to @code{x > 0}.
3843 @item -Wstrict-overflow=4
3844 Also warn about other simplifications not covered by the above cases.
3845 For example: @code{(x * 10) / 5} is simplified to @code{x * 2}.
3847 @item -Wstrict-overflow=5
3848 Also warn about cases where the compiler reduces the magnitude of a
3849 constant involved in a comparison.  For example: @code{x + 2 > y} is
3850 simplified to @code{x + 1 >= y}.  This is reported only at the
3851 highest warning level because this simplification applies to many
3852 comparisons, so this warning level gives a very large number of
3853 false positives.
3854 @end table
3856 @item -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{]}
3857 @opindex Wsuggest-attribute=
3858 @opindex Wno-suggest-attribute=
3859 Warn for cases where adding an attribute may be beneficial. The
3860 attributes currently supported are listed below.
3862 @table @gcctabopt
3863 @item -Wsuggest-attribute=pure
3864 @itemx -Wsuggest-attribute=const
3865 @itemx -Wsuggest-attribute=noreturn
3866 @opindex Wsuggest-attribute=pure
3867 @opindex Wno-suggest-attribute=pure
3868 @opindex Wsuggest-attribute=const
3869 @opindex Wno-suggest-attribute=const
3870 @opindex Wsuggest-attribute=noreturn
3871 @opindex Wno-suggest-attribute=noreturn
3873 Warn about functions that might be candidates for attributes
3874 @code{pure}, @code{const} or @code{noreturn}.  The compiler only warns for
3875 functions visible in other compilation units or (in the case of @code{pure} and
3876 @code{const}) if it cannot prove that the function returns normally. A function
3877 returns normally if it doesn't contain an infinite loop nor returns abnormally
3878 by throwing, calling @code{abort()} or trapping.  This analysis requires option
3879 @option{-fipa-pure-const}, which is enabled by default at @option{-O} and
3880 higher.  Higher optimization levels improve the accuracy of the analysis.
3882 @item -Wsuggest-attribute=format
3883 @itemx -Wmissing-format-attribute
3884 @opindex Wsuggest-attribute=format
3885 @opindex Wmissing-format-attribute
3886 @opindex Wno-suggest-attribute=format
3887 @opindex Wno-missing-format-attribute
3888 @opindex Wformat
3889 @opindex Wno-format
3891 Warn about function pointers that might be candidates for @code{format}
3892 attributes.  Note these are only possible candidates, not absolute ones.
3893 GCC guesses that function pointers with @code{format} attributes that
3894 are used in assignment, initialization, parameter passing or return
3895 statements should have a corresponding @code{format} attribute in the
3896 resulting type.  I.e.@: the left-hand side of the assignment or
3897 initialization, the type of the parameter variable, or the return type
3898 of the containing function respectively should also have a @code{format}
3899 attribute to avoid the warning.
3901 GCC also warns about function definitions that might be
3902 candidates for @code{format} attributes.  Again, these are only
3903 possible candidates.  GCC guesses that @code{format} attributes
3904 might be appropriate for any function that calls a function like
3905 @code{vprintf} or @code{vscanf}, but this might not always be the
3906 case, and some functions for which @code{format} attributes are
3907 appropriate may not be detected.
3908 @end table
3910 @item -Warray-bounds
3911 @opindex Wno-array-bounds
3912 @opindex Warray-bounds
3913 This option is only active when @option{-ftree-vrp} is active
3914 (default for @option{-O2} and above). It warns about subscripts to arrays
3915 that are always out of bounds. This warning is enabled by @option{-Wall}.
3917 @item -Wno-div-by-zero
3918 @opindex Wno-div-by-zero
3919 @opindex Wdiv-by-zero
3920 Do not warn about compile-time integer division by zero.  Floating-point
3921 division by zero is not warned about, as it can be a legitimate way of
3922 obtaining infinities and NaNs.
3924 @item -Wsystem-headers
3925 @opindex Wsystem-headers
3926 @opindex Wno-system-headers
3927 @cindex warnings from system headers
3928 @cindex system headers, warnings from
3929 Print warning messages for constructs found in system header files.
3930 Warnings from system headers are normally suppressed, on the assumption
3931 that they usually do not indicate real problems and would only make the
3932 compiler output harder to read.  Using this command-line option tells
3933 GCC to emit warnings from system headers as if they occurred in user
3934 code.  However, note that using @option{-Wall} in conjunction with this
3935 option does @emph{not} warn about unknown pragmas in system
3936 headers---for that, @option{-Wunknown-pragmas} must also be used.
3938 @item -Wtrampolines
3939 @opindex Wtrampolines
3940 @opindex Wno-trampolines
3941  Warn about trampolines generated for pointers to nested functions.
3943  A trampoline is a small piece of data or code that is created at run
3944  time on the stack when the address of a nested function is taken, and
3945  is used to call the nested function indirectly.  For some targets, it
3946  is made up of data only and thus requires no special treatment.  But,
3947  for most targets, it is made up of code and thus requires the stack
3948  to be made executable in order for the program to work properly.
3950 @item -Wfloat-equal
3951 @opindex Wfloat-equal
3952 @opindex Wno-float-equal
3953 Warn if floating-point values are used in equality comparisons.
3955 The idea behind this is that sometimes it is convenient (for the
3956 programmer) to consider floating-point values as approximations to
3957 infinitely precise real numbers.  If you are doing this, then you need
3958 to compute (by analyzing the code, or in some other way) the maximum or
3959 likely maximum error that the computation introduces, and allow for it
3960 when performing comparisons (and when producing output, but that's a
3961 different problem).  In particular, instead of testing for equality, you
3962 should check to see whether the two values have ranges that overlap; and
3963 this is done with the relational operators, so equality comparisons are
3964 probably mistaken.
3966 @item -Wtraditional @r{(C and Objective-C only)}
3967 @opindex Wtraditional
3968 @opindex Wno-traditional
3969 Warn about certain constructs that behave differently in traditional and
3970 ISO C@.  Also warn about ISO C constructs that have no traditional C
3971 equivalent, and/or problematic constructs that should be avoided.
3973 @itemize @bullet
3974 @item
3975 Macro parameters that appear within string literals in the macro body.
3976 In traditional C macro replacement takes place within string literals,
3977 but does not in ISO C@.
3979 @item
3980 In traditional C, some preprocessor directives did not exist.
3981 Traditional preprocessors only considered a line to be a directive
3982 if the @samp{#} appeared in column 1 on the line.  Therefore
3983 @option{-Wtraditional} warns about directives that traditional C
3984 understands but ignores because the @samp{#} does not appear as the
3985 first character on the line.  It also suggests you hide directives like
3986 @samp{#pragma} not understood by traditional C by indenting them.  Some
3987 traditional implementations do not recognize @samp{#elif}, so this option
3988 suggests avoiding it altogether.
3990 @item
3991 A function-like macro that appears without arguments.
3993 @item
3994 The unary plus operator.
3996 @item
3997 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating-point
3998 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3999 constants.)  Note, these suffixes appear in macros defined in the system
4000 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
4001 Use of these macros in user code might normally lead to spurious
4002 warnings, however GCC's integrated preprocessor has enough context to
4003 avoid warning in these cases.
4005 @item
4006 A function declared external in one block and then used after the end of
4007 the block.
4009 @item
4010 A @code{switch} statement has an operand of type @code{long}.
4012 @item
4013 A non-@code{static} function declaration follows a @code{static} one.
4014 This construct is not accepted by some traditional C compilers.
4016 @item
4017 The ISO type of an integer constant has a different width or
4018 signedness from its traditional type.  This warning is only issued if
4019 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
4020 typically represent bit patterns, are not warned about.
4022 @item
4023 Usage of ISO string concatenation is detected.
4025 @item
4026 Initialization of automatic aggregates.
4028 @item
4029 Identifier conflicts with labels.  Traditional C lacks a separate
4030 namespace for labels.
4032 @item
4033 Initialization of unions.  If the initializer is zero, the warning is
4034 omitted.  This is done under the assumption that the zero initializer in
4035 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
4036 initializer warnings and relies on default initialization to zero in the
4037 traditional C case.
4039 @item
4040 Conversions by prototypes between fixed/floating-point values and vice
4041 versa.  The absence of these prototypes when compiling with traditional
4042 C causes serious problems.  This is a subset of the possible
4043 conversion warnings; for the full set use @option{-Wtraditional-conversion}.
4045 @item
4046 Use of ISO C style function definitions.  This warning intentionally is
4047 @emph{not} issued for prototype declarations or variadic functions
4048 because these ISO C features appear in your code when using
4049 libiberty's traditional C compatibility macros, @code{PARAMS} and
4050 @code{VPARAMS}.  This warning is also bypassed for nested functions
4051 because that feature is already a GCC extension and thus not relevant to
4052 traditional C compatibility.
4053 @end itemize
4055 @item -Wtraditional-conversion @r{(C and Objective-C only)}
4056 @opindex Wtraditional-conversion
4057 @opindex Wno-traditional-conversion
4058 Warn if a prototype causes a type conversion that is different from what
4059 would happen to the same argument in the absence of a prototype.  This
4060 includes conversions of fixed point to floating and vice versa, and
4061 conversions changing the width or signedness of a fixed-point argument
4062 except when the same as the default promotion.
4064 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
4065 @opindex Wdeclaration-after-statement
4066 @opindex Wno-declaration-after-statement
4067 Warn when a declaration is found after a statement in a block.  This
4068 construct, known from C++, was introduced with ISO C99 and is by default
4069 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
4070 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
4072 @item -Wundef
4073 @opindex Wundef
4074 @opindex Wno-undef
4075 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
4077 @item -Wno-endif-labels
4078 @opindex Wno-endif-labels
4079 @opindex Wendif-labels
4080 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
4082 @item -Wshadow
4083 @opindex Wshadow
4084 @opindex Wno-shadow
4085 Warn whenever a local variable or type declaration shadows another variable,
4086 parameter, type, or class member (in C++), or whenever a built-in function
4087 is shadowed. Note that in C++, the compiler warns if a local variable
4088 shadows an explicit typedef, but not if it shadows a struct/class/enum.
4090 @item -Wlarger-than=@var{len}
4091 @opindex Wlarger-than=@var{len}
4092 @opindex Wlarger-than-@var{len}
4093 Warn whenever an object of larger than @var{len} bytes is defined.
4095 @item -Wframe-larger-than=@var{len}
4096 @opindex Wframe-larger-than
4097 Warn if the size of a function frame is larger than @var{len} bytes.
4098 The computation done to determine the stack frame size is approximate
4099 and not conservative.
4100 The actual requirements may be somewhat greater than @var{len}
4101 even if you do not get a warning.  In addition, any space allocated
4102 via @code{alloca}, variable-length arrays, or related constructs
4103 is not included by the compiler when determining
4104 whether or not to issue a warning.
4106 @item -Wno-free-nonheap-object
4107 @opindex Wno-free-nonheap-object
4108 @opindex Wfree-nonheap-object
4109 Do not warn when attempting to free an object that was not allocated
4110 on the heap.
4112 @item -Wstack-usage=@var{len}
4113 @opindex Wstack-usage
4114 Warn if the stack usage of a function might be larger than @var{len} bytes.
4115 The computation done to determine the stack usage is conservative.
4116 Any space allocated via @code{alloca}, variable-length arrays, or related
4117 constructs is included by the compiler when determining whether or not to
4118 issue a warning.
4120 The message is in keeping with the output of @option{-fstack-usage}.
4122 @itemize
4123 @item
4124 If the stack usage is fully static but exceeds the specified amount, it's:
4126 @smallexample
4127   warning: stack usage is 1120 bytes
4128 @end smallexample
4129 @item
4130 If the stack usage is (partly) dynamic but bounded, it's:
4132 @smallexample
4133   warning: stack usage might be 1648 bytes
4134 @end smallexample
4135 @item
4136 If the stack usage is (partly) dynamic and not bounded, it's:
4138 @smallexample
4139   warning: stack usage might be unbounded
4140 @end smallexample
4141 @end itemize
4143 @item -Wunsafe-loop-optimizations
4144 @opindex Wunsafe-loop-optimizations
4145 @opindex Wno-unsafe-loop-optimizations
4146 Warn if the loop cannot be optimized because the compiler cannot
4147 assume anything on the bounds of the loop indices.  With
4148 @option{-funsafe-loop-optimizations} warn if the compiler makes
4149 such assumptions.
4151 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
4152 @opindex Wno-pedantic-ms-format
4153 @opindex Wpedantic-ms-format
4154 Disables the warnings about non-ISO @code{printf} / @code{scanf} format
4155 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets
4156 depending on the MS runtime, when you are using the options @option{-Wformat}
4157 and @option{-Wpedantic} without gnu-extensions.
4159 @item -Wpointer-arith
4160 @opindex Wpointer-arith
4161 @opindex Wno-pointer-arith
4162 Warn about anything that depends on the ``size of'' a function type or
4163 of @code{void}.  GNU C assigns these types a size of 1, for
4164 convenience in calculations with @code{void *} pointers and pointers
4165 to functions.  In C++, warn also when an arithmetic operation involves
4166 @code{NULL}.  This warning is also enabled by @option{-Wpedantic}.
4168 @item -Wtype-limits
4169 @opindex Wtype-limits
4170 @opindex Wno-type-limits
4171 Warn if a comparison is always true or always false due to the limited
4172 range of the data type, but do not warn for constant expressions.  For
4173 example, warn if an unsigned variable is compared against zero with
4174 @samp{<} or @samp{>=}.  This warning is also enabled by
4175 @option{-Wextra}.
4177 @item -Wbad-function-cast @r{(C and Objective-C only)}
4178 @opindex Wbad-function-cast
4179 @opindex Wno-bad-function-cast
4180 Warn whenever a function call is cast to a non-matching type.
4181 For example, warn if @code{int malloc()} is cast to @code{anything *}.
4183 @item -Wc++-compat @r{(C and Objective-C only)}
4184 Warn about ISO C constructs that are outside of the common subset of
4185 ISO C and ISO C++, e.g.@: request for implicit conversion from
4186 @code{void *} to a pointer to non-@code{void} type.
4188 @item -Wc++11-compat @r{(C++ and Objective-C++ only)}
4189 Warn about C++ constructs whose meaning differs between ISO C++ 1998
4190 and ISO C++ 2011, e.g., identifiers in ISO C++ 1998 that are keywords
4191 in ISO C++ 2011.  This warning turns on @option{-Wnarrowing} and is
4192 enabled by @option{-Wall}.
4194 @item -Wcast-qual
4195 @opindex Wcast-qual
4196 @opindex Wno-cast-qual
4197 Warn whenever a pointer is cast so as to remove a type qualifier from
4198 the target type.  For example, warn if a @code{const char *} is cast
4199 to an ordinary @code{char *}.
4201 Also warn when making a cast that introduces a type qualifier in an
4202 unsafe way.  For example, casting @code{char **} to @code{const char **}
4203 is unsafe, as in this example:
4205 @smallexample
4206   /* p is char ** value.  */
4207   const char **q = (const char **) p;
4208   /* Assignment of readonly string to const char * is OK.  */
4209   *q = "string";
4210   /* Now char** pointer points to read-only memory.  */
4211   **p = 'b';
4212 @end smallexample
4214 @item -Wcast-align
4215 @opindex Wcast-align
4216 @opindex Wno-cast-align
4217 Warn whenever a pointer is cast such that the required alignment of the
4218 target is increased.  For example, warn if a @code{char *} is cast to
4219 an @code{int *} on machines where integers can only be accessed at
4220 two- or four-byte boundaries.
4222 @item -Wwrite-strings
4223 @opindex Wwrite-strings
4224 @opindex Wno-write-strings
4225 When compiling C, give string constants the type @code{const
4226 char[@var{length}]} so that copying the address of one into a
4227 non-@code{const} @code{char *} pointer produces a warning.  These
4228 warnings help you find at compile time code that can try to write
4229 into a string constant, but only if you have been very careful about
4230 using @code{const} in declarations and prototypes.  Otherwise, it is
4231 just a nuisance. This is why we did not make @option{-Wall} request
4232 these warnings.
4234 When compiling C++, warn about the deprecated conversion from string
4235 literals to @code{char *}.  This warning is enabled by default for C++
4236 programs.
4238 @item -Wclobbered
4239 @opindex Wclobbered
4240 @opindex Wno-clobbered
4241 Warn for variables that might be changed by @samp{longjmp} or
4242 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
4244 @item -Wconversion
4245 @opindex Wconversion
4246 @opindex Wno-conversion
4247 Warn for implicit conversions that may alter a value. This includes
4248 conversions between real and integer, like @code{abs (x)} when
4249 @code{x} is @code{double}; conversions between signed and unsigned,
4250 like @code{unsigned ui = -1}; and conversions to smaller types, like
4251 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
4252 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
4253 changed by the conversion like in @code{abs (2.0)}.  Warnings about
4254 conversions between signed and unsigned integers can be disabled by
4255 using @option{-Wno-sign-conversion}.
4257 For C++, also warn for confusing overload resolution for user-defined
4258 conversions; and conversions that never use a type conversion
4259 operator: conversions to @code{void}, the same type, a base class or a
4260 reference to them. Warnings about conversions between signed and
4261 unsigned integers are disabled by default in C++ unless
4262 @option{-Wsign-conversion} is explicitly enabled.
4264 @item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
4265 @opindex Wconversion-null
4266 @opindex Wno-conversion-null
4267 Do not warn for conversions between @code{NULL} and non-pointer
4268 types. @option{-Wconversion-null} is enabled by default.
4270 @item -Wzero-as-null-pointer-constant @r{(C++ and Objective-C++ only)}
4271 @opindex Wzero-as-null-pointer-constant
4272 @opindex Wno-zero-as-null-pointer-constant
4273 Warn when a literal '0' is used as null pointer constant.  This can
4274 be useful to facilitate the conversion to @code{nullptr} in C++11.
4276 @item -Wuseless-cast @r{(C++ and Objective-C++ only)}
4277 @opindex Wuseless-cast
4278 @opindex Wno-useless-cast
4279 Warn when an expression is casted to its own type.
4281 @item -Wempty-body
4282 @opindex Wempty-body
4283 @opindex Wno-empty-body
4284 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
4285 while} statement.  This warning is also enabled by @option{-Wextra}.
4287 @item -Wenum-compare
4288 @opindex Wenum-compare
4289 @opindex Wno-enum-compare
4290 Warn about a comparison between values of different enumerated types.
4291 In C++ enumeral mismatches in conditional expressions are also
4292 diagnosed and the warning is enabled by default.  In C this warning is 
4293 enabled by @option{-Wall}.
4295 @item -Wjump-misses-init @r{(C, Objective-C only)}
4296 @opindex Wjump-misses-init
4297 @opindex Wno-jump-misses-init
4298 Warn if a @code{goto} statement or a @code{switch} statement jumps
4299 forward across the initialization of a variable, or jumps backward to a
4300 label after the variable has been initialized.  This only warns about
4301 variables that are initialized when they are declared.  This warning is
4302 only supported for C and Objective-C; in C++ this sort of branch is an
4303 error in any case.
4305 @option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
4306 can be disabled with the @option{-Wno-jump-misses-init} option.
4308 @item -Wsign-compare
4309 @opindex Wsign-compare
4310 @opindex Wno-sign-compare
4311 @cindex warning for comparison of signed and unsigned values
4312 @cindex comparison of signed and unsigned values, warning
4313 @cindex signed and unsigned values, comparison warning
4314 Warn when a comparison between signed and unsigned values could produce
4315 an incorrect result when the signed value is converted to unsigned.
4316 This warning is also enabled by @option{-Wextra}; to get the other warnings
4317 of @option{-Wextra} without this warning, use @option{-Wextra -Wno-sign-compare}.
4319 @item -Wsign-conversion
4320 @opindex Wsign-conversion
4321 @opindex Wno-sign-conversion
4322 Warn for implicit conversions that may change the sign of an integer
4323 value, like assigning a signed integer expression to an unsigned
4324 integer variable. An explicit cast silences the warning. In C, this
4325 option is enabled also by @option{-Wconversion}.
4327 @item -Waddress
4328 @opindex Waddress
4329 @opindex Wno-address
4330 Warn about suspicious uses of memory addresses. These include using
4331 the address of a function in a conditional expression, such as
4332 @code{void func(void); if (func)}, and comparisons against the memory
4333 address of a string literal, such as @code{if (x == "abc")}.  Such
4334 uses typically indicate a programmer error: the address of a function
4335 always evaluates to true, so their use in a conditional usually
4336 indicate that the programmer forgot the parentheses in a function
4337 call; and comparisons against string literals result in unspecified
4338 behavior and are not portable in C, so they usually indicate that the
4339 programmer intended to use @code{strcmp}.  This warning is enabled by
4340 @option{-Wall}.
4342 @item -Wlogical-op
4343 @opindex Wlogical-op
4344 @opindex Wno-logical-op
4345 Warn about suspicious uses of logical operators in expressions.
4346 This includes using logical operators in contexts where a
4347 bit-wise operator is likely to be expected.
4349 @item -Waggregate-return
4350 @opindex Waggregate-return
4351 @opindex Wno-aggregate-return
4352 Warn if any functions that return structures or unions are defined or
4353 called.  (In languages where you can return an array, this also elicits
4354 a warning.)
4356 @item -Wno-attributes
4357 @opindex Wno-attributes
4358 @opindex Wattributes
4359 Do not warn if an unexpected @code{__attribute__} is used, such as
4360 unrecognized attributes, function attributes applied to variables,
4361 etc.  This does not stop errors for incorrect use of supported
4362 attributes.
4364 @item -Wno-builtin-macro-redefined
4365 @opindex Wno-builtin-macro-redefined
4366 @opindex Wbuiltin-macro-redefined
4367 Do not warn if certain built-in macros are redefined.  This suppresses
4368 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
4369 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
4371 @item -Wstrict-prototypes @r{(C and Objective-C only)}
4372 @opindex Wstrict-prototypes
4373 @opindex Wno-strict-prototypes
4374 Warn if a function is declared or defined without specifying the
4375 argument types.  (An old-style function definition is permitted without
4376 a warning if preceded by a declaration that specifies the argument
4377 types.)
4379 @item -Wold-style-declaration @r{(C and Objective-C only)}
4380 @opindex Wold-style-declaration
4381 @opindex Wno-old-style-declaration
4382 Warn for obsolescent usages, according to the C Standard, in a
4383 declaration. For example, warn if storage-class specifiers like
4384 @code{static} are not the first things in a declaration.  This warning
4385 is also enabled by @option{-Wextra}.
4387 @item -Wold-style-definition @r{(C and Objective-C only)}
4388 @opindex Wold-style-definition
4389 @opindex Wno-old-style-definition
4390 Warn if an old-style function definition is used.  A warning is given
4391 even if there is a previous prototype.
4393 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
4394 @opindex Wmissing-parameter-type
4395 @opindex Wno-missing-parameter-type
4396 A function parameter is declared without a type specifier in K&R-style
4397 functions:
4399 @smallexample
4400 void foo(bar) @{ @}
4401 @end smallexample
4403 This warning is also enabled by @option{-Wextra}.
4405 @item -Wmissing-prototypes @r{(C and Objective-C only)}
4406 @opindex Wmissing-prototypes
4407 @opindex Wno-missing-prototypes
4408 Warn if a global function is defined without a previous prototype
4409 declaration.  This warning is issued even if the definition itself
4410 provides a prototype.  Use this option to detect global functions
4411 that do not have a matching prototype declaration in a header file.
4412 This option is not valid for C++ because all function declarations
4413 provide prototypes and a non-matching declaration will declare an
4414 overload rather than conflict with an earlier declaration.
4415 Use @option{-Wmissing-declarations} to detect missing declarations in C++.
4417 @item -Wmissing-declarations
4418 @opindex Wmissing-declarations
4419 @opindex Wno-missing-declarations
4420 Warn if a global function is defined without a previous declaration.
4421 Do so even if the definition itself provides a prototype.
4422 Use this option to detect global functions that are not declared in
4423 header files.  In C, no warnings are issued for functions with previous
4424 non-prototype declarations; use @option{-Wmissing-prototype} to detect
4425 missing prototypes.  In C++, no warnings are issued for function templates,
4426 or for inline functions, or for functions in anonymous namespaces.
4428 @item -Wmissing-field-initializers
4429 @opindex Wmissing-field-initializers
4430 @opindex Wno-missing-field-initializers
4431 @opindex W
4432 @opindex Wextra
4433 @opindex Wno-extra
4434 Warn if a structure's initializer has some fields missing.  For
4435 example, the following code causes such a warning, because
4436 @code{x.h} is implicitly zero:
4438 @smallexample
4439 struct s @{ int f, g, h; @};
4440 struct s x = @{ 3, 4 @};
4441 @end smallexample
4443 This option does not warn about designated initializers, so the following
4444 modification does not trigger a warning:
4446 @smallexample
4447 struct s @{ int f, g, h; @};
4448 struct s x = @{ .f = 3, .g = 4 @};
4449 @end smallexample
4451 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
4452 warnings without this one, use @option{-Wextra -Wno-missing-field-initializers}.
4454 @item -Wno-multichar
4455 @opindex Wno-multichar
4456 @opindex Wmultichar
4457 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
4458 Usually they indicate a typo in the user's code, as they have
4459 implementation-defined values, and should not be used in portable code.
4461 @item -Wnormalized=<none|id|nfc|nfkc>
4462 @opindex Wnormalized=
4463 @cindex NFC
4464 @cindex NFKC
4465 @cindex character set, input normalization
4466 In ISO C and ISO C++, two identifiers are different if they are
4467 different sequences of characters.  However, sometimes when characters
4468 outside the basic ASCII character set are used, you can have two
4469 different character sequences that look the same.  To avoid confusion,
4470 the ISO 10646 standard sets out some @dfn{normalization rules} which
4471 when applied ensure that two sequences that look the same are turned into
4472 the same sequence.  GCC can warn you if you are using identifiers that
4473 have not been normalized; this option controls that warning.
4475 There are four levels of warning supported by GCC@.  The default is
4476 @option{-Wnormalized=nfc}, which warns about any identifier that is
4477 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
4478 recommended form for most uses.
4480 Unfortunately, there are some characters allowed in identifiers by
4481 ISO C and ISO C++ that, when turned into NFC, are not allowed in 
4482 identifiers.  That is, there's no way to use these symbols in portable
4483 ISO C or C++ and have all your identifiers in NFC@.
4484 @option{-Wnormalized=id} suppresses the warning for these characters.
4485 It is hoped that future versions of the standards involved will correct
4486 this, which is why this option is not the default.
4488 You can switch the warning off for all characters by writing
4489 @option{-Wnormalized=none}.  You should only do this if you
4490 are using some other normalization scheme (like ``D''), because
4491 otherwise you can easily create bugs that are literally impossible to see.
4493 Some characters in ISO 10646 have distinct meanings but look identical
4494 in some fonts or display methodologies, especially once formatting has
4495 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
4496 LETTER N'', displays just like a regular @code{n} that has been
4497 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
4498 normalization scheme to convert all these into a standard form as
4499 well, and GCC warns if your code is not in NFKC if you use
4500 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
4501 about every identifier that contains the letter O because it might be
4502 confused with the digit 0, and so is not the default, but may be
4503 useful as a local coding convention if the programming environment 
4504 cannot be fixed to display these characters distinctly.
4506 @item -Wno-deprecated
4507 @opindex Wno-deprecated
4508 @opindex Wdeprecated
4509 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
4511 @item -Wno-deprecated-declarations
4512 @opindex Wno-deprecated-declarations
4513 @opindex Wdeprecated-declarations
4514 Do not warn about uses of functions (@pxref{Function Attributes}),
4515 variables (@pxref{Variable Attributes}), and types (@pxref{Type
4516 Attributes}) marked as deprecated by using the @code{deprecated}
4517 attribute.
4519 @item -Wno-overflow
4520 @opindex Wno-overflow
4521 @opindex Woverflow
4522 Do not warn about compile-time overflow in constant expressions.
4524 @item -Woverride-init @r{(C and Objective-C only)}
4525 @opindex Woverride-init
4526 @opindex Wno-override-init
4527 @opindex W
4528 @opindex Wextra
4529 @opindex Wno-extra
4530 Warn if an initialized field without side effects is overridden when
4531 using designated initializers (@pxref{Designated Inits, , Designated
4532 Initializers}).
4534 This warning is included in @option{-Wextra}.  To get other
4535 @option{-Wextra} warnings without this one, use @option{-Wextra
4536 -Wno-override-init}.
4538 @item -Wpacked
4539 @opindex Wpacked
4540 @opindex Wno-packed
4541 Warn if a structure is given the packed attribute, but the packed
4542 attribute has no effect on the layout or size of the structure.
4543 Such structures may be mis-aligned for little benefit.  For
4544 instance, in this code, the variable @code{f.x} in @code{struct bar}
4545 is misaligned even though @code{struct bar} does not itself
4546 have the packed attribute:
4548 @smallexample
4549 @group
4550 struct foo @{
4551   int x;
4552   char a, b, c, d;
4553 @} __attribute__((packed));
4554 struct bar @{
4555   char z;
4556   struct foo f;
4558 @end group
4559 @end smallexample
4561 @item -Wpacked-bitfield-compat
4562 @opindex Wpacked-bitfield-compat
4563 @opindex Wno-packed-bitfield-compat
4564 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
4565 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
4566 the change can lead to differences in the structure layout.  GCC
4567 informs you when the offset of such a field has changed in GCC 4.4.
4568 For example there is no longer a 4-bit padding between field @code{a}
4569 and @code{b} in this structure:
4571 @smallexample
4572 struct foo
4574   char a:4;
4575   char b:8;
4576 @} __attribute__ ((packed));
4577 @end smallexample
4579 This warning is enabled by default.  Use
4580 @option{-Wno-packed-bitfield-compat} to disable this warning.
4582 @item -Wpadded
4583 @opindex Wpadded
4584 @opindex Wno-padded
4585 Warn if padding is included in a structure, either to align an element
4586 of the structure or to align the whole structure.  Sometimes when this
4587 happens it is possible to rearrange the fields of the structure to
4588 reduce the padding and so make the structure smaller.
4590 @item -Wredundant-decls
4591 @opindex Wredundant-decls
4592 @opindex Wno-redundant-decls
4593 Warn if anything is declared more than once in the same scope, even in
4594 cases where multiple declaration is valid and changes nothing.
4596 @item -Wnested-externs @r{(C and Objective-C only)}
4597 @opindex Wnested-externs
4598 @opindex Wno-nested-externs
4599 Warn if an @code{extern} declaration is encountered within a function.
4601 @item -Winline
4602 @opindex Winline
4603 @opindex Wno-inline
4604 Warn if a function that is declared as inline cannot be inlined.
4605 Even with this option, the compiler does not warn about failures to
4606 inline functions declared in system headers.
4608 The compiler uses a variety of heuristics to determine whether or not
4609 to inline a function.  For example, the compiler takes into account
4610 the size of the function being inlined and the amount of inlining
4611 that has already been done in the current function.  Therefore,
4612 seemingly insignificant changes in the source program can cause the
4613 warnings produced by @option{-Winline} to appear or disappear.
4615 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
4616 @opindex Wno-invalid-offsetof
4617 @opindex Winvalid-offsetof
4618 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
4619 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
4620 to a non-POD type is undefined.  In existing C++ implementations,
4621 however, @samp{offsetof} typically gives meaningful results even when
4622 applied to certain kinds of non-POD types. (Such as a simple
4623 @samp{struct} that fails to be a POD type only by virtue of having a
4624 constructor.)  This flag is for users who are aware that they are
4625 writing nonportable code and who have deliberately chosen to ignore the
4626 warning about it.
4628 The restrictions on @samp{offsetof} may be relaxed in a future version
4629 of the C++ standard.
4631 @item -Wno-int-to-pointer-cast
4632 @opindex Wno-int-to-pointer-cast
4633 @opindex Wint-to-pointer-cast
4634 Suppress warnings from casts to pointer type of an integer of a
4635 different size. In C++, casting to a pointer type of smaller size is
4636 an error. @option{Wint-to-pointer-cast} is enabled by default.
4639 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
4640 @opindex Wno-pointer-to-int-cast
4641 @opindex Wpointer-to-int-cast
4642 Suppress warnings from casts from a pointer to an integer type of a
4643 different size.
4645 @item -Winvalid-pch
4646 @opindex Winvalid-pch
4647 @opindex Wno-invalid-pch
4648 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
4649 the search path but can't be used.
4651 @item -Wlong-long
4652 @opindex Wlong-long
4653 @opindex Wno-long-long
4654 Warn if @samp{long long} type is used.  This is enabled by either
4655 @option{-Wpedantic} or @option{-Wtraditional} in ISO C90 and C++98
4656 modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
4658 @item -Wvariadic-macros
4659 @opindex Wvariadic-macros
4660 @opindex Wno-variadic-macros
4661 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
4662 alternate syntax when in pedantic ISO C99 mode.  This is default.
4663 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
4665 @item -Wvarargs
4666 @opindex Wvarargs
4667 @opindex Wno-varargs
4668 Warn upon questionable usage of the macros used to handle variable
4669 arguments like @samp{va_start}.  This is default.  To inhibit the
4670 warning messages, use @option{-Wno-varargs}.
4672 @item -Wvector-operation-performance
4673 @opindex Wvector-operation-performance
4674 @opindex Wno-vector-operation-performance
4675 Warn if vector operation is not implemented via SIMD capabilities of the
4676 architecture.  Mainly useful for the performance tuning.
4677 Vector operation can be implemented @code{piecewise}, which means that the
4678 scalar operation is performed on every vector element; 
4679 @code{in parallel}, which means that the vector operation is implemented
4680 using scalars of wider type, which normally is more performance efficient;
4681 and @code{as a single scalar}, which means that vector fits into a
4682 scalar type.
4684 @item -Wvla
4685 @opindex Wvla
4686 @opindex Wno-vla
4687 Warn if variable length array is used in the code.
4688 @option{-Wno-vla} prevents the @option{-Wpedantic} warning of
4689 the variable length array.
4691 @item -Wvolatile-register-var
4692 @opindex Wvolatile-register-var
4693 @opindex Wno-volatile-register-var
4694 Warn if a register variable is declared volatile.  The volatile
4695 modifier does not inhibit all optimizations that may eliminate reads
4696 and/or writes to register variables.  This warning is enabled by
4697 @option{-Wall}.
4699 @item -Wdisabled-optimization
4700 @opindex Wdisabled-optimization
4701 @opindex Wno-disabled-optimization
4702 Warn if a requested optimization pass is disabled.  This warning does
4703 not generally indicate that there is anything wrong with your code; it
4704 merely indicates that GCC's optimizers are unable to handle the code
4705 effectively.  Often, the problem is that your code is too big or too
4706 complex; GCC refuses to optimize programs when the optimization
4707 itself is likely to take inordinate amounts of time.
4709 @item -Wpointer-sign @r{(C and Objective-C only)}
4710 @opindex Wpointer-sign
4711 @opindex Wno-pointer-sign
4712 Warn for pointer argument passing or assignment with different signedness.
4713 This option is only supported for C and Objective-C@.  It is implied by
4714 @option{-Wall} and by @option{-Wpedantic}, which can be disabled with
4715 @option{-Wno-pointer-sign}.
4717 @item -Wstack-protector
4718 @opindex Wstack-protector
4719 @opindex Wno-stack-protector
4720 This option is only active when @option{-fstack-protector} is active.  It
4721 warns about functions that are not protected against stack smashing.
4723 @item -Wno-mudflap
4724 @opindex Wno-mudflap
4725 Suppress warnings about constructs that cannot be instrumented by
4726 @option{-fmudflap}.
4728 @item -Woverlength-strings
4729 @opindex Woverlength-strings
4730 @opindex Wno-overlength-strings
4731 Warn about string constants that are longer than the ``minimum
4732 maximum'' length specified in the C standard.  Modern compilers
4733 generally allow string constants that are much longer than the
4734 standard's minimum limit, but very portable programs should avoid
4735 using longer strings.
4737 The limit applies @emph{after} string constant concatenation, and does
4738 not count the trailing NUL@.  In C90, the limit was 509 characters; in
4739 C99, it was raised to 4095.  C++98 does not specify a normative
4740 minimum maximum, so we do not diagnose overlength strings in C++@.
4742 This option is implied by @option{-Wpedantic}, and can be disabled with
4743 @option{-Wno-overlength-strings}.
4745 @item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
4746 @opindex Wunsuffixed-float-constants
4748 Issue a warning for any floating constant that does not have
4749 a suffix.  When used together with @option{-Wsystem-headers} it
4750 warns about such constants in system header files.  This can be useful
4751 when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
4752 from the decimal floating-point extension to C99.
4753 @end table
4755 @node Debugging Options
4756 @section Options for Debugging Your Program or GCC
4757 @cindex options, debugging
4758 @cindex debugging information options
4760 GCC has various special options that are used for debugging
4761 either your program or GCC:
4763 @table @gcctabopt
4764 @item -g
4765 @opindex g
4766 Produce debugging information in the operating system's native format
4767 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
4768 information.
4770 On most systems that use stabs format, @option{-g} enables use of extra
4771 debugging information that only GDB can use; this extra information
4772 makes debugging work better in GDB but probably makes other debuggers
4773 crash or
4774 refuse to read the program.  If you want to control for certain whether
4775 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
4776 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
4778 GCC allows you to use @option{-g} with
4779 @option{-O}.  The shortcuts taken by optimized code may occasionally
4780 produce surprising results: some variables you declared may not exist
4781 at all; flow of control may briefly move where you did not expect it;
4782 some statements may not be executed because they compute constant
4783 results or their values are already at hand; some statements may
4784 execute in different places because they have been moved out of loops.
4786 Nevertheless it proves possible to debug optimized output.  This makes
4787 it reasonable to use the optimizer for programs that might have bugs.
4789 The following options are useful when GCC is generated with the
4790 capability for more than one debugging format.
4792 @item -ggdb
4793 @opindex ggdb
4794 Produce debugging information for use by GDB@.  This means to use the
4795 most expressive format available (DWARF 2, stabs, or the native format
4796 if neither of those are supported), including GDB extensions if at all
4797 possible.
4799 @item -gpubnames
4800 @opindex gpubnames
4801 Generate dwarf .debug_pubnames and .debug_pubtypes sections.
4803 @item -gstabs
4804 @opindex gstabs
4805 Produce debugging information in stabs format (if that is supported),
4806 without GDB extensions.  This is the format used by DBX on most BSD
4807 systems.  On MIPS, Alpha and System V Release 4 systems this option
4808 produces stabs debugging output that is not understood by DBX or SDB@.
4809 On System V Release 4 systems this option requires the GNU assembler.
4811 @item -feliminate-unused-debug-symbols
4812 @opindex feliminate-unused-debug-symbols
4813 Produce debugging information in stabs format (if that is supported),
4814 for only symbols that are actually used.
4816 @item -femit-class-debug-always
4817 Instead of emitting debugging information for a C++ class in only one
4818 object file, emit it in all object files using the class.  This option
4819 should be used only with debuggers that are unable to handle the way GCC
4820 normally emits debugging information for classes because using this
4821 option increases the size of debugging information by as much as a
4822 factor of two.
4824 @item -fdebug-types-section
4825 @opindex fdebug-types-section
4826 @opindex fno-debug-types-section
4827 When using DWARF Version 4 or higher, type DIEs can be put into
4828 their own @code{.debug_types} section instead of making them part of the
4829 @code{.debug_info} section.  It is more efficient to put them in a separate
4830 comdat sections since the linker can then remove duplicates.
4831 But not all DWARF consumers support @code{.debug_types} sections yet
4832 and on some objects @code{.debug_types} produces larger instead of smaller
4833 debugging information.
4835 @item -gstabs+
4836 @opindex gstabs+
4837 Produce debugging information in stabs format (if that is supported),
4838 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4839 use of these extensions is likely to make other debuggers crash or
4840 refuse to read the program.
4842 @item -gcoff
4843 @opindex gcoff
4844 Produce debugging information in COFF format (if that is supported).
4845 This is the format used by SDB on most System V systems prior to
4846 System V Release 4.
4848 @item -gxcoff
4849 @opindex gxcoff
4850 Produce debugging information in XCOFF format (if that is supported).
4851 This is the format used by the DBX debugger on IBM RS/6000 systems.
4853 @item -gxcoff+
4854 @opindex gxcoff+
4855 Produce debugging information in XCOFF format (if that is supported),
4856 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4857 use of these extensions is likely to make other debuggers crash or
4858 refuse to read the program, and may cause assemblers other than the GNU
4859 assembler (GAS) to fail with an error.
4861 @item -gdwarf-@var{version}
4862 @opindex gdwarf-@var{version}
4863 Produce debugging information in DWARF format (if that is supported).
4864 The value of @var{version} may be either 2, 3 or 4; the default version
4865 for most targets is 4.
4867 Note that with DWARF Version 2, some ports require and always
4868 use some non-conflicting DWARF 3 extensions in the unwind tables.
4870 Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
4871 for maximum benefit.
4873 @item -grecord-gcc-switches
4874 @opindex grecord-gcc-switches
4875 This switch causes the command-line options used to invoke the
4876 compiler that may affect code generation to be appended to the
4877 DW_AT_producer attribute in DWARF debugging information.  The options
4878 are concatenated with spaces separating them from each other and from
4879 the compiler version.  See also @option{-frecord-gcc-switches} for another
4880 way of storing compiler options into the object file.  This is the default.
4882 @item -gno-record-gcc-switches
4883 @opindex gno-record-gcc-switches
4884 Disallow appending command-line options to the DW_AT_producer attribute
4885 in DWARF debugging information.
4887 @item -gstrict-dwarf
4888 @opindex gstrict-dwarf
4889 Disallow using extensions of later DWARF standard version than selected
4890 with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
4891 DWARF extensions from later standard versions is allowed.
4893 @item -gno-strict-dwarf
4894 @opindex gno-strict-dwarf
4895 Allow using extensions of later DWARF standard version than selected with
4896 @option{-gdwarf-@var{version}}.
4898 @item -gvms
4899 @opindex gvms
4900 Produce debugging information in Alpha/VMS debug format (if that is
4901 supported).  This is the format used by DEBUG on Alpha/VMS systems.
4903 @item -g@var{level}
4904 @itemx -ggdb@var{level}
4905 @itemx -gstabs@var{level}
4906 @itemx -gcoff@var{level}
4907 @itemx -gxcoff@var{level}
4908 @itemx -gvms@var{level}
4909 Request debugging information and also use @var{level} to specify how
4910 much information.  The default level is 2.
4912 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
4913 @option{-g}.
4915 Level 1 produces minimal information, enough for making backtraces in
4916 parts of the program that you don't plan to debug.  This includes
4917 descriptions of functions and external variables, but no information
4918 about local variables and no line numbers.
4920 Level 3 includes extra information, such as all the macro definitions
4921 present in the program.  Some debuggers support macro expansion when
4922 you use @option{-g3}.
4924 @option{-gdwarf-2} does not accept a concatenated debug level, because
4925 GCC used to support an option @option{-gdwarf} that meant to generate
4926 debug information in version 1 of the DWARF format (which is very
4927 different from version 2), and it would have been too confusing.  That
4928 debug format is long obsolete, but the option cannot be changed now.
4929 Instead use an additional @option{-g@var{level}} option to change the
4930 debug level for DWARF.
4932 @item -gtoggle
4933 @opindex gtoggle
4934 Turn off generation of debug info, if leaving out this option
4935 generates it, or turn it on at level 2 otherwise.  The position of this
4936 argument in the command line does not matter; it takes effect after all
4937 other options are processed, and it does so only once, no matter how
4938 many times it is given.  This is mainly intended to be used with
4939 @option{-fcompare-debug}.
4941 @item -fdump-final-insns@r{[}=@var{file}@r{]}
4942 @opindex fdump-final-insns
4943 Dump the final internal representation (RTL) to @var{file}.  If the
4944 optional argument is omitted (or if @var{file} is @code{.}), the name
4945 of the dump file is determined by appending @code{.gkd} to the
4946 compilation output file name.
4948 @item -fcompare-debug@r{[}=@var{opts}@r{]}
4949 @opindex fcompare-debug
4950 @opindex fno-compare-debug
4951 If no error occurs during compilation, run the compiler a second time,
4952 adding @var{opts} and @option{-fcompare-debug-second} to the arguments
4953 passed to the second compilation.  Dump the final internal
4954 representation in both compilations, and print an error if they differ.
4956 If the equal sign is omitted, the default @option{-gtoggle} is used.
4958 The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
4959 and nonzero, implicitly enables @option{-fcompare-debug}.  If
4960 @env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
4961 then it is used for @var{opts}, otherwise the default @option{-gtoggle}
4962 is used.
4964 @option{-fcompare-debug=}, with the equal sign but without @var{opts},
4965 is equivalent to @option{-fno-compare-debug}, which disables the dumping
4966 of the final representation and the second compilation, preventing even
4967 @env{GCC_COMPARE_DEBUG} from taking effect.
4969 To verify full coverage during @option{-fcompare-debug} testing, set
4970 @env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden},
4971 which GCC rejects as an invalid option in any actual compilation
4972 (rather than preprocessing, assembly or linking).  To get just a
4973 warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
4974 not overridden} will do.
4976 @item -fcompare-debug-second
4977 @opindex fcompare-debug-second
4978 This option is implicitly passed to the compiler for the second
4979 compilation requested by @option{-fcompare-debug}, along with options to
4980 silence warnings, and omitting other options that would cause
4981 side-effect compiler outputs to files or to the standard output.  Dump
4982 files and preserved temporary files are renamed so as to contain the
4983 @code{.gk} additional extension during the second compilation, to avoid
4984 overwriting those generated by the first.
4986 When this option is passed to the compiler driver, it causes the
4987 @emph{first} compilation to be skipped, which makes it useful for little
4988 other than debugging the compiler proper.
4990 @item -feliminate-dwarf2-dups
4991 @opindex feliminate-dwarf2-dups
4992 Compress DWARF 2 debugging information by eliminating duplicated
4993 information about each symbol.  This option only makes sense when
4994 generating DWARF 2 debugging information with @option{-gdwarf-2}.
4996 @item -femit-struct-debug-baseonly
4997 Emit debug information for struct-like types
4998 only when the base name of the compilation source file
4999 matches the base name of file in which the struct is defined.
5001 This option substantially reduces the size of debugging information,
5002 but at significant potential loss in type information to the debugger.
5003 See @option{-femit-struct-debug-reduced} for a less aggressive option.
5004 See @option{-femit-struct-debug-detailed} for more detailed control.
5006 This option works only with DWARF 2.
5008 @item -femit-struct-debug-reduced
5009 Emit debug information for struct-like types
5010 only when the base name of the compilation source file
5011 matches the base name of file in which the type is defined,
5012 unless the struct is a template or defined in a system header.
5014 This option significantly reduces the size of debugging information,
5015 with some potential loss in type information to the debugger.
5016 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
5017 See @option{-femit-struct-debug-detailed} for more detailed control.
5019 This option works only with DWARF 2.
5021 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
5022 Specify the struct-like types
5023 for which the compiler generates debug information.
5024 The intent is to reduce duplicate struct debug information
5025 between different object files within the same program.
5027 This option is a detailed version of
5028 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
5029 which serves for most needs.
5031 A specification has the syntax@*
5032 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
5034 The optional first word limits the specification to
5035 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
5036 A struct type is used directly when it is the type of a variable, member.
5037 Indirect uses arise through pointers to structs.
5038 That is, when use of an incomplete struct is valid, the use is indirect.
5039 An example is
5040 @samp{struct one direct; struct two * indirect;}.
5042 The optional second word limits the specification to
5043 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
5044 Generic structs are a bit complicated to explain.
5045 For C++, these are non-explicit specializations of template classes,
5046 or non-template classes within the above.
5047 Other programming languages have generics,
5048 but @option{-femit-struct-debug-detailed} does not yet implement them.
5050 The third word specifies the source files for those
5051 structs for which the compiler should emit debug information.
5052 The values @samp{none} and @samp{any} have the normal meaning.
5053 The value @samp{base} means that
5054 the base of name of the file in which the type declaration appears
5055 must match the base of the name of the main compilation file.
5056 In practice, this means that when compiling @file{foo.c}, debug information
5057 is generated for types declared in that file and @file{foo.h},
5058 but not other header files.
5059 The value @samp{sys} means those types satisfying @samp{base}
5060 or declared in system or compiler headers.
5062 You may need to experiment to determine the best settings for your application.
5064 The default is @option{-femit-struct-debug-detailed=all}.
5066 This option works only with DWARF 2.
5068 @item -fno-merge-debug-strings
5069 @opindex fmerge-debug-strings
5070 @opindex fno-merge-debug-strings
5071 Direct the linker to not merge together strings in the debugging
5072 information that are identical in different object files.  Merging is
5073 not supported by all assemblers or linkers.  Merging decreases the size
5074 of the debug information in the output file at the cost of increasing
5075 link processing time.  Merging is enabled by default.
5077 @item -fdebug-prefix-map=@var{old}=@var{new}
5078 @opindex fdebug-prefix-map
5079 When compiling files in directory @file{@var{old}}, record debugging
5080 information describing them as in @file{@var{new}} instead.
5082 @item -fno-dwarf2-cfi-asm
5083 @opindex fdwarf2-cfi-asm
5084 @opindex fno-dwarf2-cfi-asm
5085 Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
5086 instead of using GAS @code{.cfi_*} directives.
5088 @cindex @command{prof}
5089 @item -p
5090 @opindex p
5091 Generate extra code to write profile information suitable for the
5092 analysis program @command{prof}.  You must use this option when compiling
5093 the source files you want data about, and you must also use it when
5094 linking.
5096 @cindex @command{gprof}
5097 @item -pg
5098 @opindex pg
5099 Generate extra code to write profile information suitable for the
5100 analysis program @command{gprof}.  You must use this option when compiling
5101 the source files you want data about, and you must also use it when
5102 linking.
5104 @item -Q
5105 @opindex Q
5106 Makes the compiler print out each function name as it is compiled, and
5107 print some statistics about each pass when it finishes.
5109 @item -ftime-report
5110 @opindex ftime-report
5111 Makes the compiler print some statistics about the time consumed by each
5112 pass when it finishes.
5114 @item -fmem-report
5115 @opindex fmem-report
5116 Makes the compiler print some statistics about permanent memory
5117 allocation when it finishes.
5119 @item -fpre-ipa-mem-report
5120 @opindex fpre-ipa-mem-report
5121 @item -fpost-ipa-mem-report
5122 @opindex fpost-ipa-mem-report
5123 Makes the compiler print some statistics about permanent memory
5124 allocation before or after interprocedural optimization.
5126 @item -fstack-usage
5127 @opindex fstack-usage
5128 Makes the compiler output stack usage information for the program, on a
5129 per-function basis.  The filename for the dump is made by appending
5130 @file{.su} to the @var{auxname}.  @var{auxname} is generated from the name of
5131 the output file, if explicitly specified and it is not an executable,
5132 otherwise it is the basename of the source file.  An entry is made up
5133 of three fields:
5135 @itemize
5136 @item
5137 The name of the function.
5138 @item
5139 A number of bytes.
5140 @item
5141 One or more qualifiers: @code{static}, @code{dynamic}, @code{bounded}.
5142 @end itemize
5144 The qualifier @code{static} means that the function manipulates the stack
5145 statically: a fixed number of bytes are allocated for the frame on function
5146 entry and released on function exit; no stack adjustments are otherwise made
5147 in the function.  The second field is this fixed number of bytes.
5149 The qualifier @code{dynamic} means that the function manipulates the stack
5150 dynamically: in addition to the static allocation described above, stack
5151 adjustments are made in the body of the function, for example to push/pop
5152 arguments around function calls.  If the qualifier @code{bounded} is also
5153 present, the amount of these adjustments is bounded at compile time and
5154 the second field is an upper bound of the total amount of stack used by
5155 the function.  If it is not present, the amount of these adjustments is
5156 not bounded at compile time and the second field only represents the
5157 bounded part.
5159 @item -fprofile-arcs
5160 @opindex fprofile-arcs
5161 Add code so that program flow @dfn{arcs} are instrumented.  During
5162 execution the program records how many times each branch and call is
5163 executed and how many times it is taken or returns.  When the compiled
5164 program exits it saves this data to a file called
5165 @file{@var{auxname}.gcda} for each source file.  The data may be used for
5166 profile-directed optimizations (@option{-fbranch-probabilities}), or for
5167 test coverage analysis (@option{-ftest-coverage}).  Each object file's
5168 @var{auxname} is generated from the name of the output file, if
5169 explicitly specified and it is not the final executable, otherwise it is
5170 the basename of the source file.  In both cases any suffix is removed
5171 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
5172 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
5173 @xref{Cross-profiling}.
5175 @cindex @command{gcov}
5176 @item --coverage
5177 @opindex coverage
5179 This option is used to compile and link code instrumented for coverage
5180 analysis.  The option is a synonym for @option{-fprofile-arcs}
5181 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
5182 linking).  See the documentation for those options for more details.
5184 @itemize
5186 @item
5187 Compile the source files with @option{-fprofile-arcs} plus optimization
5188 and code generation options.  For test coverage analysis, use the
5189 additional @option{-ftest-coverage} option.  You do not need to profile
5190 every source file in a program.
5192 @item
5193 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
5194 (the latter implies the former).
5196 @item
5197 Run the program on a representative workload to generate the arc profile
5198 information.  This may be repeated any number of times.  You can run
5199 concurrent instances of your program, and provided that the file system
5200 supports locking, the data files will be correctly updated.  Also
5201 @code{fork} calls are detected and correctly handled (double counting
5202 will not happen).
5204 @item
5205 For profile-directed optimizations, compile the source files again with
5206 the same optimization and code generation options plus
5207 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
5208 Control Optimization}).
5210 @item
5211 For test coverage analysis, use @command{gcov} to produce human readable
5212 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
5213 @command{gcov} documentation for further information.
5215 @end itemize
5217 With @option{-fprofile-arcs}, for each function of your program GCC
5218 creates a program flow graph, then finds a spanning tree for the graph.
5219 Only arcs that are not on the spanning tree have to be instrumented: the
5220 compiler adds code to count the number of times that these arcs are
5221 executed.  When an arc is the only exit or only entrance to a block, the
5222 instrumentation code can be added to the block; otherwise, a new basic
5223 block must be created to hold the instrumentation code.
5225 @need 2000
5226 @item -ftest-coverage
5227 @opindex ftest-coverage
5228 Produce a notes file that the @command{gcov} code-coverage utility
5229 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
5230 show program coverage.  Each source file's note file is called
5231 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
5232 above for a description of @var{auxname} and instructions on how to
5233 generate test coverage data.  Coverage data matches the source files
5234 more closely if you do not optimize.
5236 @item -fdbg-cnt-list
5237 @opindex fdbg-cnt-list
5238 Print the name and the counter upper bound for all debug counters.
5241 @item -fdbg-cnt=@var{counter-value-list}
5242 @opindex fdbg-cnt
5243 Set the internal debug counter upper bound.  @var{counter-value-list}
5244 is a comma-separated list of @var{name}:@var{value} pairs
5245 which sets the upper bound of each debug counter @var{name} to @var{value}.
5246 All debug counters have the initial upper bound of @code{UINT_MAX};
5247 thus @code{dbg_cnt()} returns true always unless the upper bound
5248 is set by this option.
5249 For example, with @option{-fdbg-cnt=dce:10,tail_call:0},
5250 @code{dbg_cnt(dce)} returns true only for first 10 invocations.
5252 @itemx -fenable-@var{kind}-@var{pass}
5253 @itemx -fdisable-@var{kind}-@var{pass}=@var{range-list}
5254 @opindex fdisable-
5255 @opindex fenable-
5257 This is a set of options that are used to explicitly disable/enable
5258 optimization passes.  These options are intended for use for debugging GCC.
5259 Compiler users should use regular options for enabling/disabling
5260 passes instead.
5262 @table @gcctabopt
5264 @item -fdisable-ipa-@var{pass}
5265 Disable IPA pass @var{pass}. @var{pass} is the pass name.  If the same pass is
5266 statically invoked in the compiler multiple times, the pass name should be
5267 appended with a sequential number starting from 1.
5269 @item -fdisable-rtl-@var{pass}
5270 @itemx -fdisable-rtl-@var{pass}=@var{range-list}
5271 Disable RTL pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5272 statically invoked in the compiler multiple times, the pass name should be
5273 appended with a sequential number starting from 1.  @var{range-list} is a 
5274 comma-separated list of function ranges or assembler names.  Each range is a number
5275 pair separated by a colon.  The range is inclusive in both ends.  If the range
5276 is trivial, the number pair can be simplified as a single number.  If the
5277 function's cgraph node's @var{uid} falls within one of the specified ranges,
5278 the @var{pass} is disabled for that function.  The @var{uid} is shown in the
5279 function header of a dump file, and the pass names can be dumped by using
5280 option @option{-fdump-passes}.
5282 @item -fdisable-tree-@var{pass}
5283 @itemx -fdisable-tree-@var{pass}=@var{range-list}
5284 Disable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description of
5285 option arguments.
5287 @item -fenable-ipa-@var{pass}
5288 Enable IPA pass @var{pass}.  @var{pass} is the pass name.  If the same pass is
5289 statically invoked in the compiler multiple times, the pass name should be
5290 appended with a sequential number starting from 1.
5292 @item -fenable-rtl-@var{pass}
5293 @itemx -fenable-rtl-@var{pass}=@var{range-list}
5294 Enable RTL pass @var{pass}.  See @option{-fdisable-rtl} for option argument
5295 description and examples.
5297 @item -fenable-tree-@var{pass}
5298 @itemx -fenable-tree-@var{pass}=@var{range-list}
5299 Enable tree pass @var{pass}.  See @option{-fdisable-rtl} for the description
5300 of option arguments.
5302 @end table
5304 Here are some examples showing uses of these options.
5306 @smallexample
5308 # disable ccp1 for all functions
5309    -fdisable-tree-ccp1
5310 # disable complete unroll for function whose cgraph node uid is 1
5311    -fenable-tree-cunroll=1
5312 # disable gcse2 for functions at the following ranges [1,1],
5313 # [300,400], and [400,1000]
5314 # disable gcse2 for functions foo and foo2
5315    -fdisable-rtl-gcse2=foo,foo2
5316 # disable early inlining
5317    -fdisable-tree-einline
5318 # disable ipa inlining
5319    -fdisable-ipa-inline
5320 # enable tree full unroll
5321    -fenable-tree-unroll
5323 @end smallexample
5325 @item -d@var{letters}
5326 @itemx -fdump-rtl-@var{pass}
5327 @opindex d
5328 Says to make debugging dumps during compilation at times specified by
5329 @var{letters}.  This is used for debugging the RTL-based passes of the
5330 compiler.  The file names for most of the dumps are made by appending
5331 a pass number and a word to the @var{dumpname}, and the files are
5332 created in the directory of the output file.  Note that the pass
5333 number is computed statically as passes get registered into the pass
5334 manager.  Thus the numbering is not related to the dynamic order of
5335 execution of passes.  In particular, a pass installed by a plugin
5336 could have a number over 200 even if it executed quite early.
5337 @var{dumpname} is generated from the name of the output file, if
5338 explicitly specified and it is not an executable, otherwise it is the
5339 basename of the source file. These switches may have different effects
5340 when @option{-E} is used for preprocessing.
5342 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
5343 @option{-d} option @var{letters}.  Here are the possible
5344 letters for use in @var{pass} and @var{letters}, and their meanings:
5346 @table @gcctabopt
5348 @item -fdump-rtl-alignments
5349 @opindex fdump-rtl-alignments
5350 Dump after branch alignments have been computed.
5352 @item -fdump-rtl-asmcons
5353 @opindex fdump-rtl-asmcons
5354 Dump after fixing rtl statements that have unsatisfied in/out constraints.
5356 @item -fdump-rtl-auto_inc_dec
5357 @opindex fdump-rtl-auto_inc_dec
5358 Dump after auto-inc-dec discovery.  This pass is only run on
5359 architectures that have auto inc or auto dec instructions.
5361 @item -fdump-rtl-barriers
5362 @opindex fdump-rtl-barriers
5363 Dump after cleaning up the barrier instructions.
5365 @item -fdump-rtl-bbpart
5366 @opindex fdump-rtl-bbpart
5367 Dump after partitioning hot and cold basic blocks.
5369 @item -fdump-rtl-bbro
5370 @opindex fdump-rtl-bbro
5371 Dump after block reordering.
5373 @item -fdump-rtl-btl1
5374 @itemx -fdump-rtl-btl2
5375 @opindex fdump-rtl-btl2
5376 @opindex fdump-rtl-btl2
5377 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
5378 after the two branch
5379 target load optimization passes.
5381 @item -fdump-rtl-bypass
5382 @opindex fdump-rtl-bypass
5383 Dump after jump bypassing and control flow optimizations.
5385 @item -fdump-rtl-combine
5386 @opindex fdump-rtl-combine
5387 Dump after the RTL instruction combination pass.
5389 @item -fdump-rtl-compgotos
5390 @opindex fdump-rtl-compgotos
5391 Dump after duplicating the computed gotos.
5393 @item -fdump-rtl-ce1
5394 @itemx -fdump-rtl-ce2
5395 @itemx -fdump-rtl-ce3
5396 @opindex fdump-rtl-ce1
5397 @opindex fdump-rtl-ce2
5398 @opindex fdump-rtl-ce3
5399 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
5400 @option{-fdump-rtl-ce3} enable dumping after the three
5401 if conversion passes.
5403 @itemx -fdump-rtl-cprop_hardreg
5404 @opindex fdump-rtl-cprop_hardreg
5405 Dump after hard register copy propagation.
5407 @itemx -fdump-rtl-csa
5408 @opindex fdump-rtl-csa
5409 Dump after combining stack adjustments.
5411 @item -fdump-rtl-cse1
5412 @itemx -fdump-rtl-cse2
5413 @opindex fdump-rtl-cse1
5414 @opindex fdump-rtl-cse2
5415 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
5416 the two common sub-expression elimination passes.
5418 @itemx -fdump-rtl-dce
5419 @opindex fdump-rtl-dce
5420 Dump after the standalone dead code elimination passes.
5422 @itemx -fdump-rtl-dbr
5423 @opindex fdump-rtl-dbr
5424 Dump after delayed branch scheduling.
5426 @item -fdump-rtl-dce1
5427 @itemx -fdump-rtl-dce2
5428 @opindex fdump-rtl-dce1
5429 @opindex fdump-rtl-dce2
5430 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
5431 the two dead store elimination passes.
5433 @item -fdump-rtl-eh
5434 @opindex fdump-rtl-eh
5435 Dump after finalization of EH handling code.
5437 @item -fdump-rtl-eh_ranges
5438 @opindex fdump-rtl-eh_ranges
5439 Dump after conversion of EH handling range regions.
5441 @item -fdump-rtl-expand
5442 @opindex fdump-rtl-expand
5443 Dump after RTL generation.
5445 @item -fdump-rtl-fwprop1
5446 @itemx -fdump-rtl-fwprop2
5447 @opindex fdump-rtl-fwprop1
5448 @opindex fdump-rtl-fwprop2
5449 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
5450 dumping after the two forward propagation passes.
5452 @item -fdump-rtl-gcse1
5453 @itemx -fdump-rtl-gcse2
5454 @opindex fdump-rtl-gcse1
5455 @opindex fdump-rtl-gcse2
5456 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
5457 after global common subexpression elimination.
5459 @item -fdump-rtl-init-regs
5460 @opindex fdump-rtl-init-regs
5461 Dump after the initialization of the registers.
5463 @item -fdump-rtl-initvals
5464 @opindex fdump-rtl-initvals
5465 Dump after the computation of the initial value sets.
5467 @itemx -fdump-rtl-into_cfglayout
5468 @opindex fdump-rtl-into_cfglayout
5469 Dump after converting to cfglayout mode.
5471 @item -fdump-rtl-ira
5472 @opindex fdump-rtl-ira
5473 Dump after iterated register allocation.
5475 @item -fdump-rtl-jump
5476 @opindex fdump-rtl-jump
5477 Dump after the second jump optimization.
5479 @item -fdump-rtl-loop2
5480 @opindex fdump-rtl-loop2
5481 @option{-fdump-rtl-loop2} enables dumping after the rtl
5482 loop optimization passes.
5484 @item -fdump-rtl-mach
5485 @opindex fdump-rtl-mach
5486 Dump after performing the machine dependent reorganization pass, if that
5487 pass exists.
5489 @item -fdump-rtl-mode_sw
5490 @opindex fdump-rtl-mode_sw
5491 Dump after removing redundant mode switches.
5493 @item -fdump-rtl-rnreg
5494 @opindex fdump-rtl-rnreg
5495 Dump after register renumbering.
5497 @itemx -fdump-rtl-outof_cfglayout
5498 @opindex fdump-rtl-outof_cfglayout
5499 Dump after converting from cfglayout mode.
5501 @item -fdump-rtl-peephole2
5502 @opindex fdump-rtl-peephole2
5503 Dump after the peephole pass.
5505 @item -fdump-rtl-postreload
5506 @opindex fdump-rtl-postreload
5507 Dump after post-reload optimizations.
5509 @itemx -fdump-rtl-pro_and_epilogue
5510 @opindex fdump-rtl-pro_and_epilogue
5511 Dump after generating the function prologues and epilogues.
5513 @item -fdump-rtl-regmove
5514 @opindex fdump-rtl-regmove
5515 Dump after the register move pass.
5517 @item -fdump-rtl-sched1
5518 @itemx -fdump-rtl-sched2
5519 @opindex fdump-rtl-sched1
5520 @opindex fdump-rtl-sched2
5521 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
5522 after the basic block scheduling passes.
5524 @item -fdump-rtl-see
5525 @opindex fdump-rtl-see
5526 Dump after sign extension elimination.
5528 @item -fdump-rtl-seqabstr
5529 @opindex fdump-rtl-seqabstr
5530 Dump after common sequence discovery.
5532 @item -fdump-rtl-shorten
5533 @opindex fdump-rtl-shorten
5534 Dump after shortening branches.
5536 @item -fdump-rtl-sibling
5537 @opindex fdump-rtl-sibling
5538 Dump after sibling call optimizations.
5540 @item -fdump-rtl-split1
5541 @itemx -fdump-rtl-split2
5542 @itemx -fdump-rtl-split3
5543 @itemx -fdump-rtl-split4
5544 @itemx -fdump-rtl-split5
5545 @opindex fdump-rtl-split1
5546 @opindex fdump-rtl-split2
5547 @opindex fdump-rtl-split3
5548 @opindex fdump-rtl-split4
5549 @opindex fdump-rtl-split5
5550 @option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
5551 @option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
5552 @option{-fdump-rtl-split5} enable dumping after five rounds of
5553 instruction splitting.
5555 @item -fdump-rtl-sms
5556 @opindex fdump-rtl-sms
5557 Dump after modulo scheduling.  This pass is only run on some
5558 architectures.
5560 @item -fdump-rtl-stack
5561 @opindex fdump-rtl-stack
5562 Dump after conversion from GCC's ``flat register file'' registers to the
5563 x87's stack-like registers.  This pass is only run on x86 variants.
5565 @item -fdump-rtl-subreg1
5566 @itemx -fdump-rtl-subreg2
5567 @opindex fdump-rtl-subreg1
5568 @opindex fdump-rtl-subreg2
5569 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
5570 the two subreg expansion passes.
5572 @item -fdump-rtl-unshare
5573 @opindex fdump-rtl-unshare
5574 Dump after all rtl has been unshared.
5576 @item -fdump-rtl-vartrack
5577 @opindex fdump-rtl-vartrack
5578 Dump after variable tracking.
5580 @item -fdump-rtl-vregs
5581 @opindex fdump-rtl-vregs
5582 Dump after converting virtual registers to hard registers.
5584 @item -fdump-rtl-web
5585 @opindex fdump-rtl-web
5586 Dump after live range splitting.
5588 @item -fdump-rtl-regclass
5589 @itemx -fdump-rtl-subregs_of_mode_init
5590 @itemx -fdump-rtl-subregs_of_mode_finish
5591 @itemx -fdump-rtl-dfinit
5592 @itemx -fdump-rtl-dfinish
5593 @opindex fdump-rtl-regclass
5594 @opindex fdump-rtl-subregs_of_mode_init
5595 @opindex fdump-rtl-subregs_of_mode_finish
5596 @opindex fdump-rtl-dfinit
5597 @opindex fdump-rtl-dfinish
5598 These dumps are defined but always produce empty files.
5600 @item -fdump-rtl-all
5601 @opindex fdump-rtl-all
5602 Produce all the dumps listed above.
5604 @item -dA
5605 @opindex dA
5606 Annotate the assembler output with miscellaneous debugging information.
5608 @item -dD
5609 @opindex dD
5610 Dump all macro definitions, at the end of preprocessing, in addition to
5611 normal output.
5613 @item -dH
5614 @opindex dH
5615 Produce a core dump whenever an error occurs.
5617 @item -dm
5618 @opindex dm
5619 Print statistics on memory usage, at the end of the run, to
5620 standard error.
5622 @item -dp
5623 @opindex dp
5624 Annotate the assembler output with a comment indicating which
5625 pattern and alternative is used.  The length of each instruction is
5626 also printed.
5628 @item -dP
5629 @opindex dP
5630 Dump the RTL in the assembler output as a comment before each instruction.
5631 Also turns on @option{-dp} annotation.
5633 @item -dv
5634 @opindex dv
5635 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
5636 dump a representation of the control flow graph suitable for viewing with VCG
5637 to @file{@var{file}.@var{pass}.vcg}.
5639 @item -dx
5640 @opindex dx
5641 Just generate RTL for a function instead of compiling it.  Usually used
5642 with @option{-fdump-rtl-expand}.
5643 @end table
5645 @item -fdump-noaddr
5646 @opindex fdump-noaddr
5647 When doing debugging dumps, suppress address output.  This makes it more
5648 feasible to use diff on debugging dumps for compiler invocations with
5649 different compiler binaries and/or different
5650 text / bss / data / heap / stack / dso start locations.
5652 @item -fdump-unnumbered
5653 @opindex fdump-unnumbered
5654 When doing debugging dumps, suppress instruction numbers and address output.
5655 This makes it more feasible to use diff on debugging dumps for compiler
5656 invocations with different options, in particular with and without
5657 @option{-g}.
5659 @item -fdump-unnumbered-links
5660 @opindex fdump-unnumbered-links
5661 When doing debugging dumps (see @option{-d} option above), suppress
5662 instruction numbers for the links to the previous and next instructions
5663 in a sequence.
5665 @item -fdump-translation-unit @r{(C++ only)}
5666 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
5667 @opindex fdump-translation-unit
5668 Dump a representation of the tree structure for the entire translation
5669 unit to a file.  The file name is made by appending @file{.tu} to the
5670 source file name, and the file is created in the same directory as the
5671 output file.  If the @samp{-@var{options}} form is used, @var{options}
5672 controls the details of the dump as described for the
5673 @option{-fdump-tree} options.
5675 @item -fdump-class-hierarchy @r{(C++ only)}
5676 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
5677 @opindex fdump-class-hierarchy
5678 Dump a representation of each class's hierarchy and virtual function
5679 table layout to a file.  The file name is made by appending
5680 @file{.class} to the source file name, and the file is created in the
5681 same directory as the output file.  If the @samp{-@var{options}} form
5682 is used, @var{options} controls the details of the dump as described
5683 for the @option{-fdump-tree} options.
5685 @item -fdump-ipa-@var{switch}
5686 @opindex fdump-ipa
5687 Control the dumping at various stages of inter-procedural analysis
5688 language tree to a file.  The file name is generated by appending a
5689 switch specific suffix to the source file name, and the file is created
5690 in the same directory as the output file.  The following dumps are
5691 possible:
5693 @table @samp
5694 @item all
5695 Enables all inter-procedural analysis dumps.
5697 @item cgraph
5698 Dumps information about call-graph optimization, unused function removal,
5699 and inlining decisions.
5701 @item inline
5702 Dump after function inlining.
5704 @end table
5706 @item -fdump-passes
5707 @opindex fdump-passes
5708 Dump the list of optimization passes that are turned on and off by
5709 the current command-line options.
5711 @item -fdump-statistics-@var{option}
5712 @opindex fdump-statistics
5713 Enable and control dumping of pass statistics in a separate file.  The
5714 file name is generated by appending a suffix ending in
5715 @samp{.statistics} to the source file name, and the file is created in
5716 the same directory as the output file.  If the @samp{-@var{option}}
5717 form is used, @samp{-stats} causes counters to be summed over the
5718 whole compilation unit while @samp{-details} dumps every event as
5719 the passes generate them.  The default with no option is to sum
5720 counters for each function compiled.
5722 @item -fdump-tree-@var{switch}
5723 @itemx -fdump-tree-@var{switch}-@var{options}
5724 @opindex fdump-tree
5725 Control the dumping at various stages of processing the intermediate
5726 language tree to a file.  The file name is generated by appending a
5727 switch specific suffix to the source file name, and the file is
5728 created in the same directory as the output file.  If the
5729 @samp{-@var{options}} form is used, @var{options} is a list of
5730 @samp{-} separated options which control the details of the dump.  Not
5731 all options are applicable to all dumps; those that are not
5732 meaningful are ignored.  The following options are available
5734 @table @samp
5735 @item address
5736 Print the address of each node.  Usually this is not meaningful as it
5737 changes according to the environment and source file.  Its primary use
5738 is for tying up a dump file with a debug environment.
5739 @item asmname
5740 If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
5741 in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
5742 use working backward from mangled names in the assembly file.
5743 @item slim
5744 Inhibit dumping of members of a scope or body of a function merely
5745 because that scope has been reached.  Only dump such items when they
5746 are directly reachable by some other path.  When dumping pretty-printed
5747 trees, this option inhibits dumping the bodies of control structures.
5748 @item raw
5749 Print a raw representation of the tree.  By default, trees are
5750 pretty-printed into a C-like representation.
5751 @item details
5752 Enable more detailed dumps (not honored by every dump option).
5753 @item stats
5754 Enable dumping various statistics about the pass (not honored by every dump
5755 option).
5756 @item blocks
5757 Enable showing basic block boundaries (disabled in raw dumps).
5758 @item vops
5759 Enable showing virtual operands for every statement.
5760 @item lineno
5761 Enable showing line numbers for statements.
5762 @item uid
5763 Enable showing the unique ID (@code{DECL_UID}) for each variable.
5764 @item verbose
5765 Enable showing the tree dump for each statement.
5766 @item eh
5767 Enable showing the EH region number holding each statement.
5768 @item scev
5769 Enable showing scalar evolution analysis details.
5770 @item all
5771 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
5772 and @option{lineno}.
5773 @end table
5775 The following tree dumps are possible:
5776 @table @samp
5778 @item original
5779 @opindex fdump-tree-original
5780 Dump before any tree based optimization, to @file{@var{file}.original}.
5782 @item optimized
5783 @opindex fdump-tree-optimized
5784 Dump after all tree based optimization, to @file{@var{file}.optimized}.
5786 @item gimple
5787 @opindex fdump-tree-gimple
5788 Dump each function before and after the gimplification pass to a file.  The
5789 file name is made by appending @file{.gimple} to the source file name.
5791 @item cfg
5792 @opindex fdump-tree-cfg
5793 Dump the control flow graph of each function to a file.  The file name is
5794 made by appending @file{.cfg} to the source file name.
5796 @item vcg
5797 @opindex fdump-tree-vcg
5798 Dump the control flow graph of each function to a file in VCG format.  The
5799 file name is made by appending @file{.vcg} to the source file name.  Note
5800 that if the file contains more than one function, the generated file cannot
5801 be used directly by VCG@.  You must cut and paste each function's
5802 graph into its own separate file first.
5804 @item ch
5805 @opindex fdump-tree-ch
5806 Dump each function after copying loop headers.  The file name is made by
5807 appending @file{.ch} to the source file name.
5809 @item ssa
5810 @opindex fdump-tree-ssa
5811 Dump SSA related information to a file.  The file name is made by appending
5812 @file{.ssa} to the source file name.
5814 @item alias
5815 @opindex fdump-tree-alias
5816 Dump aliasing information for each function.  The file name is made by
5817 appending @file{.alias} to the source file name.
5819 @item ccp
5820 @opindex fdump-tree-ccp
5821 Dump each function after CCP@.  The file name is made by appending
5822 @file{.ccp} to the source file name.
5824 @item storeccp
5825 @opindex fdump-tree-storeccp
5826 Dump each function after STORE-CCP@.  The file name is made by appending
5827 @file{.storeccp} to the source file name.
5829 @item pre
5830 @opindex fdump-tree-pre
5831 Dump trees after partial redundancy elimination.  The file name is made
5832 by appending @file{.pre} to the source file name.
5834 @item fre
5835 @opindex fdump-tree-fre
5836 Dump trees after full redundancy elimination.  The file name is made
5837 by appending @file{.fre} to the source file name.
5839 @item copyprop
5840 @opindex fdump-tree-copyprop
5841 Dump trees after copy propagation.  The file name is made
5842 by appending @file{.copyprop} to the source file name.
5844 @item store_copyprop
5845 @opindex fdump-tree-store_copyprop
5846 Dump trees after store copy-propagation.  The file name is made
5847 by appending @file{.store_copyprop} to the source file name.
5849 @item dce
5850 @opindex fdump-tree-dce
5851 Dump each function after dead code elimination.  The file name is made by
5852 appending @file{.dce} to the source file name.
5854 @item mudflap
5855 @opindex fdump-tree-mudflap
5856 Dump each function after adding mudflap instrumentation.  The file name is
5857 made by appending @file{.mudflap} to the source file name.
5859 @item sra
5860 @opindex fdump-tree-sra
5861 Dump each function after performing scalar replacement of aggregates.  The
5862 file name is made by appending @file{.sra} to the source file name.
5864 @item sink
5865 @opindex fdump-tree-sink
5866 Dump each function after performing code sinking.  The file name is made
5867 by appending @file{.sink} to the source file name.
5869 @item dom
5870 @opindex fdump-tree-dom
5871 Dump each function after applying dominator tree optimizations.  The file
5872 name is made by appending @file{.dom} to the source file name.
5874 @item dse
5875 @opindex fdump-tree-dse
5876 Dump each function after applying dead store elimination.  The file
5877 name is made by appending @file{.dse} to the source file name.
5879 @item phiopt
5880 @opindex fdump-tree-phiopt
5881 Dump each function after optimizing PHI nodes into straightline code.  The file
5882 name is made by appending @file{.phiopt} to the source file name.
5884 @item forwprop
5885 @opindex fdump-tree-forwprop
5886 Dump each function after forward propagating single use variables.  The file
5887 name is made by appending @file{.forwprop} to the source file name.
5889 @item copyrename
5890 @opindex fdump-tree-copyrename
5891 Dump each function after applying the copy rename optimization.  The file
5892 name is made by appending @file{.copyrename} to the source file name.
5894 @item nrv
5895 @opindex fdump-tree-nrv
5896 Dump each function after applying the named return value optimization on
5897 generic trees.  The file name is made by appending @file{.nrv} to the source
5898 file name.
5900 @item vect
5901 @opindex fdump-tree-vect
5902 Dump each function after applying vectorization of loops.  The file name is
5903 made by appending @file{.vect} to the source file name.
5905 @item slp
5906 @opindex fdump-tree-slp
5907 Dump each function after applying vectorization of basic blocks.  The file name
5908 is made by appending @file{.slp} to the source file name.
5910 @item vrp
5911 @opindex fdump-tree-vrp
5912 Dump each function after Value Range Propagation (VRP).  The file name
5913 is made by appending @file{.vrp} to the source file name.
5915 @item all
5916 @opindex fdump-tree-all
5917 Enable all the available tree dumps with the flags provided in this option.
5918 @end table
5920 @item -ftree-vectorizer-verbose=@var{n}
5921 @opindex ftree-vectorizer-verbose
5922 This option controls the amount of debugging output the vectorizer prints.
5923 This information is written to standard error, unless
5924 @option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified,
5925 in which case it is output to the usual dump listing file, @file{.vect}.
5926 For @var{n}=0 no diagnostic information is reported.
5927 If @var{n}=1 the vectorizer reports each loop that got vectorized,
5928 and the total number of loops that got vectorized.
5929 If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
5930 the first analysis phase (vect_analyze_loop_form) - i.e.@: countable,
5931 inner-most, single-bb, single-entry/exit loops.  This is the same verbosity
5932 level that @option{-fdump-tree-vect-stats} uses.
5933 Higher verbosity levels mean either more information dumped for each
5934 reported loop, or same amount of information reported for more loops:
5935 if @var{n}=3, vectorizer cost model information is reported.
5936 If @var{n}=4, alignment related information is added to the reports.
5937 If @var{n}=5, data-references related information (e.g.@: memory dependences,
5938 memory access-patterns) is added to the reports.
5939 If @var{n}=6, the vectorizer reports also non-vectorized inner-most loops
5940 that did not pass the first analysis phase (i.e., may not be countable, or
5941 may have complicated control-flow).
5942 If @var{n}=7, the vectorizer reports also non-vectorized nested loops.
5943 If @var{n}=8, SLP related information is added to the reports.
5944 For @var{n}=9, all the information the vectorizer generates during its
5945 analysis and transformation is reported.  This is the same verbosity level
5946 that @option{-fdump-tree-vect-details} uses.
5948 @item -frandom-seed=@var{string}
5949 @opindex frandom-seed
5950 This option provides a seed that GCC uses in place of
5951 random numbers in generating certain symbol names
5952 that have to be different in every compiled file.  It is also used to
5953 place unique stamps in coverage data files and the object files that
5954 produce them.  You can use the @option{-frandom-seed} option to produce
5955 reproducibly identical object files.
5957 The @var{string} should be different for every file you compile.
5959 @item -fsched-verbose=@var{n}
5960 @opindex fsched-verbose
5961 On targets that use instruction scheduling, this option controls the
5962 amount of debugging output the scheduler prints.  This information is
5963 written to standard error, unless @option{-fdump-rtl-sched1} or
5964 @option{-fdump-rtl-sched2} is specified, in which case it is output
5965 to the usual dump listing file, @file{.sched1} or @file{.sched2}
5966 respectively.  However for @var{n} greater than nine, the output is
5967 always printed to standard error.
5969 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
5970 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
5971 For @var{n} greater than one, it also output basic block probabilities,
5972 detailed ready list information and unit/insn info.  For @var{n} greater
5973 than two, it includes RTL at abort point, control-flow and regions info.
5974 And for @var{n} over four, @option{-fsched-verbose} also includes
5975 dependence info.
5977 @item -save-temps
5978 @itemx -save-temps=cwd
5979 @opindex save-temps
5980 Store the usual ``temporary'' intermediate files permanently; place them
5981 in the current directory and name them based on the source file.  Thus,
5982 compiling @file{foo.c} with @option{-c -save-temps} produces files
5983 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
5984 preprocessed @file{foo.i} output file even though the compiler now
5985 normally uses an integrated preprocessor.
5987 When used in combination with the @option{-x} command-line option,
5988 @option{-save-temps} is sensible enough to avoid over writing an
5989 input source file with the same extension as an intermediate file.
5990 The corresponding intermediate file may be obtained by renaming the
5991 source file before using @option{-save-temps}.
5993 If you invoke GCC in parallel, compiling several different source
5994 files that share a common base name in different subdirectories or the
5995 same source file compiled for multiple output destinations, it is
5996 likely that the different parallel compilers will interfere with each
5997 other, and overwrite the temporary files.  For instance:
5999 @smallexample
6000 gcc -save-temps -o outdir1/foo.o indir1/foo.c&
6001 gcc -save-temps -o outdir2/foo.o indir2/foo.c&
6002 @end smallexample
6004 may result in @file{foo.i} and @file{foo.o} being written to
6005 simultaneously by both compilers.
6007 @item -save-temps=obj
6008 @opindex save-temps=obj
6009 Store the usual ``temporary'' intermediate files permanently.  If the
6010 @option{-o} option is used, the temporary files are based on the
6011 object file.  If the @option{-o} option is not used, the
6012 @option{-save-temps=obj} switch behaves like @option{-save-temps}.
6014 For example:
6016 @smallexample
6017 gcc -save-temps=obj -c foo.c
6018 gcc -save-temps=obj -c bar.c -o dir/xbar.o
6019 gcc -save-temps=obj foobar.c -o dir2/yfoobar
6020 @end smallexample
6022 @noindent
6023 creates @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
6024 @file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
6025 @file{dir2/yfoobar.o}.
6027 @item -time@r{[}=@var{file}@r{]}
6028 @opindex time
6029 Report the CPU time taken by each subprocess in the compilation
6030 sequence.  For C source files, this is the compiler proper and assembler
6031 (plus the linker if linking is done).
6033 Without the specification of an output file, the output looks like this:
6035 @smallexample
6036 # cc1 0.12 0.01
6037 # as 0.00 0.01
6038 @end smallexample
6040 The first number on each line is the ``user time'', that is time spent
6041 executing the program itself.  The second number is ``system time'',
6042 time spent executing operating system routines on behalf of the program.
6043 Both numbers are in seconds.
6045 With the specification of an output file, the output is appended to the
6046 named file, and it looks like this:
6048 @smallexample
6049 0.12 0.01 cc1 @var{options}
6050 0.00 0.01 as @var{options}
6051 @end smallexample
6053 The ``user time'' and the ``system time'' are moved before the program
6054 name, and the options passed to the program are displayed, so that one
6055 can later tell what file was being compiled, and with which options.
6057 @item -fvar-tracking
6058 @opindex fvar-tracking
6059 Run variable tracking pass.  It computes where variables are stored at each
6060 position in code.  Better debugging information is then generated
6061 (if the debugging information format supports this information).
6063 It is enabled by default when compiling with optimization (@option{-Os},
6064 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
6065 the debug info format supports it.
6067 @item -fvar-tracking-assignments
6068 @opindex fvar-tracking-assignments
6069 @opindex fno-var-tracking-assignments
6070 Annotate assignments to user variables early in the compilation and
6071 attempt to carry the annotations over throughout the compilation all the
6072 way to the end, in an attempt to improve debug information while
6073 optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
6075 It can be enabled even if var-tracking is disabled, in which case
6076 annotations are created and maintained, but discarded at the end.
6078 @item -fvar-tracking-assignments-toggle
6079 @opindex fvar-tracking-assignments-toggle
6080 @opindex fno-var-tracking-assignments-toggle
6081 Toggle @option{-fvar-tracking-assignments}, in the same way that
6082 @option{-gtoggle} toggles @option{-g}.
6084 @item -print-file-name=@var{library}
6085 @opindex print-file-name
6086 Print the full absolute name of the library file @var{library} that
6087 would be used when linking---and don't do anything else.  With this
6088 option, GCC does not compile or link anything; it just prints the
6089 file name.
6091 @item -print-multi-directory
6092 @opindex print-multi-directory
6093 Print the directory name corresponding to the multilib selected by any
6094 other switches present in the command line.  This directory is supposed
6095 to exist in @env{GCC_EXEC_PREFIX}.
6097 @item -print-multi-lib
6098 @opindex print-multi-lib
6099 Print the mapping from multilib directory names to compiler switches
6100 that enable them.  The directory name is separated from the switches by
6101 @samp{;}, and each switch starts with an @samp{@@} instead of the
6102 @samp{-}, without spaces between multiple switches.  This is supposed to
6103 ease shell-processing.
6105 @item -print-multi-os-directory
6106 @opindex print-multi-os-directory
6107 Print the path to OS libraries for the selected
6108 multilib, relative to some @file{lib} subdirectory.  If OS libraries are
6109 present in the @file{lib} subdirectory and no multilibs are used, this is
6110 usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
6111 sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
6112 @file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
6113 subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
6115 @item -print-prog-name=@var{program}
6116 @opindex print-prog-name
6117 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
6119 @item -print-libgcc-file-name
6120 @opindex print-libgcc-file-name
6121 Same as @option{-print-file-name=libgcc.a}.
6123 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
6124 but you do want to link with @file{libgcc.a}.  You can do
6126 @smallexample
6127 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
6128 @end smallexample
6130 @item -print-search-dirs
6131 @opindex print-search-dirs
6132 Print the name of the configured installation directory and a list of
6133 program and library directories @command{gcc} searches---and don't do anything else.
6135 This is useful when @command{gcc} prints the error message
6136 @samp{installation problem, cannot exec cpp0: No such file or directory}.
6137 To resolve this you either need to put @file{cpp0} and the other compiler
6138 components where @command{gcc} expects to find them, or you can set the environment
6139 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
6140 Don't forget the trailing @samp{/}.
6141 @xref{Environment Variables}.
6143 @item -print-sysroot
6144 @opindex print-sysroot
6145 Print the target sysroot directory that is used during
6146 compilation.  This is the target sysroot specified either at configure
6147 time or using the @option{--sysroot} option, possibly with an extra
6148 suffix that depends on compilation options.  If no target sysroot is
6149 specified, the option prints nothing.
6151 @item -print-sysroot-headers-suffix
6152 @opindex print-sysroot-headers-suffix
6153 Print the suffix added to the target sysroot when searching for
6154 headers, or give an error if the compiler is not configured with such
6155 a suffix---and don't do anything else.
6157 @item -dumpmachine
6158 @opindex dumpmachine
6159 Print the compiler's target machine (for example,
6160 @samp{i686-pc-linux-gnu})---and don't do anything else.
6162 @item -dumpversion
6163 @opindex dumpversion
6164 Print the compiler version (for example, @samp{3.0})---and don't do
6165 anything else.
6167 @item -dumpspecs
6168 @opindex dumpspecs
6169 Print the compiler's built-in specs---and don't do anything else.  (This
6170 is used when GCC itself is being built.)  @xref{Spec Files}.
6172 @item -feliminate-unused-debug-types
6173 @opindex feliminate-unused-debug-types
6174 Normally, when producing DWARF 2 output, GCC emits debugging
6175 information for all types declared in a compilation
6176 unit, regardless of whether or not they are actually used
6177 in that compilation unit.  Sometimes this is useful, such as
6178 if, in the debugger, you want to cast a value to a type that is
6179 not actually used in your program (but is declared).  More often,
6180 however, this results in a significant amount of wasted space.
6181 With this option, GCC avoids producing debug symbol output
6182 for types that are nowhere used in the source file being compiled.
6183 @end table
6185 @node Optimize Options
6186 @section Options That Control Optimization
6187 @cindex optimize options
6188 @cindex options, optimization
6190 These options control various sorts of optimizations.
6192 Without any optimization option, the compiler's goal is to reduce the
6193 cost of compilation and to make debugging produce the expected
6194 results.  Statements are independent: if you stop the program with a
6195 breakpoint between statements, you can then assign a new value to any
6196 variable or change the program counter to any other statement in the
6197 function and get exactly the results you expect from the source
6198 code.
6200 Turning on optimization flags makes the compiler attempt to improve
6201 the performance and/or code size at the expense of compilation time
6202 and possibly the ability to debug the program.
6204 The compiler performs optimization based on the knowledge it has of the
6205 program.  Compiling multiple files at once to a single output file mode allows
6206 the compiler to use information gained from all of the files when compiling
6207 each of them.
6209 Not all optimizations are controlled directly by a flag.  Only
6210 optimizations that have a flag are listed in this section.
6212 Most optimizations are only enabled if an @option{-O} level is set on
6213 the command line.  Otherwise they are disabled, even if individual
6214 optimization flags are specified.
6216 Depending on the target and how GCC was configured, a slightly different
6217 set of optimizations may be enabled at each @option{-O} level than
6218 those listed here.  You can invoke GCC with @option{-Q --help=optimizers}
6219 to find out the exact set of optimizations that are enabled at each level.
6220 @xref{Overall Options}, for examples.
6222 @table @gcctabopt
6223 @item -O
6224 @itemx -O1
6225 @opindex O
6226 @opindex O1
6227 Optimize.  Optimizing compilation takes somewhat more time, and a lot
6228 more memory for a large function.
6230 With @option{-O}, the compiler tries to reduce code size and execution
6231 time, without performing any optimizations that take a great deal of
6232 compilation time.
6234 @option{-O} turns on the following optimization flags:
6235 @gccoptlist{
6236 -fauto-inc-dec @gol
6237 -fcompare-elim @gol
6238 -fcprop-registers @gol
6239 -fdce @gol
6240 -fdefer-pop @gol
6241 -fdelayed-branch @gol
6242 -fdse @gol
6243 -fguess-branch-probability @gol
6244 -fif-conversion2 @gol
6245 -fif-conversion @gol
6246 -fipa-pure-const @gol
6247 -fipa-profile @gol
6248 -fipa-reference @gol
6249 -fmerge-constants
6250 -fsplit-wide-types @gol
6251 -ftree-bit-ccp @gol
6252 -ftree-builtin-call-dce @gol
6253 -ftree-ccp @gol
6254 -ftree-ch @gol
6255 -ftree-copyrename @gol
6256 -ftree-dce @gol
6257 -ftree-dominator-opts @gol
6258 -ftree-dse @gol
6259 -ftree-forwprop @gol
6260 -ftree-fre @gol
6261 -ftree-phiprop @gol
6262 -ftree-sra @gol
6263 -ftree-pta @gol
6264 -ftree-ter @gol
6265 -funit-at-a-time}
6267 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
6268 where doing so does not interfere with debugging.
6270 @item -O2
6271 @opindex O2
6272 Optimize even more.  GCC performs nearly all supported optimizations
6273 that do not involve a space-speed tradeoff.
6274 As compared to @option{-O}, this option increases both compilation time
6275 and the performance of the generated code.
6277 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
6278 also turns on the following optimization flags:
6279 @gccoptlist{-fthread-jumps @gol
6280 -falign-functions  -falign-jumps @gol
6281 -falign-loops  -falign-labels @gol
6282 -fcaller-saves @gol
6283 -fcrossjumping @gol
6284 -fcse-follow-jumps  -fcse-skip-blocks @gol
6285 -fdelete-null-pointer-checks @gol
6286 -fdevirtualize @gol
6287 -fexpensive-optimizations @gol
6288 -fgcse  -fgcse-lm  @gol
6289 -finline-small-functions @gol
6290 -findirect-inlining @gol
6291 -fipa-sra @gol
6292 -foptimize-sibling-calls @gol
6293 -fpartial-inlining @gol
6294 -fpeephole2 @gol
6295 -fregmove @gol
6296 -freorder-blocks  -freorder-functions @gol
6297 -frerun-cse-after-loop  @gol
6298 -fsched-interblock  -fsched-spec @gol
6299 -fschedule-insns  -fschedule-insns2 @gol
6300 -fstrict-aliasing -fstrict-overflow @gol
6301 -ftree-switch-conversion -ftree-tail-merge @gol
6302 -ftree-pre @gol
6303 -ftree-vrp}
6305 Please note the warning under @option{-fgcse} about
6306 invoking @option{-O2} on programs that use computed gotos.
6308 @item -O3
6309 @opindex O3
6310 Optimize yet more.  @option{-O3} turns on all optimizations specified
6311 by @option{-O2} and also turns on the @option{-finline-functions},
6312 @option{-funswitch-loops}, @option{-fpredictive-commoning},
6313 @option{-fgcse-after-reload}, @option{-ftree-vectorize},
6314 @option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
6316 @item -O0
6317 @opindex O0
6318 Reduce compilation time and make debugging produce the expected
6319 results.  This is the default.
6321 @item -Os
6322 @opindex Os
6323 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
6324 do not typically increase code size.  It also performs further
6325 optimizations designed to reduce code size.
6327 @option{-Os} disables the following optimization flags:
6328 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
6329 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
6330 -fprefetch-loop-arrays  -ftree-vect-loop-version}
6332 @item -Ofast
6333 @opindex Ofast
6334 Disregard strict standards compliance.  @option{-Ofast} enables all
6335 @option{-O3} optimizations.  It also enables optimizations that are not
6336 valid for all standard compliant programs.
6337 It turns on @option{-ffast-math} and the Fortran-specific
6338 @option{-fno-protect-parens} and @option{-fstack-arrays}.
6340 If you use multiple @option{-O} options, with or without level numbers,
6341 the last such option is the one that is effective.
6342 @end table
6344 Options of the form @option{-f@var{flag}} specify machine-independent
6345 flags.  Most flags have both positive and negative forms; the negative
6346 form of @option{-ffoo} is @option{-fno-foo}.  In the table
6347 below, only one of the forms is listed---the one you typically 
6348 use.  You can figure out the other form by either removing @samp{no-}
6349 or adding it.
6351 The following options control specific optimizations.  They are either
6352 activated by @option{-O} options or are related to ones that are.  You
6353 can use the following flags in the rare cases when ``fine-tuning'' of
6354 optimizations to be performed is desired.
6356 @table @gcctabopt
6357 @item -fno-default-inline
6358 @opindex fno-default-inline
6359 Do not make member functions inline by default merely because they are
6360 defined inside the class scope (C++ only).  Otherwise, when you specify
6361 @w{@option{-O}}, member functions defined inside class scope are compiled
6362 inline by default; i.e., you don't need to add @samp{inline} in front of
6363 the member function name.
6365 @item -fno-defer-pop
6366 @opindex fno-defer-pop
6367 Always pop the arguments to each function call as soon as that function
6368 returns.  For machines that must pop arguments after a function call,
6369 the compiler normally lets arguments accumulate on the stack for several
6370 function calls and pops them all at once.
6372 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6374 @item -fforward-propagate
6375 @opindex fforward-propagate
6376 Perform a forward propagation pass on RTL@.  The pass tries to combine two
6377 instructions and checks if the result can be simplified.  If loop unrolling
6378 is active, two passes are performed and the second is scheduled after
6379 loop unrolling.
6381 This option is enabled by default at optimization levels @option{-O},
6382 @option{-O2}, @option{-O3}, @option{-Os}.
6384 @item -ffp-contract=@var{style}
6385 @opindex ffp-contract
6386 @option{-ffp-contract=off} disables floating-point expression contraction.
6387 @option{-ffp-contract=fast} enables floating-point expression contraction
6388 such as forming of fused multiply-add operations if the target has
6389 native support for them.
6390 @option{-ffp-contract=on} enables floating-point expression contraction
6391 if allowed by the language standard.  This is currently not implemented
6392 and treated equal to @option{-ffp-contract=off}.
6394 The default is @option{-ffp-contract=fast}.
6396 @item -fomit-frame-pointer
6397 @opindex fomit-frame-pointer
6398 Don't keep the frame pointer in a register for functions that
6399 don't need one.  This avoids the instructions to save, set up and
6400 restore frame pointers; it also makes an extra register available
6401 in many functions.  @strong{It also makes debugging impossible on
6402 some machines.}
6404 On some machines, such as the VAX, this flag has no effect, because
6405 the standard calling sequence automatically handles the frame pointer
6406 and nothing is saved by pretending it doesn't exist.  The
6407 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
6408 whether a target machine supports this flag.  @xref{Registers,,Register
6409 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
6411 Starting with GCC version 4.6, the default setting (when not optimizing for
6412 size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to
6413 @option{-fomit-frame-pointer}.  The default can be reverted to
6414 @option{-fno-omit-frame-pointer} by configuring GCC with the
6415 @option{--enable-frame-pointer} configure option.
6417 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6419 @item -foptimize-sibling-calls
6420 @opindex foptimize-sibling-calls
6421 Optimize sibling and tail recursive calls.
6423 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6425 @item -fno-inline
6426 @opindex fno-inline
6427 Do not expand any functions inline apart from those marked with
6428 the @code{always_inline} attribute.  This is the default when not
6429 optimizing.
6431 Single functions can be exempted from inlining by marking them
6432 with the @code{noinline} attribute.
6434 @item -finline-small-functions
6435 @opindex finline-small-functions
6436 Integrate functions into their callers when their body is smaller than expected
6437 function call code (so overall size of program gets smaller).  The compiler
6438 heuristically decides which functions are simple enough to be worth integrating
6439 in this way.  This inlining applies to all functions, even those not declared
6440 inline.
6442 Enabled at level @option{-O2}.
6444 @item -findirect-inlining
6445 @opindex findirect-inlining
6446 Inline also indirect calls that are discovered to be known at compile
6447 time thanks to previous inlining.  This option has any effect only
6448 when inlining itself is turned on by the @option{-finline-functions}
6449 or @option{-finline-small-functions} options.
6451 Enabled at level @option{-O2}.
6453 @item -finline-functions
6454 @opindex finline-functions
6455 Consider all functions for inlining, even if they are not declared inline.
6456 The compiler heuristically decides which functions are worth integrating
6457 in this way.
6459 If all calls to a given function are integrated, and the function is
6460 declared @code{static}, then the function is normally not output as
6461 assembler code in its own right.
6463 Enabled at level @option{-O3}.
6465 @item -finline-functions-called-once
6466 @opindex finline-functions-called-once
6467 Consider all @code{static} functions called once for inlining into their
6468 caller even if they are not marked @code{inline}.  If a call to a given
6469 function is integrated, then the function is not output as assembler code
6470 in its own right.
6472 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
6474 @item -fearly-inlining
6475 @opindex fearly-inlining
6476 Inline functions marked by @code{always_inline} and functions whose body seems
6477 smaller than the function call overhead early before doing
6478 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
6479 makes profiling significantly cheaper and usually inlining faster on programs
6480 having large chains of nested wrapper functions.
6482 Enabled by default.
6484 @item -fipa-sra
6485 @opindex fipa-sra
6486 Perform interprocedural scalar replacement of aggregates, removal of
6487 unused parameters and replacement of parameters passed by reference
6488 by parameters passed by value.
6490 Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
6492 @item -finline-limit=@var{n}
6493 @opindex finline-limit
6494 By default, GCC limits the size of functions that can be inlined.  This flag
6495 allows coarse control of this limit.  @var{n} is the size of functions that
6496 can be inlined in number of pseudo instructions.
6498 Inlining is actually controlled by a number of parameters, which may be
6499 specified individually by using @option{--param @var{name}=@var{value}}.
6500 The @option{-finline-limit=@var{n}} option sets some of these parameters
6501 as follows:
6503 @table @gcctabopt
6504 @item max-inline-insns-single
6505 is set to @var{n}/2.
6506 @item max-inline-insns-auto
6507 is set to @var{n}/2.
6508 @end table
6510 See below for a documentation of the individual
6511 parameters controlling inlining and for the defaults of these parameters.
6513 @emph{Note:} there may be no value to @option{-finline-limit} that results
6514 in default behavior.
6516 @emph{Note:} pseudo instruction represents, in this particular context, an
6517 abstract measurement of function's size.  In no way does it represent a count
6518 of assembly instructions and as such its exact meaning might change from one
6519 release to an another.
6521 @item -fno-keep-inline-dllexport
6522 @opindex -fno-keep-inline-dllexport
6523 This is a more fine-grained version of @option{-fkeep-inline-functions},
6524 which applies only to functions that are declared using the @code{dllexport}
6525 attribute or declspec (@xref{Function Attributes,,Declaring Attributes of
6526 Functions}.)
6528 @item -fkeep-inline-functions
6529 @opindex fkeep-inline-functions
6530 In C, emit @code{static} functions that are declared @code{inline}
6531 into the object file, even if the function has been inlined into all
6532 of its callers.  This switch does not affect functions using the
6533 @code{extern inline} extension in GNU C90@.  In C++, emit any and all
6534 inline functions into the object file.
6536 @item -fkeep-static-consts
6537 @opindex fkeep-static-consts
6538 Emit variables declared @code{static const} when optimization isn't turned
6539 on, even if the variables aren't referenced.
6541 GCC enables this option by default.  If you want to force the compiler to
6542 check if a variable is referenced, regardless of whether or not
6543 optimization is turned on, use the @option{-fno-keep-static-consts} option.
6545 @item -fmerge-constants
6546 @opindex fmerge-constants
6547 Attempt to merge identical constants (string constants and floating-point
6548 constants) across compilation units.
6550 This option is the default for optimized compilation if the assembler and
6551 linker support it.  Use @option{-fno-merge-constants} to inhibit this
6552 behavior.
6554 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6556 @item -fmerge-all-constants
6557 @opindex fmerge-all-constants
6558 Attempt to merge identical constants and identical variables.
6560 This option implies @option{-fmerge-constants}.  In addition to
6561 @option{-fmerge-constants} this considers e.g.@: even constant initialized
6562 arrays or initialized constant variables with integral or floating-point
6563 types.  Languages like C or C++ require each variable, including multiple
6564 instances of the same variable in recursive calls, to have distinct locations,
6565 so using this option results in non-conforming
6566 behavior.
6568 @item -fmodulo-sched
6569 @opindex fmodulo-sched
6570 Perform swing modulo scheduling immediately before the first scheduling
6571 pass.  This pass looks at innermost loops and reorders their
6572 instructions by overlapping different iterations.
6574 @item -fmodulo-sched-allow-regmoves
6575 @opindex fmodulo-sched-allow-regmoves
6576 Perform more aggressive SMS-based modulo scheduling with register moves
6577 allowed.  By setting this flag certain anti-dependences edges are
6578 deleted, which triggers the generation of reg-moves based on the
6579 life-range analysis.  This option is effective only with
6580 @option{-fmodulo-sched} enabled.
6582 @item -fno-branch-count-reg
6583 @opindex fno-branch-count-reg
6584 Do not use ``decrement and branch'' instructions on a count register,
6585 but instead generate a sequence of instructions that decrement a
6586 register, compare it against zero, then branch based upon the result.
6587 This option is only meaningful on architectures that support such
6588 instructions, which include x86, PowerPC, IA-64 and S/390.
6590 The default is @option{-fbranch-count-reg}.
6592 @item -fno-function-cse
6593 @opindex fno-function-cse
6594 Do not put function addresses in registers; make each instruction that
6595 calls a constant function contain the function's address explicitly.
6597 This option results in less efficient code, but some strange hacks
6598 that alter the assembler output may be confused by the optimizations
6599 performed when this option is not used.
6601 The default is @option{-ffunction-cse}
6603 @item -fno-zero-initialized-in-bss
6604 @opindex fno-zero-initialized-in-bss
6605 If the target supports a BSS section, GCC by default puts variables that
6606 are initialized to zero into BSS@.  This can save space in the resulting
6607 code.
6609 This option turns off this behavior because some programs explicitly
6610 rely on variables going to the data section.  E.g., so that the
6611 resulting executable can find the beginning of that section and/or make
6612 assumptions based on that.
6614 The default is @option{-fzero-initialized-in-bss}.
6616 @item -fmudflap -fmudflapth -fmudflapir
6617 @opindex fmudflap
6618 @opindex fmudflapth
6619 @opindex fmudflapir
6620 @cindex bounds checking
6621 @cindex mudflap
6622 For front-ends that support it (C and C++), instrument all risky
6623 pointer/array dereferencing operations, some standard library
6624 string/heap functions, and some other associated constructs with
6625 range/validity tests.  Modules so instrumented should be immune to
6626 buffer overflows, invalid heap use, and some other classes of C/C++
6627 programming errors.  The instrumentation relies on a separate runtime
6628 library (@file{libmudflap}), which is linked into a program if
6629 @option{-fmudflap} is given at link time.  Run-time behavior of the
6630 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
6631 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
6632 for its options.
6634 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
6635 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
6636 addition to @option{-fmudflap} or @option{-fmudflapth}, if
6637 instrumentation should ignore pointer reads.  This produces less
6638 instrumentation (and therefore faster execution) and still provides
6639 some protection against outright memory corrupting writes, but allows
6640 erroneously read data to propagate within a program.
6642 @item -fthread-jumps
6643 @opindex fthread-jumps
6644 Perform optimizations where we check to see if a jump branches to a
6645 location where another comparison subsumed by the first is found.  If
6646 so, the first branch is redirected to either the destination of the
6647 second branch or a point immediately following it, depending on whether
6648 the condition is known to be true or false.
6650 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6652 @item -fsplit-wide-types
6653 @opindex fsplit-wide-types
6654 When using a type that occupies multiple registers, such as @code{long
6655 long} on a 32-bit system, split the registers apart and allocate them
6656 independently.  This normally generates better code for those types,
6657 but may make debugging more difficult.
6659 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
6660 @option{-Os}.
6662 @item -fcse-follow-jumps
6663 @opindex fcse-follow-jumps
6664 In common subexpression elimination (CSE), scan through jump instructions
6665 when the target of the jump is not reached by any other path.  For
6666 example, when CSE encounters an @code{if} statement with an
6667 @code{else} clause, CSE follows the jump when the condition
6668 tested is false.
6670 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6672 @item -fcse-skip-blocks
6673 @opindex fcse-skip-blocks
6674 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
6675 follow jumps that conditionally skip over blocks.  When CSE
6676 encounters a simple @code{if} statement with no else clause,
6677 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
6678 body of the @code{if}.
6680 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6682 @item -frerun-cse-after-loop
6683 @opindex frerun-cse-after-loop
6684 Re-run common subexpression elimination after loop optimizations are
6685 performed.
6687 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6689 @item -fgcse
6690 @opindex fgcse
6691 Perform a global common subexpression elimination pass.
6692 This pass also performs global constant and copy propagation.
6694 @emph{Note:} When compiling a program using computed gotos, a GCC
6695 extension, you may get better run-time performance if you disable
6696 the global common subexpression elimination pass by adding
6697 @option{-fno-gcse} to the command line.
6699 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6701 @item -fgcse-lm
6702 @opindex fgcse-lm
6703 When @option{-fgcse-lm} is enabled, global common subexpression elimination
6704 attempts to move loads that are only killed by stores into themselves.  This
6705 allows a loop containing a load/store sequence to be changed to a load outside
6706 the loop, and a copy/store within the loop.
6708 Enabled by default when @option{-fgcse} is enabled.
6710 @item -fgcse-sm
6711 @opindex fgcse-sm
6712 When @option{-fgcse-sm} is enabled, a store motion pass is run after
6713 global common subexpression elimination.  This pass attempts to move
6714 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
6715 loops containing a load/store sequence can be changed to a load before
6716 the loop and a store after the loop.
6718 Not enabled at any optimization level.
6720 @item -fgcse-las
6721 @opindex fgcse-las
6722 When @option{-fgcse-las} is enabled, the global common subexpression
6723 elimination pass eliminates redundant loads that come after stores to the
6724 same memory location (both partial and full redundancies).
6726 Not enabled at any optimization level.
6728 @item -fgcse-after-reload
6729 @opindex fgcse-after-reload
6730 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
6731 pass is performed after reload.  The purpose of this pass is to cleanup
6732 redundant spilling.
6734 @item -funsafe-loop-optimizations
6735 @opindex funsafe-loop-optimizations
6736 If given, the loop optimizer assumes that loop indices do not
6737 overflow, and that the loops with nontrivial exit condition are not
6738 infinite.  This enables a wider range of loop optimizations even if
6739 the loop optimizer itself cannot prove that these assumptions are valid.
6740 If you use @option{-Wunsafe-loop-optimizations}, the compiler warns you
6741 if it finds this kind of loop.
6743 @item -fcrossjumping
6744 @opindex fcrossjumping
6745 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
6746 resulting code may or may not perform better than without cross-jumping.
6748 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6750 @item -fauto-inc-dec
6751 @opindex fauto-inc-dec
6752 Combine increments or decrements of addresses with memory accesses.
6753 This pass is always skipped on architectures that do not have
6754 instructions to support this.  Enabled by default at @option{-O} and
6755 higher on architectures that support this.
6757 @item -fdce
6758 @opindex fdce
6759 Perform dead code elimination (DCE) on RTL@.
6760 Enabled by default at @option{-O} and higher.
6762 @item -fdse
6763 @opindex fdse
6764 Perform dead store elimination (DSE) on RTL@.
6765 Enabled by default at @option{-O} and higher.
6767 @item -fif-conversion
6768 @opindex fif-conversion
6769 Attempt to transform conditional jumps into branch-less equivalents.  This
6770 include use of conditional moves, min, max, set flags and abs instructions, and
6771 some tricks doable by standard arithmetics.  The use of conditional execution
6772 on chips where it is available is controlled by @code{if-conversion2}.
6774 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6776 @item -fif-conversion2
6777 @opindex fif-conversion2
6778 Use conditional execution (where available) to transform conditional jumps into
6779 branch-less equivalents.
6781 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6783 @item -fdelete-null-pointer-checks
6784 @opindex fdelete-null-pointer-checks
6785 Assume that programs cannot safely dereference null pointers, and that
6786 no code or data element resides there.  This enables simple constant
6787 folding optimizations at all optimization levels.  In addition, other
6788 optimization passes in GCC use this flag to control global dataflow
6789 analyses that eliminate useless checks for null pointers; these assume
6790 that if a pointer is checked after it has already been dereferenced,
6791 it cannot be null.
6793 Note however that in some environments this assumption is not true.
6794 Use @option{-fno-delete-null-pointer-checks} to disable this optimization
6795 for programs that depend on that behavior.
6797 Some targets, especially embedded ones, disable this option at all levels.
6798 Otherwise it is enabled at all levels: @option{-O0}, @option{-O1},
6799 @option{-O2}, @option{-O3}, @option{-Os}.  Passes that use the information
6800 are enabled independently at different optimization levels.
6802 @item -fdevirtualize
6803 @opindex fdevirtualize
6804 Attempt to convert calls to virtual functions to direct calls.  This
6805 is done both within a procedure and interprocedurally as part of
6806 indirect inlining (@code{-findirect-inlining}) and interprocedural constant
6807 propagation (@option{-fipa-cp}).
6808 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6810 @item -fexpensive-optimizations
6811 @opindex fexpensive-optimizations
6812 Perform a number of minor optimizations that are relatively expensive.
6814 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6816 @item -free
6817 @opindex free
6818 Attempt to remove redundant extension instructions.  This is especially
6819 helpful for the x86-64 architecture, which implicitly zero-extends in 64-bit
6820 registers after writing to their lower 32-bit half.
6822 Enabled for x86 at levels @option{-O2}, @option{-O3}.
6824 @item -foptimize-register-move
6825 @itemx -fregmove
6826 @opindex foptimize-register-move
6827 @opindex fregmove
6828 Attempt to reassign register numbers in move instructions and as
6829 operands of other simple instructions in order to maximize the amount of
6830 register tying.  This is especially helpful on machines with two-operand
6831 instructions.
6833 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
6834 optimization.
6836 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6838 @item -fira-algorithm=@var{algorithm}
6839 Use the specified coloring algorithm for the integrated register
6840 allocator.  The @var{algorithm} argument can be @samp{priority}, which
6841 specifies Chow's priority coloring, or @samp{CB}, which specifies
6842 Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
6843 for all architectures, but for those targets that do support it, it is
6844 the default because it generates better code.
6846 @item -fira-region=@var{region}
6847 Use specified regions for the integrated register allocator.  The
6848 @var{region} argument should be one of the following:
6850 @table @samp
6852 @item all
6853 Use all loops as register allocation regions.
6854 This can give the best results for machines with a small and/or
6855 irregular register set.
6857 @item mixed
6858 Use all loops except for loops with small register pressure 
6859 as the regions.  This value usually gives
6860 the best results in most cases and for most architectures,
6861 and is enabled by default when compiling with optimization for speed
6862 (@option{-O}, @option{-O2}, @dots{}).
6864 @item one
6865 Use all functions as a single region.  
6866 This typically results in the smallest code size, and is enabled by default for
6867 @option{-Os} or @option{-O0}.
6869 @end table
6871 @item -fira-loop-pressure
6872 @opindex fira-loop-pressure
6873 Use IRA to evaluate register pressure in loops for decisions to move
6874 loop invariants.  This option usually results in generation
6875 of faster and smaller code on machines with large register files (>= 32
6876 registers), but it can slow the compiler down.
6878 This option is enabled at level @option{-O3} for some targets.
6880 @item -fno-ira-share-save-slots
6881 @opindex fno-ira-share-save-slots
6882 Disable sharing of stack slots used for saving call-used hard
6883 registers living through a call.  Each hard register gets a
6884 separate stack slot, and as a result function stack frames are
6885 larger.
6887 @item -fno-ira-share-spill-slots
6888 @opindex fno-ira-share-spill-slots
6889 Disable sharing of stack slots allocated for pseudo-registers.  Each
6890 pseudo-register that does not get a hard register gets a separate
6891 stack slot, and as a result function stack frames are larger.
6893 @item -fira-verbose=@var{n}
6894 @opindex fira-verbose
6895 Control the verbosity of the dump file for the integrated register allocator.
6896 The default value is 5.  If the value @var{n} is greater or equal to 10,
6897 the dump output is sent to stderr using the same format as @var{n} minus 10.
6899 @item -fdelayed-branch
6900 @opindex fdelayed-branch
6901 If supported for the target machine, attempt to reorder instructions
6902 to exploit instruction slots available after delayed branch
6903 instructions.
6905 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6907 @item -fschedule-insns
6908 @opindex fschedule-insns
6909 If supported for the target machine, attempt to reorder instructions to
6910 eliminate execution stalls due to required data being unavailable.  This
6911 helps machines that have slow floating point or memory load instructions
6912 by allowing other instructions to be issued until the result of the load
6913 or floating-point instruction is required.
6915 Enabled at levels @option{-O2}, @option{-O3}.
6917 @item -fschedule-insns2
6918 @opindex fschedule-insns2
6919 Similar to @option{-fschedule-insns}, but requests an additional pass of
6920 instruction scheduling after register allocation has been done.  This is
6921 especially useful on machines with a relatively small number of
6922 registers and where memory load instructions take more than one cycle.
6924 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6926 @item -fno-sched-interblock
6927 @opindex fno-sched-interblock
6928 Don't schedule instructions across basic blocks.  This is normally
6929 enabled by default when scheduling before register allocation, i.e.@:
6930 with @option{-fschedule-insns} or at @option{-O2} or higher.
6932 @item -fno-sched-spec
6933 @opindex fno-sched-spec
6934 Don't allow speculative motion of non-load instructions.  This is normally
6935 enabled by default when scheduling before register allocation, i.e.@:
6936 with @option{-fschedule-insns} or at @option{-O2} or higher.
6938 @item -fsched-pressure
6939 @opindex fsched-pressure
6940 Enable register pressure sensitive insn scheduling before the register
6941 allocation.  This only makes sense when scheduling before register
6942 allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
6943 @option{-O2} or higher.  Usage of this option can improve the
6944 generated code and decrease its size by preventing register pressure
6945 increase above the number of available hard registers and as a
6946 consequence register spills in the register allocation.
6948 @item -fsched-spec-load
6949 @opindex fsched-spec-load
6950 Allow speculative motion of some load instructions.  This only makes
6951 sense when scheduling before register allocation, i.e.@: with
6952 @option{-fschedule-insns} or at @option{-O2} or higher.
6954 @item -fsched-spec-load-dangerous
6955 @opindex fsched-spec-load-dangerous
6956 Allow speculative motion of more load instructions.  This only makes
6957 sense when scheduling before register allocation, i.e.@: with
6958 @option{-fschedule-insns} or at @option{-O2} or higher.
6960 @item -fsched-stalled-insns
6961 @itemx -fsched-stalled-insns=@var{n}
6962 @opindex fsched-stalled-insns
6963 Define how many insns (if any) can be moved prematurely from the queue
6964 of stalled insns into the ready list during the second scheduling pass.
6965 @option{-fno-sched-stalled-insns} means that no insns are moved
6966 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
6967 on how many queued insns can be moved prematurely.
6968 @option{-fsched-stalled-insns} without a value is equivalent to
6969 @option{-fsched-stalled-insns=1}.
6971 @item -fsched-stalled-insns-dep
6972 @itemx -fsched-stalled-insns-dep=@var{n}
6973 @opindex fsched-stalled-insns-dep
6974 Define how many insn groups (cycles) are examined for a dependency
6975 on a stalled insn that is a candidate for premature removal from the queue
6976 of stalled insns.  This has an effect only during the second scheduling pass,
6977 and only if @option{-fsched-stalled-insns} is used.
6978 @option{-fno-sched-stalled-insns-dep} is equivalent to
6979 @option{-fsched-stalled-insns-dep=0}.
6980 @option{-fsched-stalled-insns-dep} without a value is equivalent to
6981 @option{-fsched-stalled-insns-dep=1}.
6983 @item -fsched2-use-superblocks
6984 @opindex fsched2-use-superblocks
6985 When scheduling after register allocation, do use superblock scheduling
6986 algorithm.  Superblock scheduling allows motion across basic block boundaries
6987 resulting on faster schedules.  This option is experimental, as not all machine
6988 descriptions used by GCC model the CPU closely enough to avoid unreliable
6989 results from the algorithm.
6991 This only makes sense when scheduling after register allocation, i.e.@: with
6992 @option{-fschedule-insns2} or at @option{-O2} or higher.
6994 @item -fsched-group-heuristic
6995 @opindex fsched-group-heuristic
6996 Enable the group heuristic in the scheduler.  This heuristic favors
6997 the instruction that belongs to a schedule group.  This is enabled
6998 by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
6999 or @option{-fschedule-insns2} or at @option{-O2} or higher.
7001 @item -fsched-critical-path-heuristic
7002 @opindex fsched-critical-path-heuristic
7003 Enable the critical-path heuristic in the scheduler.  This heuristic favors
7004 instructions on the critical path.  This is enabled by default when
7005 scheduling is enabled, i.e.@: with @option{-fschedule-insns}
7006 or @option{-fschedule-insns2} or at @option{-O2} or higher.
7008 @item -fsched-spec-insn-heuristic
7009 @opindex fsched-spec-insn-heuristic
7010 Enable the speculative instruction heuristic in the scheduler.  This
7011 heuristic favors speculative instructions with greater dependency weakness.
7012 This is enabled by default when scheduling is enabled, i.e.@:
7013 with @option{-fschedule-insns} or @option{-fschedule-insns2}
7014 or at @option{-O2} or higher.
7016 @item -fsched-rank-heuristic
7017 @opindex fsched-rank-heuristic
7018 Enable the rank heuristic in the scheduler.  This heuristic favors
7019 the instruction belonging to a basic block with greater size or frequency.
7020 This is enabled by default when scheduling is enabled, i.e.@:
7021 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7022 at @option{-O2} or higher.
7024 @item -fsched-last-insn-heuristic
7025 @opindex fsched-last-insn-heuristic
7026 Enable the last-instruction heuristic in the scheduler.  This heuristic
7027 favors the instruction that is less dependent on the last instruction
7028 scheduled.  This is enabled by default when scheduling is enabled,
7029 i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7030 at @option{-O2} or higher.
7032 @item -fsched-dep-count-heuristic
7033 @opindex fsched-dep-count-heuristic
7034 Enable the dependent-count heuristic in the scheduler.  This heuristic
7035 favors the instruction that has more instructions depending on it.
7036 This is enabled by default when scheduling is enabled, i.e.@:
7037 with @option{-fschedule-insns} or @option{-fschedule-insns2} or
7038 at @option{-O2} or higher.
7040 @item -freschedule-modulo-scheduled-loops
7041 @opindex freschedule-modulo-scheduled-loops
7042 The modulo scheduling comes before the traditional scheduling.  If a loop
7043 is modulo scheduled you may want to prevent the later scheduling passes
7044 from changing its schedule; use this option to control that.
7046 @item -fselective-scheduling
7047 @opindex fselective-scheduling
7048 Schedule instructions using selective scheduling algorithm.  Selective
7049 scheduling runs instead of the first scheduler pass.
7051 @item -fselective-scheduling2
7052 @opindex fselective-scheduling2
7053 Schedule instructions using selective scheduling algorithm.  Selective
7054 scheduling runs instead of the second scheduler pass.
7056 @item -fsel-sched-pipelining
7057 @opindex fsel-sched-pipelining
7058 Enable software pipelining of innermost loops during selective scheduling.
7059 This option has no effect until one of @option{-fselective-scheduling} or
7060 @option{-fselective-scheduling2} is turned on.
7062 @item -fsel-sched-pipelining-outer-loops
7063 @opindex fsel-sched-pipelining-outer-loops
7064 When pipelining loops during selective scheduling, also pipeline outer loops.
7065 This option has no effect until @option{-fsel-sched-pipelining} is turned on.
7067 @item -fshrink-wrap
7068 @opindex fshrink-wrap
7069 Emit function prologues only before parts of the function that need it,
7070 rather than at the top of the function.  This flag is enabled by default at
7071 @option{-O} and higher.
7073 @item -fcaller-saves
7074 @opindex fcaller-saves
7075 Enable allocation of values to registers that are clobbered by
7076 function calls, by emitting extra instructions to save and restore the
7077 registers around such calls.  Such allocation is done only when it
7078 seems to result in better code.
7080 This option is always enabled by default on certain machines, usually
7081 those which have no call-preserved registers to use instead.
7083 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7085 @item -fcombine-stack-adjustments
7086 @opindex fcombine-stack-adjustments
7087 Tracks stack adjustments (pushes and pops) and stack memory references
7088 and then tries to find ways to combine them.
7090 Enabled by default at @option{-O1} and higher.
7092 @item -fconserve-stack
7093 @opindex fconserve-stack
7094 Attempt to minimize stack usage.  The compiler attempts to use less
7095 stack space, even if that makes the program slower.  This option
7096 implies setting the @option{large-stack-frame} parameter to 100
7097 and the @option{large-stack-frame-growth} parameter to 400.
7099 @item -ftree-reassoc
7100 @opindex ftree-reassoc
7101 Perform reassociation on trees.  This flag is enabled by default
7102 at @option{-O} and higher.
7104 @item -ftree-pre
7105 @opindex ftree-pre
7106 Perform partial redundancy elimination (PRE) on trees.  This flag is
7107 enabled by default at @option{-O2} and @option{-O3}.
7109 @item -ftree-partial-pre
7110 @opindex ftree-partial-pre
7111 Make partial redundancy elimination (PRE) more aggressive.  This flag is
7112 enabled by default at @option{-O3}.
7114 @item -ftree-forwprop
7115 @opindex ftree-forwprop
7116 Perform forward propagation on trees.  This flag is enabled by default
7117 at @option{-O} and higher.
7119 @item -ftree-fre
7120 @opindex ftree-fre
7121 Perform full redundancy elimination (FRE) on trees.  The difference
7122 between FRE and PRE is that FRE only considers expressions
7123 that are computed on all paths leading to the redundant computation.
7124 This analysis is faster than PRE, though it exposes fewer redundancies.
7125 This flag is enabled by default at @option{-O} and higher.
7127 @item -ftree-phiprop
7128 @opindex ftree-phiprop
7129 Perform hoisting of loads from conditional pointers on trees.  This
7130 pass is enabled by default at @option{-O} and higher.
7132 @item -ftree-copy-prop
7133 @opindex ftree-copy-prop
7134 Perform copy propagation on trees.  This pass eliminates unnecessary
7135 copy operations.  This flag is enabled by default at @option{-O} and
7136 higher.
7138 @item -fipa-pure-const
7139 @opindex fipa-pure-const
7140 Discover which functions are pure or constant.
7141 Enabled by default at @option{-O} and higher.
7143 @item -fipa-reference
7144 @opindex fipa-reference
7145 Discover which static variables do not escape cannot escape the
7146 compilation unit.
7147 Enabled by default at @option{-O} and higher.
7149 @item -fipa-pta
7150 @opindex fipa-pta
7151 Perform interprocedural pointer analysis and interprocedural modification
7152 and reference analysis.  This option can cause excessive memory and
7153 compile-time usage on large compilation units.  It is not enabled by
7154 default at any optimization level.
7156 @item -fipa-profile
7157 @opindex fipa-profile
7158 Perform interprocedural profile propagation.  The functions called only from
7159 cold functions are marked as cold. Also functions executed once (such as
7160 @code{cold}, @code{noreturn}, static constructors or destructors) are identified. Cold
7161 functions and loop less parts of functions executed once are then optimized for
7162 size.
7163 Enabled by default at @option{-O} and higher.
7165 @item -fipa-cp
7166 @opindex fipa-cp
7167 Perform interprocedural constant propagation.
7168 This optimization analyzes the program to determine when values passed
7169 to functions are constants and then optimizes accordingly.
7170 This optimization can substantially increase performance
7171 if the application has constants passed to functions.
7172 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
7174 @item -fipa-cp-clone
7175 @opindex fipa-cp-clone
7176 Perform function cloning to make interprocedural constant propagation stronger.
7177 When enabled, interprocedural constant propagation performs function cloning
7178 when externally visible function can be called with constant arguments.
7179 Because this optimization can create multiple copies of functions,
7180 it may significantly increase code size
7181 (see @option{--param ipcp-unit-growth=@var{value}}).
7182 This flag is enabled by default at @option{-O3}.
7184 @item -fipa-matrix-reorg
7185 @opindex fipa-matrix-reorg
7186 Perform matrix flattening and transposing.
7187 Matrix flattening tries to replace an @math{m}-dimensional matrix
7188 with its equivalent @math{n}-dimensional matrix, where @math{n < m}.
7189 This reduces the level of indirection needed for accessing the elements
7190 of the matrix. The second optimization is matrix transposing, which
7191 attempts to change the order of the matrix's dimensions in order to
7192 improve cache locality.
7193 Both optimizations need the @option{-fwhole-program} flag.
7194 Transposing is enabled only if profiling information is available.
7196 @item -ftree-sink
7197 @opindex ftree-sink
7198 Perform forward store motion  on trees.  This flag is
7199 enabled by default at @option{-O} and higher.
7201 @item -ftree-bit-ccp
7202 @opindex ftree-bit-ccp
7203 Perform sparse conditional bit constant propagation on trees and propagate
7204 pointer alignment information.
7205 This pass only operates on local scalar variables and is enabled by default
7206 at @option{-O} and higher.  It requires that @option{-ftree-ccp} is enabled.
7208 @item -ftree-ccp
7209 @opindex ftree-ccp
7210 Perform sparse conditional constant propagation (CCP) on trees.  This
7211 pass only operates on local scalar variables and is enabled by default
7212 at @option{-O} and higher.
7214 @item -ftree-switch-conversion
7215 Perform conversion of simple initializations in a switch to
7216 initializations from a scalar array.  This flag is enabled by default
7217 at @option{-O2} and higher.
7219 @item -ftree-tail-merge
7220 Look for identical code sequences.  When found, replace one with a jump to the
7221 other.  This optimization is known as tail merging or cross jumping.  This flag
7222 is enabled by default at @option{-O2} and higher.  The compilation time
7223 in this pass can
7224 be limited using @option{max-tail-merge-comparisons} parameter and
7225 @option{max-tail-merge-iterations} parameter.
7227 @item -ftree-dce
7228 @opindex ftree-dce
7229 Perform dead code elimination (DCE) on trees.  This flag is enabled by
7230 default at @option{-O} and higher.
7232 @item -ftree-builtin-call-dce
7233 @opindex ftree-builtin-call-dce
7234 Perform conditional dead code elimination (DCE) for calls to builtin functions
7235 that may set @code{errno} but are otherwise side-effect free.  This flag is
7236 enabled by default at @option{-O2} and higher if @option{-Os} is not also
7237 specified.
7239 @item -ftree-dominator-opts
7240 @opindex ftree-dominator-opts
7241 Perform a variety of simple scalar cleanups (constant/copy
7242 propagation, redundancy elimination, range propagation and expression
7243 simplification) based on a dominator tree traversal.  This also
7244 performs jump threading (to reduce jumps to jumps). This flag is
7245 enabled by default at @option{-O} and higher.
7247 @item -ftree-dse
7248 @opindex ftree-dse
7249 Perform dead store elimination (DSE) on trees.  A dead store is a store into
7250 a memory location that is later overwritten by another store without
7251 any intervening loads.  In this case the earlier store can be deleted.  This
7252 flag is enabled by default at @option{-O} and higher.
7254 @item -ftree-ch
7255 @opindex ftree-ch
7256 Perform loop header copying on trees.  This is beneficial since it increases
7257 effectiveness of code motion optimizations.  It also saves one jump.  This flag
7258 is enabled by default at @option{-O} and higher.  It is not enabled
7259 for @option{-Os}, since it usually increases code size.
7261 @item -ftree-loop-optimize
7262 @opindex ftree-loop-optimize
7263 Perform loop optimizations on trees.  This flag is enabled by default
7264 at @option{-O} and higher.
7266 @item -ftree-loop-linear
7267 @opindex ftree-loop-linear
7268 Perform loop interchange transformations on tree.  Same as
7269 @option{-floop-interchange}.  To use this code transformation, GCC has
7270 to be configured with @option{--with-ppl} and @option{--with-cloog} to
7271 enable the Graphite loop transformation infrastructure.
7273 @item -floop-interchange
7274 @opindex floop-interchange
7275 Perform loop interchange transformations on loops.  Interchanging two
7276 nested loops switches the inner and outer loops.  For example, given a
7277 loop like:
7278 @smallexample
7279 DO J = 1, M
7280   DO I = 1, N
7281     A(J, I) = A(J, I) * C
7282   ENDDO
7283 ENDDO
7284 @end smallexample
7285 loop interchange transforms the loop as if it were written:
7286 @smallexample
7287 DO I = 1, N
7288   DO J = 1, M
7289     A(J, I) = A(J, I) * C
7290   ENDDO
7291 ENDDO
7292 @end smallexample
7293 which can be beneficial when @code{N} is larger than the caches,
7294 because in Fortran, the elements of an array are stored in memory
7295 contiguously by column, and the original loop iterates over rows,
7296 potentially creating at each access a cache miss.  This optimization
7297 applies to all the languages supported by GCC and is not limited to
7298 Fortran.  To use this code transformation, GCC has to be configured
7299 with @option{--with-ppl} and @option{--with-cloog} to enable the
7300 Graphite loop transformation infrastructure.
7302 @item -floop-strip-mine
7303 @opindex floop-strip-mine
7304 Perform loop strip mining transformations on loops.  Strip mining
7305 splits a loop into two nested loops.  The outer loop has strides
7306 equal to the strip size and the inner loop has strides of the
7307 original loop within a strip.  The strip length can be changed
7308 using the @option{loop-block-tile-size} parameter.  For example,
7309 given a loop like:
7310 @smallexample
7311 DO I = 1, N
7312   A(I) = A(I) + C
7313 ENDDO
7314 @end smallexample
7315 loop strip mining transforms the loop as if it were written:
7316 @smallexample
7317 DO II = 1, N, 51
7318   DO I = II, min (II + 50, N)
7319     A(I) = A(I) + C
7320   ENDDO
7321 ENDDO
7322 @end smallexample
7323 This optimization applies to all the languages supported by GCC and is
7324 not limited to Fortran.  To use this code transformation, GCC has to
7325 be configured with @option{--with-ppl} and @option{--with-cloog} to
7326 enable the Graphite loop transformation infrastructure.
7328 @item -floop-block
7329 @opindex floop-block
7330 Perform loop blocking transformations on loops.  Blocking strip mines
7331 each loop in the loop nest such that the memory accesses of the
7332 element loops fit inside caches.  The strip length can be changed
7333 using the @option{loop-block-tile-size} parameter.  For example, given
7334 a loop like:
7335 @smallexample
7336 DO I = 1, N
7337   DO J = 1, M
7338     A(J, I) = B(I) + C(J)
7339   ENDDO
7340 ENDDO
7341 @end smallexample
7342 loop blocking transforms the loop as if it were written:
7343 @smallexample
7344 DO II = 1, N, 51
7345   DO JJ = 1, M, 51
7346     DO I = II, min (II + 50, N)
7347       DO J = JJ, min (JJ + 50, M)
7348         A(J, I) = B(I) + C(J)
7349       ENDDO
7350     ENDDO
7351   ENDDO
7352 ENDDO
7353 @end smallexample
7354 which can be beneficial when @code{M} is larger than the caches,
7355 because the innermost loop iterates over a smaller amount of data
7356 which can be kept in the caches.  This optimization applies to all the
7357 languages supported by GCC and is not limited to Fortran.  To use this
7358 code transformation, GCC has to be configured with @option{--with-ppl}
7359 and @option{--with-cloog} to enable the Graphite loop transformation
7360 infrastructure.
7362 @item -fgraphite-identity
7363 @opindex fgraphite-identity
7364 Enable the identity transformation for graphite.  For every SCoP we generate
7365 the polyhedral representation and transform it back to gimple.  Using
7366 @option{-fgraphite-identity} we can check the costs or benefits of the
7367 GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
7368 are also performed by the code generator CLooG, like index splitting and
7369 dead code elimination in loops.
7371 @item -floop-nest-optimize
7372 @opindex floop-nest-optimize
7373 Enable the ISL based loop nest optimizer.  This is a generic loop nest
7374 optimizer based on the Pluto optimization algorithms.  It calculates a loop
7375 structure optimized for data-locality and parallelism.  This option
7376 is experimental.
7378 @item -floop-parallelize-all
7379 @opindex floop-parallelize-all
7380 Use the Graphite data dependence analysis to identify loops that can
7381 be parallelized.  Parallelize all the loops that can be analyzed to
7382 not contain loop carried dependences without checking that it is
7383 profitable to parallelize the loops.
7385 @item -fcheck-data-deps
7386 @opindex fcheck-data-deps
7387 Compare the results of several data dependence analyzers.  This option
7388 is used for debugging the data dependence analyzers.
7390 @item -ftree-loop-if-convert
7391 Attempt to transform conditional jumps in the innermost loops to
7392 branch-less equivalents.  The intent is to remove control-flow from
7393 the innermost loops in order to improve the ability of the
7394 vectorization pass to handle these loops.  This is enabled by default
7395 if vectorization is enabled.
7397 @item -ftree-loop-if-convert-stores
7398 Attempt to also if-convert conditional jumps containing memory writes.
7399 This transformation can be unsafe for multi-threaded programs as it
7400 transforms conditional memory writes into unconditional memory writes.
7401 For example,
7402 @smallexample
7403 for (i = 0; i < N; i++)
7404   if (cond)
7405     A[i] = expr;
7406 @end smallexample
7407 is transformed to
7408 @smallexample
7409 for (i = 0; i < N; i++)
7410   A[i] = cond ? expr : A[i];
7411 @end smallexample
7412 potentially producing data races.
7414 @item -ftree-loop-distribution
7415 Perform loop distribution.  This flag can improve cache performance on
7416 big loop bodies and allow further loop optimizations, like
7417 parallelization or vectorization, to take place.  For example, the loop
7418 @smallexample
7419 DO I = 1, N
7420   A(I) = B(I) + C
7421   D(I) = E(I) * F
7422 ENDDO
7423 @end smallexample
7424 is transformed to
7425 @smallexample
7426 DO I = 1, N
7427    A(I) = B(I) + C
7428 ENDDO
7429 DO I = 1, N
7430    D(I) = E(I) * F
7431 ENDDO
7432 @end smallexample
7434 @item -ftree-loop-distribute-patterns
7435 Perform loop distribution of patterns that can be code generated with
7436 calls to a library.  This flag is enabled by default at @option{-O3}.
7438 This pass distributes the initialization loops and generates a call to
7439 memset zero.  For example, the loop
7440 @smallexample
7441 DO I = 1, N
7442   A(I) = 0
7443   B(I) = A(I) + I
7444 ENDDO
7445 @end smallexample
7446 is transformed to
7447 @smallexample
7448 DO I = 1, N
7449    A(I) = 0
7450 ENDDO
7451 DO I = 1, N
7452    B(I) = A(I) + I
7453 ENDDO
7454 @end smallexample
7455 and the initialization loop is transformed into a call to memset zero.
7457 @item -ftree-loop-im
7458 @opindex ftree-loop-im
7459 Perform loop invariant motion on trees.  This pass moves only invariants that
7460 are hard to handle at RTL level (function calls, operations that expand to
7461 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
7462 operands of conditions that are invariant out of the loop, so that we can use
7463 just trivial invariantness analysis in loop unswitching.  The pass also includes
7464 store motion.
7466 @item -ftree-loop-ivcanon
7467 @opindex ftree-loop-ivcanon
7468 Create a canonical counter for number of iterations in loops for which
7469 determining number of iterations requires complicated analysis.  Later
7470 optimizations then may determine the number easily.  Useful especially
7471 in connection with unrolling.
7473 @item -fivopts
7474 @opindex fivopts
7475 Perform induction variable optimizations (strength reduction, induction
7476 variable merging and induction variable elimination) on trees.
7478 @item -ftree-parallelize-loops=n
7479 @opindex ftree-parallelize-loops
7480 Parallelize loops, i.e., split their iteration space to run in n threads.
7481 This is only possible for loops whose iterations are independent
7482 and can be arbitrarily reordered.  The optimization is only
7483 profitable on multiprocessor machines, for loops that are CPU-intensive,
7484 rather than constrained e.g.@: by memory bandwidth.  This option
7485 implies @option{-pthread}, and thus is only supported on targets
7486 that have support for @option{-pthread}.
7488 @item -ftree-pta
7489 @opindex ftree-pta
7490 Perform function-local points-to analysis on trees.  This flag is
7491 enabled by default at @option{-O} and higher.
7493 @item -ftree-sra
7494 @opindex ftree-sra
7495 Perform scalar replacement of aggregates.  This pass replaces structure
7496 references with scalars to prevent committing structures to memory too
7497 early.  This flag is enabled by default at @option{-O} and higher.
7499 @item -ftree-copyrename
7500 @opindex ftree-copyrename
7501 Perform copy renaming on trees.  This pass attempts to rename compiler
7502 temporaries to other variables at copy locations, usually resulting in
7503 variable names which more closely resemble the original variables.  This flag
7504 is enabled by default at @option{-O} and higher.
7506 @item -ftree-coalesce-inlined-vars
7507 Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
7508 combine small user-defined variables too, but only if they were inlined
7509 from other functions.  It is a more limited form of
7510 @option{-ftree-coalesce-vars}.  This may harm debug information of such
7511 inlined variables, but it will keep variables of the inlined-into
7512 function apart from each other, such that they are more likely to
7513 contain the expected values in a debugging session.  This was the
7514 default in GCC versions older than 4.7.
7516 @item -ftree-coalesce-vars
7517 Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
7518 combine small user-defined variables too, instead of just compiler
7519 temporaries.  This may severely limit the ability to debug an optimized
7520 program compiled with @option{-fno-var-tracking-assignments}.  In the
7521 negated form, this flag prevents SSA coalescing of user variables,
7522 including inlined ones.  This option is enabled by default.
7524 @item -ftree-ter
7525 @opindex ftree-ter
7526 Perform temporary expression replacement during the SSA->normal phase.  Single
7527 use/single def temporaries are replaced at their use location with their
7528 defining expression.  This results in non-GIMPLE code, but gives the expanders
7529 much more complex trees to work on resulting in better RTL generation.  This is
7530 enabled by default at @option{-O} and higher.
7532 @item -ftree-vectorize
7533 @opindex ftree-vectorize
7534 Perform loop vectorization on trees. This flag is enabled by default at
7535 @option{-O3}.
7537 @item -ftree-slp-vectorize
7538 @opindex ftree-slp-vectorize
7539 Perform basic block vectorization on trees. This flag is enabled by default at
7540 @option{-O3} and when @option{-ftree-vectorize} is enabled.
7542 @item -ftree-vect-loop-version
7543 @opindex ftree-vect-loop-version
7544 Perform loop versioning when doing loop vectorization on trees.  When a loop
7545 appears to be vectorizable except that data alignment or data dependence cannot
7546 be determined at compile time, then vectorized and non-vectorized versions of
7547 the loop are generated along with run-time checks for alignment or dependence
7548 to control which version is executed.  This option is enabled by default
7549 except at level @option{-Os} where it is disabled.
7551 @item -fvect-cost-model
7552 @opindex fvect-cost-model
7553 Enable cost model for vectorization.
7555 @item -ftree-vrp
7556 @opindex ftree-vrp
7557 Perform Value Range Propagation on trees.  This is similar to the
7558 constant propagation pass, but instead of values, ranges of values are
7559 propagated.  This allows the optimizers to remove unnecessary range
7560 checks like array bound checks and null pointer checks.  This is
7561 enabled by default at @option{-O2} and higher.  Null pointer check
7562 elimination is only done if @option{-fdelete-null-pointer-checks} is
7563 enabled.
7565 @item -ftracer
7566 @opindex ftracer
7567 Perform tail duplication to enlarge superblock size.  This transformation
7568 simplifies the control flow of the function allowing other optimizations to do
7569 better job.
7571 @item -funroll-loops
7572 @opindex funroll-loops
7573 Unroll loops whose number of iterations can be determined at compile
7574 time or upon entry to the loop.  @option{-funroll-loops} implies
7575 @option{-frerun-cse-after-loop}.  This option makes code larger,
7576 and may or may not make it run faster.
7578 @item -funroll-all-loops
7579 @opindex funroll-all-loops
7580 Unroll all loops, even if their number of iterations is uncertain when
7581 the loop is entered.  This usually makes programs run more slowly.
7582 @option{-funroll-all-loops} implies the same options as
7583 @option{-funroll-loops},
7585 @item -fsplit-ivs-in-unroller
7586 @opindex fsplit-ivs-in-unroller
7587 Enables expressing of values of induction variables in later iterations
7588 of the unrolled loop using the value in the first iteration.  This breaks
7589 long dependency chains, thus improving efficiency of the scheduling passes.
7591 Combination of @option{-fweb} and CSE is often sufficient to obtain the
7592 same effect.  However in cases the loop body is more complicated than
7593 a single basic block, this is not reliable.  It also does not work at all
7594 on some of the architectures due to restrictions in the CSE pass.
7596 This optimization is enabled by default.
7598 @item -fvariable-expansion-in-unroller
7599 @opindex fvariable-expansion-in-unroller
7600 With this option, the compiler creates multiple copies of some
7601 local variables when unrolling a loop, which can result in superior code.
7603 @item -fpartial-inlining
7604 @opindex fpartial-inlining
7605 Inline parts of functions.  This option has any effect only
7606 when inlining itself is turned on by the @option{-finline-functions}
7607 or @option{-finline-small-functions} options.
7609 Enabled at level @option{-O2}.
7611 @item -fpredictive-commoning
7612 @opindex fpredictive-commoning
7613 Perform predictive commoning optimization, i.e., reusing computations
7614 (especially memory loads and stores) performed in previous
7615 iterations of loops.
7617 This option is enabled at level @option{-O3}.
7619 @item -fprefetch-loop-arrays
7620 @opindex fprefetch-loop-arrays
7621 If supported by the target machine, generate instructions to prefetch
7622 memory to improve the performance of loops that access large arrays.
7624 This option may generate better or worse code; results are highly
7625 dependent on the structure of loops within the source code.
7627 Disabled at level @option{-Os}.
7629 @item -fno-peephole
7630 @itemx -fno-peephole2
7631 @opindex fno-peephole
7632 @opindex fno-peephole2
7633 Disable any machine-specific peephole optimizations.  The difference
7634 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
7635 are implemented in the compiler; some targets use one, some use the
7636 other, a few use both.
7638 @option{-fpeephole} is enabled by default.
7639 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7641 @item -fno-guess-branch-probability
7642 @opindex fno-guess-branch-probability
7643 Do not guess branch probabilities using heuristics.
7645 GCC uses heuristics to guess branch probabilities if they are
7646 not provided by profiling feedback (@option{-fprofile-arcs}).  These
7647 heuristics are based on the control flow graph.  If some branch probabilities
7648 are specified by @samp{__builtin_expect}, then the heuristics are
7649 used to guess branch probabilities for the rest of the control flow graph,
7650 taking the @samp{__builtin_expect} info into account.  The interactions
7651 between the heuristics and @samp{__builtin_expect} can be complex, and in
7652 some cases, it may be useful to disable the heuristics so that the effects
7653 of @samp{__builtin_expect} are easier to understand.
7655 The default is @option{-fguess-branch-probability} at levels
7656 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7658 @item -freorder-blocks
7659 @opindex freorder-blocks
7660 Reorder basic blocks in the compiled function in order to reduce number of
7661 taken branches and improve code locality.
7663 Enabled at levels @option{-O2}, @option{-O3}.
7665 @item -freorder-blocks-and-partition
7666 @opindex freorder-blocks-and-partition
7667 In addition to reordering basic blocks in the compiled function, in order
7668 to reduce number of taken branches, partitions hot and cold basic blocks
7669 into separate sections of the assembly and .o files, to improve
7670 paging and cache locality performance.
7672 This optimization is automatically turned off in the presence of
7673 exception handling, for linkonce sections, for functions with a user-defined
7674 section attribute and on any architecture that does not support named
7675 sections.
7677 @item -freorder-functions
7678 @opindex freorder-functions
7679 Reorder functions in the object file in order to
7680 improve code locality.  This is implemented by using special
7681 subsections @code{.text.hot} for most frequently executed functions and
7682 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
7683 the linker so object file format must support named sections and linker must
7684 place them in a reasonable way.
7686 Also profile feedback must be available in to make this option effective.  See
7687 @option{-fprofile-arcs} for details.
7689 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
7691 @item -fstrict-aliasing
7692 @opindex fstrict-aliasing
7693 Allow the compiler to assume the strictest aliasing rules applicable to
7694 the language being compiled.  For C (and C++), this activates
7695 optimizations based on the type of expressions.  In particular, an
7696 object of one type is assumed never to reside at the same address as an
7697 object of a different type, unless the types are almost the same.  For
7698 example, an @code{unsigned int} can alias an @code{int}, but not a
7699 @code{void*} or a @code{double}.  A character type may alias any other
7700 type.
7702 @anchor{Type-punning}Pay special attention to code like this:
7703 @smallexample
7704 union a_union @{
7705   int i;
7706   double d;
7709 int f() @{
7710   union a_union t;
7711   t.d = 3.0;
7712   return t.i;
7714 @end smallexample
7715 The practice of reading from a different union member than the one most
7716 recently written to (called ``type-punning'') is common.  Even with
7717 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
7718 is accessed through the union type.  So, the code above works as
7719 expected.  @xref{Structures unions enumerations and bit-fields
7720 implementation}.  However, this code might not:
7721 @smallexample
7722 int f() @{
7723   union a_union t;
7724   int* ip;
7725   t.d = 3.0;
7726   ip = &t.i;
7727   return *ip;
7729 @end smallexample
7731 Similarly, access by taking the address, casting the resulting pointer
7732 and dereferencing the result has undefined behavior, even if the cast
7733 uses a union type, e.g.:
7734 @smallexample
7735 int f() @{
7736   double d = 3.0;
7737   return ((union a_union *) &d)->i;
7739 @end smallexample
7741 The @option{-fstrict-aliasing} option is enabled at levels
7742 @option{-O2}, @option{-O3}, @option{-Os}.
7744 @item -fstrict-overflow
7745 @opindex fstrict-overflow
7746 Allow the compiler to assume strict signed overflow rules, depending
7747 on the language being compiled.  For C (and C++) this means that
7748 overflow when doing arithmetic with signed numbers is undefined, which
7749 means that the compiler may assume that it does not happen.  This
7750 permits various optimizations.  For example, the compiler assumes
7751 that an expression like @code{i + 10 > i} is always true for
7752 signed @code{i}.  This assumption is only valid if signed overflow is
7753 undefined, as the expression is false if @code{i + 10} overflows when
7754 using twos complement arithmetic.  When this option is in effect any
7755 attempt to determine whether an operation on signed numbers 
7756 overflows must be written carefully to not actually involve overflow.
7758 This option also allows the compiler to assume strict pointer
7759 semantics: given a pointer to an object, if adding an offset to that
7760 pointer does not produce a pointer to the same object, the addition is
7761 undefined.  This permits the compiler to conclude that @code{p + u >
7762 p} is always true for a pointer @code{p} and unsigned integer
7763 @code{u}.  This assumption is only valid because pointer wraparound is
7764 undefined, as the expression is false if @code{p + u} overflows using
7765 twos complement arithmetic.
7767 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
7768 that integer signed overflow is fully defined: it wraps.  When
7769 @option{-fwrapv} is used, there is no difference between
7770 @option{-fstrict-overflow} and @option{-fno-strict-overflow} for
7771 integers.  With @option{-fwrapv} certain types of overflow are
7772 permitted.  For example, if the compiler gets an overflow when doing
7773 arithmetic on constants, the overflowed value can still be used with
7774 @option{-fwrapv}, but not otherwise.
7776 The @option{-fstrict-overflow} option is enabled at levels
7777 @option{-O2}, @option{-O3}, @option{-Os}.
7779 @item -falign-functions
7780 @itemx -falign-functions=@var{n}
7781 @opindex falign-functions
7782 Align the start of functions to the next power-of-two greater than
7783 @var{n}, skipping up to @var{n} bytes.  For instance,
7784 @option{-falign-functions=32} aligns functions to the next 32-byte
7785 boundary, but @option{-falign-functions=24} aligns to the next
7786 32-byte boundary only if this can be done by skipping 23 bytes or less.
7788 @option{-fno-align-functions} and @option{-falign-functions=1} are
7789 equivalent and mean that functions are not aligned.
7791 Some assemblers only support this flag when @var{n} is a power of two;
7792 in that case, it is rounded up.
7794 If @var{n} is not specified or is zero, use a machine-dependent default.
7796 Enabled at levels @option{-O2}, @option{-O3}.
7798 @item -falign-labels
7799 @itemx -falign-labels=@var{n}
7800 @opindex falign-labels
7801 Align all branch targets to a power-of-two boundary, skipping up to
7802 @var{n} bytes like @option{-falign-functions}.  This option can easily
7803 make code slower, because it must insert dummy operations for when the
7804 branch target is reached in the usual flow of the code.
7806 @option{-fno-align-labels} and @option{-falign-labels=1} are
7807 equivalent and mean that labels are not aligned.
7809 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
7810 are greater than this value, then their values are used instead.
7812 If @var{n} is not specified or is zero, use a machine-dependent default
7813 which is very likely to be @samp{1}, meaning no alignment.
7815 Enabled at levels @option{-O2}, @option{-O3}.
7817 @item -falign-loops
7818 @itemx -falign-loops=@var{n}
7819 @opindex falign-loops
7820 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
7821 like @option{-falign-functions}.  If the loops are
7822 executed many times, this makes up for any execution of the dummy
7823 operations.
7825 @option{-fno-align-loops} and @option{-falign-loops=1} are
7826 equivalent and mean that loops are not aligned.
7828 If @var{n} is not specified or is zero, use a machine-dependent default.
7830 Enabled at levels @option{-O2}, @option{-O3}.
7832 @item -falign-jumps
7833 @itemx -falign-jumps=@var{n}
7834 @opindex falign-jumps
7835 Align branch targets to a power-of-two boundary, for branch targets
7836 where the targets can only be reached by jumping, skipping up to @var{n}
7837 bytes like @option{-falign-functions}.  In this case, no dummy operations
7838 need be executed.
7840 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
7841 equivalent and mean that loops are not aligned.
7843 If @var{n} is not specified or is zero, use a machine-dependent default.
7845 Enabled at levels @option{-O2}, @option{-O3}.
7847 @item -funit-at-a-time
7848 @opindex funit-at-a-time
7849 This option is left for compatibility reasons. @option{-funit-at-a-time}
7850 has no effect, while @option{-fno-unit-at-a-time} implies
7851 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
7853 Enabled by default.
7855 @item -fno-toplevel-reorder
7856 @opindex fno-toplevel-reorder
7857 Do not reorder top-level functions, variables, and @code{asm}
7858 statements.  Output them in the same order that they appear in the
7859 input file.  When this option is used, unreferenced static variables
7860 are not removed.  This option is intended to support existing code
7861 that relies on a particular ordering.  For new code, it is better to
7862 use attributes.
7864 Enabled at level @option{-O0}.  When disabled explicitly, it also implies
7865 @option{-fno-section-anchors}, which is otherwise enabled at @option{-O0} on some
7866 targets.
7868 @item -fweb
7869 @opindex fweb
7870 Constructs webs as commonly used for register allocation purposes and assign
7871 each web individual pseudo register.  This allows the register allocation pass
7872 to operate on pseudos directly, but also strengthens several other optimization
7873 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
7874 however, make debugging impossible, since variables no longer stay in a
7875 ``home register''.
7877 Enabled by default with @option{-funroll-loops}.
7879 @item -fwhole-program
7880 @opindex fwhole-program
7881 Assume that the current compilation unit represents the whole program being
7882 compiled.  All public functions and variables with the exception of @code{main}
7883 and those merged by attribute @code{externally_visible} become static functions
7884 and in effect are optimized more aggressively by interprocedural optimizers. If @command{gold} is used as the linker plugin, @code{externally_visible} attributes are automatically added to functions (not variable yet due to a current @command{gold} issue) that are accessed outside of LTO objects according to resolution file produced by @command{gold}.  For other linkers that cannot generate resolution file, explicit @code{externally_visible} attributes are still necessary.
7885 While this option is equivalent to proper use of the @code{static} keyword for
7886 programs consisting of a single file, in combination with option
7887 @option{-flto} this flag can be used to
7888 compile many smaller scale programs since the functions and variables become
7889 local for the whole combined compilation unit, not for the single source file
7890 itself.
7892 This option implies @option{-fwhole-file} for Fortran programs.
7894 @item -flto[=@var{n}]
7895 @opindex flto
7896 This option runs the standard link-time optimizer.  When invoked
7897 with source code, it generates GIMPLE (one of GCC's internal
7898 representations) and writes it to special ELF sections in the object
7899 file.  When the object files are linked together, all the function
7900 bodies are read from these ELF sections and instantiated as if they
7901 had been part of the same translation unit.
7903 To use the link-time optimizer, @option{-flto} needs to be specified at
7904 compile time and during the final link.  For example:
7906 @smallexample
7907 gcc -c -O2 -flto foo.c
7908 gcc -c -O2 -flto bar.c
7909 gcc -o myprog -flto -O2 foo.o bar.o
7910 @end smallexample
7912 The first two invocations to GCC save a bytecode representation
7913 of GIMPLE into special ELF sections inside @file{foo.o} and
7914 @file{bar.o}.  The final invocation reads the GIMPLE bytecode from
7915 @file{foo.o} and @file{bar.o}, merges the two files into a single
7916 internal image, and compiles the result as usual.  Since both
7917 @file{foo.o} and @file{bar.o} are merged into a single image, this
7918 causes all the interprocedural analyses and optimizations in GCC to
7919 work across the two files as if they were a single one.  This means,
7920 for example, that the inliner is able to inline functions in
7921 @file{bar.o} into functions in @file{foo.o} and vice-versa.
7923 Another (simpler) way to enable link-time optimization is:
7925 @smallexample
7926 gcc -o myprog -flto -O2 foo.c bar.c
7927 @end smallexample
7929 The above generates bytecode for @file{foo.c} and @file{bar.c},
7930 merges them together into a single GIMPLE representation and optimizes
7931 them as usual to produce @file{myprog}.
7933 The only important thing to keep in mind is that to enable link-time
7934 optimizations the @option{-flto} flag needs to be passed to both the
7935 compile and the link commands.
7937 To make whole program optimization effective, it is necessary to make
7938 certain whole program assumptions.  The compiler needs to know
7939 what functions and variables can be accessed by libraries and runtime
7940 outside of the link-time optimized unit.  When supported by the linker,
7941 the linker plugin (see @option{-fuse-linker-plugin}) passes information
7942 to the compiler about used and externally visible symbols.  When
7943 the linker plugin is not available, @option{-fwhole-program} should be
7944 used to allow the compiler to make these assumptions, which leads
7945 to more aggressive optimization decisions.
7947 Note that when a file is compiled with @option{-flto}, the generated
7948 object file is larger than a regular object file because it 
7949 contains GIMPLE bytecodes and the usual final code.  This means that
7950 object files with LTO information can be linked as normal object
7951 files; if @option{-flto} is not passed to the linker, no
7952 interprocedural optimizations are applied.
7954 Additionally, the optimization flags used to compile individual files
7955 are not necessarily related to those used at link time.  For instance,
7957 @smallexample
7958 gcc -c -O0 -flto foo.c
7959 gcc -c -O0 -flto bar.c
7960 gcc -o myprog -flto -O3 foo.o bar.o
7961 @end smallexample
7963 This produces individual object files with unoptimized assembler
7964 code, but the resulting binary @file{myprog} is optimized at
7965 @option{-O3}.  If, instead, the final binary is generated without
7966 @option{-flto}, then @file{myprog} is not optimized.
7968 When producing the final binary with @option{-flto}, GCC only
7969 applies link-time optimizations to those files that contain bytecode.
7970 Therefore, you can mix and match object files and libraries with
7971 GIMPLE bytecodes and final object code.  GCC automatically selects
7972 which files to optimize in LTO mode and which files to link without
7973 further processing.
7975 There are some code generation flags preserved by GCC when
7976 generating bytecodes, as they need to be used during the final link
7977 stage.  Currently, the following options are saved into the GIMPLE
7978 bytecode files: @option{-fPIC}, @option{-fcommon} and all the
7979 @option{-m} target flags.
7981 At link time, these options are read in and reapplied.  Note that the
7982 current implementation makes no attempt to recognize conflicting
7983 values for these options.  If different files have conflicting option
7984 values (e.g., one file is compiled with @option{-fPIC} and another
7985 isn't), the compiler simply uses the last value read from the
7986 bytecode files.  It is recommended, then, that you compile all the files
7987 participating in the same link with the same options.
7989 If LTO encounters objects with C linkage declared with incompatible
7990 types in separate translation units to be linked together (undefined
7991 behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
7992 issued.  The behavior is still undefined at run time.
7994 Another feature of LTO is that it is possible to apply interprocedural
7995 optimizations on files written in different languages.  This requires
7996 support in the language front end.  Currently, the C, C++ and
7997 Fortran front ends are capable of emitting GIMPLE bytecodes, so
7998 something like this should work:
8000 @smallexample
8001 gcc -c -flto foo.c
8002 g++ -c -flto bar.cc
8003 gfortran -c -flto baz.f90
8004 g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
8005 @end smallexample
8007 Notice that the final link is done with @command{g++} to get the C++
8008 runtime libraries and @option{-lgfortran} is added to get the Fortran
8009 runtime libraries.  In general, when mixing languages in LTO mode, you
8010 should use the same link command options as when mixing languages in a
8011 regular (non-LTO) compilation; all you need to add is @option{-flto} to
8012 all the compile and link commands.
8014 If object files containing GIMPLE bytecode are stored in a library archive, say
8015 @file{libfoo.a}, it is possible to extract and use them in an LTO link if you
8016 are using a linker with plugin support.  To enable this feature, use
8017 the flag @option{-fuse-linker-plugin} at link time:
8019 @smallexample
8020 gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
8021 @end smallexample
8023 With the linker plugin enabled, the linker extracts the needed
8024 GIMPLE files from @file{libfoo.a} and passes them on to the running GCC
8025 to make them part of the aggregated GIMPLE image to be optimized.
8027 If you are not using a linker with plugin support and/or do not
8028 enable the linker plugin, then the objects inside @file{libfoo.a}
8029 are extracted and linked as usual, but they do not participate
8030 in the LTO optimization process.
8032 Link-time optimizations do not require the presence of the whole program to
8033 operate.  If the program does not require any symbols to be exported, it is
8034 possible to combine @option{-flto} and @option{-fwhole-program} to allow
8035 the interprocedural optimizers to use more aggressive assumptions which may
8036 lead to improved optimization opportunities.
8037 Use of @option{-fwhole-program} is not needed when linker plugin is
8038 active (see @option{-fuse-linker-plugin}).
8040 The current implementation of LTO makes no
8041 attempt to generate bytecode that is portable between different
8042 types of hosts.  The bytecode files are versioned and there is a
8043 strict version check, so bytecode files generated in one version of
8044 GCC will not work with an older/newer version of GCC@.
8046 Link-time optimization does not work well with generation of debugging
8047 information.  Combining @option{-flto} with
8048 @option{-g} is currently experimental and expected to produce wrong
8049 results.
8051 If you specify the optional @var{n}, the optimization and code
8052 generation done at link time is executed in parallel using @var{n}
8053 parallel jobs by utilizing an installed @command{make} program.  The
8054 environment variable @env{MAKE} may be used to override the program
8055 used.  The default value for @var{n} is 1.
8057 You can also specify @option{-flto=jobserver} to use GNU make's
8058 job server mode to determine the number of parallel jobs. This
8059 is useful when the Makefile calling GCC is already executing in parallel.
8060 You must prepend a @samp{+} to the command recipe in the parent Makefile
8061 for this to work.  This option likely only works if @env{MAKE} is
8062 GNU make.
8064 This option is disabled by default
8066 @item -flto-partition=@var{alg}
8067 @opindex flto-partition
8068 Specify the partitioning algorithm used by the link-time optimizer.
8069 The value is either @code{1to1} to specify a partitioning mirroring
8070 the original source files or @code{balanced} to specify partitioning
8071 into equally sized chunks (whenever possible).  Specifying @code{none}
8072 as an algorithm disables partitioning and streaming completely. The
8073 default value is @code{balanced}.
8075 @item -flto-compression-level=@var{n}
8076 This option specifies the level of compression used for intermediate
8077 language written to LTO object files, and is only meaningful in
8078 conjunction with LTO mode (@option{-flto}).  Valid
8079 values are 0 (no compression) to 9 (maximum compression).  Values
8080 outside this range are clamped to either 0 or 9.  If the option is not
8081 given, a default balanced compression setting is used.
8083 @item -flto-report
8084 Prints a report with internal details on the workings of the link-time
8085 optimizer.  The contents of this report vary from version to version.
8086 It is meant to be useful to GCC developers when processing object
8087 files in LTO mode (via @option{-flto}).
8089 Disabled by default.
8091 @item -fuse-linker-plugin
8092 Enables the use of a linker plugin during link-time optimization.  This
8093 option relies on plugin support in the linker, which is available in gold
8094 or in GNU ld 2.21 or newer.
8096 This option enables the extraction of object files with GIMPLE bytecode out
8097 of library archives. This improves the quality of optimization by exposing
8098 more code to the link-time optimizer.  This information specifies what
8099 symbols can be accessed externally (by non-LTO object or during dynamic
8100 linking).  Resulting code quality improvements on binaries (and shared
8101 libraries that use hidden visibility) are similar to @code{-fwhole-program}.
8102 See @option{-flto} for a description of the effect of this flag and how to
8103 use it.
8105 This option is enabled by default when LTO support in GCC is enabled
8106 and GCC was configured for use with
8107 a linker supporting plugins (GNU ld 2.21 or newer or gold).
8109 @item -ffat-lto-objects
8110 @opindex ffat-lto-objects
8111 Fat LTO objects are object files that contain both the intermediate language
8112 and the object code. This makes them usable for both LTO linking and normal
8113 linking. This option is effective only when compiling with @option{-flto}
8114 and is ignored at link time.
8116 @option{-fno-fat-lto-objects} improves compilation time over plain LTO, but
8117 requires the complete toolchain to be aware of LTO. It requires a linker with
8118 linker plugin support for basic functionality.  Additionally,
8119 @command{nm}, @command{ar} and @command{ranlib}
8120 need to support linker plugins to allow a full-featured build environment
8121 (capable of building static libraries etc).
8123 The default is @option{-ffat-lto-objects} but this default is intended to
8124 change in future releases when linker plugin enabled environments become more
8125 common.
8127 @item -fcompare-elim
8128 @opindex fcompare-elim
8129 After register allocation and post-register allocation instruction splitting,
8130 identify arithmetic instructions that compute processor flags similar to a
8131 comparison operation based on that arithmetic.  If possible, eliminate the
8132 explicit comparison operation.
8134 This pass only applies to certain targets that cannot explicitly represent
8135 the comparison operation before register allocation is complete.
8137 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8139 @item -fcprop-registers
8140 @opindex fcprop-registers
8141 After register allocation and post-register allocation instruction splitting,
8142 we perform a copy-propagation pass to try to reduce scheduling dependencies
8143 and occasionally eliminate the copy.
8145 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
8147 @item -fprofile-correction
8148 @opindex fprofile-correction
8149 Profiles collected using an instrumented binary for multi-threaded programs may
8150 be inconsistent due to missed counter updates. When this option is specified,
8151 GCC uses heuristics to correct or smooth out such inconsistencies. By
8152 default, GCC emits an error message when an inconsistent profile is detected.
8154 @item -fprofile-dir=@var{path}
8155 @opindex fprofile-dir
8157 Set the directory to search for the profile data files in to @var{path}.
8158 This option affects only the profile data generated by
8159 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
8160 and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
8161 and its related options.  Both absolute and relative paths can be used.
8162 By default, GCC uses the current directory as @var{path}, thus the
8163 profile data file appears in the same directory as the object file.
8165 @item -fprofile-generate
8166 @itemx -fprofile-generate=@var{path}
8167 @opindex fprofile-generate
8169 Enable options usually used for instrumenting application to produce
8170 profile useful for later recompilation with profile feedback based
8171 optimization.  You must use @option{-fprofile-generate} both when
8172 compiling and when linking your program.
8174 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
8176 If @var{path} is specified, GCC looks at the @var{path} to find
8177 the profile feedback data files. See @option{-fprofile-dir}.
8179 @item -fprofile-use
8180 @itemx -fprofile-use=@var{path}
8181 @opindex fprofile-use
8182 Enable profile feedback directed optimizations, and optimizations
8183 generally profitable only with profile feedback available.
8185 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
8186 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
8188 By default, GCC emits an error message if the feedback profiles do not
8189 match the source code.  This error can be turned into a warning by using
8190 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
8191 code.
8193 If @var{path} is specified, GCC looks at the @var{path} to find
8194 the profile feedback data files. See @option{-fprofile-dir}.
8195 @end table
8197 The following options control compiler behavior regarding floating-point 
8198 arithmetic.  These options trade off between speed and
8199 correctness.  All must be specifically enabled.
8201 @table @gcctabopt
8202 @item -ffloat-store
8203 @opindex ffloat-store
8204 Do not store floating-point variables in registers, and inhibit other
8205 options that might change whether a floating-point value is taken from a
8206 register or memory.
8208 @cindex floating-point precision
8209 This option prevents undesirable excess precision on machines such as
8210 the 68000 where the floating registers (of the 68881) keep more
8211 precision than a @code{double} is supposed to have.  Similarly for the
8212 x86 architecture.  For most programs, the excess precision does only
8213 good, but a few programs rely on the precise definition of IEEE floating
8214 point.  Use @option{-ffloat-store} for such programs, after modifying
8215 them to store all pertinent intermediate computations into variables.
8217 @item -fexcess-precision=@var{style}
8218 @opindex fexcess-precision
8219 This option allows further control over excess precision on machines
8220 where floating-point registers have more precision than the IEEE
8221 @code{float} and @code{double} types and the processor does not
8222 support operations rounding to those types.  By default,
8223 @option{-fexcess-precision=fast} is in effect; this means that
8224 operations are carried out in the precision of the registers and that
8225 it is unpredictable when rounding to the types specified in the source
8226 code takes place.  When compiling C, if
8227 @option{-fexcess-precision=standard} is specified then excess
8228 precision follows the rules specified in ISO C99; in particular,
8229 both casts and assignments cause values to be rounded to their
8230 semantic types (whereas @option{-ffloat-store} only affects
8231 assignments).  This option is enabled by default for C if a strict
8232 conformance option such as @option{-std=c99} is used.
8234 @opindex mfpmath
8235 @option{-fexcess-precision=standard} is not implemented for languages
8236 other than C, and has no effect if
8237 @option{-funsafe-math-optimizations} or @option{-ffast-math} is
8238 specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
8239 or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
8240 semantics apply without excess precision, and in the latter, rounding
8241 is unpredictable.
8243 @item -ffast-math
8244 @opindex ffast-math
8245 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
8246 @option{-ffinite-math-only}, @option{-fno-rounding-math},
8247 @option{-fno-signaling-nans} and @option{-fcx-limited-range}.
8249 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
8251 This option is not turned on by any @option{-O} option besides
8252 @option{-Ofast} since it can result in incorrect output for programs
8253 that depend on an exact implementation of IEEE or ISO rules/specifications
8254 for math functions. It may, however, yield faster code for programs
8255 that do not require the guarantees of these specifications.
8257 @item -fno-math-errno
8258 @opindex fno-math-errno
8259 Do not set @code{errno} after calling math functions that are executed
8260 with a single instruction, e.g., @code{sqrt}.  A program that relies on
8261 IEEE exceptions for math error handling may want to use this flag
8262 for speed while maintaining IEEE arithmetic compatibility.
8264 This option is not turned on by any @option{-O} option since
8265 it can result in incorrect output for programs that depend on
8266 an exact implementation of IEEE or ISO rules/specifications for
8267 math functions. It may, however, yield faster code for programs
8268 that do not require the guarantees of these specifications.
8270 The default is @option{-fmath-errno}.
8272 On Darwin systems, the math library never sets @code{errno}.  There is
8273 therefore no reason for the compiler to consider the possibility that
8274 it might, and @option{-fno-math-errno} is the default.
8276 @item -funsafe-math-optimizations
8277 @opindex funsafe-math-optimizations
8279 Allow optimizations for floating-point arithmetic that (a) assume
8280 that arguments and results are valid and (b) may violate IEEE or
8281 ANSI standards.  When used at link-time, it may include libraries
8282 or startup files that change the default FPU control word or other
8283 similar optimizations.
8285 This option is not turned on by any @option{-O} option since
8286 it can result in incorrect output for programs that depend on
8287 an exact implementation of IEEE or ISO rules/specifications for
8288 math functions. It may, however, yield faster code for programs
8289 that do not require the guarantees of these specifications.
8290 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
8291 @option{-fassociative-math} and @option{-freciprocal-math}.
8293 The default is @option{-fno-unsafe-math-optimizations}.
8295 @item -fassociative-math
8296 @opindex fassociative-math
8298 Allow re-association of operands in series of floating-point operations.
8299 This violates the ISO C and C++ language standard by possibly changing
8300 computation result.  NOTE: re-ordering may change the sign of zero as
8301 well as ignore NaNs and inhibit or create underflow or overflow (and
8302 thus cannot be used on code that relies on rounding behavior like
8303 @code{(x + 2**52) - 2**52}.  May also reorder floating-point comparisons
8304 and thus may not be used when ordered comparisons are required.
8305 This option requires that both @option{-fno-signed-zeros} and
8306 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
8307 much sense with @option{-frounding-math}. For Fortran the option
8308 is automatically enabled when both @option{-fno-signed-zeros} and
8309 @option{-fno-trapping-math} are in effect.
8311 The default is @option{-fno-associative-math}.
8313 @item -freciprocal-math
8314 @opindex freciprocal-math
8316 Allow the reciprocal of a value to be used instead of dividing by
8317 the value if this enables optimizations.  For example @code{x / y}
8318 can be replaced with @code{x * (1/y)}, which is useful if @code{(1/y)}
8319 is subject to common subexpression elimination.  Note that this loses
8320 precision and increases the number of flops operating on the value.
8322 The default is @option{-fno-reciprocal-math}.
8324 @item -ffinite-math-only
8325 @opindex ffinite-math-only
8326 Allow optimizations for floating-point arithmetic that assume
8327 that arguments and results are not NaNs or +-Infs.
8329 This option is not turned on by any @option{-O} option since
8330 it can result in incorrect output for programs that depend on
8331 an exact implementation of IEEE or ISO rules/specifications for
8332 math functions. It may, however, yield faster code for programs
8333 that do not require the guarantees of these specifications.
8335 The default is @option{-fno-finite-math-only}.
8337 @item -fno-signed-zeros
8338 @opindex fno-signed-zeros
8339 Allow optimizations for floating-point arithmetic that ignore the
8340 signedness of zero.  IEEE arithmetic specifies the behavior of
8341 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
8342 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
8343 This option implies that the sign of a zero result isn't significant.
8345 The default is @option{-fsigned-zeros}.
8347 @item -fno-trapping-math
8348 @opindex fno-trapping-math
8349 Compile code assuming that floating-point operations cannot generate
8350 user-visible traps.  These traps include division by zero, overflow,
8351 underflow, inexact result and invalid operation.  This option requires
8352 that @option{-fno-signaling-nans} be in effect.  Setting this option may
8353 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
8355 This option should never be turned on by any @option{-O} option since
8356 it can result in incorrect output for programs that depend on
8357 an exact implementation of IEEE or ISO rules/specifications for
8358 math functions.
8360 The default is @option{-ftrapping-math}.
8362 @item -frounding-math
8363 @opindex frounding-math
8364 Disable transformations and optimizations that assume default floating-point
8365 rounding behavior.  This is round-to-zero for all floating point
8366 to integer conversions, and round-to-nearest for all other arithmetic
8367 truncations.  This option should be specified for programs that change
8368 the FP rounding mode dynamically, or that may be executed with a
8369 non-default rounding mode.  This option disables constant folding of
8370 floating-point expressions at compile time (which may be affected by
8371 rounding mode) and arithmetic transformations that are unsafe in the
8372 presence of sign-dependent rounding modes.
8374 The default is @option{-fno-rounding-math}.
8376 This option is experimental and does not currently guarantee to
8377 disable all GCC optimizations that are affected by rounding mode.
8378 Future versions of GCC may provide finer control of this setting
8379 using C99's @code{FENV_ACCESS} pragma.  This command-line option
8380 will be used to specify the default state for @code{FENV_ACCESS}.
8382 @item -fsignaling-nans
8383 @opindex fsignaling-nans
8384 Compile code assuming that IEEE signaling NaNs may generate user-visible
8385 traps during floating-point operations.  Setting this option disables
8386 optimizations that may change the number of exceptions visible with
8387 signaling NaNs.  This option implies @option{-ftrapping-math}.
8389 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
8390 be defined.
8392 The default is @option{-fno-signaling-nans}.
8394 This option is experimental and does not currently guarantee to
8395 disable all GCC optimizations that affect signaling NaN behavior.
8397 @item -fsingle-precision-constant
8398 @opindex fsingle-precision-constant
8399 Treat floating-point constants as single precision instead of
8400 implicitly converting them to double-precision constants.
8402 @item -fcx-limited-range
8403 @opindex fcx-limited-range
8404 When enabled, this option states that a range reduction step is not
8405 needed when performing complex division.  Also, there is no checking
8406 whether the result of a complex multiplication or division is @code{NaN
8407 + I*NaN}, with an attempt to rescue the situation in that case.  The
8408 default is @option{-fno-cx-limited-range}, but is enabled by
8409 @option{-ffast-math}.
8411 This option controls the default setting of the ISO C99
8412 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
8413 all languages.
8415 @item -fcx-fortran-rules
8416 @opindex fcx-fortran-rules
8417 Complex multiplication and division follow Fortran rules.  Range
8418 reduction is done as part of complex division, but there is no checking
8419 whether the result of a complex multiplication or division is @code{NaN
8420 + I*NaN}, with an attempt to rescue the situation in that case.
8422 The default is @option{-fno-cx-fortran-rules}.
8424 @end table
8426 The following options control optimizations that may improve
8427 performance, but are not enabled by any @option{-O} options.  This
8428 section includes experimental options that may produce broken code.
8430 @table @gcctabopt
8431 @item -fbranch-probabilities
8432 @opindex fbranch-probabilities
8433 After running a program compiled with @option{-fprofile-arcs}
8434 (@pxref{Debugging Options,, Options for Debugging Your Program or
8435 @command{gcc}}), you can compile it a second time using
8436 @option{-fbranch-probabilities}, to improve optimizations based on
8437 the number of times each branch was taken.  When the program
8438 compiled with @option{-fprofile-arcs} exits it saves arc execution
8439 counts to a file called @file{@var{sourcename}.gcda} for each source
8440 file.  The information in this data file is very dependent on the
8441 structure of the generated code, so you must use the same source code
8442 and the same optimization options for both compilations.
8444 With @option{-fbranch-probabilities}, GCC puts a
8445 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
8446 These can be used to improve optimization.  Currently, they are only
8447 used in one place: in @file{reorg.c}, instead of guessing which path a
8448 branch is most likely to take, the @samp{REG_BR_PROB} values are used to
8449 exactly determine which path is taken more often.
8451 @item -fprofile-values
8452 @opindex fprofile-values
8453 If combined with @option{-fprofile-arcs}, it adds code so that some
8454 data about values of expressions in the program is gathered.
8456 With @option{-fbranch-probabilities}, it reads back the data gathered
8457 from profiling values of expressions for usage in optimizations.
8459 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
8461 @item -fvpt
8462 @opindex fvpt
8463 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
8464 a code to gather information about values of expressions.
8466 With @option{-fbranch-probabilities}, it reads back the data gathered
8467 and actually performs the optimizations based on them.
8468 Currently the optimizations include specialization of division operation
8469 using the knowledge about the value of the denominator.
8471 @item -frename-registers
8472 @opindex frename-registers
8473 Attempt to avoid false dependencies in scheduled code by making use
8474 of registers left over after register allocation.  This optimization
8475 most benefits processors with lots of registers.  Depending on the
8476 debug information format adopted by the target, however, it can
8477 make debugging impossible, since variables no longer stay in
8478 a ``home register''.
8480 Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
8482 @item -ftracer
8483 @opindex ftracer
8484 Perform tail duplication to enlarge superblock size.  This transformation
8485 simplifies the control flow of the function allowing other optimizations to do
8486 better job.
8488 Enabled with @option{-fprofile-use}.
8490 @item -funroll-loops
8491 @opindex funroll-loops
8492 Unroll loops whose number of iterations can be determined at compile time or
8493 upon entry to the loop.  @option{-funroll-loops} implies
8494 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
8495 It also turns on complete loop peeling (i.e.@: complete removal of loops with
8496 small constant number of iterations).  This option makes code larger, and may
8497 or may not make it run faster.
8499 Enabled with @option{-fprofile-use}.
8501 @item -funroll-all-loops
8502 @opindex funroll-all-loops
8503 Unroll all loops, even if their number of iterations is uncertain when
8504 the loop is entered.  This usually makes programs run more slowly.
8505 @option{-funroll-all-loops} implies the same options as
8506 @option{-funroll-loops}.
8508 @item -fpeel-loops
8509 @opindex fpeel-loops
8510 Peels loops for which there is enough information that they do not
8511 roll much (from profile feedback).  It also turns on complete loop peeling
8512 (i.e.@: complete removal of loops with small constant number of iterations).
8514 Enabled with @option{-fprofile-use}.
8516 @item -fmove-loop-invariants
8517 @opindex fmove-loop-invariants
8518 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
8519 at level @option{-O1}
8521 @item -funswitch-loops
8522 @opindex funswitch-loops
8523 Move branches with loop invariant conditions out of the loop, with duplicates
8524 of the loop on both branches (modified according to result of the condition).
8526 @item -ffunction-sections
8527 @itemx -fdata-sections
8528 @opindex ffunction-sections
8529 @opindex fdata-sections
8530 Place each function or data item into its own section in the output
8531 file if the target supports arbitrary sections.  The name of the
8532 function or the name of the data item determines the section's name
8533 in the output file.
8535 Use these options on systems where the linker can perform optimizations
8536 to improve locality of reference in the instruction space.  Most systems
8537 using the ELF object format and SPARC processors running Solaris 2 have
8538 linkers with such optimizations.  AIX may have these optimizations in
8539 the future.
8541 Only use these options when there are significant benefits from doing
8542 so.  When you specify these options, the assembler and linker
8543 create larger object and executable files and are also slower.
8544 You cannot use @code{gprof} on all systems if you
8545 specify this option, and you may have problems with debugging if
8546 you specify both this option and @option{-g}.
8548 @item -fbranch-target-load-optimize
8549 @opindex fbranch-target-load-optimize
8550 Perform branch target register load optimization before prologue / epilogue
8551 threading.
8552 The use of target registers can typically be exposed only during reload,
8553 thus hoisting loads out of loops and doing inter-block scheduling needs
8554 a separate optimization pass.
8556 @item -fbranch-target-load-optimize2
8557 @opindex fbranch-target-load-optimize2
8558 Perform branch target register load optimization after prologue / epilogue
8559 threading.
8561 @item -fbtr-bb-exclusive
8562 @opindex fbtr-bb-exclusive
8563 When performing branch target register load optimization, don't reuse
8564 branch target registers in within any basic block.
8566 @item -fstack-protector
8567 @opindex fstack-protector
8568 Emit extra code to check for buffer overflows, such as stack smashing
8569 attacks.  This is done by adding a guard variable to functions with
8570 vulnerable objects.  This includes functions that call @code{alloca}, and
8571 functions with buffers larger than 8 bytes.  The guards are initialized
8572 when a function is entered and then checked when the function exits.
8573 If a guard check fails, an error message is printed and the program exits.
8575 @item -fstack-protector-all
8576 @opindex fstack-protector-all
8577 Like @option{-fstack-protector} except that all functions are protected.
8579 @item -fsection-anchors
8580 @opindex fsection-anchors
8581 Try to reduce the number of symbolic address calculations by using
8582 shared ``anchor'' symbols to address nearby objects.  This transformation
8583 can help to reduce the number of GOT entries and GOT accesses on some
8584 targets.
8586 For example, the implementation of the following function @code{foo}:
8588 @smallexample
8589 static int a, b, c;
8590 int foo (void) @{ return a + b + c; @}
8591 @end smallexample
8593 @noindent
8594 usually calculates the addresses of all three variables, but if you
8595 compile it with @option{-fsection-anchors}, it accesses the variables
8596 from a common anchor point instead.  The effect is similar to the
8597 following pseudocode (which isn't valid C):
8599 @smallexample
8600 int foo (void)
8602   register int *xr = &x;
8603   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
8605 @end smallexample
8607 Not all targets support this option.
8609 @item --param @var{name}=@var{value}
8610 @opindex param
8611 In some places, GCC uses various constants to control the amount of
8612 optimization that is done.  For example, GCC does not inline functions
8613 that contain more than a certain number of instructions.  You can
8614 control some of these constants on the command line using the
8615 @option{--param} option.
8617 The names of specific parameters, and the meaning of the values, are
8618 tied to the internals of the compiler, and are subject to change
8619 without notice in future releases.
8621 In each case, the @var{value} is an integer.  The allowable choices for
8622 @var{name} are given in the following table:
8624 @table @gcctabopt
8625 @item predictable-branch-outcome
8626 When branch is predicted to be taken with probability lower than this threshold
8627 (in percent), then it is considered well predictable. The default is 10.
8629 @item max-crossjump-edges
8630 The maximum number of incoming edges to consider for crossjumping.
8631 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
8632 the number of edges incoming to each block.  Increasing values mean
8633 more aggressive optimization, making the compilation time increase with
8634 probably small improvement in executable size.
8636 @item min-crossjump-insns
8637 The minimum number of instructions that must be matched at the end
8638 of two blocks before crossjumping is performed on them.  This
8639 value is ignored in the case where all instructions in the block being
8640 crossjumped from are matched.  The default value is 5.
8642 @item max-grow-copy-bb-insns
8643 The maximum code size expansion factor when copying basic blocks
8644 instead of jumping.  The expansion is relative to a jump instruction.
8645 The default value is 8.
8647 @item max-goto-duplication-insns
8648 The maximum number of instructions to duplicate to a block that jumps
8649 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
8650 passes, GCC factors computed gotos early in the compilation process,
8651 and unfactors them as late as possible.  Only computed jumps at the
8652 end of a basic blocks with no more than max-goto-duplication-insns are
8653 unfactored.  The default value is 8.
8655 @item max-delay-slot-insn-search
8656 The maximum number of instructions to consider when looking for an
8657 instruction to fill a delay slot.  If more than this arbitrary number of
8658 instructions are searched, the time savings from filling the delay slot
8659 are minimal, so stop searching.  Increasing values mean more
8660 aggressive optimization, making the compilation time increase with probably
8661 small improvement in execution time.
8663 @item max-delay-slot-live-search
8664 When trying to fill delay slots, the maximum number of instructions to
8665 consider when searching for a block with valid live register
8666 information.  Increasing this arbitrarily chosen value means more
8667 aggressive optimization, increasing the compilation time.  This parameter
8668 should be removed when the delay slot code is rewritten to maintain the
8669 control-flow graph.
8671 @item max-gcse-memory
8672 The approximate maximum amount of memory that can be allocated in
8673 order to perform the global common subexpression elimination
8674 optimization.  If more memory than specified is required, the
8675 optimization is not done.
8677 @item max-gcse-insertion-ratio
8678 If the ratio of expression insertions to deletions is larger than this value
8679 for any expression, then RTL PRE inserts or removes the expression and thus
8680 leaves partially redundant computations in the instruction stream.  The default value is 20.
8682 @item max-pending-list-length
8683 The maximum number of pending dependencies scheduling allows
8684 before flushing the current state and starting over.  Large functions
8685 with few branches or calls can create excessively large lists which
8686 needlessly consume memory and resources.
8688 @item max-modulo-backtrack-attempts
8689 The maximum number of backtrack attempts the scheduler should make
8690 when modulo scheduling a loop.  Larger values can exponentially increase
8691 compilation time.
8693 @item max-inline-insns-single
8694 Several parameters control the tree inliner used in GCC@.
8695 This number sets the maximum number of instructions (counted in GCC's
8696 internal representation) in a single function that the tree inliner
8697 considers for inlining.  This only affects functions declared
8698 inline and methods implemented in a class declaration (C++).
8699 The default value is 400.
8701 @item max-inline-insns-auto
8702 When you use @option{-finline-functions} (included in @option{-O3}),
8703 a lot of functions that would otherwise not be considered for inlining
8704 by the compiler are investigated.  To those functions, a different
8705 (more restrictive) limit compared to functions declared inline can
8706 be applied.
8707 The default value is 40.
8709 @item large-function-insns
8710 The limit specifying really large functions.  For functions larger than this
8711 limit after inlining, inlining is constrained by
8712 @option{--param large-function-growth}.  This parameter is useful primarily
8713 to avoid extreme compilation time caused by non-linear algorithms used by the
8714 back end.
8715 The default value is 2700.
8717 @item large-function-growth
8718 Specifies maximal growth of large function caused by inlining in percents.
8719 The default value is 100 which limits large function growth to 2.0 times
8720 the original size.
8722 @item large-unit-insns
8723 The limit specifying large translation unit.  Growth caused by inlining of
8724 units larger than this limit is limited by @option{--param inline-unit-growth}.
8725 For small units this might be too tight (consider unit consisting of function A
8726 that is inline and B that just calls A three time.  If B is small relative to
8727 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
8728 large units consisting of small inlineable functions however the overall unit
8729 growth limit is needed to avoid exponential explosion of code size.  Thus for
8730 smaller units, the size is increased to @option{--param large-unit-insns}
8731 before applying @option{--param inline-unit-growth}.  The default is 10000
8733 @item inline-unit-growth
8734 Specifies maximal overall growth of the compilation unit caused by inlining.
8735 The default value is 30 which limits unit growth to 1.3 times the original
8736 size.
8738 @item ipcp-unit-growth
8739 Specifies maximal overall growth of the compilation unit caused by
8740 interprocedural constant propagation.  The default value is 10 which limits
8741 unit growth to 1.1 times the original size.
8743 @item large-stack-frame
8744 The limit specifying large stack frames.  While inlining the algorithm is trying
8745 to not grow past this limit too much.  Default value is 256 bytes.
8747 @item large-stack-frame-growth
8748 Specifies maximal growth of large stack frames caused by inlining in percents.
8749 The default value is 1000 which limits large stack frame growth to 11 times
8750 the original size.
8752 @item max-inline-insns-recursive
8753 @itemx max-inline-insns-recursive-auto
8754 Specifies maximum number of instructions out-of-line copy of self recursive inline
8755 function can grow into by performing recursive inlining.
8757 For functions declared inline @option{--param max-inline-insns-recursive} is
8758 taken into account.  For function not declared inline, recursive inlining
8759 happens only when @option{-finline-functions} (included in @option{-O3}) is
8760 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
8761 default value is 450.
8763 @item max-inline-recursive-depth
8764 @itemx max-inline-recursive-depth-auto
8765 Specifies maximum recursion depth used by the recursive inlining.
8767 For functions declared inline @option{--param max-inline-recursive-depth} is
8768 taken into account.  For function not declared inline, recursive inlining
8769 happens only when @option{-finline-functions} (included in @option{-O3}) is
8770 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
8771 default value is 8.
8773 @item min-inline-recursive-probability
8774 Recursive inlining is profitable only for function having deep recursion
8775 in average and can hurt for function having little recursion depth by
8776 increasing the prologue size or complexity of function body to other
8777 optimizers.
8779 When profile feedback is available (see @option{-fprofile-generate}) the actual
8780 recursion depth can be guessed from probability that function will recurse via
8781 given call expression.  This parameter limits inlining only to call expression
8782 whose probability exceeds given threshold (in percents).  The default value is
8785 @item early-inlining-insns
8786 Specify growth that early inliner can make.  In effect it increases amount of
8787 inlining for code having large abstraction penalty.  The default value is 10.
8789 @item max-early-inliner-iterations
8790 @itemx max-early-inliner-iterations
8791 Limit of iterations of early inliner.  This basically bounds number of nested
8792 indirect calls early inliner can resolve.  Deeper chains are still handled by
8793 late inlining.
8795 @item comdat-sharing-probability
8796 @itemx comdat-sharing-probability
8797 Probability (in percent) that C++ inline function with comdat visibility
8798 are shared across multiple compilation units.  The default value is 20.
8800 @item min-vect-loop-bound
8801 The minimum number of iterations under which a loop is not vectorized
8802 when @option{-ftree-vectorize} is used.  The number of iterations after
8803 vectorization needs to be greater than the value specified by this option
8804 to allow vectorization.  The default value is 0.
8806 @item gcse-cost-distance-ratio
8807 Scaling factor in calculation of maximum distance an expression
8808 can be moved by GCSE optimizations.  This is currently supported only in the
8809 code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
8810 is with simple expressions, i.e., the expressions that have cost
8811 less than @option{gcse-unrestricted-cost}.  Specifying 0 disables
8812 hoisting of simple expressions.  The default value is 10.
8814 @item gcse-unrestricted-cost
8815 Cost, roughly measured as the cost of a single typical machine
8816 instruction, at which GCSE optimizations do not constrain
8817 the distance an expression can travel.  This is currently
8818 supported only in the code hoisting pass.  The lesser the cost,
8819 the more aggressive code hoisting is.  Specifying 0 
8820 allows all expressions to travel unrestricted distances.
8821 The default value is 3.
8823 @item max-hoist-depth
8824 The depth of search in the dominator tree for expressions to hoist.
8825 This is used to avoid quadratic behavior in hoisting algorithm.
8826 The value of 0 does not limit on the search, but may slow down compilation
8827 of huge functions.  The default value is 30.
8829 @item max-tail-merge-comparisons
8830 The maximum amount of similar bbs to compare a bb with.  This is used to
8831 avoid quadratic behavior in tree tail merging.  The default value is 10.
8833 @item max-tail-merge-iterations
8834 The maximum amount of iterations of the pass over the function.  This is used to
8835 limit compilation time in tree tail merging.  The default value is 2.
8837 @item max-unrolled-insns
8838 The maximum number of instructions that a loop should have if that loop
8839 is unrolled, and if the loop is unrolled, it determines how many times
8840 the loop code is unrolled.
8842 @item max-average-unrolled-insns
8843 The maximum number of instructions biased by probabilities of their execution
8844 that a loop should have if that loop is unrolled, and if the loop is unrolled,
8845 it determines how many times the loop code is unrolled.
8847 @item max-unroll-times
8848 The maximum number of unrollings of a single loop.
8850 @item max-peeled-insns
8851 The maximum number of instructions that a loop should have if that loop
8852 is peeled, and if the loop is peeled, it determines how many times
8853 the loop code is peeled.
8855 @item max-peel-times
8856 The maximum number of peelings of a single loop.
8858 @item max-completely-peeled-insns
8859 The maximum number of insns of a completely peeled loop.
8861 @item max-completely-peel-times
8862 The maximum number of iterations of a loop to be suitable for complete peeling.
8864 @item max-completely-peel-loop-nest-depth
8865 The maximum depth of a loop nest suitable for complete peeling.
8867 @item max-unswitch-insns
8868 The maximum number of insns of an unswitched loop.
8870 @item max-unswitch-level
8871 The maximum number of branches unswitched in a single loop.
8873 @item lim-expensive
8874 The minimum cost of an expensive expression in the loop invariant motion.
8876 @item iv-consider-all-candidates-bound
8877 Bound on number of candidates for induction variables below that
8878 all candidates are considered for each use in induction variable
8879 optimizations.  Only the most relevant candidates are considered
8880 if there are more candidates, to avoid quadratic time complexity.
8882 @item iv-max-considered-uses
8883 The induction variable optimizations give up on loops that contain more
8884 induction variable uses.
8886 @item iv-always-prune-cand-set-bound
8887 If number of candidates in the set is smaller than this value,
8888 we always try to remove unnecessary ivs from the set during its
8889 optimization when a new iv is added to the set.
8891 @item scev-max-expr-size
8892 Bound on size of expressions used in the scalar evolutions analyzer.
8893 Large expressions slow the analyzer.
8895 @item scev-max-expr-complexity
8896 Bound on the complexity of the expressions in the scalar evolutions analyzer.
8897 Complex expressions slow the analyzer.
8899 @item omega-max-vars
8900 The maximum number of variables in an Omega constraint system.
8901 The default value is 128.
8903 @item omega-max-geqs
8904 The maximum number of inequalities in an Omega constraint system.
8905 The default value is 256.
8907 @item omega-max-eqs
8908 The maximum number of equalities in an Omega constraint system.
8909 The default value is 128.
8911 @item omega-max-wild-cards
8912 The maximum number of wildcard variables that the Omega solver is
8913 able to insert.  The default value is 18.
8915 @item omega-hash-table-size
8916 The size of the hash table in the Omega solver.  The default value is
8917 550.
8919 @item omega-max-keys
8920 The maximal number of keys used by the Omega solver.  The default
8921 value is 500.
8923 @item omega-eliminate-redundant-constraints
8924 When set to 1, use expensive methods to eliminate all redundant
8925 constraints.  The default value is 0.
8927 @item vect-max-version-for-alignment-checks
8928 The maximum number of run-time checks that can be performed when
8929 doing loop versioning for alignment in the vectorizer.  See option
8930 @option{-ftree-vect-loop-version} for more information.
8932 @item vect-max-version-for-alias-checks
8933 The maximum number of run-time checks that can be performed when
8934 doing loop versioning for alias in the vectorizer.  See option
8935 @option{-ftree-vect-loop-version} for more information.
8937 @item max-iterations-to-track
8939 The maximum number of iterations of a loop the brute force algorithm
8940 for analysis of # of iterations of the loop tries to evaluate.
8942 @item hot-bb-count-fraction
8943 Select fraction of the maximal count of repetitions of basic block in program
8944 given basic block needs to have to be considered hot.
8946 @item hot-bb-frequency-fraction
8947 Select fraction of the entry block frequency of executions of basic block in
8948 function given basic block needs to have to be considered hot.
8950 @item max-predicted-iterations
8951 The maximum number of loop iterations we predict statically.  This is useful
8952 in cases where a function contains a single loop with known bound and
8953 another loop with unknown bound.
8954 The known number of iterations is predicted correctly, while
8955 the unknown number of iterations average to roughly 10.  This means that the
8956 loop without bounds appears artificially cold relative to the other one.
8958 @item align-threshold
8960 Select fraction of the maximal frequency of executions of a basic block in
8961 a function to align the basic block.
8963 @item align-loop-iterations
8965 A loop expected to iterate at least the selected number of iterations is
8966 aligned.
8968 @item tracer-dynamic-coverage
8969 @itemx tracer-dynamic-coverage-feedback
8971 This value is used to limit superblock formation once the given percentage of
8972 executed instructions is covered.  This limits unnecessary code size
8973 expansion.
8975 The @option{tracer-dynamic-coverage-feedback} is used only when profile
8976 feedback is available.  The real profiles (as opposed to statically estimated
8977 ones) are much less balanced allowing the threshold to be larger value.
8979 @item tracer-max-code-growth
8980 Stop tail duplication once code growth has reached given percentage.  This is
8981 a rather artificial limit, as most of the duplicates are eliminated later in
8982 cross jumping, so it may be set to much higher values than is the desired code
8983 growth.
8985 @item tracer-min-branch-ratio
8987 Stop reverse growth when the reverse probability of best edge is less than this
8988 threshold (in percent).
8990 @item tracer-min-branch-ratio
8991 @itemx tracer-min-branch-ratio-feedback
8993 Stop forward growth if the best edge has probability lower than this
8994 threshold.
8996 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
8997 compilation for profile feedback and one for compilation without.  The value
8998 for compilation with profile feedback needs to be more conservative (higher) in
8999 order to make tracer effective.
9001 @item max-cse-path-length
9003 Maximum number of basic blocks on path that cse considers.  The default is 10.
9005 @item max-cse-insns
9006 The maximum instructions CSE process before flushing. The default is 1000.
9008 @item ggc-min-expand
9010 GCC uses a garbage collector to manage its own memory allocation.  This
9011 parameter specifies the minimum percentage by which the garbage
9012 collector's heap should be allowed to expand between collections.
9013 Tuning this may improve compilation speed; it has no effect on code
9014 generation.
9016 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
9017 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of ``RAM'' is
9018 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
9019 GCC is not able to calculate RAM on a particular platform, the lower
9020 bound of 30% is used.  Setting this parameter and
9021 @option{ggc-min-heapsize} to zero causes a full collection to occur at
9022 every opportunity.  This is extremely slow, but can be useful for
9023 debugging.
9025 @item ggc-min-heapsize
9027 Minimum size of the garbage collector's heap before it begins bothering
9028 to collect garbage.  The first collection occurs after the heap expands
9029 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
9030 tuning this may improve compilation speed, and has no effect on code
9031 generation.
9033 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit that
9034 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
9035 with a lower bound of 4096 (four megabytes) and an upper bound of
9036 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
9037 particular platform, the lower bound is used.  Setting this parameter
9038 very large effectively disables garbage collection.  Setting this
9039 parameter and @option{ggc-min-expand} to zero causes a full collection
9040 to occur at every opportunity.
9042 @item max-reload-search-insns
9043 The maximum number of instruction reload should look backward for equivalent
9044 register.  Increasing values mean more aggressive optimization, making the
9045 compilation time increase with probably slightly better performance.
9046 The default value is 100.
9048 @item max-cselib-memory-locations
9049 The maximum number of memory locations cselib should take into account.
9050 Increasing values mean more aggressive optimization, making the compilation time
9051 increase with probably slightly better performance.  The default value is 500.
9053 @item reorder-blocks-duplicate
9054 @itemx reorder-blocks-duplicate-feedback
9056 Used by basic block reordering pass to decide whether to use unconditional
9057 branch or duplicate the code on its destination.  Code is duplicated when its
9058 estimated size is smaller than this value multiplied by the estimated size of
9059 unconditional jump in the hot spots of the program.
9061 The @option{reorder-block-duplicate-feedback} is used only when profile
9062 feedback is available and may be set to higher values than
9063 @option{reorder-block-duplicate} since information about the hot spots is more
9064 accurate.
9066 @item max-sched-ready-insns
9067 The maximum number of instructions ready to be issued the scheduler should
9068 consider at any given time during the first scheduling pass.  Increasing
9069 values mean more thorough searches, making the compilation time increase
9070 with probably little benefit.  The default value is 100.
9072 @item max-sched-region-blocks
9073 The maximum number of blocks in a region to be considered for
9074 interblock scheduling.  The default value is 10.
9076 @item max-pipeline-region-blocks
9077 The maximum number of blocks in a region to be considered for
9078 pipelining in the selective scheduler.  The default value is 15.
9080 @item max-sched-region-insns
9081 The maximum number of insns in a region to be considered for
9082 interblock scheduling.  The default value is 100.
9084 @item max-pipeline-region-insns
9085 The maximum number of insns in a region to be considered for
9086 pipelining in the selective scheduler.  The default value is 200.
9088 @item min-spec-prob
9089 The minimum probability (in percents) of reaching a source block
9090 for interblock speculative scheduling.  The default value is 40.
9092 @item max-sched-extend-regions-iters
9093 The maximum number of iterations through CFG to extend regions.
9094 A value of 0 (the default) disables region extensions.
9096 @item max-sched-insn-conflict-delay
9097 The maximum conflict delay for an insn to be considered for speculative motion.
9098 The default value is 3.
9100 @item sched-spec-prob-cutoff
9101 The minimal probability of speculation success (in percents), so that
9102 speculative insns are scheduled.
9103 The default value is 40.
9105 @item sched-mem-true-dep-cost
9106 Minimal distance (in CPU cycles) between store and load targeting same
9107 memory locations.  The default value is 1.
9109 @item selsched-max-lookahead
9110 The maximum size of the lookahead window of selective scheduling.  It is a
9111 depth of search for available instructions.
9112 The default value is 50.
9114 @item selsched-max-sched-times
9115 The maximum number of times that an instruction is scheduled during
9116 selective scheduling.  This is the limit on the number of iterations
9117 through which the instruction may be pipelined.  The default value is 2.
9119 @item selsched-max-insns-to-rename
9120 The maximum number of best instructions in the ready list that are considered
9121 for renaming in the selective scheduler.  The default value is 2.
9123 @item sms-min-sc
9124 The minimum value of stage count that swing modulo scheduler
9125 generates.  The default value is 2.
9127 @item max-last-value-rtl
9128 The maximum size measured as number of RTLs that can be recorded in an expression
9129 in combiner for a pseudo register as last known value of that register.  The default
9130 is 10000.
9132 @item integer-share-limit
9133 Small integer constants can use a shared data structure, reducing the
9134 compiler's memory usage and increasing its speed.  This sets the maximum
9135 value of a shared integer constant.  The default value is 256.
9137 @item min-virtual-mappings
9138 Specifies the minimum number of virtual mappings in the incremental
9139 SSA updater that should be registered to trigger the virtual mappings
9140 heuristic defined by virtual-mappings-ratio.  The default value is
9141 100.
9143 @item virtual-mappings-ratio
9144 If the number of virtual mappings is virtual-mappings-ratio bigger
9145 than the number of virtual symbols to be updated, then the incremental
9146 SSA updater switches to a full update for those symbols.  The default
9147 ratio is 3.
9149 @item ssp-buffer-size
9150 The minimum size of buffers (i.e.@: arrays) that receive stack smashing
9151 protection when @option{-fstack-protection} is used.
9153 @item max-jump-thread-duplication-stmts
9154 Maximum number of statements allowed in a block that needs to be
9155 duplicated when threading jumps.
9157 @item max-fields-for-field-sensitive
9158 Maximum number of fields in a structure treated in
9159 a field sensitive manner during pointer analysis.  The default is zero
9160 for @option{-O0} and @option{-O1},
9161 and 100 for @option{-Os}, @option{-O2}, and @option{-O3}.
9163 @item prefetch-latency
9164 Estimate on average number of instructions that are executed before
9165 prefetch finishes.  The distance we prefetch ahead is proportional
9166 to this constant.  Increasing this number may also lead to less
9167 streams being prefetched (see @option{simultaneous-prefetches}).
9169 @item simultaneous-prefetches
9170 Maximum number of prefetches that can run at the same time.
9172 @item l1-cache-line-size
9173 The size of cache line in L1 cache, in bytes.
9175 @item l1-cache-size
9176 The size of L1 cache, in kilobytes.
9178 @item l2-cache-size
9179 The size of L2 cache, in kilobytes.
9181 @item min-insn-to-prefetch-ratio
9182 The minimum ratio between the number of instructions and the
9183 number of prefetches to enable prefetching in a loop.
9185 @item prefetch-min-insn-to-mem-ratio
9186 The minimum ratio between the number of instructions and the
9187 number of memory references to enable prefetching in a loop.
9189 @item use-canonical-types
9190 Whether the compiler should use the ``canonical'' type system.  By
9191 default, this should always be 1, which uses a more efficient internal
9192 mechanism for comparing types in C++ and Objective-C++.  However, if
9193 bugs in the canonical type system are causing compilation failures,
9194 set this value to 0 to disable canonical types.
9196 @item switch-conversion-max-branch-ratio
9197 Switch initialization conversion refuses to create arrays that are
9198 bigger than @option{switch-conversion-max-branch-ratio} times the number of
9199 branches in the switch.
9201 @item max-partial-antic-length
9202 Maximum length of the partial antic set computed during the tree
9203 partial redundancy elimination optimization (@option{-ftree-pre}) when
9204 optimizing at @option{-O3} and above.  For some sorts of source code
9205 the enhanced partial redundancy elimination optimization can run away,
9206 consuming all of the memory available on the host machine.  This
9207 parameter sets a limit on the length of the sets that are computed,
9208 which prevents the runaway behavior.  Setting a value of 0 for
9209 this parameter allows an unlimited set length.
9211 @item sccvn-max-scc-size
9212 Maximum size of a strongly connected component (SCC) during SCCVN
9213 processing.  If this limit is hit, SCCVN processing for the whole
9214 function is not done and optimizations depending on it are
9215 disabled.  The default maximum SCC size is 10000.
9217 @item ira-max-loops-num
9218 IRA uses regional register allocation by default.  If a function
9219 contains more loops than the number given by this parameter, only at most
9220 the given number of the most frequently-executed loops form regions
9221 for regional register allocation.  The default value of the
9222 parameter is 100.
9224 @item ira-max-conflict-table-size 
9225 Although IRA uses a sophisticated algorithm to compress the conflict
9226 table, the table can still require excessive amounts of memory for
9227 huge functions.  If the conflict table for a function could be more
9228 than the size in MB given by this parameter, the register allocator
9229 instead uses a faster, simpler, and lower-quality
9230 algorithm that does not require building a pseudo-register conflict table.  
9231 The default value of the parameter is 2000.
9233 @item ira-loop-reserved-regs
9234 IRA can be used to evaluate more accurate register pressure in loops
9235 for decisions to move loop invariants (see @option{-O3}).  The number
9236 of available registers reserved for some other purposes is given
9237 by this parameter.  The default value of the parameter is 2, which is
9238 the minimal number of registers needed by typical instructions.
9239 This value is the best found from numerous experiments.
9241 @item loop-invariant-max-bbs-in-loop
9242 Loop invariant motion can be very expensive, both in compilation time and
9243 in amount of needed compile-time memory, with very large loops.  Loops
9244 with more basic blocks than this parameter won't have loop invariant
9245 motion optimization performed on them.  The default value of the
9246 parameter is 1000 for @option{-O1} and 10000 for @option{-O2} and above.
9248 @item loop-max-datarefs-for-datadeps
9249 Building data dapendencies is expensive for very large loops.  This
9250 parameter limits the number of data references in loops that are
9251 considered for data dependence analysis.  These large loops are no
9252 handled by the optimizations using loop data dependencies.
9253 The default value is 1000.
9255 @item max-vartrack-size
9256 Sets a maximum number of hash table slots to use during variable
9257 tracking dataflow analysis of any function.  If this limit is exceeded
9258 with variable tracking at assignments enabled, analysis for that
9259 function is retried without it, after removing all debug insns from
9260 the function.  If the limit is exceeded even without debug insns, var
9261 tracking analysis is completely disabled for the function.  Setting
9262 the parameter to zero makes it unlimited.
9264 @item max-vartrack-expr-depth
9265 Sets a maximum number of recursion levels when attempting to map
9266 variable names or debug temporaries to value expressions.  This trades
9267 compilation time for more complete debug information.  If this is set too
9268 low, value expressions that are available and could be represented in
9269 debug information may end up not being used; setting this higher may
9270 enable the compiler to find more complex debug expressions, but compile
9271 time and memory use may grow.  The default is 12.
9273 @item min-nondebug-insn-uid
9274 Use uids starting at this parameter for nondebug insns.  The range below
9275 the parameter is reserved exclusively for debug insns created by
9276 @option{-fvar-tracking-assignments}, but debug insns may get
9277 (non-overlapping) uids above it if the reserved range is exhausted.
9279 @item ipa-sra-ptr-growth-factor
9280 IPA-SRA replaces a pointer to an aggregate with one or more new
9281 parameters only when their cumulative size is less or equal to
9282 @option{ipa-sra-ptr-growth-factor} times the size of the original
9283 pointer parameter.
9285 @item tm-max-aggregate-size
9286 When making copies of thread-local variables in a transaction, this
9287 parameter specifies the size in bytes after which variables are
9288 saved with the logging functions as opposed to save/restore code
9289 sequence pairs.  This option only applies when using
9290 @option{-fgnu-tm}.
9292 @item graphite-max-nb-scop-params
9293 To avoid exponential effects in the Graphite loop transforms, the
9294 number of parameters in a Static Control Part (SCoP) is bounded.  The
9295 default value is 10 parameters.  A variable whose value is unknown at
9296 compilation time and defined outside a SCoP is a parameter of the SCoP.
9298 @item graphite-max-bbs-per-function
9299 To avoid exponential effects in the detection of SCoPs, the size of
9300 the functions analyzed by Graphite is bounded.  The default value is
9301 100 basic blocks.
9303 @item loop-block-tile-size
9304 Loop blocking or strip mining transforms, enabled with
9305 @option{-floop-block} or @option{-floop-strip-mine}, strip mine each
9306 loop in the loop nest by a given number of iterations.  The strip
9307 length can be changed using the @option{loop-block-tile-size}
9308 parameter.  The default value is 51 iterations.
9310 @item ipa-cp-value-list-size
9311 IPA-CP attempts to track all possible values and types passed to a function's
9312 parameter in order to propagate them and perform devirtualization.
9313 @option{ipa-cp-value-list-size} is the maximum number of values and types it
9314 stores per one formal parameter of a function.
9316 @item lto-partitions
9317 Specify desired number of partitions produced during WHOPR compilation.
9318 The number of partitions should exceed the number of CPUs used for compilation.
9319 The default value is 32.
9321 @item lto-minpartition
9322 Size of minimal partition for WHOPR (in estimated instructions).
9323 This prevents expenses of splitting very small programs into too many
9324 partitions.
9326 @item cxx-max-namespaces-for-diagnostic-help
9327 The maximum number of namespaces to consult for suggestions when C++
9328 name lookup fails for an identifier.  The default is 1000.
9330 @item sink-frequency-threshold
9331 The maximum relative execution frequency (in percents) of the target block
9332 relative to a statement's original block to allow statement sinking of a
9333 statement.  Larger numbers result in more aggressive statement sinking.
9334 The default value is 75.  A small positive adjustment is applied for
9335 statements with memory operands as those are even more profitable so sink.
9337 @item max-stores-to-sink
9338 The maximum number of conditional stores paires that can be sunk.  Set to 0
9339 if either vectorization (@option{-ftree-vectorize}) or if-conversion
9340 (@option{-ftree-loop-if-convert}) is disabled.  The default is 2.
9342 @item allow-load-data-races
9343 Allow optimizers to introduce new data races on loads.
9344 Set to 1 to allow, otherwise to 0.  This option is enabled by default
9345 unless implicitly set by the @option{-fmemory-model=} option.
9347 @item allow-store-data-races
9348 Allow optimizers to introduce new data races on stores.
9349 Set to 1 to allow, otherwise to 0.  This option is enabled by default
9350 unless implicitly set by the @option{-fmemory-model=} option.
9352 @item allow-packed-load-data-races
9353 Allow optimizers to introduce new data races on packed data loads.
9354 Set to 1 to allow, otherwise to 0.  This option is enabled by default
9355 unless implicitly set by the @option{-fmemory-model=} option.
9357 @item allow-packed-store-data-races
9358 Allow optimizers to introduce new data races on packed data stores.
9359 Set to 1 to allow, otherwise to 0.  This option is enabled by default
9360 unless implicitly set by the @option{-fmemory-model=} option.
9362 @item case-values-threshold
9363 The smallest number of different values for which it is best to use a
9364 jump-table instead of a tree of conditional branches.  If the value is
9365 0, use the default for the machine.  The default is 0.
9367 @item tree-reassoc-width
9368 Set the maximum number of instructions executed in parallel in
9369 reassociated tree. This parameter overrides target dependent
9370 heuristics used by default if has non zero value.
9372 @item sched-pressure-algorithm
9373 Choose between the two available implementations of
9374 @option{-fsched-pressure}.  Algorithm 1 is the original implementation
9375 and is the more likely to prevent instructions from being reordered.
9376 Algorithm 2 was designed to be a compromise between the relatively
9377 conservative approach taken by algorithm 1 and the rather aggressive
9378 approach taken by the default scheduler.  It relies more heavily on
9379 having a regular register file and accurate register pressure classes.
9380 See @file{haifa-sched.c} in the GCC sources for more details.
9382 The default choice depends on the target.
9383 @end table
9384 @end table
9386 @node Preprocessor Options
9387 @section Options Controlling the Preprocessor
9388 @cindex preprocessor options
9389 @cindex options, preprocessor
9391 These options control the C preprocessor, which is run on each C source
9392 file before actual compilation.
9394 If you use the @option{-E} option, nothing is done except preprocessing.
9395 Some of these options make sense only together with @option{-E} because
9396 they cause the preprocessor output to be unsuitable for actual
9397 compilation.
9399 @table @gcctabopt
9400 @item -Wp,@var{option}
9401 @opindex Wp
9402 You can use @option{-Wp,@var{option}} to bypass the compiler driver
9403 and pass @var{option} directly through to the preprocessor.  If
9404 @var{option} contains commas, it is split into multiple options at the
9405 commas.  However, many options are modified, translated or interpreted
9406 by the compiler driver before being passed to the preprocessor, and
9407 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
9408 interface is undocumented and subject to change, so whenever possible
9409 you should avoid using @option{-Wp} and let the driver handle the
9410 options instead.
9412 @item -Xpreprocessor @var{option}
9413 @opindex Xpreprocessor
9414 Pass @var{option} as an option to the preprocessor.  You can use this to
9415 supply system-specific preprocessor options that GCC does not know how to
9416 recognize.
9418 If you want to pass an option that takes an argument, you must use
9419 @option{-Xpreprocessor} twice, once for the option and once for the argument.
9421 @item -no-integrated-cpp
9422 @opindex no-integrated-cpp
9423 Perform preprocessing as a separate pass before compilation.
9424 By default, GCC performs preprocessing as an integrated part of
9425 input tokenization and parsing.
9426 If this option is provided, the appropriate language front end
9427 (@command{cc1}, @command{cc1plus}, or @command{cc1obj} for C, C++,
9428 and Objective-C, respectively) is instead invoked twice,
9429 once for preprocessing only and once for actual compilation
9430 of the preprocessed input.
9431 This option may be useful in conjunction with the @option{-B} or
9432 @option{-wrapper} options to specify an alternate preprocessor or
9433 perform additional processing of the program source between
9434 normal preprocessing and compilation.
9435 @end table
9437 @include cppopts.texi
9439 @node Assembler Options
9440 @section Passing Options to the Assembler
9442 @c prevent bad page break with this line
9443 You can pass options to the assembler.
9445 @table @gcctabopt
9446 @item -Wa,@var{option}
9447 @opindex Wa
9448 Pass @var{option} as an option to the assembler.  If @var{option}
9449 contains commas, it is split into multiple options at the commas.
9451 @item -Xassembler @var{option}
9452 @opindex Xassembler
9453 Pass @var{option} as an option to the assembler.  You can use this to
9454 supply system-specific assembler options that GCC does not know how to
9455 recognize.
9457 If you want to pass an option that takes an argument, you must use
9458 @option{-Xassembler} twice, once for the option and once for the argument.
9460 @end table
9462 @node Link Options
9463 @section Options for Linking
9464 @cindex link options
9465 @cindex options, linking
9467 These options come into play when the compiler links object files into
9468 an executable output file.  They are meaningless if the compiler is
9469 not doing a link step.
9471 @table @gcctabopt
9472 @cindex file names
9473 @item @var{object-file-name}
9474 A file name that does not end in a special recognized suffix is
9475 considered to name an object file or library.  (Object files are
9476 distinguished from libraries by the linker according to the file
9477 contents.)  If linking is done, these object files are used as input
9478 to the linker.
9480 @item -c
9481 @itemx -S
9482 @itemx -E
9483 @opindex c
9484 @opindex S
9485 @opindex E
9486 If any of these options is used, then the linker is not run, and
9487 object file names should not be used as arguments.  @xref{Overall
9488 Options}.
9490 @cindex Libraries
9491 @item -l@var{library}
9492 @itemx -l @var{library}
9493 @opindex l
9494 Search the library named @var{library} when linking.  (The second
9495 alternative with the library as a separate argument is only for
9496 POSIX compliance and is not recommended.)
9498 It makes a difference where in the command you write this option; the
9499 linker searches and processes libraries and object files in the order they
9500 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
9501 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
9502 to functions in @samp{z}, those functions may not be loaded.
9504 The linker searches a standard list of directories for the library,
9505 which is actually a file named @file{lib@var{library}.a}.  The linker
9506 then uses this file as if it had been specified precisely by name.
9508 The directories searched include several standard system directories
9509 plus any that you specify with @option{-L}.
9511 Normally the files found this way are library files---archive files
9512 whose members are object files.  The linker handles an archive file by
9513 scanning through it for members which define symbols that have so far
9514 been referenced but not defined.  But if the file that is found is an
9515 ordinary object file, it is linked in the usual fashion.  The only
9516 difference between using an @option{-l} option and specifying a file name
9517 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
9518 and searches several directories.
9520 @item -lobjc
9521 @opindex lobjc
9522 You need this special case of the @option{-l} option in order to
9523 link an Objective-C or Objective-C++ program.
9525 @item -nostartfiles
9526 @opindex nostartfiles
9527 Do not use the standard system startup files when linking.
9528 The standard system libraries are used normally, unless @option{-nostdlib}
9529 or @option{-nodefaultlibs} is used.
9531 @item -nodefaultlibs
9532 @opindex nodefaultlibs
9533 Do not use the standard system libraries when linking.
9534 Only the libraries you specify are passed to the linker, and options
9535 specifying linkage of the system libraries, such as @code{-static-libgcc}
9536 or @code{-shared-libgcc}, are ignored.  
9537 The standard startup files are used normally, unless @option{-nostartfiles}
9538 is used.  The compiler may generate calls to @code{memcmp},
9539 @code{memset}, @code{memcpy} and @code{memmove}.
9540 These entries are usually resolved by entries in
9541 libc.  These entry points should be supplied through some other
9542 mechanism when this option is specified.
9544 @item -nostdlib
9545 @opindex nostdlib
9546 Do not use the standard system startup files or libraries when linking.
9547 No startup files and only the libraries you specify are passed to
9548 the linker, and options specifying linkage of the system libraries, such as
9549 @code{-static-libgcc} or @code{-shared-libgcc}, are ignored.
9551 The compiler may generate calls to @code{memcmp}, @code{memset},
9552 @code{memcpy} and @code{memmove}.
9553 These entries are usually resolved by entries in
9554 libc.  These entry points should be supplied through some other
9555 mechanism when this option is specified.
9557 @cindex @option{-lgcc}, use with @option{-nostdlib}
9558 @cindex @option{-nostdlib} and unresolved references
9559 @cindex unresolved references and @option{-nostdlib}
9560 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
9561 @cindex @option{-nodefaultlibs} and unresolved references
9562 @cindex unresolved references and @option{-nodefaultlibs}
9563 One of the standard libraries bypassed by @option{-nostdlib} and
9564 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
9565 which GCC uses to overcome shortcomings of particular machines, or special
9566 needs for some languages.
9567 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
9568 Collection (GCC) Internals},
9569 for more discussion of @file{libgcc.a}.)
9570 In most cases, you need @file{libgcc.a} even when you want to avoid
9571 other standard libraries.  In other words, when you specify @option{-nostdlib}
9572 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
9573 This ensures that you have no unresolved references to internal GCC
9574 library subroutines.
9575 (An example of such an internal subroutine is @samp{__main}, used to ensure C++
9576 constructors are called; @pxref{Collect2,,@code{collect2}, gccint,
9577 GNU Compiler Collection (GCC) Internals}.)
9579 @item -pie
9580 @opindex pie
9581 Produce a position independent executable on targets that support it.
9582 For predictable results, you must also specify the same set of options
9583 used for compilation (@option{-fpie}, @option{-fPIE},
9584 or model suboptions) when you specify this linker option.
9586 @item -rdynamic
9587 @opindex rdynamic
9588 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
9589 that support it. This instructs the linker to add all symbols, not
9590 only used ones, to the dynamic symbol table. This option is needed
9591 for some uses of @code{dlopen} or to allow obtaining backtraces
9592 from within a program.
9594 @item -s
9595 @opindex s
9596 Remove all symbol table and relocation information from the executable.
9598 @item -static
9599 @opindex static
9600 On systems that support dynamic linking, this prevents linking with the shared
9601 libraries.  On other systems, this option has no effect.
9603 @item -shared
9604 @opindex shared
9605 Produce a shared object which can then be linked with other objects to
9606 form an executable.  Not all systems support this option.  For predictable
9607 results, you must also specify the same set of options used for compilation
9608 (@option{-fpic}, @option{-fPIC}, or model suboptions) when
9609 you specify this linker option.@footnote{On some systems, @samp{gcc -shared}
9610 needs to build supplementary stub code for constructors to work.  On
9611 multi-libbed systems, @samp{gcc -shared} must select the correct support
9612 libraries to link against.  Failing to supply the correct flags may lead
9613 to subtle defects.  Supplying them in cases where they are not necessary
9614 is innocuous.}
9616 @item -shared-libgcc
9617 @itemx -static-libgcc
9618 @opindex shared-libgcc
9619 @opindex static-libgcc
9620 On systems that provide @file{libgcc} as a shared library, these options
9621 force the use of either the shared or static version respectively.
9622 If no shared version of @file{libgcc} was built when the compiler was
9623 configured, these options have no effect.
9625 There are several situations in which an application should use the
9626 shared @file{libgcc} instead of the static version.  The most common
9627 of these is when the application wishes to throw and catch exceptions
9628 across different shared libraries.  In that case, each of the libraries
9629 as well as the application itself should use the shared @file{libgcc}.
9631 Therefore, the G++ and GCJ drivers automatically add
9632 @option{-shared-libgcc} whenever you build a shared library or a main
9633 executable, because C++ and Java programs typically use exceptions, so
9634 this is the right thing to do.
9636 If, instead, you use the GCC driver to create shared libraries, you may
9637 find that they are not always linked with the shared @file{libgcc}.
9638 If GCC finds, at its configuration time, that you have a non-GNU linker
9639 or a GNU linker that does not support option @option{--eh-frame-hdr},
9640 it links the shared version of @file{libgcc} into shared libraries
9641 by default.  Otherwise, it takes advantage of the linker and optimizes
9642 away the linking with the shared version of @file{libgcc}, linking with
9643 the static version of libgcc by default.  This allows exceptions to
9644 propagate through such shared libraries, without incurring relocation
9645 costs at library load time.
9647 However, if a library or main executable is supposed to throw or catch
9648 exceptions, you must link it using the G++ or GCJ driver, as appropriate
9649 for the languages used in the program, or using the option
9650 @option{-shared-libgcc}, such that it is linked with the shared
9651 @file{libgcc}.
9653 @item -static-libstdc++
9654 When the @command{g++} program is used to link a C++ program, it
9655 normally automatically links against @option{libstdc++}.  If
9656 @file{libstdc++} is available as a shared library, and the
9657 @option{-static} option is not used, then this links against the
9658 shared version of @file{libstdc++}.  That is normally fine.  However, it
9659 is sometimes useful to freeze the version of @file{libstdc++} used by
9660 the program without going all the way to a fully static link.  The
9661 @option{-static-libstdc++} option directs the @command{g++} driver to
9662 link @file{libstdc++} statically, without necessarily linking other
9663 libraries statically.
9665 @item -symbolic
9666 @opindex symbolic
9667 Bind references to global symbols when building a shared object.  Warn
9668 about any unresolved references (unless overridden by the link editor
9669 option @option{-Xlinker -z -Xlinker defs}).  Only a few systems support
9670 this option.
9672 @item -T @var{script}
9673 @opindex T
9674 @cindex linker script
9675 Use @var{script} as the linker script.  This option is supported by most
9676 systems using the GNU linker.  On some targets, such as bare-board
9677 targets without an operating system, the @option{-T} option may be required
9678 when linking to avoid references to undefined symbols.
9680 @item -Xlinker @var{option}
9681 @opindex Xlinker
9682 Pass @var{option} as an option to the linker.  You can use this to
9683 supply system-specific linker options that GCC does not recognize.
9685 If you want to pass an option that takes a separate argument, you must use
9686 @option{-Xlinker} twice, once for the option and once for the argument.
9687 For example, to pass @option{-assert definitions}, you must write
9688 @option{-Xlinker -assert -Xlinker definitions}.  It does not work to write
9689 @option{-Xlinker "-assert definitions"}, because this passes the entire
9690 string as a single argument, which is not what the linker expects.
9692 When using the GNU linker, it is usually more convenient to pass
9693 arguments to linker options using the @option{@var{option}=@var{value}}
9694 syntax than as separate arguments.  For example, you can specify
9695 @option{-Xlinker -Map=output.map} rather than
9696 @option{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
9697 this syntax for command-line options.
9699 @item -Wl,@var{option}
9700 @opindex Wl
9701 Pass @var{option} as an option to the linker.  If @var{option} contains
9702 commas, it is split into multiple options at the commas.  You can use this
9703 syntax to pass an argument to the option.
9704 For example, @option{-Wl,-Map,output.map} passes @option{-Map output.map} to the
9705 linker.  When using the GNU linker, you can also get the same effect with
9706 @option{-Wl,-Map=output.map}.
9708 @item -u @var{symbol}
9709 @opindex u
9710 Pretend the symbol @var{symbol} is undefined, to force linking of
9711 library modules to define it.  You can use @option{-u} multiple times with
9712 different symbols to force loading of additional library modules.
9713 @end table
9715 @node Directory Options
9716 @section Options for Directory Search
9717 @cindex directory options
9718 @cindex options, directory search
9719 @cindex search path
9721 These options specify directories to search for header files, for
9722 libraries and for parts of the compiler:
9724 @table @gcctabopt
9725 @item -I@var{dir}
9726 @opindex I
9727 Add the directory @var{dir} to the head of the list of directories to be
9728 searched for header files.  This can be used to override a system header
9729 file, substituting your own version, since these directories are
9730 searched before the system header file directories.  However, you should
9731 not use this option to add directories that contain vendor-supplied
9732 system header files (use @option{-isystem} for that).  If you use more than
9733 one @option{-I} option, the directories are scanned in left-to-right
9734 order; the standard system directories come after.
9736 If a standard system include directory, or a directory specified with
9737 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
9738 option is ignored.  The directory is still searched but as a
9739 system directory at its normal position in the system include chain.
9740 This is to ensure that GCC's procedure to fix buggy system headers and
9741 the ordering for the @code{include_next} directive are not inadvertently changed.
9742 If you really need to change the search order for system directories,
9743 use the @option{-nostdinc} and/or @option{-isystem} options.
9745 @item -iplugindir=@var{dir}
9746 Set the directory to search for plugins that are passed
9747 by @option{-fplugin=@var{name}} instead of
9748 @option{-fplugin=@var{path}/@var{name}.so}.  This option is not meant
9749 to be used by the user, but only passed by the driver.
9751 @item -iquote@var{dir}
9752 @opindex iquote
9753 Add the directory @var{dir} to the head of the list of directories to
9754 be searched for header files only for the case of @samp{#include
9755 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
9756 otherwise just like @option{-I}.
9758 @item -L@var{dir}
9759 @opindex L
9760 Add directory @var{dir} to the list of directories to be searched
9761 for @option{-l}.
9763 @item -B@var{prefix}
9764 @opindex B
9765 This option specifies where to find the executables, libraries,
9766 include files, and data files of the compiler itself.
9768 The compiler driver program runs one or more of the subprograms
9769 @command{cpp}, @command{cc1}, @command{as} and @command{ld}.  It tries
9770 @var{prefix} as a prefix for each program it tries to run, both with and
9771 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
9773 For each subprogram to be run, the compiler driver first tries the
9774 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
9775 is not specified, the driver tries two standard prefixes, 
9776 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
9777 those results in a file name that is found, the unmodified program
9778 name is searched for using the directories specified in your
9779 @env{PATH} environment variable.
9781 The compiler checks to see if the path provided by the @option{-B}
9782 refers to a directory, and if necessary it adds a directory
9783 separator character at the end of the path.
9785 @option{-B} prefixes that effectively specify directory names also apply
9786 to libraries in the linker, because the compiler translates these
9787 options into @option{-L} options for the linker.  They also apply to
9788 includes files in the preprocessor, because the compiler translates these
9789 options into @option{-isystem} options for the preprocessor.  In this case,
9790 the compiler appends @samp{include} to the prefix.
9792 The runtime support file @file{libgcc.a} can also be searched for using
9793 the @option{-B} prefix, if needed.  If it is not found there, the two
9794 standard prefixes above are tried, and that is all.  The file is left
9795 out of the link if it is not found by those means.
9797 Another way to specify a prefix much like the @option{-B} prefix is to use
9798 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
9799 Variables}.
9801 As a special kludge, if the path provided by @option{-B} is
9802 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
9803 9, then it is replaced by @file{[dir/]include}.  This is to help
9804 with boot-strapping the compiler.
9806 @item -specs=@var{file}
9807 @opindex specs
9808 Process @var{file} after the compiler reads in the standard @file{specs}
9809 file, in order to override the defaults which the @command{gcc} driver
9810 program uses when determining what switches to pass to @command{cc1},
9811 @command{cc1plus}, @command{as}, @command{ld}, etc.  More than one
9812 @option{-specs=@var{file}} can be specified on the command line, and they
9813 are processed in order, from left to right.
9815 @item --sysroot=@var{dir}
9816 @opindex sysroot
9817 Use @var{dir} as the logical root directory for headers and libraries.
9818 For example, if the compiler normally searches for headers in
9819 @file{/usr/include} and libraries in @file{/usr/lib}, it instead
9820 searches @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
9822 If you use both this option and the @option{-isysroot} option, then
9823 the @option{--sysroot} option applies to libraries, but the
9824 @option{-isysroot} option applies to header files.
9826 The GNU linker (beginning with version 2.16) has the necessary support
9827 for this option.  If your linker does not support this option, the
9828 header file aspect of @option{--sysroot} still works, but the
9829 library aspect does not.
9831 @item -I-
9832 @opindex I-
9833 This option has been deprecated.  Please use @option{-iquote} instead for
9834 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
9835 Any directories you specify with @option{-I} options before the @option{-I-}
9836 option are searched only for the case of @samp{#include "@var{file}"};
9837 they are not searched for @samp{#include <@var{file}>}.
9839 If additional directories are specified with @option{-I} options after
9840 the @option{-I-}, these directories are searched for all @samp{#include}
9841 directives.  (Ordinarily @emph{all} @option{-I} directories are used
9842 this way.)
9844 In addition, the @option{-I-} option inhibits the use of the current
9845 directory (where the current input file came from) as the first search
9846 directory for @samp{#include "@var{file}"}.  There is no way to
9847 override this effect of @option{-I-}.  With @option{-I.} you can specify
9848 searching the directory that is current when the compiler is
9849 invoked.  That is not exactly the same as what the preprocessor does
9850 by default, but it is often satisfactory.
9852 @option{-I-} does not inhibit the use of the standard system directories
9853 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
9854 independent.
9855 @end table
9857 @c man end
9859 @node Spec Files
9860 @section Specifying subprocesses and the switches to pass to them
9861 @cindex Spec Files
9863 @command{gcc} is a driver program.  It performs its job by invoking a
9864 sequence of other programs to do the work of compiling, assembling and
9865 linking.  GCC interprets its command-line parameters and uses these to
9866 deduce which programs it should invoke, and which command-line options
9867 it ought to place on their command lines.  This behavior is controlled
9868 by @dfn{spec strings}.  In most cases there is one spec string for each
9869 program that GCC can invoke, but a few programs have multiple spec
9870 strings to control their behavior.  The spec strings built into GCC can
9871 be overridden by using the @option{-specs=} command-line switch to specify
9872 a spec file.
9874 @dfn{Spec files} are plaintext files that are used to construct spec
9875 strings.  They consist of a sequence of directives separated by blank
9876 lines.  The type of directive is determined by the first non-whitespace
9877 character on the line, which can be one of the following:
9879 @table @code
9880 @item %@var{command}
9881 Issues a @var{command} to the spec file processor.  The commands that can
9882 appear here are:
9884 @table @code
9885 @item %include <@var{file}>
9886 @cindex @code{%include}
9887 Search for @var{file} and insert its text at the current point in the
9888 specs file.
9890 @item %include_noerr <@var{file}>
9891 @cindex @code{%include_noerr}
9892 Just like @samp{%include}, but do not generate an error message if the include
9893 file cannot be found.
9895 @item %rename @var{old_name} @var{new_name}
9896 @cindex @code{%rename}
9897 Rename the spec string @var{old_name} to @var{new_name}.
9899 @end table
9901 @item *[@var{spec_name}]:
9902 This tells the compiler to create, override or delete the named spec
9903 string.  All lines after this directive up to the next directive or
9904 blank line are considered to be the text for the spec string.  If this
9905 results in an empty string then the spec is deleted.  (Or, if the
9906 spec did not exist, then nothing happens.)  Otherwise, if the spec
9907 does not currently exist a new spec is created.  If the spec does
9908 exist then its contents are overridden by the text of this
9909 directive, unless the first character of that text is the @samp{+}
9910 character, in which case the text is appended to the spec.
9912 @item [@var{suffix}]:
9913 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
9914 and up to the next directive or blank line are considered to make up the
9915 spec string for the indicated suffix.  When the compiler encounters an
9916 input file with the named suffix, it processes the spec string in
9917 order to work out how to compile that file.  For example:
9919 @smallexample
9920 .ZZ:
9921 z-compile -input %i
9922 @end smallexample
9924 This says that any input file whose name ends in @samp{.ZZ} should be
9925 passed to the program @samp{z-compile}, which should be invoked with the
9926 command-line switch @option{-input} and with the result of performing the
9927 @samp{%i} substitution.  (See below.)
9929 As an alternative to providing a spec string, the text that follows a
9930 suffix directive can be one of the following:
9932 @table @code
9933 @item @@@var{language}
9934 This says that the suffix is an alias for a known @var{language}.  This is
9935 similar to using the @option{-x} command-line switch to GCC to specify a
9936 language explicitly.  For example:
9938 @smallexample
9939 .ZZ:
9940 @@c++
9941 @end smallexample
9943 Says that .ZZ files are, in fact, C++ source files.
9945 @item #@var{name}
9946 This causes an error messages saying:
9948 @smallexample
9949 @var{name} compiler not installed on this system.
9950 @end smallexample
9951 @end table
9953 GCC already has an extensive list of suffixes built into it.
9954 This directive adds an entry to the end of the list of suffixes, but
9955 since the list is searched from the end backwards, it is effectively
9956 possible to override earlier entries using this technique.
9958 @end table
9960 GCC has the following spec strings built into it.  Spec files can
9961 override these strings or create their own.  Note that individual
9962 targets can also add their own spec strings to this list.
9964 @smallexample
9965 asm          Options to pass to the assembler
9966 asm_final    Options to pass to the assembler post-processor
9967 cpp          Options to pass to the C preprocessor
9968 cc1          Options to pass to the C compiler
9969 cc1plus      Options to pass to the C++ compiler
9970 endfile      Object files to include at the end of the link
9971 link         Options to pass to the linker
9972 lib          Libraries to include on the command line to the linker
9973 libgcc       Decides which GCC support library to pass to the linker
9974 linker       Sets the name of the linker
9975 predefines   Defines to be passed to the C preprocessor
9976 signed_char  Defines to pass to CPP to say whether @code{char} is signed
9977              by default
9978 startfile    Object files to include at the start of the link
9979 @end smallexample
9981 Here is a small example of a spec file:
9983 @smallexample
9984 %rename lib                 old_lib
9986 *lib:
9987 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
9988 @end smallexample
9990 This example renames the spec called @samp{lib} to @samp{old_lib} and
9991 then overrides the previous definition of @samp{lib} with a new one.
9992 The new definition adds in some extra command-line options before
9993 including the text of the old definition.
9995 @dfn{Spec strings} are a list of command-line options to be passed to their
9996 corresponding program.  In addition, the spec strings can contain
9997 @samp{%}-prefixed sequences to substitute variable text or to
9998 conditionally insert text into the command line.  Using these constructs
9999 it is possible to generate quite complex command lines.
10001 Here is a table of all defined @samp{%}-sequences for spec
10002 strings.  Note that spaces are not generated automatically around the
10003 results of expanding these sequences.  Therefore you can concatenate them
10004 together or combine them with constant text in a single argument.
10006 @table @code
10007 @item %%
10008 Substitute one @samp{%} into the program name or argument.
10010 @item %i
10011 Substitute the name of the input file being processed.
10013 @item %b
10014 Substitute the basename of the input file being processed.
10015 This is the substring up to (and not including) the last period
10016 and not including the directory.
10018 @item %B
10019 This is the same as @samp{%b}, but include the file suffix (text after
10020 the last period).
10022 @item %d
10023 Marks the argument containing or following the @samp{%d} as a
10024 temporary file name, so that that file is deleted if GCC exits
10025 successfully.  Unlike @samp{%g}, this contributes no text to the
10026 argument.
10028 @item %g@var{suffix}
10029 Substitute a file name that has suffix @var{suffix} and is chosen
10030 once per compilation, and mark the argument in the same way as
10031 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
10032 name is now chosen in a way that is hard to predict even when previously
10033 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
10034 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
10035 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
10036 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
10037 was simply substituted with a file name chosen once per compilation,
10038 without regard to any appended suffix (which was therefore treated
10039 just like ordinary text), making such attacks more likely to succeed.
10041 @item %u@var{suffix}
10042 Like @samp{%g}, but generates a new temporary file name
10043 each time it appears instead of once per compilation.
10045 @item %U@var{suffix}
10046 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
10047 new one if there is no such last file name.  In the absence of any
10048 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
10049 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
10050 involves the generation of two distinct file names, one
10051 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
10052 simply substituted with a file name chosen for the previous @samp{%u},
10053 without regard to any appended suffix.
10055 @item %j@var{suffix}
10056 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
10057 writable, and if @option{-save-temps} is not used; 
10058 otherwise, substitute the name
10059 of a temporary file, just like @samp{%u}.  This temporary file is not
10060 meant for communication between processes, but rather as a junk
10061 disposal mechanism.
10063 @item %|@var{suffix}
10064 @itemx %m@var{suffix}
10065 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
10066 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
10067 all.  These are the two most common ways to instruct a program that it
10068 should read from standard input or write to standard output.  If you
10069 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
10070 construct: see for example @file{f/lang-specs.h}.
10072 @item %.@var{SUFFIX}
10073 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
10074 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
10075 terminated by the next space or %.
10077 @item %w
10078 Marks the argument containing or following the @samp{%w} as the
10079 designated output file of this compilation.  This puts the argument
10080 into the sequence of arguments that @samp{%o} substitutes.
10082 @item %o
10083 Substitutes the names of all the output files, with spaces
10084 automatically placed around them.  You should write spaces
10085 around the @samp{%o} as well or the results are undefined.
10086 @samp{%o} is for use in the specs for running the linker.
10087 Input files whose names have no recognized suffix are not compiled
10088 at all, but they are included among the output files, so they are
10089 linked.
10091 @item %O
10092 Substitutes the suffix for object files.  Note that this is
10093 handled specially when it immediately follows @samp{%g, %u, or %U},
10094 because of the need for those to form complete file names.  The
10095 handling is such that @samp{%O} is treated exactly as if it had already
10096 been substituted, except that @samp{%g, %u, and %U} do not currently
10097 support additional @var{suffix} characters following @samp{%O} as they do
10098 following, for example, @samp{.o}.
10100 @item %p
10101 Substitutes the standard macro predefinitions for the
10102 current target machine.  Use this when running @code{cpp}.
10104 @item %P
10105 Like @samp{%p}, but puts @samp{__} before and after the name of each
10106 predefined macro, except for macros that start with @samp{__} or with
10107 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
10110 @item %I
10111 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
10112 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
10113 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
10114 and @option{-imultilib} as necessary.
10116 @item %s
10117 Current argument is the name of a library or startup file of some sort.
10118 Search for that file in a standard list of directories and substitute
10119 the full name found.  The current working directory is included in the
10120 list of directories scanned.
10122 @item %T
10123 Current argument is the name of a linker script.  Search for that file
10124 in the current list of directories to scan for libraries. If the file
10125 is located insert a @option{--script} option into the command line
10126 followed by the full path name found.  If the file is not found then
10127 generate an error message.  Note: the current working directory is not
10128 searched.
10130 @item %e@var{str}
10131 Print @var{str} as an error message.  @var{str} is terminated by a newline.
10132 Use this when inconsistent options are detected.
10134 @item %(@var{name})
10135 Substitute the contents of spec string @var{name} at this point.
10137 @item %x@{@var{option}@}
10138 Accumulate an option for @samp{%X}.
10140 @item %X
10141 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
10142 spec string.
10144 @item %Y
10145 Output the accumulated assembler options specified by @option{-Wa}.
10147 @item %Z
10148 Output the accumulated preprocessor options specified by @option{-Wp}.
10150 @item %a
10151 Process the @code{asm} spec.  This is used to compute the
10152 switches to be passed to the assembler.
10154 @item %A
10155 Process the @code{asm_final} spec.  This is a spec string for
10156 passing switches to an assembler post-processor, if such a program is
10157 needed.
10159 @item %l
10160 Process the @code{link} spec.  This is the spec for computing the
10161 command line passed to the linker.  Typically it makes use of the
10162 @samp{%L %G %S %D and %E} sequences.
10164 @item %D
10165 Dump out a @option{-L} option for each directory that GCC believes might
10166 contain startup files.  If the target supports multilibs then the
10167 current multilib directory is prepended to each of these paths.
10169 @item %L
10170 Process the @code{lib} spec.  This is a spec string for deciding which
10171 libraries are included on the command line to the linker.
10173 @item %G
10174 Process the @code{libgcc} spec.  This is a spec string for deciding
10175 which GCC support library is included on the command line to the linker.
10177 @item %S
10178 Process the @code{startfile} spec.  This is a spec for deciding which
10179 object files are the first ones passed to the linker.  Typically
10180 this might be a file named @file{crt0.o}.
10182 @item %E
10183 Process the @code{endfile} spec.  This is a spec string that specifies
10184 the last object files that are passed to the linker.
10186 @item %C
10187 Process the @code{cpp} spec.  This is used to construct the arguments
10188 to be passed to the C preprocessor.
10190 @item %1
10191 Process the @code{cc1} spec.  This is used to construct the options to be
10192 passed to the actual C compiler (@samp{cc1}).
10194 @item %2
10195 Process the @code{cc1plus} spec.  This is used to construct the options to be
10196 passed to the actual C++ compiler (@samp{cc1plus}).
10198 @item %*
10199 Substitute the variable part of a matched option.  See below.
10200 Note that each comma in the substituted string is replaced by
10201 a single space.
10203 @item %<@code{S}
10204 Remove all occurrences of @code{-S} from the command line.  Note---this
10205 command is position dependent.  @samp{%} commands in the spec string
10206 before this one see @code{-S}, @samp{%} commands in the spec string
10207 after this one do not.
10209 @item %:@var{function}(@var{args})
10210 Call the named function @var{function}, passing it @var{args}.
10211 @var{args} is first processed as a nested spec string, then split
10212 into an argument vector in the usual fashion.  The function returns
10213 a string which is processed as if it had appeared literally as part
10214 of the current spec.
10216 The following built-in spec functions are provided:
10218 @table @code
10219 @item @code{getenv}
10220 The @code{getenv} spec function takes two arguments: an environment
10221 variable name and a string.  If the environment variable is not
10222 defined, a fatal error is issued.  Otherwise, the return value is the
10223 value of the environment variable concatenated with the string.  For
10224 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
10226 @smallexample
10227 %:getenv(TOPDIR /include)
10228 @end smallexample
10230 expands to @file{/path/to/top/include}.
10232 @item @code{if-exists}
10233 The @code{if-exists} spec function takes one argument, an absolute
10234 pathname to a file.  If the file exists, @code{if-exists} returns the
10235 pathname.  Here is a small example of its usage:
10237 @smallexample
10238 *startfile:
10239 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
10240 @end smallexample
10242 @item @code{if-exists-else}
10243 The @code{if-exists-else} spec function is similar to the @code{if-exists}
10244 spec function, except that it takes two arguments.  The first argument is
10245 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
10246 returns the pathname.  If it does not exist, it returns the second argument.
10247 This way, @code{if-exists-else} can be used to select one file or another,
10248 based on the existence of the first.  Here is a small example of its usage:
10250 @smallexample
10251 *startfile:
10252 crt0%O%s %:if-exists(crti%O%s) \
10253 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
10254 @end smallexample
10256 @item @code{replace-outfile}
10257 The @code{replace-outfile} spec function takes two arguments.  It looks for the
10258 first argument in the outfiles array and replaces it with the second argument.  Here
10259 is a small example of its usage:
10261 @smallexample
10262 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
10263 @end smallexample
10265 @item @code{remove-outfile}
10266 The @code{remove-outfile} spec function takes one argument.  It looks for the
10267 first argument in the outfiles array and removes it.  Here is a small example
10268 its usage:
10270 @smallexample
10271 %:remove-outfile(-lm)
10272 @end smallexample
10274 @item @code{pass-through-libs}
10275 The @code{pass-through-libs} spec function takes any number of arguments.  It
10276 finds any @option{-l} options and any non-options ending in @file{.a} (which it
10277 assumes are the names of linker input library archive files) and returns a
10278 result containing all the found arguments each prepended by
10279 @option{-plugin-opt=-pass-through=} and joined by spaces.  This list is
10280 intended to be passed to the LTO linker plugin.
10282 @smallexample
10283 %:pass-through-libs(%G %L %G)
10284 @end smallexample
10286 @item @code{print-asm-header}
10287 The @code{print-asm-header} function takes no arguments and simply
10288 prints a banner like:
10290 @smallexample
10291 Assembler options
10292 =================
10294 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
10295 @end smallexample
10297 It is used to separate compiler options from assembler options
10298 in the @option{--target-help} output.
10299 @end table
10301 @item %@{@code{S}@}
10302 Substitutes the @code{-S} switch, if that switch is given to GCC@.
10303 If that switch is not specified, this substitutes nothing.  Note that
10304 the leading dash is omitted when specifying this option, and it is
10305 automatically inserted if the substitution is performed.  Thus the spec
10306 string @samp{%@{foo@}} matches the command-line option @option{-foo}
10307 and outputs the command-line option @option{-foo}.
10309 @item %W@{@code{S}@}
10310 Like %@{@code{S}@} but mark last argument supplied within as a file to be
10311 deleted on failure.
10313 @item %@{@code{S}*@}
10314 Substitutes all the switches specified to GCC whose names start
10315 with @code{-S}, but which also take an argument.  This is used for
10316 switches like @option{-o}, @option{-D}, @option{-I}, etc.
10317 GCC considers @option{-o foo} as being
10318 one switch whose name starts with @samp{o}.  %@{o*@} substitutes this
10319 text, including the space.  Thus two arguments are generated.
10321 @item %@{@code{S}*&@code{T}*@}
10322 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
10323 (the order of @code{S} and @code{T} in the spec is not significant).
10324 There can be any number of ampersand-separated variables; for each the
10325 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
10327 @item %@{@code{S}:@code{X}@}
10328 Substitutes @code{X}, if the @option{-S} switch is given to GCC@.
10330 @item %@{!@code{S}:@code{X}@}
10331 Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@.
10333 @item %@{@code{S}*:@code{X}@}
10334 Substitutes @code{X} if one or more switches whose names start with
10335 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
10336 once, no matter how many such switches appeared.  However, if @code{%*}
10337 appears somewhere in @code{X}, then @code{X} is substituted once
10338 for each matching switch, with the @code{%*} replaced by the part of
10339 that switch matching the @code{*}.
10341 @item %@{.@code{S}:@code{X}@}
10342 Substitutes @code{X}, if processing a file with suffix @code{S}.
10344 @item %@{!.@code{S}:@code{X}@}
10345 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
10347 @item %@{,@code{S}:@code{X}@}
10348 Substitutes @code{X}, if processing a file for language @code{S}.
10350 @item %@{!,@code{S}:@code{X}@}
10351 Substitutes @code{X}, if not processing a file for language @code{S}.
10353 @item %@{@code{S}|@code{P}:@code{X}@}
10354 Substitutes @code{X} if either @code{-S} or @code{-P} is given to
10355 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
10356 @code{*} sequences as well, although they have a stronger binding than
10357 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
10358 alternatives must be starred, and only the first matching alternative
10359 is substituted.
10361 For example, a spec string like this:
10363 @smallexample
10364 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
10365 @end smallexample
10367 @noindent
10368 outputs the following command-line options from the following input
10369 command-line options:
10371 @smallexample
10372 fred.c        -foo -baz
10373 jim.d         -bar -boggle
10374 -d fred.c     -foo -baz -boggle
10375 -d jim.d      -bar -baz -boggle
10376 @end smallexample
10378 @item %@{S:X; T:Y; :D@}
10380 If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is
10381 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
10382 be as many clauses as you need.  This may be combined with @code{.},
10383 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
10386 @end table
10388 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
10389 construct may contain other nested @samp{%} constructs or spaces, or
10390 even newlines.  They are processed as usual, as described above.
10391 Trailing white space in @code{X} is ignored.  White space may also
10392 appear anywhere on the left side of the colon in these constructs,
10393 except between @code{.} or @code{*} and the corresponding word.
10395 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
10396 handled specifically in these constructs.  If another value of
10397 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
10398 @option{-W} switch is found later in the command line, the earlier
10399 switch value is ignored, except with @{@code{S}*@} where @code{S} is
10400 just one letter, which passes all matching options.
10402 The character @samp{|} at the beginning of the predicate text is used to
10403 indicate that a command should be piped to the following command, but
10404 only if @option{-pipe} is specified.
10406 It is built into GCC which switches take arguments and which do not.
10407 (You might think it would be useful to generalize this to allow each
10408 compiler's spec to say which switches take arguments.  But this cannot
10409 be done in a consistent fashion.  GCC cannot even decide which input
10410 files have been specified without knowing which switches take arguments,
10411 and it must know which input files to compile in order to tell which
10412 compilers to run).
10414 GCC also knows implicitly that arguments starting in @option{-l} are to be
10415 treated as compiler output files, and passed to the linker in their
10416 proper position among the other output files.
10418 @c man begin OPTIONS
10420 @node Target Options
10421 @section Specifying Target Machine and Compiler Version
10422 @cindex target options
10423 @cindex cross compiling
10424 @cindex specifying machine version
10425 @cindex specifying compiler version and target machine
10426 @cindex compiler version, specifying
10427 @cindex target machine, specifying
10429 The usual way to run GCC is to run the executable called @command{gcc}, or
10430 @command{@var{machine}-gcc} when cross-compiling, or
10431 @command{@var{machine}-gcc-@var{version}} to run a version other than the
10432 one that was installed last.
10434 @node Submodel Options
10435 @section Hardware Models and Configurations
10436 @cindex submodel options
10437 @cindex specifying hardware config
10438 @cindex hardware models and configurations, specifying
10439 @cindex machine dependent options
10441 Each target machine types can have its own
10442 special options, starting with @samp{-m}, to choose among various
10443 hardware models or configurations---for example, 68010 vs 68020,
10444 floating coprocessor or none.  A single installed version of the
10445 compiler can compile for any model or configuration, according to the
10446 options specified.
10448 Some configurations of the compiler also support additional special
10449 options, usually for compatibility with other compilers on the same
10450 platform.
10452 @c This list is ordered alphanumerically by subsection name.
10453 @c It should be the same order and spelling as these options are listed
10454 @c in Machine Dependent Options
10456 @menu
10457 * Adapteva Epiphany Options::
10458 * ARM Options::
10459 * AVR Options::
10460 * Blackfin Options::
10461 * C6X Options::
10462 * CRIS Options::
10463 * CR16 Options::
10464 * Darwin Options::
10465 * DEC Alpha Options::
10466 * FR30 Options::
10467 * FRV Options::
10468 * GNU/Linux Options::
10469 * H8/300 Options::
10470 * HPPA Options::
10471 * i386 and x86-64 Options::
10472 * i386 and x86-64 Windows Options::
10473 * IA-64 Options::
10474 * LM32 Options::
10475 * M32C Options::
10476 * M32R/D Options::
10477 * M680x0 Options::
10478 * MCore Options::
10479 * MeP Options::
10480 * MicroBlaze Options::
10481 * MIPS Options::
10482 * MMIX Options::
10483 * MN10300 Options::
10484 * PDP-11 Options::
10485 * picoChip Options::
10486 * PowerPC Options::
10487 * RL78 Options::
10488 * RS/6000 and PowerPC Options::
10489 * RX Options::
10490 * S/390 and zSeries Options::
10491 * Score Options::
10492 * SH Options::
10493 * Solaris 2 Options::
10494 * SPARC Options::
10495 * SPU Options::
10496 * System V Options::
10497 * TILE-Gx Options::
10498 * TILEPro Options::
10499 * V850 Options::
10500 * VAX Options::
10501 * VMS Options::
10502 * VxWorks Options::
10503 * x86-64 Options::
10504 * Xstormy16 Options::
10505 * Xtensa Options::
10506 * zSeries Options::
10507 @end menu
10509 @node Adapteva Epiphany Options
10510 @subsection Adapteva Epiphany Options
10512 These @samp{-m} options are defined for Adapteva Epiphany:
10514 @table @gcctabopt
10515 @item -mhalf-reg-file
10516 @opindex mhalf-reg-file
10517 Don't allocate any register in the range @code{r32}@dots{}@code{r63}.
10518 That allows code to run on hardware variants that lack these registers.
10520 @item -mprefer-short-insn-regs
10521 @opindex mprefer-short-insn-regs
10522 Preferrentially allocate registers that allow short instruction generation.
10523 This can result in increasesd instruction count, so if this reduces or
10524 increases code size might vary from case to case.
10526 @item -mbranch-cost=@var{num}
10527 @opindex mbranch-cost
10528 Set the cost of branches to roughly @var{num} ``simple'' instructions.
10529 This cost is only a heuristic and is not guaranteed to produce
10530 consistent results across releases.
10532 @item -mcmove
10533 @opindex mcmove
10534 Enable the generation of conditional moves.
10536 @item -mnops=@var{num}
10537 @opindex mnops
10538 Emit @var{num} nops before every other generated instruction.
10540 @item -mno-soft-cmpsf
10541 @opindex mno-soft-cmpsf
10542 For single-precision floating-point comparisons, emit an @code{fsub} instruction
10543 and test the flags.  This is faster than a software comparison, but can
10544 get incorrect results in the presence of NaNs, or when two different small
10545 numbers are compared such that their difference is calculated as zero.
10546 The default is @option{-msoft-cmpsf}, which uses slower, but IEEE-compliant,
10547 software comparisons.
10549 @item -mstack-offset=@var{num}
10550 @opindex mstack-offset
10551 Set the offset between the top of the stack and the stack pointer.
10552 E.g., a value of 8 means that the eight bytes in the range sp+0@dots{}sp+7
10553 can be used by leaf functions without stack allocation.
10554 Values other than @samp{8} or @samp{16} are untested and unlikely to work.
10555 Note also that this option changes the ABI, compiling a program with a
10556 different stack offset than the libraries have been compiled with
10557 generally does not work.
10558 This option can be useful if you want to evaluate if a different stack
10559 offset would give you better code, but to actually use a different stack
10560 offset to build working programs, it is recommended to configure the
10561 toolchain with the appropriate @option{--with-stack-offset=@var{num}} option.
10563 @item -mno-round-nearest
10564 @opindex mno-round-nearest
10565 Make the scheduler assume that the rounding mode has been set to
10566 truncating.  The default is @option{-mround-nearest}.
10568 @item -mlong-calls
10569 @opindex mlong-calls
10570 If not otherwise specified by an attribute, assume all calls might be beyond
10571 the offset range of the @code{b} / @code{bl} instructions, and therefore load the
10572 function address into a register before performing a (otherwise direct) call.
10573 This is the default.
10575 @item -mshort-calls
10576 @opindex short-calls
10577 If not otherwise specified by an attribute, assume all direct calls are
10578 in the range of the @code{b} / @code{bl} instructions, so use these instructions
10579 for direct calls.  The default is @option{-mlong-calls}.
10581 @item -msmall16
10582 @opindex msmall16
10583 Assume addresses can be loaded as 16-bit unsigned values.  This does not
10584 apply to function addresses for which @option{-mlong-calls} semantics
10585 are in effect.
10587 @item -mfp-mode=@var{mode}
10588 @opindex mfp-mode
10589 Set the prevailing mode of the floating-point unit.
10590 This determines the floating-point mode that is provided and expected
10591 at function call and return time.  Making this mode match the mode you
10592 predominantly need at function start can make your programs smaller and
10593 faster by avoiding unnecessary mode switches.
10595 @var{mode} can be set to one the following values:
10597 @table @samp
10598 @item caller
10599 Any mode at function entry is valid, and retained or restored when
10600 the function returns, and when it calls other functions.
10601 This mode is useful for compiling libraries or other compilation units
10602 you might want to incorporate into different programs with different
10603 prevailing FPU modes, and the convenience of being able to use a single
10604 object file outweighs the size and speed overhead for any extra
10605 mode switching that might be needed, compared with what would be needed
10606 with a more specific choice of prevailing FPU mode.
10608 @item truncate
10609 This is the mode used for floating-point calculations with
10610 truncating (i.e.@: round towards zero) rounding mode.  That includes
10611 conversion from floating point to integer.
10613 @item round-nearest
10614 This is the mode used for floating-point calculations with
10615 round-to-nearest-or-even rounding mode.
10617 @item int
10618 This is the mode used to perform integer calculations in the FPU, e.g.@:
10619 integer multiply, or integer multiply-and-accumulate.
10620 @end table
10622 The default is @option{-mfp-mode=caller}
10624 @item -mnosplit-lohi
10625 @opindex mnosplit-lohi
10626 @item -mno-postinc
10627 @opindex mno-postinc
10628 @item -mno-postmodify
10629 @opindex mno-postmodify
10630 Code generation tweaks that disable, respectively, splitting of 32-bit
10631 loads, generation of post-increment addresses, and generation of
10632 post-modify addresses.  The defaults are @option{msplit-lohi},
10633 @option{-mpost-inc}, and @option{-mpost-modify}.
10635 @item -mnovect-double
10636 @opindex mno-vect-double
10637 Change the preferred SIMD mode to SImode.  The default is
10638 @option{-mvect-double}, which uses DImode as preferred SIMD mode.
10640 @item -max-vect-align=@var{num}
10641 @opindex max-vect-align
10642 The maximum alignment for SIMD vector mode types.
10643 @var{num} may be 4 or 8.  The default is 8.
10644 Note that this is an ABI change, even though many library function
10645 interfaces are unaffected if they don't use SIMD vector modes
10646 in places that affect size and/or alignment of relevant types.
10648 @item -msplit-vecmove-early
10649 @opindex msplit-vecmove-early
10650 Split vector moves into single word moves before reload.  In theory this
10651 can give better register allocation, but so far the reverse seems to be
10652 generally the case.
10654 @item -m1reg-@var{reg}
10655 @opindex m1reg-
10656 Specify a register to hold the constant @minus{}1, which makes loading small negative
10657 constants and certain bitmasks faster.
10658 Allowable values for @var{reg} are @samp{r43} and @samp{r63},
10659 which specify use of that register as a fixed register,
10660 and @samp{none}, which means that no register is used for this
10661 purpose.  The default is @option{-m1reg-none}.
10663 @end table
10665 @node ARM Options
10666 @subsection ARM Options
10667 @cindex ARM options
10669 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
10670 architectures:
10672 @table @gcctabopt
10673 @item -mabi=@var{name}
10674 @opindex mabi
10675 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
10676 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
10678 @item -mapcs-frame
10679 @opindex mapcs-frame
10680 Generate a stack frame that is compliant with the ARM Procedure Call
10681 Standard for all functions, even if this is not strictly necessary for
10682 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
10683 with this option causes the stack frames not to be generated for
10684 leaf functions.  The default is @option{-mno-apcs-frame}.
10686 @item -mapcs
10687 @opindex mapcs
10688 This is a synonym for @option{-mapcs-frame}.
10690 @ignore
10691 @c not currently implemented
10692 @item -mapcs-stack-check
10693 @opindex mapcs-stack-check
10694 Generate code to check the amount of stack space available upon entry to
10695 every function (that actually uses some stack space).  If there is
10696 insufficient space available then either the function
10697 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} is
10698 called, depending upon the amount of stack space required.  The runtime
10699 system is required to provide these functions.  The default is
10700 @option{-mno-apcs-stack-check}, since this produces smaller code.
10702 @c not currently implemented
10703 @item -mapcs-float
10704 @opindex mapcs-float
10705 Pass floating-point arguments using the floating-point registers.  This is
10706 one of the variants of the APCS@.  This option is recommended if the
10707 target hardware has a floating-point unit or if a lot of floating-point
10708 arithmetic is going to be performed by the code.  The default is
10709 @option{-mno-apcs-float}, since integer only code is slightly increased in
10710 size if @option{-mapcs-float} is used.
10712 @c not currently implemented
10713 @item -mapcs-reentrant
10714 @opindex mapcs-reentrant
10715 Generate reentrant, position independent code.  The default is
10716 @option{-mno-apcs-reentrant}.
10717 @end ignore
10719 @item -mthumb-interwork
10720 @opindex mthumb-interwork
10721 Generate code that supports calling between the ARM and Thumb
10722 instruction sets.  Without this option, on pre-v5 architectures, the
10723 two instruction sets cannot be reliably used inside one program.  The
10724 default is @option{-mno-thumb-interwork}, since slightly larger code
10725 is generated when @option{-mthumb-interwork} is specified.  In AAPCS
10726 configurations this option is meaningless.
10728 @item -mno-sched-prolog
10729 @opindex mno-sched-prolog
10730 Prevent the reordering of instructions in the function prologue, or the
10731 merging of those instruction with the instructions in the function's
10732 body.  This means that all functions start with a recognizable set
10733 of instructions (or in fact one of a choice from a small set of
10734 different function prologues), and this information can be used to
10735 locate the start of functions inside an executable piece of code.  The
10736 default is @option{-msched-prolog}.
10738 @item -mfloat-abi=@var{name}
10739 @opindex mfloat-abi
10740 Specifies which floating-point ABI to use.  Permissible values
10741 are: @samp{soft}, @samp{softfp} and @samp{hard}.
10743 Specifying @samp{soft} causes GCC to generate output containing
10744 library calls for floating-point operations.
10745 @samp{softfp} allows the generation of code using hardware floating-point
10746 instructions, but still uses the soft-float calling conventions.
10747 @samp{hard} allows generation of floating-point instructions
10748 and uses FPU-specific calling conventions.
10750 The default depends on the specific target configuration.  Note that
10751 the hard-float and soft-float ABIs are not link-compatible; you must
10752 compile your entire program with the same ABI, and link with a
10753 compatible set of libraries.
10755 @item -mlittle-endian
10756 @opindex mlittle-endian
10757 Generate code for a processor running in little-endian mode.  This is
10758 the default for all standard configurations.
10760 @item -mbig-endian
10761 @opindex mbig-endian
10762 Generate code for a processor running in big-endian mode; the default is
10763 to compile code for a little-endian processor.
10765 @item -mwords-little-endian
10766 @opindex mwords-little-endian
10767 This option only applies when generating code for big-endian processors.
10768 Generate code for a little-endian word order but a big-endian byte
10769 order.  That is, a byte order of the form @samp{32107654}.  Note: this
10770 option should only be used if you require compatibility with code for
10771 big-endian ARM processors generated by versions of the compiler prior to
10772 2.8.  This option is now deprecated.
10774 @item -mcpu=@var{name}
10775 @opindex mcpu
10776 This specifies the name of the target ARM processor.  GCC uses this name
10777 to determine what kind of instructions it can emit when generating
10778 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
10779 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
10780 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
10781 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
10782 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
10783 @samp{arm720},
10784 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
10785 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
10786 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
10787 @samp{strongarm1110},
10788 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
10789 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
10790 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
10791 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
10792 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
10793 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
10794 @samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
10795 @samp{cortex-a5}, @samp{cortex-a7}, @samp{cortex-a8}, @samp{cortex-a9}, 
10796 @samp{cortex-a15}, @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-r5},
10797 @samp{cortex-m4}, @samp{cortex-m3},
10798 @samp{cortex-m1},
10799 @samp{cortex-m0},
10800 @samp{cortex-m0plus},
10801 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312},
10802 @samp{fa526}, @samp{fa626},
10803 @samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}.
10806 @option{-mcpu=generic-@var{arch}} is also permissible, and is
10807 equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
10808 See @option{-mtune} for more information.
10810 @option{-mcpu=native} causes the compiler to auto-detect the CPU
10811 of the build computer.  At present, this feature is only supported on
10812 Linux, and not all architectures are recognized.  If the auto-detect is
10813 unsuccessful the option has no effect.
10815 @item -mtune=@var{name}
10816 @opindex mtune
10817 This option is very similar to the @option{-mcpu=} option, except that
10818 instead of specifying the actual target processor type, and hence
10819 restricting which instructions can be used, it specifies that GCC should
10820 tune the performance of the code as if the target were of the type
10821 specified in this option, but still choosing the instructions it
10822 generates based on the CPU specified by a @option{-mcpu=} option.
10823 For some ARM implementations better performance can be obtained by using
10824 this option.
10826 @option{-mtune=generic-@var{arch}} specifies that GCC should tune the
10827 performance for a blend of processors within architecture @var{arch}.
10828 The aim is to generate code that run well on the current most popular
10829 processors, balancing between optimizations that benefit some CPUs in the
10830 range, and avoiding performance pitfalls of other CPUs.  The effects of
10831 this option may change in future GCC versions as CPU models come and go.
10833 @option{-mtune=native} causes the compiler to auto-detect the CPU
10834 of the build computer.  At present, this feature is only supported on
10835 Linux, and not all architectures are recognized.  If the auto-detect is
10836 unsuccessful the option has no effect.
10838 @item -march=@var{name}
10839 @opindex march
10840 This specifies the name of the target ARM architecture.  GCC uses this
10841 name to determine what kind of instructions it can emit when generating
10842 assembly code.  This option can be used in conjunction with or instead
10843 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
10844 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
10845 @samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
10846 @samp{armv6}, @samp{armv6j},
10847 @samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
10848 @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
10849 @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
10851 @option{-march=native} causes the compiler to auto-detect the architecture
10852 of the build computer.  At present, this feature is only supported on
10853 Linux, and not all architectures are recognized.  If the auto-detect is
10854 unsuccessful the option has no effect.
10856 @item -mfpu=@var{name}
10857 @opindex mfpu
10858 This specifies what floating-point hardware (or hardware emulation) is
10859 available on the target.  Permissible names are: @samp{vfp}, @samp{vfpv3},
10860 @samp{vfpv3-fp16}, @samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd},
10861 @samp{vfpv3xd-fp16}, @samp{neon}, @samp{neon-fp16}, @samp{vfpv4},
10862 @samp{vfpv4-d16}, @samp{fpv4-sp-d16} and @samp{neon-vfpv4}.
10864 If @option{-msoft-float} is specified this specifies the format of
10865 floating-point values.
10867 If the selected floating-point hardware includes the NEON extension
10868 (e.g. @option{-mfpu}=@samp{neon}), note that floating-point
10869 operations are not generated by GCC's auto-vectorization pass unless
10870 @option{-funsafe-math-optimizations} is also specified.  This is
10871 because NEON hardware does not fully implement the IEEE 754 standard for
10872 floating-point arithmetic (in particular denormal values are treated as
10873 zero), so the use of NEON instructions may lead to a loss of precision.
10875 @item -mfp16-format=@var{name}
10876 @opindex mfp16-format
10877 Specify the format of the @code{__fp16} half-precision floating-point type.
10878 Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
10879 the default is @samp{none}, in which case the @code{__fp16} type is not
10880 defined.  @xref{Half-Precision}, for more information.
10882 @item -mstructure-size-boundary=@var{n}
10883 @opindex mstructure-size-boundary
10884 The sizes of all structures and unions are rounded up to a multiple
10885 of the number of bits set by this option.  Permissible values are 8, 32
10886 and 64.  The default value varies for different toolchains.  For the COFF
10887 targeted toolchain the default value is 8.  A value of 64 is only allowed
10888 if the underlying ABI supports it.
10890 Specifying the larger number can produce faster, more efficient code, but
10891 can also increase the size of the program.  Different values are potentially
10892 incompatible.  Code compiled with one value cannot necessarily expect to
10893 work with code or libraries compiled with another value, if they exchange
10894 information using structures or unions.
10896 @item -mabort-on-noreturn
10897 @opindex mabort-on-noreturn
10898 Generate a call to the function @code{abort} at the end of a
10899 @code{noreturn} function.  It is executed if the function tries to
10900 return.
10902 @item -mlong-calls
10903 @itemx -mno-long-calls
10904 @opindex mlong-calls
10905 @opindex mno-long-calls
10906 Tells the compiler to perform function calls by first loading the
10907 address of the function into a register and then performing a subroutine
10908 call on this register.  This switch is needed if the target function
10909 lies outside of the 64-megabyte addressing range of the offset-based
10910 version of subroutine call instruction.
10912 Even if this switch is enabled, not all function calls are turned
10913 into long calls.  The heuristic is that static functions, functions
10914 that have the @samp{short-call} attribute, functions that are inside
10915 the scope of a @samp{#pragma no_long_calls} directive, and functions whose
10916 definitions have already been compiled within the current compilation
10917 unit are not turned into long calls.  The exceptions to this rule are
10918 that weak function definitions, functions with the @samp{long-call}
10919 attribute or the @samp{section} attribute, and functions that are within
10920 the scope of a @samp{#pragma long_calls} directive are always
10921 turned into long calls.
10923 This feature is not enabled by default.  Specifying
10924 @option{-mno-long-calls} restores the default behavior, as does
10925 placing the function calls within the scope of a @samp{#pragma
10926 long_calls_off} directive.  Note these switches have no effect on how
10927 the compiler generates code to handle function calls via function
10928 pointers.
10930 @item -msingle-pic-base
10931 @opindex msingle-pic-base
10932 Treat the register used for PIC addressing as read-only, rather than
10933 loading it in the prologue for each function.  The runtime system is
10934 responsible for initializing this register with an appropriate value
10935 before execution begins.
10937 @item -mpic-register=@var{reg}
10938 @opindex mpic-register
10939 Specify the register to be used for PIC addressing.  The default is R10
10940 unless stack-checking is enabled, when R9 is used.
10942 @item -mcirrus-fix-invalid-insns
10943 @opindex mcirrus-fix-invalid-insns
10944 @opindex mno-cirrus-fix-invalid-insns
10945 Insert NOPs into the instruction stream to in order to work around
10946 problems with invalid Maverick instruction combinations.  This option
10947 is only valid if the @option{-mcpu=ep9312} option has been used to
10948 enable generation of instructions for the Cirrus Maverick floating-point
10949 co-processor.  This option is not enabled by default, since the
10950 problem is only present in older Maverick implementations.  The default
10951 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
10952 switch.
10954 @item -mpoke-function-name
10955 @opindex mpoke-function-name
10956 Write the name of each function into the text section, directly
10957 preceding the function prologue.  The generated code is similar to this:
10959 @smallexample
10960      t0
10961          .ascii "arm_poke_function_name", 0
10962          .align
10963      t1
10964          .word 0xff000000 + (t1 - t0)
10965      arm_poke_function_name
10966          mov     ip, sp
10967          stmfd   sp!, @{fp, ip, lr, pc@}
10968          sub     fp, ip, #4
10969 @end smallexample
10971 When performing a stack backtrace, code can inspect the value of
10972 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
10973 location @code{pc - 12} and the top 8 bits are set, then we know that
10974 there is a function name embedded immediately preceding this location
10975 and has length @code{((pc[-3]) & 0xff000000)}.
10977 @item -mthumb
10978 @itemx -marm
10979 @opindex marm
10980 @opindex mthumb
10982 Select between generating code that executes in ARM and Thumb
10983 states.  The default for most configurations is to generate code
10984 that executes in ARM state, but the default can be changed by
10985 configuring GCC with the @option{--with-mode=}@var{state}
10986 configure option.
10988 @item -mtpcs-frame
10989 @opindex mtpcs-frame
10990 Generate a stack frame that is compliant with the Thumb Procedure Call
10991 Standard for all non-leaf functions.  (A leaf function is one that does
10992 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
10994 @item -mtpcs-leaf-frame
10995 @opindex mtpcs-leaf-frame
10996 Generate a stack frame that is compliant with the Thumb Procedure Call
10997 Standard for all leaf functions.  (A leaf function is one that does
10998 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
11000 @item -mcallee-super-interworking
11001 @opindex mcallee-super-interworking
11002 Gives all externally visible functions in the file being compiled an ARM
11003 instruction set header which switches to Thumb mode before executing the
11004 rest of the function.  This allows these functions to be called from
11005 non-interworking code.  This option is not valid in AAPCS configurations
11006 because interworking is enabled by default.
11008 @item -mcaller-super-interworking
11009 @opindex mcaller-super-interworking
11010 Allows calls via function pointers (including virtual functions) to
11011 execute correctly regardless of whether the target code has been
11012 compiled for interworking or not.  There is a small overhead in the cost
11013 of executing a function pointer if this option is enabled.  This option
11014 is not valid in AAPCS configurations because interworking is enabled
11015 by default.
11017 @item -mtp=@var{name}
11018 @opindex mtp
11019 Specify the access model for the thread local storage pointer.  The valid
11020 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
11021 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
11022 (supported in the arm6k architecture), and @option{auto}, which uses the
11023 best available method for the selected processor.  The default setting is
11024 @option{auto}.
11026 @item -mtls-dialect=@var{dialect}
11027 @opindex mtls-dialect
11028 Specify the dialect to use for accessing thread local storage.  Two
11029 @var{dialect}s are supported---@samp{gnu} and @samp{gnu2}.  The
11030 @samp{gnu} dialect selects the original GNU scheme for supporting
11031 local and global dynamic TLS models.  The @samp{gnu2} dialect
11032 selects the GNU descriptor scheme, which provides better performance
11033 for shared libraries.  The GNU descriptor scheme is compatible with
11034 the original scheme, but does require new assembler, linker and
11035 library support.  Initial and local exec TLS models are unaffected by
11036 this option and always use the original scheme.
11038 @item -mword-relocations
11039 @opindex mword-relocations
11040 Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
11041 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
11042 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
11043 is specified.
11045 @item -mfix-cortex-m3-ldrd
11046 @opindex mfix-cortex-m3-ldrd
11047 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
11048 with overlapping destination and base registers are used.  This option avoids
11049 generating these instructions.  This option is enabled by default when
11050 @option{-mcpu=cortex-m3} is specified.
11052 @end table
11054 @node AVR Options
11055 @subsection AVR Options
11056 @cindex AVR Options
11058 These options are defined for AVR implementations:
11060 @table @gcctabopt
11061 @item -mmcu=@var{mcu}
11062 @opindex mmcu
11063 Specify Atmel AVR instruction set architectures (ISA) or MCU type.
11065 For a complete list of @var{mcu} values that are supported by @command{avr-gcc},
11066 see the compiler output when called with the @option{--help=target}
11067 command line option.
11068 The default for this option is@tie{}@code{avr2}.
11070 GCC supports the following AVR devices and ISAs:
11072 @include avr-mmcu.texi
11074 @item -maccumulate-args
11075 @opindex maccumulate-args
11076 Accumulate outgoing function arguments and acquire/release the needed
11077 stack space for outgoing function arguments once in function
11078 prologue/epilogue.  Without this option, outgoing arguments are pushed
11079 before calling a function and popped afterwards.
11081 Popping the arguments after the function call can be expensive on
11082 AVR so that accumulating the stack space might lead to smaller
11083 executables because arguments need not to be removed from the
11084 stack after such a function call.
11086 This option can lead to reduced code size for functions that perform
11087 several calls to functions that get their arguments on the stack like
11088 calls to printf-like functions.
11090 @item -mbranch-cost=@var{cost}
11091 @opindex mbranch-cost
11092 Set the branch costs for conditional branch instructions to
11093 @var{cost}.  Reasonable values for @var{cost} are small, non-negative
11094 integers. The default branch cost is 0.
11096 @item -mcall-prologues
11097 @opindex mcall-prologues
11098 Functions prologues/epilogues are expanded as calls to appropriate
11099 subroutines.  Code size is smaller.
11101 @item -mint8
11102 @opindex mint8
11103 Assume @code{int} to be 8-bit integer.  This affects the sizes of all types: a
11104 @code{char} is 1 byte, an @code{int} is 1 byte, a @code{long} is 2 bytes,
11105 and @code{long long} is 4 bytes.  Please note that this option does not
11106 conform to the C standards, but it results in smaller code
11107 size.
11109 @item -mno-interrupts
11110 @opindex mno-interrupts
11111 Generated code is not compatible with hardware interrupts.
11112 Code size is smaller.
11114 @item -mrelax
11115 @opindex mrelax
11116 Try to replace @code{CALL} resp.@: @code{JMP} instruction by the shorter
11117 @code{RCALL} resp.@: @code{RJMP} instruction if applicable.
11118 Setting @code{-mrelax} just adds the @code{--relax} option to the
11119 linker command line when the linker is called.
11121 Jump relaxing is performed by the linker because jump offsets are not
11122 known before code is located. Therefore, the assembler code generated by the
11123 compiler is the same, but the instructions in the executable may
11124 differ from instructions in the assembler code.
11126 Relaxing must be turned on if linker stubs are needed, see the
11127 section on @code{EIND} and linker stubs below.
11129 @item -mshort-calls
11130 @opindex mshort-calls
11131 Use @code{RCALL}/@code{RJMP} instructions even on devices with
11132 16@tie{}KiB or more of program memory, i.e.@: on devices that
11133 have the @code{CALL} and @code{JMP} instructions.
11134 See also the @code{-mrelax} command line option.
11136 @item -msp8
11137 @opindex msp8
11138 Treat the stack pointer register as an 8-bit register,
11139 i.e.@: assume the high byte of the stack pointer is zero.
11140 In general, you don't need to set this option by hand.
11142 This option is used internally by the compiler to select and
11143 build multilibs for architectures @code{avr2} and @code{avr25}.
11144 These architectures mix devices with and without @code{SPH}.
11145 For any setting other than @code{-mmcu=avr2} or @code{-mmcu=avr25}
11146 the compiler driver will add or remove this option from the compiler
11147 proper's command line, because the compiler then knows if the device
11148 or architecture has an 8-bit stack pointer and thus no @code{SPH}
11149 register or not.
11151 @item -mstrict-X
11152 @opindex mstrict-X
11153 Use address register @code{X} in a way proposed by the hardware.  This means
11154 that @code{X} is only used in indirect, post-increment or
11155 pre-decrement addressing.
11157 Without this option, the @code{X} register may be used in the same way
11158 as @code{Y} or @code{Z} which then is emulated by additional
11159 instructions.  
11160 For example, loading a value with @code{X+const} addressing with a
11161 small non-negative @code{const < 64} to a register @var{Rn} is
11162 performed as
11164 @example
11165 adiw r26, const   ; X += const
11166 ld   @var{Rn}, X        ; @var{Rn} = *X
11167 sbiw r26, const   ; X -= const
11168 @end example
11170 @item -mtiny-stack
11171 @opindex mtiny-stack
11172 Only change the lower 8@tie{}bits of the stack pointer.
11173 @end table
11175 @subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash
11176 @cindex @code{EIND}
11177 Pointers in the implementation are 16@tie{}bits wide.
11178 The address of a function or label is represented as word address so
11179 that indirect jumps and calls can target any code address in the
11180 range of 64@tie{}Ki words.
11182 In order to facilitate indirect jump on devices with more than 128@tie{}Ki
11183 bytes of program memory space, there is a special function register called
11184 @code{EIND} that serves as most significant part of the target address
11185 when @code{EICALL} or @code{EIJMP} instructions are used.
11187 Indirect jumps and calls on these devices are handled as follows by
11188 the compiler and are subject to some limitations:
11190 @itemize @bullet
11192 @item
11193 The compiler never sets @code{EIND}.
11195 @item
11196 The compiler uses @code{EIND} implicitely in @code{EICALL}/@code{EIJMP}
11197 instructions or might read @code{EIND} directly in order to emulate an
11198 indirect call/jump by means of a @code{RET} instruction.
11200 @item
11201 The compiler assumes that @code{EIND} never changes during the startup
11202 code or during the application. In particular, @code{EIND} is not
11203 saved/restored in function or interrupt service routine
11204 prologue/epilogue.
11206 @item
11207 For indirect calls to functions and computed goto, the linker
11208 generates @emph{stubs}. Stubs are jump pads sometimes also called
11209 @emph{trampolines}. Thus, the indirect call/jump jumps to such a stub.
11210 The stub contains a direct jump to the desired address.
11212 @item
11213 Linker relaxation must be turned on so that the linker will generate
11214 the stubs correctly an all situaltion. See the compiler option
11215 @code{-mrelax} and the linler option @code{--relax}.
11216 There are corner cases where the linker is supposed to generate stubs
11217 but aborts without relaxation and without a helpful error message.
11219 @item
11220 The default linker script is arranged for code with @code{EIND = 0}.
11221 If code is supposed to work for a setup with @code{EIND != 0}, a custom
11222 linker script has to be used in order to place the sections whose
11223 name start with @code{.trampolines} into the segment where @code{EIND}
11224 points to.
11226 @item
11227 The startup code from libgcc never sets @code{EIND}.
11228 Notice that startup code is a blend of code from libgcc and AVR-LibC.
11229 For the impact of AVR-LibC on @code{EIND}, see the
11230 @w{@uref{http://nongnu.org/avr-libc/user-manual,AVR-LibC user manual}}.
11232 @item
11233 It is legitimate for user-specific startup code to set up @code{EIND}
11234 early, for example by means of initialization code located in
11235 section @code{.init3}. Such code runs prior to general startup code
11236 that initializes RAM and calls constructors, but after the bit
11237 of startup code from AVR-LibC that sets @code{EIND} to the segment
11238 where the vector table is located.
11239 @example
11240 #include <avr/io.h>
11242 static void
11243 __attribute__((section(".init3"),naked,used,no_instrument_function))
11244 init3_set_eind (void)
11246   __asm volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
11247                   "out %i0,r24" :: "n" (&EIND) : "r24","memory");
11249 @end example
11251 @noindent
11252 The @code{__trampolines_start} symbol is defined in the linker script.
11254 @item
11255 Stubs are generated automatically by the linker if
11256 the following two conditions are met:
11257 @itemize @minus
11259 @item The address of a label is taken by means of the @code{gs} modifier
11260 (short for @emph{generate stubs}) like so:
11261 @example
11262 LDI r24, lo8(gs(@var{func}))
11263 LDI r25, hi8(gs(@var{func}))
11264 @end example
11265 @item The final location of that label is in a code segment
11266 @emph{outside} the segment where the stubs are located.
11267 @end itemize
11269 @item
11270 The compiler emits such @code{gs} modifiers for code labels in the
11271 following situations:
11272 @itemize @minus
11273 @item Taking address of a function or code label.
11274 @item Computed goto.
11275 @item If prologue-save function is used, see @option{-mcall-prologues}
11276 command-line option.
11277 @item Switch/case dispatch tables. If you do not want such dispatch
11278 tables you can specify the @option{-fno-jump-tables} command-line option.
11279 @item C and C++ constructors/destructors called during startup/shutdown.
11280 @item If the tools hit a @code{gs()} modifier explained above.
11281 @end itemize
11283 @item
11284 Jumping to non-symbolic addresses like so is @emph{not} supported:
11286 @example
11287 int main (void)
11289     /* Call function at word address 0x2 */
11290     return ((int(*)(void)) 0x2)();
11292 @end example
11294 Instead, a stub has to be set up, i.e.@: the function has to be called
11295 through a symbol (@code{func_4} in the example):
11297 @example
11298 int main (void)
11300     extern int func_4 (void);
11302     /* Call function at byte address 0x4 */
11303     return func_4();
11305 @end example
11307 and the application be linked with @code{-Wl,--defsym,func_4=0x4}.
11308 Alternatively, @code{func_4} can be defined in the linker script.
11309 @end itemize
11311 @subsubsection Handling of the @code{RAMPD}, @code{RAMPX}, @code{RAMPY} and @code{RAMPZ} Special Function Registers
11312 @cindex @code{RAMPD}
11313 @cindex @code{RAMPX}
11314 @cindex @code{RAMPY}
11315 @cindex @code{RAMPZ}
11316 Some AVR devices support memories larger than the 64@tie{}KiB range
11317 that can be accessed with 16-bit pointers.  To access memory locations
11318 outside this 64@tie{}KiB range, the contentent of a @code{RAMP}
11319 register is used as high part of the address:
11320 The @code{X}, @code{Y}, @code{Z} address register is concatenated
11321 with the @code{RAMPX}, @code{RAMPY}, @code{RAMPZ} special function
11322 register, respectively, to get a wide address. Similarly,
11323 @code{RAMPD} is used together with direct addressing.
11325 @itemize
11326 @item
11327 The startup code initializes the @code{RAMP} special function
11328 registers with zero.
11330 @item
11331 If a @ref{AVR Named Address Spaces,named address space} other than
11332 generic or @code{__flash} is used, then @code{RAMPZ} is set
11333 as needed before the operation.
11335 @item
11336 If the device supports RAM larger than 64@tie{KiB} and the compiler
11337 needs to change @code{RAMPZ} to accomplish an operation, @code{RAMPZ}
11338 is reset to zero after the operation.
11340 @item
11341 If the device comes with a specific @code{RAMP} register, the ISR
11342 prologue/epilogue saves/restores that SFR and initializes it with
11343 zero in case the ISR code might (implicitly) use it.
11345 @item
11346 RAM larger than 64@tie{KiB} is not supported by GCC for AVR targets.
11347 If you use inline assembler to read from locations outside the
11348 16-bit address range and change one of the @code{RAMP} registers,
11349 you must reset it to zero after the access.
11351 @end itemize
11353 @subsubsection AVR Built-in Macros
11355 GCC defines several built-in macros so that the user code can test
11356 for the presence or absence of features.  Almost any of the following
11357 built-in macros are deduced from device capabilities and thus
11358 triggered by the @code{-mmcu=} command-line option.
11360 For even more AVR-specific built-in macros see
11361 @ref{AVR Named Address Spaces} and @ref{AVR Built-in Functions}.
11363 @table @code
11365 @item __AVR_@var{Device}__
11366 Setting @code{-mmcu=@var{device}} defines this built-in macro which reflects
11367 the device's name. For example, @code{-mmcu=atmega8} defines the
11368 built-in macro @code{__AVR_ATmega8__}, @code{-mmcu=attiny261a} defines
11369 @code{__AVR_ATtiny261A__}, etc.
11371 The built-in macros' names follow
11372 the scheme @code{__AVR_@var{Device}__} where @var{Device} is
11373 the device name as from the AVR user manual. The difference between
11374 @var{Device} in the built-in macro and @var{device} in
11375 @code{-mmcu=@var{device}} is that the latter is always lowercase.
11377 @item __AVR_HAVE_ELPM__
11378 The device has the the @code{ELPM} instruction.
11380 @item __AVR_HAVE_ELPMX__
11381 The device has the @code{ELPM R@var{n},Z} and @code{ELPM
11382 R@var{n},Z+} instructions.
11384 @item __AVR_HAVE_MOVW__
11385 The device has the @code{MOVW} instruction to perform 16-bit
11386 register-register moves.
11388 @item __AVR_HAVE_LPMX__
11389 The device has the @code{LPM R@var{n},Z} and
11390 @code{LPM R@var{n},Z+} instructions.
11392 @item __AVR_HAVE_MUL__
11393 The device has a hardware multiplier. 
11395 @item __AVR_HAVE_JMP_CALL__
11396 The device has the @code{JMP} and @code{CALL} instructions.
11397 This is the case for devices with at least 16@tie{}KiB of program
11398 memory and if @code{-mshort-calls} is not set.
11400 @item __AVR_HAVE_EIJMP_EICALL__
11401 @item __AVR_3_BYTE_PC__
11402 The device has the @code{EIJMP} and @code{EICALL} instructions.
11403 This is the case for devices with more than 128@tie{}KiB of program memory.
11404 This also means that the program counter
11405 (PC) is 3@tie{}bytes wide.
11407 @item __AVR_2_BYTE_PC__
11408 The program counter (PC) is 2@tie{}bytes wide. This is the case for devices
11409 with up to 128@tie{}KiB of program memory.
11411 @item __AVR_HAVE_8BIT_SP__
11412 @item __AVR_HAVE_16BIT_SP__
11413 The stack pointer (SP) register is treated as 8-bit respectively
11414 16-bit register by the compiler.
11415 The definition of these macros is affected by @code{-mtiny-stack}.
11417 @item __AVR_HAVE_SPH__
11418 @item __AVR_SP8__
11419 The device has the SPH (high part of stack pointer) special function
11420 register or has an 8-bit stack pointer, respectively.
11421 The definition of these macros is affected by @code{-mmcu=} and
11422 in the cases of @code{-mmcu=avr2} and @code{-mmcu=avr25} also
11423 by @code{-msp8}.
11425 @item __AVR_HAVE_RAMPD__
11426 @item __AVR_HAVE_RAMPX__
11427 @item __AVR_HAVE_RAMPY__
11428 @item __AVR_HAVE_RAMPZ__
11429 The device has the @code{RAMPD}, @code{RAMPX}, @code{RAMPY},
11430 @code{RAMPZ} special function register, respectively.
11432 @item __NO_INTERRUPTS__
11433 This macro reflects the @code{-mno-interrupts} command line option.
11435 @item __AVR_ERRATA_SKIP__
11436 @item __AVR_ERRATA_SKIP_JMP_CALL__
11437 Some AVR devices (AT90S8515, ATmega103) must not skip 32-bit
11438 instructions because of a hardware erratum.  Skip instructions are
11439 @code{SBRS}, @code{SBRC}, @code{SBIS}, @code{SBIC} and @code{CPSE}.
11440 The second macro is only defined if @code{__AVR_HAVE_JMP_CALL__} is also
11441 set.
11443 @item __AVR_SFR_OFFSET__=@var{offset}
11444 Instructions that can address I/O special function registers directly
11445 like @code{IN}, @code{OUT}, @code{SBI}, etc.@: may use a different
11446 address as if addressed by an instruction to access RAM like @code{LD}
11447 or @code{STS}. This offset depends on the device architecture and has
11448 to be subtracted from the RAM address in order to get the
11449 respective I/O@tie{}address.
11451 @end table
11453 @node Blackfin Options
11454 @subsection Blackfin Options
11455 @cindex Blackfin Options
11457 @table @gcctabopt
11458 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
11459 @opindex mcpu=
11460 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
11461 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
11462 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
11463 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
11464 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
11465 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
11466 @samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
11467 @samp{bf561}, @samp{bf592}.
11468 The optional @var{sirevision} specifies the silicon revision of the target
11469 Blackfin processor.  Any workarounds available for the targeted silicon revision
11470 are enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
11471 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
11472 are enabled.  The @code{__SILICON_REVISION__} macro is defined to two
11473 hexadecimal digits representing the major and minor numbers in the silicon
11474 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
11475 is not defined.  If @var{sirevision} is @samp{any}, the
11476 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
11477 If this optional @var{sirevision} is not used, GCC assumes the latest known
11478 silicon revision of the targeted Blackfin processor.
11480 Support for @samp{bf561} is incomplete.  For @samp{bf561},
11481 Only the processor macro is defined.
11482 Without this option, @samp{bf532} is used as the processor by default.
11483 The corresponding predefined processor macros for @var{cpu} is to
11484 be defined.  And for @samp{bfin-elf} toolchain, this causes the hardware BSP
11485 provided by libgloss to be linked in if @option{-msim} is not given.
11487 @item -msim
11488 @opindex msim
11489 Specifies that the program will be run on the simulator.  This causes
11490 the simulator BSP provided by libgloss to be linked in.  This option
11491 has effect only for @samp{bfin-elf} toolchain.
11492 Certain other options, such as @option{-mid-shared-library} and
11493 @option{-mfdpic}, imply @option{-msim}.
11495 @item -momit-leaf-frame-pointer
11496 @opindex momit-leaf-frame-pointer
11497 Don't keep the frame pointer in a register for leaf functions.  This
11498 avoids the instructions to save, set up and restore frame pointers and
11499 makes an extra register available in leaf functions.  The option
11500 @option{-fomit-frame-pointer} removes the frame pointer for all functions,
11501 which might make debugging harder.
11503 @item -mspecld-anomaly
11504 @opindex mspecld-anomaly
11505 When enabled, the compiler ensures that the generated code does not
11506 contain speculative loads after jump instructions. If this option is used,
11507 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
11509 @item -mno-specld-anomaly
11510 @opindex mno-specld-anomaly
11511 Don't generate extra code to prevent speculative loads from occurring.
11513 @item -mcsync-anomaly
11514 @opindex mcsync-anomaly
11515 When enabled, the compiler ensures that the generated code does not
11516 contain CSYNC or SSYNC instructions too soon after conditional branches.
11517 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
11519 @item -mno-csync-anomaly
11520 @opindex mno-csync-anomaly
11521 Don't generate extra code to prevent CSYNC or SSYNC instructions from
11522 occurring too soon after a conditional branch.
11524 @item -mlow-64k
11525 @opindex mlow-64k
11526 When enabled, the compiler is free to take advantage of the knowledge that
11527 the entire program fits into the low 64k of memory.
11529 @item -mno-low-64k
11530 @opindex mno-low-64k
11531 Assume that the program is arbitrarily large.  This is the default.
11533 @item -mstack-check-l1
11534 @opindex mstack-check-l1
11535 Do stack checking using information placed into L1 scratchpad memory by the
11536 uClinux kernel.
11538 @item -mid-shared-library
11539 @opindex mid-shared-library
11540 Generate code that supports shared libraries via the library ID method.
11541 This allows for execute in place and shared libraries in an environment
11542 without virtual memory management.  This option implies @option{-fPIC}.
11543 With a @samp{bfin-elf} target, this option implies @option{-msim}.
11545 @item -mno-id-shared-library
11546 @opindex mno-id-shared-library
11547 Generate code that doesn't assume ID based shared libraries are being used.
11548 This is the default.
11550 @item -mleaf-id-shared-library
11551 @opindex mleaf-id-shared-library
11552 Generate code that supports shared libraries via the library ID method,
11553 but assumes that this library or executable won't link against any other
11554 ID shared libraries.  That allows the compiler to use faster code for jumps
11555 and calls.
11557 @item -mno-leaf-id-shared-library
11558 @opindex mno-leaf-id-shared-library
11559 Do not assume that the code being compiled won't link against any ID shared
11560 libraries.  Slower code is generated for jump and call insns.
11562 @item -mshared-library-id=n
11563 @opindex mshared-library-id
11564 Specifies the identification number of the ID-based shared library being
11565 compiled.  Specifying a value of 0 generates more compact code; specifying
11566 other values forces the allocation of that number to the current
11567 library but is no more space- or time-efficient than omitting this option.
11569 @item -msep-data
11570 @opindex msep-data
11571 Generate code that allows the data segment to be located in a different
11572 area of memory from the text segment.  This allows for execute in place in
11573 an environment without virtual memory management by eliminating relocations
11574 against the text section.
11576 @item -mno-sep-data
11577 @opindex mno-sep-data
11578 Generate code that assumes that the data segment follows the text segment.
11579 This is the default.
11581 @item -mlong-calls
11582 @itemx -mno-long-calls
11583 @opindex mlong-calls
11584 @opindex mno-long-calls
11585 Tells the compiler to perform function calls by first loading the
11586 address of the function into a register and then performing a subroutine
11587 call on this register.  This switch is needed if the target function
11588 lies outside of the 24-bit addressing range of the offset-based
11589 version of subroutine call instruction.
11591 This feature is not enabled by default.  Specifying
11592 @option{-mno-long-calls} restores the default behavior.  Note these
11593 switches have no effect on how the compiler generates code to handle
11594 function calls via function pointers.
11596 @item -mfast-fp
11597 @opindex mfast-fp
11598 Link with the fast floating-point library. This library relaxes some of
11599 the IEEE floating-point standard's rules for checking inputs against
11600 Not-a-Number (NAN), in the interest of performance.
11602 @item -minline-plt
11603 @opindex minline-plt
11604 Enable inlining of PLT entries in function calls to functions that are
11605 not known to bind locally.  It has no effect without @option{-mfdpic}.
11607 @item -mmulticore
11608 @opindex mmulticore
11609 Build standalone application for multicore Blackfin processor. Proper
11610 start files and link scripts are used to support multicore.
11611 This option defines @code{__BFIN_MULTICORE}. It can only be used with
11612 @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with
11613 @option{-mcorea} or @option{-mcoreb}. If it's used without
11614 @option{-mcorea} or @option{-mcoreb}, single application/dual core
11615 programming model is used. In this model, the main function of Core B
11616 should be named as coreb_main. If it's used with @option{-mcorea} or
11617 @option{-mcoreb}, one application per core programming model is used.
11618 If this option is not used, single core application programming
11619 model is used.
11621 @item -mcorea
11622 @opindex mcorea
11623 Build standalone application for Core A of BF561 when using
11624 one application per core programming model. Proper start files
11625 and link scripts are used to support Core A. This option
11626 defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}.
11628 @item -mcoreb
11629 @opindex mcoreb
11630 Build standalone application for Core B of BF561 when using
11631 one application per core programming model. Proper start files
11632 and link scripts are used to support Core B. This option
11633 defines @code{__BFIN_COREB}. When this option is used, coreb_main
11634 should be used instead of main. It must be used with
11635 @option{-mmulticore}.
11637 @item -msdram
11638 @opindex msdram
11639 Build standalone application for SDRAM. Proper start files and
11640 link scripts are used to put the application into SDRAM.
11641 Loader should initialize SDRAM before loading the application
11642 into SDRAM. This option defines @code{__BFIN_SDRAM}.
11644 @item -micplb
11645 @opindex micplb
11646 Assume that ICPLBs are enabled at run time.  This has an effect on certain
11647 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
11648 are enabled; for standalone applications the default is off.
11649 @end table
11651 @node C6X Options
11652 @subsection C6X Options
11653 @cindex C6X Options
11655 @table @gcctabopt
11656 @item -march=@var{name}
11657 @opindex march
11658 This specifies the name of the target architecture.  GCC uses this
11659 name to determine what kind of instructions it can emit when generating
11660 assembly code.  Permissible names are: @samp{c62x},
11661 @samp{c64x}, @samp{c64x+}, @samp{c67x}, @samp{c67x+}, @samp{c674x}.
11663 @item -mbig-endian
11664 @opindex mbig-endian
11665 Generate code for a big-endian target.
11667 @item -mlittle-endian
11668 @opindex mlittle-endian
11669 Generate code for a little-endian target.  This is the default.
11671 @item -msim
11672 @opindex msim
11673 Choose startup files and linker script suitable for the simulator.
11675 @item -msdata=default
11676 @opindex msdata=default
11677 Put small global and static data in the @samp{.neardata} section,
11678 which is pointed to by register @code{B14}.  Put small uninitialized
11679 global and static data in the @samp{.bss} section, which is adjacent
11680 to the @samp{.neardata} section.  Put small read-only data into the
11681 @samp{.rodata} section.  The corresponding sections used for large
11682 pieces of data are @samp{.fardata}, @samp{.far} and @samp{.const}.
11684 @item -msdata=all
11685 @opindex msdata=all
11686 Put all data, not just small objets, into the sections reserved for
11687 small data, and use addressing relative to the @code{B14} register to
11688 access them.
11690 @item -msdata=none
11691 @opindex msdata=none
11692 Make no use of the sections reserved for small data, and use absolute
11693 addresses to access all data.  Put all initialized global and static
11694 data in the @samp{.fardata} section, and all uninitialized data in the
11695 @samp{.far} section.  Put all constant data into the @samp{.const}
11696 section.
11697 @end table
11699 @node CRIS Options
11700 @subsection CRIS Options
11701 @cindex CRIS Options
11703 These options are defined specifically for the CRIS ports.
11705 @table @gcctabopt
11706 @item -march=@var{architecture-type}
11707 @itemx -mcpu=@var{architecture-type}
11708 @opindex march
11709 @opindex mcpu
11710 Generate code for the specified architecture.  The choices for
11711 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
11712 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
11713 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
11714 @samp{v10}.
11716 @item -mtune=@var{architecture-type}
11717 @opindex mtune
11718 Tune to @var{architecture-type} everything applicable about the generated
11719 code, except for the ABI and the set of available instructions.  The
11720 choices for @var{architecture-type} are the same as for
11721 @option{-march=@var{architecture-type}}.
11723 @item -mmax-stack-frame=@var{n}
11724 @opindex mmax-stack-frame
11725 Warn when the stack frame of a function exceeds @var{n} bytes.
11727 @item -metrax4
11728 @itemx -metrax100
11729 @opindex metrax4
11730 @opindex metrax100
11731 The options @option{-metrax4} and @option{-metrax100} are synonyms for
11732 @option{-march=v3} and @option{-march=v8} respectively.
11734 @item -mmul-bug-workaround
11735 @itemx -mno-mul-bug-workaround
11736 @opindex mmul-bug-workaround
11737 @opindex mno-mul-bug-workaround
11738 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
11739 models where it applies.  This option is active by default.
11741 @item -mpdebug
11742 @opindex mpdebug
11743 Enable CRIS-specific verbose debug-related information in the assembly
11744 code.  This option also has the effect to turn off the @samp{#NO_APP}
11745 formatted-code indicator to the assembler at the beginning of the
11746 assembly file.
11748 @item -mcc-init
11749 @opindex mcc-init
11750 Do not use condition-code results from previous instruction; always emit
11751 compare and test instructions before use of condition codes.
11753 @item -mno-side-effects
11754 @opindex mno-side-effects
11755 Do not emit instructions with side-effects in addressing modes other than
11756 post-increment.
11758 @item -mstack-align
11759 @itemx -mno-stack-align
11760 @itemx -mdata-align
11761 @itemx -mno-data-align
11762 @itemx -mconst-align
11763 @itemx -mno-const-align
11764 @opindex mstack-align
11765 @opindex mno-stack-align
11766 @opindex mdata-align
11767 @opindex mno-data-align
11768 @opindex mconst-align
11769 @opindex mno-const-align
11770 These options (no-options) arranges (eliminate arrangements) for the
11771 stack-frame, individual data and constants to be aligned for the maximum
11772 single data access size for the chosen CPU model.  The default is to
11773 arrange for 32-bit alignment.  ABI details such as structure layout are
11774 not affected by these options.
11776 @item -m32-bit
11777 @itemx -m16-bit
11778 @itemx -m8-bit
11779 @opindex m32-bit
11780 @opindex m16-bit
11781 @opindex m8-bit
11782 Similar to the stack- data- and const-align options above, these options
11783 arrange for stack-frame, writable data and constants to all be 32-bit,
11784 16-bit or 8-bit aligned.  The default is 32-bit alignment.
11786 @item -mno-prologue-epilogue
11787 @itemx -mprologue-epilogue
11788 @opindex mno-prologue-epilogue
11789 @opindex mprologue-epilogue
11790 With @option{-mno-prologue-epilogue}, the normal function prologue and
11791 epilogue which set up the stack frame are omitted and no return
11792 instructions or return sequences are generated in the code.  Use this
11793 option only together with visual inspection of the compiled code: no
11794 warnings or errors are generated when call-saved registers must be saved,
11795 or storage for local variable needs to be allocated.
11797 @item -mno-gotplt
11798 @itemx -mgotplt
11799 @opindex mno-gotplt
11800 @opindex mgotplt
11801 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
11802 instruction sequences that load addresses for functions from the PLT part
11803 of the GOT rather than (traditional on other architectures) calls to the
11804 PLT@.  The default is @option{-mgotplt}.
11806 @item -melf
11807 @opindex melf
11808 Legacy no-op option only recognized with the cris-axis-elf and
11809 cris-axis-linux-gnu targets.
11811 @item -mlinux
11812 @opindex mlinux
11813 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
11815 @item -sim
11816 @opindex sim
11817 This option, recognized for the cris-axis-elf arranges
11818 to link with input-output functions from a simulator library.  Code,
11819 initialized data and zero-initialized data are allocated consecutively.
11821 @item -sim2
11822 @opindex sim2
11823 Like @option{-sim}, but pass linker options to locate initialized data at
11824 0x40000000 and zero-initialized data at 0x80000000.
11825 @end table
11827 @node CR16 Options
11828 @subsection CR16 Options
11829 @cindex CR16 Options
11831 These options are defined specifically for the CR16 ports.
11833 @table @gcctabopt
11835 @item -mmac
11836 @opindex mmac
11837 Enable the use of multiply-accumulate instructions. Disabled by default.
11839 @item -mcr16cplus
11840 @itemx -mcr16c
11841 @opindex mcr16cplus
11842 @opindex mcr16c
11843 Generate code for CR16C or CR16C+ architecture. CR16C+ architecture 
11844 is default.
11846 @item -msim
11847 @opindex msim
11848 Links the library libsim.a which is in compatible with simulator. Applicable
11849 to ELF compiler only.
11851 @item -mint32
11852 @opindex mint32
11853 Choose integer type as 32-bit wide.
11855 @item -mbit-ops
11856 @opindex mbit-ops
11857 Generates @code{sbit}/@code{cbit} instructions for bit manipulations.
11859 @item -mdata-model=@var{model}
11860 @opindex mdata-model
11861 Choose a data model. The choices for @var{model} are @samp{near},
11862 @samp{far} or @samp{medium}. @samp{medium} is default.
11863 However, @samp{far} is not valid with @option{-mcr16c}, as the
11864 CR16C architecture does not support the far data model.
11865 @end table
11867 @node Darwin Options
11868 @subsection Darwin Options
11869 @cindex Darwin options
11871 These options are defined for all architectures running the Darwin operating
11872 system.
11874 FSF GCC on Darwin does not create ``fat'' object files; it creates
11875 an object file for the single architecture that GCC was built to
11876 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
11877 @option{-arch} options are used; it does so by running the compiler or
11878 linker multiple times and joining the results together with
11879 @file{lipo}.
11881 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
11882 @samp{i686}) is determined by the flags that specify the ISA
11883 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
11884 @option{-force_cpusubtype_ALL} option can be used to override this.
11886 The Darwin tools vary in their behavior when presented with an ISA
11887 mismatch.  The assembler, @file{as}, only permits instructions to
11888 be used that are valid for the subtype of the file it is generating,
11889 so you cannot put 64-bit instructions in a @samp{ppc750} object file.
11890 The linker for shared libraries, @file{/usr/bin/libtool}, fails
11891 and prints an error if asked to create a shared library with a less
11892 restrictive subtype than its input files (for instance, trying to put
11893 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
11894 for executables, @command{ld}, quietly gives the executable the most
11895 restrictive subtype of any of its input files.
11897 @table @gcctabopt
11898 @item -F@var{dir}
11899 @opindex F
11900 Add the framework directory @var{dir} to the head of the list of
11901 directories to be searched for header files.  These directories are
11902 interleaved with those specified by @option{-I} options and are
11903 scanned in a left-to-right order.
11905 A framework directory is a directory with frameworks in it.  A
11906 framework is a directory with a @file{Headers} and/or
11907 @file{PrivateHeaders} directory contained directly in it that ends
11908 in @file{.framework}.  The name of a framework is the name of this
11909 directory excluding the @file{.framework}.  Headers associated with
11910 the framework are found in one of those two directories, with
11911 @file{Headers} being searched first.  A subframework is a framework
11912 directory that is in a framework's @file{Frameworks} directory.
11913 Includes of subframework headers can only appear in a header of a
11914 framework that contains the subframework, or in a sibling subframework
11915 header.  Two subframeworks are siblings if they occur in the same
11916 framework.  A subframework should not have the same name as a
11917 framework; a warning is issued if this is violated.  Currently a
11918 subframework cannot have subframeworks; in the future, the mechanism
11919 may be extended to support this.  The standard frameworks can be found
11920 in @file{/System/Library/Frameworks} and
11921 @file{/Library/Frameworks}.  An example include looks like
11922 @code{#include <Framework/header.h>}, where @file{Framework} denotes
11923 the name of the framework and @file{header.h} is found in the
11924 @file{PrivateHeaders} or @file{Headers} directory.
11926 @item -iframework@var{dir}
11927 @opindex iframework
11928 Like @option{-F} except the directory is a treated as a system
11929 directory.  The main difference between this @option{-iframework} and
11930 @option{-F} is that with @option{-iframework} the compiler does not
11931 warn about constructs contained within header files found via
11932 @var{dir}.  This option is valid only for the C family of languages.
11934 @item -gused
11935 @opindex gused
11936 Emit debugging information for symbols that are used.  For stabs
11937 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
11938 This is by default ON@.
11940 @item -gfull
11941 @opindex gfull
11942 Emit debugging information for all symbols and types.
11944 @item -mmacosx-version-min=@var{version}
11945 The earliest version of MacOS X that this executable will run on
11946 is @var{version}.  Typical values of @var{version} include @code{10.1},
11947 @code{10.2}, and @code{10.3.9}.
11949 If the compiler was built to use the system's headers by default,
11950 then the default for this option is the system version on which the
11951 compiler is running, otherwise the default is to make choices that
11952 are compatible with as many systems and code bases as possible.
11954 @item -mkernel
11955 @opindex mkernel
11956 Enable kernel development mode.  The @option{-mkernel} option sets
11957 @option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
11958 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
11959 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
11960 applicable.  This mode also sets @option{-mno-altivec},
11961 @option{-msoft-float}, @option{-fno-builtin} and
11962 @option{-mlong-branch} for PowerPC targets.
11964 @item -mone-byte-bool
11965 @opindex mone-byte-bool
11966 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
11967 By default @samp{sizeof(bool)} is @samp{4} when compiling for
11968 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
11969 option has no effect on x86.
11971 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
11972 to generate code that is not binary compatible with code generated
11973 without that switch.  Using this switch may require recompiling all
11974 other modules in a program, including system libraries.  Use this
11975 switch to conform to a non-default data model.
11977 @item -mfix-and-continue
11978 @itemx -ffix-and-continue
11979 @itemx -findirect-data
11980 @opindex mfix-and-continue
11981 @opindex ffix-and-continue
11982 @opindex findirect-data
11983 Generate code suitable for fast turn around development.  Needed to
11984 enable GDB to dynamically load @code{.o} files into already running
11985 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
11986 are provided for backwards compatibility.
11988 @item -all_load
11989 @opindex all_load
11990 Loads all members of static archive libraries.
11991 See man ld(1) for more information.
11993 @item -arch_errors_fatal
11994 @opindex arch_errors_fatal
11995 Cause the errors having to do with files that have the wrong architecture
11996 to be fatal.
11998 @item -bind_at_load
11999 @opindex bind_at_load
12000 Causes the output file to be marked such that the dynamic linker will
12001 bind all undefined references when the file is loaded or launched.
12003 @item -bundle
12004 @opindex bundle
12005 Produce a Mach-o bundle format file.
12006 See man ld(1) for more information.
12008 @item -bundle_loader @var{executable}
12009 @opindex bundle_loader
12010 This option specifies the @var{executable} that will load the build
12011 output file being linked.  See man ld(1) for more information.
12013 @item -dynamiclib
12014 @opindex dynamiclib
12015 When passed this option, GCC produces a dynamic library instead of
12016 an executable when linking, using the Darwin @file{libtool} command.
12018 @item -force_cpusubtype_ALL
12019 @opindex force_cpusubtype_ALL
12020 This causes GCC's output file to have the @var{ALL} subtype, instead of
12021 one controlled by the @option{-mcpu} or @option{-march} option.
12023 @item -allowable_client  @var{client_name}
12024 @itemx -client_name
12025 @itemx -compatibility_version
12026 @itemx -current_version
12027 @itemx -dead_strip
12028 @itemx -dependency-file
12029 @itemx -dylib_file
12030 @itemx -dylinker_install_name
12031 @itemx -dynamic
12032 @itemx -exported_symbols_list
12033 @itemx -filelist
12034 @need 800
12035 @itemx -flat_namespace
12036 @itemx -force_flat_namespace
12037 @itemx -headerpad_max_install_names
12038 @itemx -image_base
12039 @itemx -init
12040 @itemx -install_name
12041 @itemx -keep_private_externs
12042 @itemx -multi_module
12043 @itemx -multiply_defined
12044 @itemx -multiply_defined_unused
12045 @need 800
12046 @itemx -noall_load
12047 @itemx -no_dead_strip_inits_and_terms
12048 @itemx -nofixprebinding
12049 @itemx -nomultidefs
12050 @itemx -noprebind
12051 @itemx -noseglinkedit
12052 @itemx -pagezero_size
12053 @itemx -prebind
12054 @itemx -prebind_all_twolevel_modules
12055 @itemx -private_bundle
12056 @need 800
12057 @itemx -read_only_relocs
12058 @itemx -sectalign
12059 @itemx -sectobjectsymbols
12060 @itemx -whyload
12061 @itemx -seg1addr
12062 @itemx -sectcreate
12063 @itemx -sectobjectsymbols
12064 @itemx -sectorder
12065 @itemx -segaddr
12066 @itemx -segs_read_only_addr
12067 @need 800
12068 @itemx -segs_read_write_addr
12069 @itemx -seg_addr_table
12070 @itemx -seg_addr_table_filename
12071 @itemx -seglinkedit
12072 @itemx -segprot
12073 @itemx -segs_read_only_addr
12074 @itemx -segs_read_write_addr
12075 @itemx -single_module
12076 @itemx -static
12077 @itemx -sub_library
12078 @need 800
12079 @itemx -sub_umbrella
12080 @itemx -twolevel_namespace
12081 @itemx -umbrella
12082 @itemx -undefined
12083 @itemx -unexported_symbols_list
12084 @itemx -weak_reference_mismatches
12085 @itemx -whatsloaded
12086 @opindex allowable_client
12087 @opindex client_name
12088 @opindex compatibility_version
12089 @opindex current_version
12090 @opindex dead_strip
12091 @opindex dependency-file
12092 @opindex dylib_file
12093 @opindex dylinker_install_name
12094 @opindex dynamic
12095 @opindex exported_symbols_list
12096 @opindex filelist
12097 @opindex flat_namespace
12098 @opindex force_flat_namespace
12099 @opindex headerpad_max_install_names
12100 @opindex image_base
12101 @opindex init
12102 @opindex install_name
12103 @opindex keep_private_externs
12104 @opindex multi_module
12105 @opindex multiply_defined
12106 @opindex multiply_defined_unused
12107 @opindex noall_load
12108 @opindex no_dead_strip_inits_and_terms
12109 @opindex nofixprebinding
12110 @opindex nomultidefs
12111 @opindex noprebind
12112 @opindex noseglinkedit
12113 @opindex pagezero_size
12114 @opindex prebind
12115 @opindex prebind_all_twolevel_modules
12116 @opindex private_bundle
12117 @opindex read_only_relocs
12118 @opindex sectalign
12119 @opindex sectobjectsymbols
12120 @opindex whyload
12121 @opindex seg1addr
12122 @opindex sectcreate
12123 @opindex sectobjectsymbols
12124 @opindex sectorder
12125 @opindex segaddr
12126 @opindex segs_read_only_addr
12127 @opindex segs_read_write_addr
12128 @opindex seg_addr_table
12129 @opindex seg_addr_table_filename
12130 @opindex seglinkedit
12131 @opindex segprot
12132 @opindex segs_read_only_addr
12133 @opindex segs_read_write_addr
12134 @opindex single_module
12135 @opindex static
12136 @opindex sub_library
12137 @opindex sub_umbrella
12138 @opindex twolevel_namespace
12139 @opindex umbrella
12140 @opindex undefined
12141 @opindex unexported_symbols_list
12142 @opindex weak_reference_mismatches
12143 @opindex whatsloaded
12144 These options are passed to the Darwin linker.  The Darwin linker man page
12145 describes them in detail.
12146 @end table
12148 @node DEC Alpha Options
12149 @subsection DEC Alpha Options
12151 These @samp{-m} options are defined for the DEC Alpha implementations:
12153 @table @gcctabopt
12154 @item -mno-soft-float
12155 @itemx -msoft-float
12156 @opindex mno-soft-float
12157 @opindex msoft-float
12158 Use (do not use) the hardware floating-point instructions for
12159 floating-point operations.  When @option{-msoft-float} is specified,
12160 functions in @file{libgcc.a} are used to perform floating-point
12161 operations.  Unless they are replaced by routines that emulate the
12162 floating-point operations, or compiled in such a way as to call such
12163 emulations routines, these routines issue floating-point
12164 operations.   If you are compiling for an Alpha without floating-point
12165 operations, you must ensure that the library is built so as not to call
12166 them.
12168 Note that Alpha implementations without floating-point operations are
12169 required to have floating-point registers.
12171 @item -mfp-reg
12172 @itemx -mno-fp-regs
12173 @opindex mfp-reg
12174 @opindex mno-fp-regs
12175 Generate code that uses (does not use) the floating-point register set.
12176 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
12177 register set is not used, floating-point operands are passed in integer
12178 registers as if they were integers and floating-point results are passed
12179 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
12180 so any function with a floating-point argument or return value called by code
12181 compiled with @option{-mno-fp-regs} must also be compiled with that
12182 option.
12184 A typical use of this option is building a kernel that does not use,
12185 and hence need not save and restore, any floating-point registers.
12187 @item -mieee
12188 @opindex mieee
12189 The Alpha architecture implements floating-point hardware optimized for
12190 maximum performance.  It is mostly compliant with the IEEE floating-point
12191 standard.  However, for full compliance, software assistance is
12192 required.  This option generates code fully IEEE-compliant code
12193 @emph{except} that the @var{inexact-flag} is not maintained (see below).
12194 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
12195 defined during compilation.  The resulting code is less efficient but is
12196 able to correctly support denormalized numbers and exceptional IEEE
12197 values such as not-a-number and plus/minus infinity.  Other Alpha
12198 compilers call this option @option{-ieee_with_no_inexact}.
12200 @item -mieee-with-inexact
12201 @opindex mieee-with-inexact
12202 This is like @option{-mieee} except the generated code also maintains
12203 the IEEE @var{inexact-flag}.  Turning on this option causes the
12204 generated code to implement fully-compliant IEEE math.  In addition to
12205 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
12206 macro.  On some Alpha implementations the resulting code may execute
12207 significantly slower than the code generated by default.  Since there is
12208 very little code that depends on the @var{inexact-flag}, you should
12209 normally not specify this option.  Other Alpha compilers call this
12210 option @option{-ieee_with_inexact}.
12212 @item -mfp-trap-mode=@var{trap-mode}
12213 @opindex mfp-trap-mode
12214 This option controls what floating-point related traps are enabled.
12215 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
12216 The trap mode can be set to one of four values:
12218 @table @samp
12219 @item n
12220 This is the default (normal) setting.  The only traps that are enabled
12221 are the ones that cannot be disabled in software (e.g., division by zero
12222 trap).
12224 @item u
12225 In addition to the traps enabled by @samp{n}, underflow traps are enabled
12226 as well.
12228 @item su
12229 Like @samp{u}, but the instructions are marked to be safe for software
12230 completion (see Alpha architecture manual for details).
12232 @item sui
12233 Like @samp{su}, but inexact traps are enabled as well.
12234 @end table
12236 @item -mfp-rounding-mode=@var{rounding-mode}
12237 @opindex mfp-rounding-mode
12238 Selects the IEEE rounding mode.  Other Alpha compilers call this option
12239 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
12242 @table @samp
12243 @item n
12244 Normal IEEE rounding mode.  Floating-point numbers are rounded towards
12245 the nearest machine number or towards the even machine number in case
12246 of a tie.
12248 @item m
12249 Round towards minus infinity.
12251 @item c
12252 Chopped rounding mode.  Floating-point numbers are rounded towards zero.
12254 @item d
12255 Dynamic rounding mode.  A field in the floating-point control register
12256 (@var{fpcr}, see Alpha architecture reference manual) controls the
12257 rounding mode in effect.  The C library initializes this register for
12258 rounding towards plus infinity.  Thus, unless your program modifies the
12259 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
12260 @end table
12262 @item -mtrap-precision=@var{trap-precision}
12263 @opindex mtrap-precision
12264 In the Alpha architecture, floating-point traps are imprecise.  This
12265 means without software assistance it is impossible to recover from a
12266 floating trap and program execution normally needs to be terminated.
12267 GCC can generate code that can assist operating system trap handlers
12268 in determining the exact location that caused a floating-point trap.
12269 Depending on the requirements of an application, different levels of
12270 precisions can be selected:
12272 @table @samp
12273 @item p
12274 Program precision.  This option is the default and means a trap handler
12275 can only identify which program caused a floating-point exception.
12277 @item f
12278 Function precision.  The trap handler can determine the function that
12279 caused a floating-point exception.
12281 @item i
12282 Instruction precision.  The trap handler can determine the exact
12283 instruction that caused a floating-point exception.
12284 @end table
12286 Other Alpha compilers provide the equivalent options called
12287 @option{-scope_safe} and @option{-resumption_safe}.
12289 @item -mieee-conformant
12290 @opindex mieee-conformant
12291 This option marks the generated code as IEEE conformant.  You must not
12292 use this option unless you also specify @option{-mtrap-precision=i} and either
12293 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
12294 is to emit the line @samp{.eflag 48} in the function prologue of the
12295 generated assembly file.
12297 @item -mbuild-constants
12298 @opindex mbuild-constants
12299 Normally GCC examines a 32- or 64-bit integer constant to
12300 see if it can construct it from smaller constants in two or three
12301 instructions.  If it cannot, it outputs the constant as a literal and
12302 generates code to load it from the data segment at run time.
12304 Use this option to require GCC to construct @emph{all} integer constants
12305 using code, even if it takes more instructions (the maximum is six).
12307 You typically use this option to build a shared library dynamic
12308 loader.  Itself a shared library, it must relocate itself in memory
12309 before it can find the variables and constants in its own data segment.
12311 @item -mbwx
12312 @itemx -mno-bwx
12313 @itemx -mcix
12314 @itemx -mno-cix
12315 @itemx -mfix
12316 @itemx -mno-fix
12317 @itemx -mmax
12318 @itemx -mno-max
12319 @opindex mbwx
12320 @opindex mno-bwx
12321 @opindex mcix
12322 @opindex mno-cix
12323 @opindex mfix
12324 @opindex mno-fix
12325 @opindex mmax
12326 @opindex mno-max
12327 Indicate whether GCC should generate code to use the optional BWX,
12328 CIX, FIX and MAX instruction sets.  The default is to use the instruction
12329 sets supported by the CPU type specified via @option{-mcpu=} option or that
12330 of the CPU on which GCC was built if none is specified.
12332 @item -mfloat-vax
12333 @itemx -mfloat-ieee
12334 @opindex mfloat-vax
12335 @opindex mfloat-ieee
12336 Generate code that uses (does not use) VAX F and G floating-point
12337 arithmetic instead of IEEE single and double precision.
12339 @item -mexplicit-relocs
12340 @itemx -mno-explicit-relocs
12341 @opindex mexplicit-relocs
12342 @opindex mno-explicit-relocs
12343 Older Alpha assemblers provided no way to generate symbol relocations
12344 except via assembler macros.  Use of these macros does not allow
12345 optimal instruction scheduling.  GNU binutils as of version 2.12
12346 supports a new syntax that allows the compiler to explicitly mark
12347 which relocations should apply to which instructions.  This option
12348 is mostly useful for debugging, as GCC detects the capabilities of
12349 the assembler when it is built and sets the default accordingly.
12351 @item -msmall-data
12352 @itemx -mlarge-data
12353 @opindex msmall-data
12354 @opindex mlarge-data
12355 When @option{-mexplicit-relocs} is in effect, static data is
12356 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
12357 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
12358 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
12359 16-bit relocations off of the @code{$gp} register.  This limits the
12360 size of the small data area to 64KB, but allows the variables to be
12361 directly accessed via a single instruction.
12363 The default is @option{-mlarge-data}.  With this option the data area
12364 is limited to just below 2GB@.  Programs that require more than 2GB of
12365 data must use @code{malloc} or @code{mmap} to allocate the data in the
12366 heap instead of in the program's data segment.
12368 When generating code for shared libraries, @option{-fpic} implies
12369 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
12371 @item -msmall-text
12372 @itemx -mlarge-text
12373 @opindex msmall-text
12374 @opindex mlarge-text
12375 When @option{-msmall-text} is used, the compiler assumes that the
12376 code of the entire program (or shared library) fits in 4MB, and is
12377 thus reachable with a branch instruction.  When @option{-msmall-data}
12378 is used, the compiler can assume that all local symbols share the
12379 same @code{$gp} value, and thus reduce the number of instructions
12380 required for a function call from 4 to 1.
12382 The default is @option{-mlarge-text}.
12384 @item -mcpu=@var{cpu_type}
12385 @opindex mcpu
12386 Set the instruction set and instruction scheduling parameters for
12387 machine type @var{cpu_type}.  You can specify either the @samp{EV}
12388 style name or the corresponding chip number.  GCC supports scheduling
12389 parameters for the EV4, EV5 and EV6 family of processors and
12390 chooses the default values for the instruction set from the processor
12391 you specify.  If you do not specify a processor type, GCC defaults
12392 to the processor on which the compiler was built.
12394 Supported values for @var{cpu_type} are
12396 @table @samp
12397 @item ev4
12398 @itemx ev45
12399 @itemx 21064
12400 Schedules as an EV4 and has no instruction set extensions.
12402 @item ev5
12403 @itemx 21164
12404 Schedules as an EV5 and has no instruction set extensions.
12406 @item ev56
12407 @itemx 21164a
12408 Schedules as an EV5 and supports the BWX extension.
12410 @item pca56
12411 @itemx 21164pc
12412 @itemx 21164PC
12413 Schedules as an EV5 and supports the BWX and MAX extensions.
12415 @item ev6
12416 @itemx 21264
12417 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
12419 @item ev67
12420 @itemx 21264a
12421 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
12422 @end table
12424 Native toolchains also support the value @samp{native},
12425 which selects the best architecture option for the host processor.
12426 @option{-mcpu=native} has no effect if GCC does not recognize
12427 the processor.
12429 @item -mtune=@var{cpu_type}
12430 @opindex mtune
12431 Set only the instruction scheduling parameters for machine type
12432 @var{cpu_type}.  The instruction set is not changed.
12434 Native toolchains also support the value @samp{native},
12435 which selects the best architecture option for the host processor.
12436 @option{-mtune=native} has no effect if GCC does not recognize
12437 the processor.
12439 @item -mmemory-latency=@var{time}
12440 @opindex mmemory-latency
12441 Sets the latency the scheduler should assume for typical memory
12442 references as seen by the application.  This number is highly
12443 dependent on the memory access patterns used by the application
12444 and the size of the external cache on the machine.
12446 Valid options for @var{time} are
12448 @table @samp
12449 @item @var{number}
12450 A decimal number representing clock cycles.
12452 @item L1
12453 @itemx L2
12454 @itemx L3
12455 @itemx main
12456 The compiler contains estimates of the number of clock cycles for
12457 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
12458 (also called Dcache, Scache, and Bcache), as well as to main memory.
12459 Note that L3 is only valid for EV5.
12461 @end table
12462 @end table
12464 @node FR30 Options
12465 @subsection FR30 Options
12466 @cindex FR30 Options
12468 These options are defined specifically for the FR30 port.
12470 @table @gcctabopt
12472 @item -msmall-model
12473 @opindex msmall-model
12474 Use the small address space model.  This can produce smaller code, but
12475 it does assume that all symbolic values and addresses fit into a
12476 20-bit range.
12478 @item -mno-lsim
12479 @opindex mno-lsim
12480 Assume that runtime support has been provided and so there is no need
12481 to include the simulator library (@file{libsim.a}) on the linker
12482 command line.
12484 @end table
12486 @node FRV Options
12487 @subsection FRV Options
12488 @cindex FRV Options
12490 @table @gcctabopt
12491 @item -mgpr-32
12492 @opindex mgpr-32
12494 Only use the first 32 general-purpose registers.
12496 @item -mgpr-64
12497 @opindex mgpr-64
12499 Use all 64 general-purpose registers.
12501 @item -mfpr-32
12502 @opindex mfpr-32
12504 Use only the first 32 floating-point registers.
12506 @item -mfpr-64
12507 @opindex mfpr-64
12509 Use all 64 floating-point registers.
12511 @item -mhard-float
12512 @opindex mhard-float
12514 Use hardware instructions for floating-point operations.
12516 @item -msoft-float
12517 @opindex msoft-float
12519 Use library routines for floating-point operations.
12521 @item -malloc-cc
12522 @opindex malloc-cc
12524 Dynamically allocate condition code registers.
12526 @item -mfixed-cc
12527 @opindex mfixed-cc
12529 Do not try to dynamically allocate condition code registers, only
12530 use @code{icc0} and @code{fcc0}.
12532 @item -mdword
12533 @opindex mdword
12535 Change ABI to use double word insns.
12537 @item -mno-dword
12538 @opindex mno-dword
12540 Do not use double word instructions.
12542 @item -mdouble
12543 @opindex mdouble
12545 Use floating-point double instructions.
12547 @item -mno-double
12548 @opindex mno-double
12550 Do not use floating-point double instructions.
12552 @item -mmedia
12553 @opindex mmedia
12555 Use media instructions.
12557 @item -mno-media
12558 @opindex mno-media
12560 Do not use media instructions.
12562 @item -mmuladd
12563 @opindex mmuladd
12565 Use multiply and add/subtract instructions.
12567 @item -mno-muladd
12568 @opindex mno-muladd
12570 Do not use multiply and add/subtract instructions.
12572 @item -mfdpic
12573 @opindex mfdpic
12575 Select the FDPIC ABI, which uses function descriptors to represent
12576 pointers to functions.  Without any PIC/PIE-related options, it
12577 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
12578 assumes GOT entries and small data are within a 12-bit range from the
12579 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
12580 are computed with 32 bits.
12581 With a @samp{bfin-elf} target, this option implies @option{-msim}.
12583 @item -minline-plt
12584 @opindex minline-plt
12586 Enable inlining of PLT entries in function calls to functions that are
12587 not known to bind locally.  It has no effect without @option{-mfdpic}.
12588 It's enabled by default if optimizing for speed and compiling for
12589 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
12590 optimization option such as @option{-O3} or above is present in the
12591 command line.
12593 @item -mTLS
12594 @opindex mTLS
12596 Assume a large TLS segment when generating thread-local code.
12598 @item -mtls
12599 @opindex mtls
12601 Do not assume a large TLS segment when generating thread-local code.
12603 @item -mgprel-ro
12604 @opindex mgprel-ro
12606 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
12607 that is known to be in read-only sections.  It's enabled by default,
12608 except for @option{-fpic} or @option{-fpie}: even though it may help
12609 make the global offset table smaller, it trades 1 instruction for 4.
12610 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
12611 one of which may be shared by multiple symbols, and it avoids the need
12612 for a GOT entry for the referenced symbol, so it's more likely to be a
12613 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
12615 @item -multilib-library-pic
12616 @opindex multilib-library-pic
12618 Link with the (library, not FD) pic libraries.  It's implied by
12619 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
12620 @option{-fpic} without @option{-mfdpic}.  You should never have to use
12621 it explicitly.
12623 @item -mlinked-fp
12624 @opindex mlinked-fp
12626 Follow the EABI requirement of always creating a frame pointer whenever
12627 a stack frame is allocated.  This option is enabled by default and can
12628 be disabled with @option{-mno-linked-fp}.
12630 @item -mlong-calls
12631 @opindex mlong-calls
12633 Use indirect addressing to call functions outside the current
12634 compilation unit.  This allows the functions to be placed anywhere
12635 within the 32-bit address space.
12637 @item -malign-labels
12638 @opindex malign-labels
12640 Try to align labels to an 8-byte boundary by inserting nops into the
12641 previous packet.  This option only has an effect when VLIW packing
12642 is enabled.  It doesn't create new packets; it merely adds nops to
12643 existing ones.
12645 @item -mlibrary-pic
12646 @opindex mlibrary-pic
12648 Generate position-independent EABI code.
12650 @item -macc-4
12651 @opindex macc-4
12653 Use only the first four media accumulator registers.
12655 @item -macc-8
12656 @opindex macc-8
12658 Use all eight media accumulator registers.
12660 @item -mpack
12661 @opindex mpack
12663 Pack VLIW instructions.
12665 @item -mno-pack
12666 @opindex mno-pack
12668 Do not pack VLIW instructions.
12670 @item -mno-eflags
12671 @opindex mno-eflags
12673 Do not mark ABI switches in e_flags.
12675 @item -mcond-move
12676 @opindex mcond-move
12678 Enable the use of conditional-move instructions (default).
12680 This switch is mainly for debugging the compiler and will likely be removed
12681 in a future version.
12683 @item -mno-cond-move
12684 @opindex mno-cond-move
12686 Disable the use of conditional-move instructions.
12688 This switch is mainly for debugging the compiler and will likely be removed
12689 in a future version.
12691 @item -mscc
12692 @opindex mscc
12694 Enable the use of conditional set instructions (default).
12696 This switch is mainly for debugging the compiler and will likely be removed
12697 in a future version.
12699 @item -mno-scc
12700 @opindex mno-scc
12702 Disable the use of conditional set instructions.
12704 This switch is mainly for debugging the compiler and will likely be removed
12705 in a future version.
12707 @item -mcond-exec
12708 @opindex mcond-exec
12710 Enable the use of conditional execution (default).
12712 This switch is mainly for debugging the compiler and will likely be removed
12713 in a future version.
12715 @item -mno-cond-exec
12716 @opindex mno-cond-exec
12718 Disable the use of conditional execution.
12720 This switch is mainly for debugging the compiler and will likely be removed
12721 in a future version.
12723 @item -mvliw-branch
12724 @opindex mvliw-branch
12726 Run a pass to pack branches into VLIW instructions (default).
12728 This switch is mainly for debugging the compiler and will likely be removed
12729 in a future version.
12731 @item -mno-vliw-branch
12732 @opindex mno-vliw-branch
12734 Do not run a pass to pack branches into VLIW instructions.
12736 This switch is mainly for debugging the compiler and will likely be removed
12737 in a future version.
12739 @item -mmulti-cond-exec
12740 @opindex mmulti-cond-exec
12742 Enable optimization of @code{&&} and @code{||} in conditional execution
12743 (default).
12745 This switch is mainly for debugging the compiler and will likely be removed
12746 in a future version.
12748 @item -mno-multi-cond-exec
12749 @opindex mno-multi-cond-exec
12751 Disable optimization of @code{&&} and @code{||} in conditional execution.
12753 This switch is mainly for debugging the compiler and will likely be removed
12754 in a future version.
12756 @item -mnested-cond-exec
12757 @opindex mnested-cond-exec
12759 Enable nested conditional execution optimizations (default).
12761 This switch is mainly for debugging the compiler and will likely be removed
12762 in a future version.
12764 @item -mno-nested-cond-exec
12765 @opindex mno-nested-cond-exec
12767 Disable nested conditional execution optimizations.
12769 This switch is mainly for debugging the compiler and will likely be removed
12770 in a future version.
12772 @item -moptimize-membar
12773 @opindex moptimize-membar
12775 This switch removes redundant @code{membar} instructions from the
12776 compiler generated code.  It is enabled by default.
12778 @item -mno-optimize-membar
12779 @opindex mno-optimize-membar
12781 This switch disables the automatic removal of redundant @code{membar}
12782 instructions from the generated code.
12784 @item -mtomcat-stats
12785 @opindex mtomcat-stats
12787 Cause gas to print out tomcat statistics.
12789 @item -mcpu=@var{cpu}
12790 @opindex mcpu
12792 Select the processor type for which to generate code.  Possible values are
12793 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
12794 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
12796 @end table
12798 @node GNU/Linux Options
12799 @subsection GNU/Linux Options
12801 These @samp{-m} options are defined for GNU/Linux targets:
12803 @table @gcctabopt
12804 @item -mglibc
12805 @opindex mglibc
12806 Use the GNU C library.  This is the default except
12807 on @samp{*-*-linux-*uclibc*} and @samp{*-*-linux-*android*} targets.
12809 @item -muclibc
12810 @opindex muclibc
12811 Use uClibc C library.  This is the default on
12812 @samp{*-*-linux-*uclibc*} targets.
12814 @item -mbionic
12815 @opindex mbionic
12816 Use Bionic C library.  This is the default on
12817 @samp{*-*-linux-*android*} targets.
12819 @item -mandroid
12820 @opindex mandroid
12821 Compile code compatible with Android platform.  This is the default on
12822 @samp{*-*-linux-*android*} targets.
12824 When compiling, this option enables @option{-mbionic}, @option{-fPIC},
12825 @option{-fno-exceptions} and @option{-fno-rtti} by default.  When linking,
12826 this option makes the GCC driver pass Android-specific options to the linker.
12827 Finally, this option causes the preprocessor macro @code{__ANDROID__}
12828 to be defined.
12830 @item -tno-android-cc
12831 @opindex tno-android-cc
12832 Disable compilation effects of @option{-mandroid}, i.e., do not enable
12833 @option{-mbionic}, @option{-fPIC}, @option{-fno-exceptions} and
12834 @option{-fno-rtti} by default.
12836 @item -tno-android-ld
12837 @opindex tno-android-ld
12838 Disable linking effects of @option{-mandroid}, i.e., pass standard Linux
12839 linking options to the linker.
12841 @end table
12843 @node H8/300 Options
12844 @subsection H8/300 Options
12846 These @samp{-m} options are defined for the H8/300 implementations:
12848 @table @gcctabopt
12849 @item -mrelax
12850 @opindex mrelax
12851 Shorten some address references at link time, when possible; uses the
12852 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
12853 ld, Using ld}, for a fuller description.
12855 @item -mh
12856 @opindex mh
12857 Generate code for the H8/300H@.
12859 @item -ms
12860 @opindex ms
12861 Generate code for the H8S@.
12863 @item -mn
12864 @opindex mn
12865 Generate code for the H8S and H8/300H in the normal mode.  This switch
12866 must be used either with @option{-mh} or @option{-ms}.
12868 @item -ms2600
12869 @opindex ms2600
12870 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
12872 @item -mexr
12873 @opindex mexr
12874 Extended registers are stored on stack before execution of function
12875 with monitor attribute. Default option is @option{-mexr}.
12876 This option is valid only for H8S targets.
12878 @item -mno-exr
12879 @opindex mno-exr
12880 Extended registers are not stored on stack before execution of function 
12881 with monitor attribute. Default option is @option{-mno-exr}. 
12882 This option is valid only for H8S targets.
12884 @item -mint32
12885 @opindex mint32
12886 Make @code{int} data 32 bits by default.
12888 @item -malign-300
12889 @opindex malign-300
12890 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
12891 The default for the H8/300H and H8S is to align longs and floats on
12892 4-byte boundaries.
12893 @option{-malign-300} causes them to be aligned on 2-byte boundaries.
12894 This option has no effect on the H8/300.
12895 @end table
12897 @node HPPA Options
12898 @subsection HPPA Options
12899 @cindex HPPA Options
12901 These @samp{-m} options are defined for the HPPA family of computers:
12903 @table @gcctabopt
12904 @item -march=@var{architecture-type}
12905 @opindex march
12906 Generate code for the specified architecture.  The choices for
12907 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
12908 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
12909 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
12910 architecture option for your machine.  Code compiled for lower numbered
12911 architectures runs on higher numbered architectures, but not the
12912 other way around.
12914 @item -mpa-risc-1-0
12915 @itemx -mpa-risc-1-1
12916 @itemx -mpa-risc-2-0
12917 @opindex mpa-risc-1-0
12918 @opindex mpa-risc-1-1
12919 @opindex mpa-risc-2-0
12920 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
12922 @item -mbig-switch
12923 @opindex mbig-switch
12924 Generate code suitable for big switch tables.  Use this option only if
12925 the assembler/linker complain about out of range branches within a switch
12926 table.
12928 @item -mjump-in-delay
12929 @opindex mjump-in-delay
12930 Fill delay slots of function calls with unconditional jump instructions
12931 by modifying the return pointer for the function call to be the target
12932 of the conditional jump.
12934 @item -mdisable-fpregs
12935 @opindex mdisable-fpregs
12936 Prevent floating-point registers from being used in any manner.  This is
12937 necessary for compiling kernels that perform lazy context switching of
12938 floating-point registers.  If you use this option and attempt to perform
12939 floating-point operations, the compiler aborts.
12941 @item -mdisable-indexing
12942 @opindex mdisable-indexing
12943 Prevent the compiler from using indexing address modes.  This avoids some
12944 rather obscure problems when compiling MIG generated code under MACH@.
12946 @item -mno-space-regs
12947 @opindex mno-space-regs
12948 Generate code that assumes the target has no space registers.  This allows
12949 GCC to generate faster indirect calls and use unscaled index address modes.
12951 Such code is suitable for level 0 PA systems and kernels.
12953 @item -mfast-indirect-calls
12954 @opindex mfast-indirect-calls
12955 Generate code that assumes calls never cross space boundaries.  This
12956 allows GCC to emit code that performs faster indirect calls.
12958 This option does not work in the presence of shared libraries or nested
12959 functions.
12961 @item -mfixed-range=@var{register-range}
12962 @opindex mfixed-range
12963 Generate code treating the given register range as fixed registers.
12964 A fixed register is one that the register allocator can not use.  This is
12965 useful when compiling kernel code.  A register range is specified as
12966 two registers separated by a dash.  Multiple register ranges can be
12967 specified separated by a comma.
12969 @item -mlong-load-store
12970 @opindex mlong-load-store
12971 Generate 3-instruction load and store sequences as sometimes required by
12972 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
12973 the HP compilers.
12975 @item -mportable-runtime
12976 @opindex mportable-runtime
12977 Use the portable calling conventions proposed by HP for ELF systems.
12979 @item -mgas
12980 @opindex mgas
12981 Enable the use of assembler directives only GAS understands.
12983 @item -mschedule=@var{cpu-type}
12984 @opindex mschedule
12985 Schedule code according to the constraints for the machine type
12986 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
12987 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
12988 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
12989 proper scheduling option for your machine.  The default scheduling is
12990 @samp{8000}.
12992 @item -mlinker-opt
12993 @opindex mlinker-opt
12994 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
12995 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
12996 linkers in which they give bogus error messages when linking some programs.
12998 @item -msoft-float
12999 @opindex msoft-float
13000 Generate output containing library calls for floating point.
13001 @strong{Warning:} the requisite libraries are not available for all HPPA
13002 targets.  Normally the facilities of the machine's usual C compiler are
13003 used, but this cannot be done directly in cross-compilation.  You must make
13004 your own arrangements to provide suitable library functions for
13005 cross-compilation.
13007 @option{-msoft-float} changes the calling convention in the output file;
13008 therefore, it is only useful if you compile @emph{all} of a program with
13009 this option.  In particular, you need to compile @file{libgcc.a}, the
13010 library that comes with GCC, with @option{-msoft-float} in order for
13011 this to work.
13013 @item -msio
13014 @opindex msio
13015 Generate the predefine, @code{_SIO}, for server IO@.  The default is
13016 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
13017 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
13018 options are available under HP-UX and HI-UX@.
13020 @item -mgnu-ld
13021 @opindex mgnu-ld
13022 Use options specific to GNU @command{ld}.
13023 This passes @option{-shared} to @command{ld} when
13024 building a shared library.  It is the default when GCC is configured,
13025 explicitly or implicitly, with the GNU linker.  This option does not
13026 affect which @command{ld} is called; it only changes what parameters
13027 are passed to that @command{ld}.
13028 The @command{ld} that is called is determined by the
13029 @option{--with-ld} configure option, GCC's program search path, and
13030 finally by the user's @env{PATH}.  The linker used by GCC can be printed
13031 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
13032 on the 64-bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
13034 @item -mhp-ld
13035 @opindex mhp-ld
13036 Use options specific to HP @command{ld}.
13037 This passes @option{-b} to @command{ld} when building
13038 a shared library and passes @option{+Accept TypeMismatch} to @command{ld} on all
13039 links.  It is the default when GCC is configured, explicitly or
13040 implicitly, with the HP linker.  This option does not affect
13041 which @command{ld} is called; it only changes what parameters are passed to that
13042 @command{ld}.
13043 The @command{ld} that is called is determined by the @option{--with-ld}
13044 configure option, GCC's program search path, and finally by the user's
13045 @env{PATH}.  The linker used by GCC can be printed using @samp{which
13046 `gcc -print-prog-name=ld`}.  This option is only available on the 64-bit
13047 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
13049 @item -mlong-calls
13050 @opindex mno-long-calls
13051 Generate code that uses long call sequences.  This ensures that a call
13052 is always able to reach linker generated stubs.  The default is to generate
13053 long calls only when the distance from the call site to the beginning
13054 of the function or translation unit, as the case may be, exceeds a
13055 predefined limit set by the branch type being used.  The limits for
13056 normal calls are 7,600,000 and 240,000 bytes, respectively for the
13057 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
13058 240,000 bytes.
13060 Distances are measured from the beginning of functions when using the
13061 @option{-ffunction-sections} option, or when using the @option{-mgas}
13062 and @option{-mno-portable-runtime} options together under HP-UX with
13063 the SOM linker.
13065 It is normally not desirable to use this option as it degrades
13066 performance.  However, it may be useful in large applications,
13067 particularly when partial linking is used to build the application.
13069 The types of long calls used depends on the capabilities of the
13070 assembler and linker, and the type of code being generated.  The
13071 impact on systems that support long absolute calls, and long pic
13072 symbol-difference or pc-relative calls should be relatively small.
13073 However, an indirect call is used on 32-bit ELF systems in pic code
13074 and it is quite long.
13076 @item -munix=@var{unix-std}
13077 @opindex march
13078 Generate compiler predefines and select a startfile for the specified
13079 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
13080 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
13081 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
13082 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
13083 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
13084 and later.
13086 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
13087 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
13088 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
13089 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
13090 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
13091 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
13093 It is @emph{important} to note that this option changes the interfaces
13094 for various library routines.  It also affects the operational behavior
13095 of the C library.  Thus, @emph{extreme} care is needed in using this
13096 option.
13098 Library code that is intended to operate with more than one UNIX
13099 standard must test, set and restore the variable @var{__xpg4_extended_mask}
13100 as appropriate.  Most GNU software doesn't provide this capability.
13102 @item -nolibdld
13103 @opindex nolibdld
13104 Suppress the generation of link options to search libdld.sl when the
13105 @option{-static} option is specified on HP-UX 10 and later.
13107 @item -static
13108 @opindex static
13109 The HP-UX implementation of setlocale in libc has a dependency on
13110 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
13111 when the @option{-static} option is specified, special link options
13112 are needed to resolve this dependency.
13114 On HP-UX 10 and later, the GCC driver adds the necessary options to
13115 link with libdld.sl when the @option{-static} option is specified.
13116 This causes the resulting binary to be dynamic.  On the 64-bit port,
13117 the linkers generate dynamic binaries by default in any case.  The
13118 @option{-nolibdld} option can be used to prevent the GCC driver from
13119 adding these link options.
13121 @item -threads
13122 @opindex threads
13123 Add support for multithreading with the @dfn{dce thread} library
13124 under HP-UX@.  This option sets flags for both the preprocessor and
13125 linker.
13126 @end table
13128 @node i386 and x86-64 Options
13129 @subsection Intel 386 and AMD x86-64 Options
13130 @cindex i386 Options
13131 @cindex x86-64 Options
13132 @cindex Intel 386 Options
13133 @cindex AMD x86-64 Options
13135 These @samp{-m} options are defined for the i386 and x86-64 family of
13136 computers:
13138 @table @gcctabopt
13140 @item -march=@var{cpu-type}
13141 @opindex march
13142 Generate instructions for the machine type @var{cpu-type}.  In contrast to
13143 @option{-mtune=@var{cpu-type}}, which merely tunes the generated code 
13144 for the specified @var{cpu-type}, @option{-march=@var{cpu-type}} allows GCC
13145 to generate code that may not run at all on processors other than the one
13146 indicated.  Specifying @option{-march=@var{cpu-type}} implies 
13147 @option{-mtune=@var{cpu-type}}.
13149 The choices for @var{cpu-type} are:
13151 @table @samp
13152 @item native
13153 This selects the CPU to generate code for at compilation time by determining
13154 the processor type of the compiling machine.  Using @option{-march=native}
13155 enables all instruction subsets supported by the local machine (hence
13156 the result might not run on different machines).  Using @option{-mtune=native}
13157 produces code optimized for the local machine under the constraints
13158 of the selected instruction set.  
13160 @item i386
13161 Original Intel i386 CPU@.
13163 @item i486
13164 Intel i486 CPU@.  (No scheduling is implemented for this chip.)
13166 @item i586
13167 @itemx pentium
13168 Intel Pentium CPU with no MMX support.
13170 @item pentium-mmx
13171 Intel Pentium MMX CPU, based on Pentium core with MMX instruction set support.
13173 @item pentiumpro
13174 Intel Pentium Pro CPU@.
13176 @item i686
13177 When used with @option{-march}, the Pentium Pro
13178 instruction set is used, so the code runs on all i686 family chips.
13179 When used with @option{-mtune}, it has the same meaning as @samp{generic}.
13181 @item pentium2
13182 Intel Pentium II CPU, based on Pentium Pro core with MMX instruction set
13183 support.
13185 @item pentium3
13186 @itemx pentium3m
13187 Intel Pentium III CPU, based on Pentium Pro core with MMX and SSE instruction
13188 set support.
13190 @item pentium-m
13191 Intel Pentium M; low-power version of Intel Pentium III CPU
13192 with MMX, SSE and SSE2 instruction set support.  Used by Centrino notebooks.
13194 @item pentium4
13195 @itemx pentium4m
13196 Intel Pentium 4 CPU with MMX, SSE and SSE2 instruction set support.
13198 @item prescott
13199 Improved version of Intel Pentium 4 CPU with MMX, SSE, SSE2 and SSE3 instruction
13200 set support.
13202 @item nocona
13203 Improved version of Intel Pentium 4 CPU with 64-bit extensions, MMX, SSE,
13204 SSE2 and SSE3 instruction set support.
13206 @item core2
13207 Intel Core 2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
13208 instruction set support.
13210 @item corei7
13211 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1
13212 and SSE4.2 instruction set support.
13214 @item corei7-avx
13215 Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
13216 SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support.
13218 @item core-avx-i
13219 Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
13220 SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction
13221 set support.
13223 @item atom
13224 Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
13225 instruction set support.
13227 @item k6
13228 AMD K6 CPU with MMX instruction set support.
13230 @item k6-2
13231 @itemx k6-3
13232 Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
13234 @item athlon
13235 @itemx athlon-tbird
13236 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
13237 support.
13239 @item athlon-4
13240 @itemx athlon-xp
13241 @itemx athlon-mp
13242 Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
13243 instruction set support.
13245 @item k8
13246 @itemx opteron
13247 @itemx athlon64
13248 @itemx athlon-fx
13249 Processors based on the AMD K8 core with x86-64 instruction set support,
13250 including the AMD Opteron, Athlon 64, and Athlon 64 FX processors.
13251 (This supersets MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit
13252 instruction set extensions.)
13254 @item k8-sse3
13255 @itemx opteron-sse3
13256 @itemx athlon64-sse3
13257 Improved versions of AMD K8 cores with SSE3 instruction set support.
13259 @item amdfam10
13260 @itemx barcelona
13261 CPUs based on AMD Family 10h cores with x86-64 instruction set support.  (This
13262 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
13263 instruction set extensions.)
13265 @item bdver1
13266 CPUs based on AMD Family 15h cores with x86-64 instruction set support.  (This
13267 supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
13268 SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set extensions.)
13269 @item bdver2
13270 AMD Family 15h core based CPUs with x86-64 instruction set support.  (This
13271 supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
13272 SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM and 64-bit instruction set 
13273 extensions.)
13275 @item btver1
13276 CPUs based on AMD Family 14h cores with x86-64 instruction set support.  (This
13277 supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit
13278 instruction set extensions.)
13280 @item winchip-c6
13281 IDT WinChip C6 CPU, dealt in same way as i486 with additional MMX instruction
13282 set support.
13284 @item winchip2
13285 IDT WinChip 2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
13286 instruction set support.
13288 @item c3
13289 VIA C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
13290 implemented for this chip.)
13292 @item c3-2
13293 VIA C3-2 (Nehemiah/C5XL) CPU with MMX and SSE instruction set support.
13294 (No scheduling is
13295 implemented for this chip.)
13297 @item geode
13298 AMD Geode embedded processor with MMX and 3DNow!@: instruction set support.
13299 @end table
13301 @item -mtune=@var{cpu-type}
13302 @opindex mtune
13303 Tune to @var{cpu-type} everything applicable about the generated code, except
13304 for the ABI and the set of available instructions.  
13305 While picking a specific @var{cpu-type} schedules things appropriately
13306 for that particular chip, the compiler does not generate any code that
13307 cannot run on the default machine type unless you use a
13308 @option{-march=@var{cpu-type}} option.
13309 For example, if GCC is configured for i686-pc-linux-gnu
13310 then @option{-mtune=pentium4} generates code that is tuned for Pentium 4
13311 but still runs on i686 machines.
13313 The choices for @var{cpu-type} are the same as for @option{-march}.
13314 In addition, @option{-mtune} supports an extra choice for @var{cpu-type}:
13316 @table @samp
13317 @item generic
13318 Produce code optimized for the most common IA32/@/AMD64/@/EM64T processors.
13319 If you know the CPU on which your code will run, then you should use
13320 the corresponding @option{-mtune} or @option{-march} option instead of
13321 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
13322 of your application will have, then you should use this option.
13324 As new processors are deployed in the marketplace, the behavior of this
13325 option will change.  Therefore, if you upgrade to a newer version of
13326 GCC, code generation controlled by this option will change to reflect
13327 the processors
13328 that are most common at the time that version of GCC is released.
13330 There is no @option{-march=generic} option because @option{-march}
13331 indicates the instruction set the compiler can use, and there is no
13332 generic instruction set applicable to all processors.  In contrast,
13333 @option{-mtune} indicates the processor (or, in this case, collection of
13334 processors) for which the code is optimized.
13335 @end table
13337 @item -mcpu=@var{cpu-type}
13338 @opindex mcpu
13339 A deprecated synonym for @option{-mtune}.
13341 @item -mfpmath=@var{unit}
13342 @opindex mfpmath
13343 Generate floating-point arithmetic for selected unit @var{unit}.  The choices
13344 for @var{unit} are:
13346 @table @samp
13347 @item 387
13348 Use the standard 387 floating-point coprocessor present on the majority of chips and
13349 emulated otherwise.  Code compiled with this option runs almost everywhere.
13350 The temporary results are computed in 80-bit precision instead of the precision
13351 specified by the type, resulting in slightly different results compared to most
13352 of other chips.  See @option{-ffloat-store} for more detailed description.
13354 This is the default choice for i386 compiler.
13356 @item sse
13357 Use scalar floating-point instructions present in the SSE instruction set.
13358 This instruction set is supported by Pentium III and newer chips,
13359 and in the AMD line
13360 by Athlon-4, Athlon XP and Athlon MP chips.  The earlier version of the SSE
13361 instruction set supports only single-precision arithmetic, thus the double and
13362 extended-precision arithmetic are still done using 387.  A later version, present
13363 only in Pentium 4 and AMD x86-64 chips, supports double-precision
13364 arithmetic too.
13366 For the i386 compiler, you must use @option{-march=@var{cpu-type}}, @option{-msse}
13367 or @option{-msse2} switches to enable SSE extensions and make this option
13368 effective.  For the x86-64 compiler, these extensions are enabled by default.
13370 The resulting code should be considerably faster in the majority of cases and avoid
13371 the numerical instability problems of 387 code, but may break some existing
13372 code that expects temporaries to be 80 bits.
13374 This is the default choice for the x86-64 compiler.
13376 @item sse,387
13377 @itemx sse+387
13378 @itemx both
13379 Attempt to utilize both instruction sets at once.  This effectively doubles the
13380 amount of available registers, and on chips with separate execution units for
13381 387 and SSE the execution resources too.  Use this option with care, as it is
13382 still experimental, because the GCC register allocator does not model separate
13383 functional units well, resulting in unstable performance.
13384 @end table
13386 @item -masm=@var{dialect}
13387 @opindex masm=@var{dialect}
13388 Output assembly instructions using selected @var{dialect}.  Supported
13389 choices are @samp{intel} or @samp{att} (the default).  Darwin does
13390 not support @samp{intel}.
13392 @item -mieee-fp
13393 @itemx -mno-ieee-fp
13394 @opindex mieee-fp
13395 @opindex mno-ieee-fp
13396 Control whether or not the compiler uses IEEE floating-point
13397 comparisons.  These correctly handle the case where the result of a
13398 comparison is unordered.
13400 @item -msoft-float
13401 @opindex msoft-float
13402 Generate output containing library calls for floating point.
13404 @strong{Warning:} the requisite libraries are not part of GCC@.
13405 Normally the facilities of the machine's usual C compiler are used, but
13406 this can't be done directly in cross-compilation.  You must make your
13407 own arrangements to provide suitable library functions for
13408 cross-compilation.
13410 On machines where a function returns floating-point results in the 80387
13411 register stack, some floating-point opcodes may be emitted even if
13412 @option{-msoft-float} is used.
13414 @item -mno-fp-ret-in-387
13415 @opindex mno-fp-ret-in-387
13416 Do not use the FPU registers for return values of functions.
13418 The usual calling convention has functions return values of types
13419 @code{float} and @code{double} in an FPU register, even if there
13420 is no FPU@.  The idea is that the operating system should emulate
13421 an FPU@.
13423 The option @option{-mno-fp-ret-in-387} causes such values to be returned
13424 in ordinary CPU registers instead.
13426 @item -mno-fancy-math-387
13427 @opindex mno-fancy-math-387
13428 Some 387 emulators do not support the @code{sin}, @code{cos} and
13429 @code{sqrt} instructions for the 387.  Specify this option to avoid
13430 generating those instructions.  This option is the default on FreeBSD,
13431 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
13432 indicates that the target CPU always has an FPU and so the
13433 instruction does not need emulation.  These
13434 instructions are not generated unless you also use the
13435 @option{-funsafe-math-optimizations} switch.
13437 @item -malign-double
13438 @itemx -mno-align-double
13439 @opindex malign-double
13440 @opindex mno-align-double
13441 Control whether GCC aligns @code{double}, @code{long double}, and
13442 @code{long long} variables on a two-word boundary or a one-word
13443 boundary.  Aligning @code{double} variables on a two-word boundary
13444 produces code that runs somewhat faster on a Pentium at the
13445 expense of more memory.
13447 On x86-64, @option{-malign-double} is enabled by default.
13449 @strong{Warning:} if you use the @option{-malign-double} switch,
13450 structures containing the above types are aligned differently than
13451 the published application binary interface specifications for the 386
13452 and are not binary compatible with structures in code compiled
13453 without that switch.
13455 @item -m96bit-long-double
13456 @itemx -m128bit-long-double
13457 @opindex m96bit-long-double
13458 @opindex m128bit-long-double
13459 These switches control the size of @code{long double} type.  The i386
13460 application binary interface specifies the size to be 96 bits,
13461 so @option{-m96bit-long-double} is the default in 32-bit mode.
13463 Modern architectures (Pentium and newer) prefer @code{long double}
13464 to be aligned to an 8- or 16-byte boundary.  In arrays or structures
13465 conforming to the ABI, this is not possible.  So specifying
13466 @option{-m128bit-long-double} aligns @code{long double}
13467 to a 16-byte boundary by padding the @code{long double} with an additional
13468 32-bit zero.
13470 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
13471 its ABI specifies that @code{long double} is aligned on 16-byte boundary.
13473 Notice that neither of these options enable any extra precision over the x87
13474 standard of 80 bits for a @code{long double}.
13476 @strong{Warning:} if you override the default value for your target ABI, this
13477 changes the size of 
13478 structures and arrays containing @code{long double} variables,
13479 as well as modifying the function calling convention for functions taking
13480 @code{long double}.  Hence they are not binary-compatible
13481 with code compiled without that switch.
13483 @item -mlarge-data-threshold=@var{threshold}
13484 @opindex mlarge-data-threshold
13485 When @option{-mcmodel=medium} is specified, data objects larger than
13486 @var{threshold} are placed in the large data section.  This value must be the
13487 same across all objects linked into the binary, and defaults to 65535.
13489 @item -mrtd
13490 @opindex mrtd
13491 Use a different function-calling convention, in which functions that
13492 take a fixed number of arguments return with the @code{ret @var{num}}
13493 instruction, which pops their arguments while returning.  This saves one
13494 instruction in the caller since there is no need to pop the arguments
13495 there.
13497 You can specify that an individual function is called with this calling
13498 sequence with the function attribute @samp{stdcall}.  You can also
13499 override the @option{-mrtd} option by using the function attribute
13500 @samp{cdecl}.  @xref{Function Attributes}.
13502 @strong{Warning:} this calling convention is incompatible with the one
13503 normally used on Unix, so you cannot use it if you need to call
13504 libraries compiled with the Unix compiler.
13506 Also, you must provide function prototypes for all functions that
13507 take variable numbers of arguments (including @code{printf});
13508 otherwise incorrect code is generated for calls to those
13509 functions.
13511 In addition, seriously incorrect code results if you call a
13512 function with too many arguments.  (Normally, extra arguments are
13513 harmlessly ignored.)
13515 @item -mregparm=@var{num}
13516 @opindex mregparm
13517 Control how many registers are used to pass integer arguments.  By
13518 default, no registers are used to pass arguments, and at most 3
13519 registers can be used.  You can control this behavior for a specific
13520 function by using the function attribute @samp{regparm}.
13521 @xref{Function Attributes}.
13523 @strong{Warning:} if you use this switch, and
13524 @var{num} is nonzero, then you must build all modules with the same
13525 value, including any libraries.  This includes the system libraries and
13526 startup modules.
13528 @item -msseregparm
13529 @opindex msseregparm
13530 Use SSE register passing conventions for float and double arguments
13531 and return values.  You can control this behavior for a specific
13532 function by using the function attribute @samp{sseregparm}.
13533 @xref{Function Attributes}.
13535 @strong{Warning:} if you use this switch then you must build all
13536 modules with the same value, including any libraries.  This includes
13537 the system libraries and startup modules.
13539 @item -mvect8-ret-in-mem
13540 @opindex mvect8-ret-in-mem
13541 Return 8-byte vectors in memory instead of MMX registers.  This is the
13542 default on Solaris@tie{}8 and 9 and VxWorks to match the ABI of the Sun
13543 Studio compilers until version 12.  Later compiler versions (starting
13544 with Studio 12 Update@tie{}1) follow the ABI used by other x86 targets, which
13545 is the default on Solaris@tie{}10 and later.  @emph{Only} use this option if
13546 you need to remain compatible with existing code produced by those
13547 previous compiler versions or older versions of GCC@.
13549 @item -mpc32
13550 @itemx -mpc64
13551 @itemx -mpc80
13552 @opindex mpc32
13553 @opindex mpc64
13554 @opindex mpc80
13556 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
13557 is specified, the significands of results of floating-point operations are
13558 rounded to 24 bits (single precision); @option{-mpc64} rounds the
13559 significands of results of floating-point operations to 53 bits (double
13560 precision) and @option{-mpc80} rounds the significands of results of
13561 floating-point operations to 64 bits (extended double precision), which is
13562 the default.  When this option is used, floating-point operations in higher
13563 precisions are not available to the programmer without setting the FPU
13564 control word explicitly.
13566 Setting the rounding of floating-point operations to less than the default
13567 80 bits can speed some programs by 2% or more.  Note that some mathematical
13568 libraries assume that extended-precision (80-bit) floating-point operations
13569 are enabled by default; routines in such libraries could suffer significant
13570 loss of accuracy, typically through so-called ``catastrophic cancellation'',
13571 when this option is used to set the precision to less than extended precision.
13573 @item -mstackrealign
13574 @opindex mstackrealign
13575 Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
13576 option generates an alternate prologue and epilogue that realigns the
13577 run-time stack if necessary.  This supports mixing legacy codes that keep
13578 4-byte stack alignment with modern codes that keep 16-byte stack alignment for
13579 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
13580 applicable to individual functions.
13582 @item -mpreferred-stack-boundary=@var{num}
13583 @opindex mpreferred-stack-boundary
13584 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
13585 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
13586 the default is 4 (16 bytes or 128 bits).
13588 @strong{Warning:} When generating code for the x86-64 architecture with
13589 SSE extensions disabled, @option{-mpreferred-stack-boundary=3} can be
13590 used to keep the stack boundary aligned to 8 byte boundary.  Since
13591 x86-64 ABI require 16 byte stack alignment, this is ABI incompatible and
13592 intended to be used in controlled environment where stack space is
13593 important limitation.  This option will lead to wrong code when functions
13594 compiled with 16 byte stack alignment (such as functions from a standard
13595 library) are called with misaligned stack.  In this case, SSE
13596 instructions may lead to misaligned memory access traps.  In addition,
13597 variable arguments will be handled incorrectly for 16 byte aligned
13598 objects (including x87 long double and __int128), leading to wrong
13599 results.  You must build all modules with
13600 @option{-mpreferred-stack-boundary=3}, including any libraries.  This
13601 includes the system libraries and startup modules.
13603 @item -mincoming-stack-boundary=@var{num}
13604 @opindex mincoming-stack-boundary
13605 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
13606 boundary.  If @option{-mincoming-stack-boundary} is not specified,
13607 the one specified by @option{-mpreferred-stack-boundary} is used.
13609 On Pentium and Pentium Pro, @code{double} and @code{long double} values
13610 should be aligned to an 8-byte boundary (see @option{-malign-double}) or
13611 suffer significant run time performance penalties.  On Pentium III, the
13612 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
13613 properly if it is not 16-byte aligned.
13615 To ensure proper alignment of this values on the stack, the stack boundary
13616 must be as aligned as that required by any value stored on the stack.
13617 Further, every function must be generated such that it keeps the stack
13618 aligned.  Thus calling a function compiled with a higher preferred
13619 stack boundary from a function compiled with a lower preferred stack
13620 boundary most likely misaligns the stack.  It is recommended that
13621 libraries that use callbacks always use the default setting.
13623 This extra alignment does consume extra stack space, and generally
13624 increases code size.  Code that is sensitive to stack space usage, such
13625 as embedded systems and operating system kernels, may want to reduce the
13626 preferred alignment to @option{-mpreferred-stack-boundary=2}.
13628 @item -mmmx
13629 @itemx -mno-mmx
13630 @itemx -msse
13631 @itemx -mno-sse
13632 @itemx -msse2
13633 @itemx -mno-sse2
13634 @itemx -msse3
13635 @itemx -mno-sse3
13636 @itemx -mssse3
13637 @itemx -mno-ssse3
13638 @itemx -msse4.1
13639 @need 800
13640 @itemx -mno-sse4.1
13641 @itemx -msse4.2
13642 @itemx -mno-sse4.2
13643 @itemx -msse4
13644 @itemx -mno-sse4
13645 @itemx -mavx
13646 @itemx -mno-avx
13647 @itemx -mavx2
13648 @itemx -mno-avx2
13649 @itemx -maes
13650 @itemx -mno-aes
13651 @itemx -mpclmul
13652 @need 800
13653 @itemx -mno-pclmul
13654 @itemx -mfsgsbase
13655 @itemx -mno-fsgsbase
13656 @itemx -mrdrnd
13657 @itemx -mno-rdrnd
13658 @itemx -mf16c
13659 @itemx -mno-f16c
13660 @itemx -mfma
13661 @itemx -mno-fma
13662 @itemx -msse4a
13663 @itemx -mno-sse4a
13664 @itemx -mfma4
13665 @need 800
13666 @itemx -mno-fma4
13667 @itemx -mxop
13668 @itemx -mno-xop
13669 @itemx -mlwp
13670 @itemx -mno-lwp
13671 @itemx -m3dnow
13672 @itemx -mno-3dnow
13673 @itemx -mpopcnt
13674 @itemx -mno-popcnt
13675 @itemx -mabm
13676 @itemx -mno-abm
13677 @itemx -mbmi
13678 @itemx -mbmi2
13679 @itemx -mno-bmi
13680 @itemx -mno-bmi2
13681 @itemx -mlzcnt
13682 @itemx -mno-lzcnt
13683 @itemx -mrtm
13684 @itemx -mtbm
13685 @itemx -mno-tbm
13686 @opindex mmmx
13687 @opindex mno-mmx
13688 @opindex msse
13689 @opindex mno-sse
13690 @opindex m3dnow
13691 @opindex mno-3dnow
13692 These switches enable or disable the use of instructions in the MMX, SSE,
13693 SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C,
13694 FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, LZCNT, RTM or 3DNow!@:
13695 extended instruction sets.
13696 These extensions are also available as built-in functions: see
13697 @ref{X86 Built-in Functions}, for details of the functions enabled and
13698 disabled by these switches.
13700 To generate SSE/SSE2 instructions automatically from floating-point
13701 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
13703 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
13704 generates new AVX instructions or AVX equivalence for all SSEx instructions
13705 when needed.
13707 These options enable GCC to use these extended instructions in
13708 generated code, even without @option{-mfpmath=sse}.  Applications that
13709 perform run-time CPU detection must compile separate files for each
13710 supported architecture, using the appropriate flags.  In particular,
13711 the file containing the CPU detection code should be compiled without
13712 these options.
13714 @item -mcld
13715 @opindex mcld
13716 This option instructs GCC to emit a @code{cld} instruction in the prologue
13717 of functions that use string instructions.  String instructions depend on
13718 the DF flag to select between autoincrement or autodecrement mode.  While the
13719 ABI specifies the DF flag to be cleared on function entry, some operating
13720 systems violate this specification by not clearing the DF flag in their
13721 exception dispatchers.  The exception handler can be invoked with the DF flag
13722 set, which leads to wrong direction mode when string instructions are used.
13723 This option can be enabled by default on 32-bit x86 targets by configuring
13724 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
13725 instructions can be suppressed with the @option{-mno-cld} compiler option
13726 in this case.
13728 @item -mvzeroupper
13729 @opindex mvzeroupper
13730 This option instructs GCC to emit a @code{vzeroupper} instruction
13731 before a transfer of control flow out of the function to minimize
13732 the AVX to SSE transition penalty as well as remove unnecessary @code{zeroupper}
13733 intrinsics.
13735 @item -mcx16
13736 @opindex mcx16
13737 This option enables GCC to generate @code{CMPXCHG16B} instructions.
13738 @code{CMPXCHG16B} allows for atomic operations on 128-bit double quadword
13739 (or oword) data types.  
13740 This is useful for high-resolution counters that can be updated
13741 by multiple processors (or cores).  This instruction is generated as part of
13742 atomic built-in functions: see @ref{__sync Builtins} or
13743 @ref{__atomic Builtins} for details.
13745 @item -msahf
13746 @opindex msahf
13747 This option enables generation of @code{SAHF} instructions in 64-bit code.
13748 Early Intel Pentium 4 CPUs with Intel 64 support,
13749 prior to the introduction of Pentium 4 G1 step in December 2005,
13750 lacked the @code{LAHF} and @code{SAHF} instructions
13751 which were supported by AMD64.
13752 These are load and store instructions, respectively, for certain status flags.
13753 In 64-bit mode, the @code{SAHF} instruction is used to optimize @code{fmod},
13754 @code{drem}, and @code{remainder} built-in functions;
13755 see @ref{Other Builtins} for details.
13757 @item -mmovbe
13758 @opindex mmovbe
13759 This option enables use of the @code{movbe} instruction to implement
13760 @code{__builtin_bswap32} and @code{__builtin_bswap64}.
13762 @item -mcrc32
13763 @opindex mcrc32
13764 This option enables built-in functions @code{__builtin_ia32_crc32qi},
13765 @code{__builtin_ia32_crc32hi}, @code{__builtin_ia32_crc32si} and
13766 @code{__builtin_ia32_crc32di} to generate the @code{crc32} machine instruction.
13768 @item -mrecip
13769 @opindex mrecip
13770 This option enables use of @code{RCPSS} and @code{RSQRTSS} instructions
13771 (and their vectorized variants @code{RCPPS} and @code{RSQRTPS})
13772 with an additional Newton-Raphson step
13773 to increase precision instead of @code{DIVSS} and @code{SQRTSS}
13774 (and their vectorized
13775 variants) for single-precision floating-point arguments.  These instructions
13776 are generated only when @option{-funsafe-math-optimizations} is enabled
13777 together with @option{-finite-math-only} and @option{-fno-trapping-math}.
13778 Note that while the throughput of the sequence is higher than the throughput
13779 of the non-reciprocal instruction, the precision of the sequence can be
13780 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
13782 Note that GCC implements @code{1.0f/sqrtf(@var{x})} in terms of @code{RSQRTSS}
13783 (or @code{RSQRTPS}) already with @option{-ffast-math} (or the above option
13784 combination), and doesn't need @option{-mrecip}.
13786 Also note that GCC emits the above sequence with additional Newton-Raphson step
13787 for vectorized single-float division and vectorized @code{sqrtf(@var{x})}
13788 already with @option{-ffast-math} (or the above option combination), and
13789 doesn't need @option{-mrecip}.
13791 @item -mrecip=@var{opt}
13792 @opindex mrecip=opt
13793 This option controls which reciprocal estimate instructions
13794 may be used.  @var{opt} is a comma-separated list of options, which may
13795 be preceded by a @samp{!} to invert the option:
13797 @table @samp
13798 @item all
13799 Enable all estimate instructions.
13801 @item default
13802 Enable the default instructions, equivalent to @option{-mrecip}.
13804 @item none
13805 Disable all estimate instructions, equivalent to @option{-mno-recip}.
13807 @item div
13808 Enable the approximation for scalar division.
13810 @item vec-div
13811 Enable the approximation for vectorized division.
13813 @item sqrt
13814 Enable the approximation for scalar square root.
13816 @item vec-sqrt
13817 Enable the approximation for vectorized square root.
13818 @end table
13820 So, for example, @option{-mrecip=all,!sqrt} enables
13821 all of the reciprocal approximations, except for square root.
13823 @item -mveclibabi=@var{type}
13824 @opindex mveclibabi
13825 Specifies the ABI type to use for vectorizing intrinsics using an
13826 external library.  Supported values for @var{type} are @samp{svml} 
13827 for the Intel short
13828 vector math library and @samp{acml} for the AMD math core library.
13829 To use this option, both @option{-ftree-vectorize} and
13830 @option{-funsafe-math-optimizations} have to be enabled, and an SVML or ACML 
13831 ABI-compatible library must be specified at link time.
13833 GCC currently emits calls to @code{vmldExp2},
13834 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
13835 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
13836 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
13837 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
13838 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
13839 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
13840 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
13841 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
13842 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
13843 function type when @option{-mveclibabi=svml} is used, and @code{__vrd2_sin},
13844 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
13845 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
13846 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
13847 @code{__vrs4_log10f} and @code{__vrs4_powf} for the corresponding function type
13848 when @option{-mveclibabi=acml} is used.  
13850 @item -mabi=@var{name}
13851 @opindex mabi
13852 Generate code for the specified calling convention.  Permissible values
13853 are @samp{sysv} for the ABI used on GNU/Linux and other systems, and
13854 @samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
13855 ABI when targeting Microsoft Windows and the SysV ABI on all other systems.
13856 You can control this behavior for a specific function by
13857 using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
13858 @xref{Function Attributes}.
13860 @item -mtls-dialect=@var{type}
13861 @opindex mtls-dialect
13862 Generate code to access thread-local storage using the @samp{gnu} or
13863 @samp{gnu2} conventions.  @samp{gnu} is the conservative default;
13864 @samp{gnu2} is more efficient, but it may add compile- and run-time
13865 requirements that cannot be satisfied on all systems.
13867 @item -mpush-args
13868 @itemx -mno-push-args
13869 @opindex mpush-args
13870 @opindex mno-push-args
13871 Use PUSH operations to store outgoing parameters.  This method is shorter
13872 and usually equally fast as method using SUB/MOV operations and is enabled
13873 by default.  In some cases disabling it may improve performance because of
13874 improved scheduling and reduced dependencies.
13876 @item -maccumulate-outgoing-args
13877 @opindex maccumulate-outgoing-args
13878 If enabled, the maximum amount of space required for outgoing arguments is
13879 computed in the function prologue.  This is faster on most modern CPUs
13880 because of reduced dependencies, improved scheduling and reduced stack usage
13881 when the preferred stack boundary is not equal to 2.  The drawback is a notable
13882 increase in code size.  This switch implies @option{-mno-push-args}.
13884 @item -mthreads
13885 @opindex mthreads
13886 Support thread-safe exception handling on MinGW.  Programs that rely
13887 on thread-safe exception handling must compile and link all code with the
13888 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
13889 @code{-D_MT}; when linking, it links in a special thread helper library
13890 @option{-lmingwthrd} which cleans up per-thread exception-handling data.
13892 @item -mno-align-stringops
13893 @opindex mno-align-stringops
13894 Do not align the destination of inlined string operations.  This switch reduces
13895 code size and improves performance in case the destination is already aligned,
13896 but GCC doesn't know about it.
13898 @item -minline-all-stringops
13899 @opindex minline-all-stringops
13900 By default GCC inlines string operations only when the destination is 
13901 known to be aligned to least a 4-byte boundary.  
13902 This enables more inlining and increases code
13903 size, but may improve performance of code that depends on fast
13904 @code{memcpy}, @code{strlen},
13905 and @code{memset} for short lengths.
13907 @item -minline-stringops-dynamically
13908 @opindex minline-stringops-dynamically
13909 For string operations of unknown size, use run-time checks with
13910 inline code for small blocks and a library call for large blocks.
13912 @item -mstringop-strategy=@var{alg}
13913 @opindex mstringop-strategy=@var{alg}
13914 Override the internal decision heuristic for the particular algorithm to use
13915 for inlining string operations.  The allowed values for @var{alg} are:
13917 @table @samp
13918 @item rep_byte
13919 @itemx rep_4byte
13920 @itemx rep_8byte
13921 Expand using i386 @code{rep} prefix of the specified size.
13923 @item byte_loop
13924 @itemx loop
13925 @itemx unrolled_loop
13926 Expand into an inline loop.
13928 @item libcall
13929 Always use a library call.
13930 @end table
13932 @item -momit-leaf-frame-pointer
13933 @opindex momit-leaf-frame-pointer
13934 Don't keep the frame pointer in a register for leaf functions.  This
13935 avoids the instructions to save, set up, and restore frame pointers and
13936 makes an extra register available in leaf functions.  The option
13937 @option{-fomit-leaf-frame-pointer} removes the frame pointer for leaf functions,
13938 which might make debugging harder.
13940 @item -mtls-direct-seg-refs
13941 @itemx -mno-tls-direct-seg-refs
13942 @opindex mtls-direct-seg-refs
13943 Controls whether TLS variables may be accessed with offsets from the
13944 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
13945 or whether the thread base pointer must be added.  Whether or not this
13946 is valid depends on the operating system, and whether it maps the
13947 segment to cover the entire TLS area.
13949 For systems that use the GNU C Library, the default is on.
13951 @item -msse2avx
13952 @itemx -mno-sse2avx
13953 @opindex msse2avx
13954 Specify that the assembler should encode SSE instructions with VEX
13955 prefix.  The option @option{-mavx} turns this on by default.
13957 @item -mfentry
13958 @itemx -mno-fentry
13959 @opindex mfentry
13960 If profiling is active (@option{-pg}), put the profiling
13961 counter call before the prologue.
13962 Note: On x86 architectures the attribute @code{ms_hook_prologue}
13963 isn't possible at the moment for @option{-mfentry} and @option{-pg}.
13965 @item -m8bit-idiv
13966 @itemx -mno-8bit-idiv
13967 @opindex 8bit-idiv
13968 On some processors, like Intel Atom, 8-bit unsigned integer divide is
13969 much faster than 32-bit/64-bit integer divide.  This option generates a
13970 run-time check.  If both dividend and divisor are within range of 0
13971 to 255, 8-bit unsigned integer divide is used instead of
13972 32-bit/64-bit integer divide.
13974 @item -mavx256-split-unaligned-load
13975 @itemx -mavx256-split-unaligned-store
13976 @opindex avx256-split-unaligned-load
13977 @opindex avx256-split-unaligned-store
13978 Split 32-byte AVX unaligned load and store.
13980 @end table
13982 These @samp{-m} switches are supported in addition to the above
13983 on x86-64 processors in 64-bit environments.
13985 @table @gcctabopt
13986 @item -m32
13987 @itemx -m64
13988 @itemx -mx32
13989 @opindex m32
13990 @opindex m64
13991 @opindex mx32
13992 Generate code for a 32-bit or 64-bit environment.
13993 The @option{-m32} option sets @code{int}, @code{long}, and pointer types
13994 to 32 bits, and
13995 generates code that runs on any i386 system.
13997 The @option{-m64} option sets @code{int} to 32 bits and @code{long} and pointer
13998 types to 64 bits, and generates code for the x86-64 architecture.
13999 For Darwin only the @option{-m64} option also turns off the @option{-fno-pic}
14000 and @option{-mdynamic-no-pic} options.
14002 The @option{-mx32} option sets @code{int}, @code{long}, and pointer types
14003 to 32 bits, and
14004 generates code for the x86-64 architecture.
14006 @item -mno-red-zone
14007 @opindex mno-red-zone
14008 Do not use a so-called ``red zone'' for x86-64 code.  The red zone is mandated
14009 by the x86-64 ABI; it is a 128-byte area beyond the location of the
14010 stack pointer that is not modified by signal or interrupt handlers
14011 and therefore can be used for temporary data without adjusting the stack
14012 pointer.  The flag @option{-mno-red-zone} disables this red zone.
14014 @item -mcmodel=small
14015 @opindex mcmodel=small
14016 Generate code for the small code model: the program and its symbols must
14017 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
14018 Programs can be statically or dynamically linked.  This is the default
14019 code model.
14021 @item -mcmodel=kernel
14022 @opindex mcmodel=kernel
14023 Generate code for the kernel code model.  The kernel runs in the
14024 negative 2 GB of the address space.
14025 This model has to be used for Linux kernel code.
14027 @item -mcmodel=medium
14028 @opindex mcmodel=medium
14029 Generate code for the medium model: the program is linked in the lower 2
14030 GB of the address space.  Small symbols are also placed there.  Symbols
14031 with sizes larger than @option{-mlarge-data-threshold} are put into
14032 large data or BSS sections and can be located above 2GB.  Programs can
14033 be statically or dynamically linked.
14035 @item -mcmodel=large
14036 @opindex mcmodel=large
14037 Generate code for the large model.  This model makes no assumptions
14038 about addresses and sizes of sections.
14040 @item -maddress-mode=long
14041 @opindex maddress-mode=long
14042 Generate code for long address mode.  This is only supported for 64-bit
14043 and x32 environments.  It is the default address mode for 64-bit
14044 environments.
14046 @item -maddress-mode=short
14047 @opindex maddress-mode=short
14048 Generate code for short address mode.  This is only supported for 32-bit
14049 and x32 environments.  It is the default address mode for 32-bit and
14050 x32 environments.
14051 @end table
14053 @node i386 and x86-64 Windows Options
14054 @subsection i386 and x86-64 Windows Options
14055 @cindex i386 and x86-64 Windows Options
14057 These additional options are available for Microsoft Windows targets:
14059 @table @gcctabopt
14060 @item -mconsole
14061 @opindex mconsole
14062 This option
14063 specifies that a console application is to be generated, by
14064 instructing the linker to set the PE header subsystem type
14065 required for console applications.
14066 This option is available for Cygwin and MinGW targets and is
14067 enabled by default on those targets.
14069 @item -mdll
14070 @opindex mdll
14071 This option is available for Cygwin and MinGW targets.  It
14072 specifies that a DLL---a dynamic link library---is to be
14073 generated, enabling the selection of the required runtime
14074 startup object and entry point.
14076 @item -mnop-fun-dllimport
14077 @opindex mnop-fun-dllimport
14078 This option is available for Cygwin and MinGW targets.  It
14079 specifies that the @code{dllimport} attribute should be ignored.
14081 @item -mthread
14082 @opindex mthread
14083 This option is available for MinGW targets. It specifies
14084 that MinGW-specific thread support is to be used.
14086 @item -municode
14087 @opindex municode
14088 This option is available for MinGW-w64 targets.  It causes
14089 the @code{UNICODE} preprocessor macro to be predefined, and
14090 chooses Unicode-capable runtime startup code.
14092 @item -mwin32
14093 @opindex mwin32
14094 This option is available for Cygwin and MinGW targets.  It
14095 specifies that the typical Microsoft Windows predefined macros are to
14096 be set in the pre-processor, but does not influence the choice
14097 of runtime library/startup code.
14099 @item -mwindows
14100 @opindex mwindows
14101 This option is available for Cygwin and MinGW targets.  It
14102 specifies that a GUI application is to be generated by
14103 instructing the linker to set the PE header subsystem type
14104 appropriately.
14106 @item -fno-set-stack-executable
14107 @opindex fno-set-stack-executable
14108 This option is available for MinGW targets. It specifies that
14109 the executable flag for the stack used by nested functions isn't
14110 set. This is necessary for binaries running in kernel mode of
14111 Microsoft Windows, as there the User32 API, which is used to set executable
14112 privileges, isn't available.
14114 @item -fwritable-relocated-rdata
14115 @opindex fno-writable-relocated-rdata
14116 This option is available for MinGW and Cygwin targets.  It specifies
14117 that relocated-data in read-only section is put into .data
14118 section.  This is a necessary for older runtimes not supporting
14119 modification of .rdata sections for pseudo-relocation.
14121 @item -mpe-aligned-commons
14122 @opindex mpe-aligned-commons
14123 This option is available for Cygwin and MinGW targets.  It
14124 specifies that the GNU extension to the PE file format that
14125 permits the correct alignment of COMMON variables should be
14126 used when generating code.  It is enabled by default if
14127 GCC detects that the target assembler found during configuration
14128 supports the feature.
14129 @end table
14131 See also under @ref{i386 and x86-64 Options} for standard options.
14133 @node IA-64 Options
14134 @subsection IA-64 Options
14135 @cindex IA-64 Options
14137 These are the @samp{-m} options defined for the Intel IA-64 architecture.
14139 @table @gcctabopt
14140 @item -mbig-endian
14141 @opindex mbig-endian
14142 Generate code for a big-endian target.  This is the default for HP-UX@.
14144 @item -mlittle-endian
14145 @opindex mlittle-endian
14146 Generate code for a little-endian target.  This is the default for AIX5
14147 and GNU/Linux.
14149 @item -mgnu-as
14150 @itemx -mno-gnu-as
14151 @opindex mgnu-as
14152 @opindex mno-gnu-as
14153 Generate (or don't) code for the GNU assembler.  This is the default.
14154 @c Also, this is the default if the configure option @option{--with-gnu-as}
14155 @c is used.
14157 @item -mgnu-ld
14158 @itemx -mno-gnu-ld
14159 @opindex mgnu-ld
14160 @opindex mno-gnu-ld
14161 Generate (or don't) code for the GNU linker.  This is the default.
14162 @c Also, this is the default if the configure option @option{--with-gnu-ld}
14163 @c is used.
14165 @item -mno-pic
14166 @opindex mno-pic
14167 Generate code that does not use a global pointer register.  The result
14168 is not position independent code, and violates the IA-64 ABI@.
14170 @item -mvolatile-asm-stop
14171 @itemx -mno-volatile-asm-stop
14172 @opindex mvolatile-asm-stop
14173 @opindex mno-volatile-asm-stop
14174 Generate (or don't) a stop bit immediately before and after volatile asm
14175 statements.
14177 @item -mregister-names
14178 @itemx -mno-register-names
14179 @opindex mregister-names
14180 @opindex mno-register-names
14181 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
14182 the stacked registers.  This may make assembler output more readable.
14184 @item -mno-sdata
14185 @itemx -msdata
14186 @opindex mno-sdata
14187 @opindex msdata
14188 Disable (or enable) optimizations that use the small data section.  This may
14189 be useful for working around optimizer bugs.
14191 @item -mconstant-gp
14192 @opindex mconstant-gp
14193 Generate code that uses a single constant global pointer value.  This is
14194 useful when compiling kernel code.
14196 @item -mauto-pic
14197 @opindex mauto-pic
14198 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
14199 This is useful when compiling firmware code.
14201 @item -minline-float-divide-min-latency
14202 @opindex minline-float-divide-min-latency
14203 Generate code for inline divides of floating-point values
14204 using the minimum latency algorithm.
14206 @item -minline-float-divide-max-throughput
14207 @opindex minline-float-divide-max-throughput
14208 Generate code for inline divides of floating-point values
14209 using the maximum throughput algorithm.
14211 @item -mno-inline-float-divide
14212 @opindex mno-inline-float-divide
14213 Do not generate inline code for divides of floating-point values.
14215 @item -minline-int-divide-min-latency
14216 @opindex minline-int-divide-min-latency
14217 Generate code for inline divides of integer values
14218 using the minimum latency algorithm.
14220 @item -minline-int-divide-max-throughput
14221 @opindex minline-int-divide-max-throughput
14222 Generate code for inline divides of integer values
14223 using the maximum throughput algorithm.
14225 @item -mno-inline-int-divide
14226 @opindex mno-inline-int-divide
14227 Do not generate inline code for divides of integer values.
14229 @item -minline-sqrt-min-latency
14230 @opindex minline-sqrt-min-latency
14231 Generate code for inline square roots
14232 using the minimum latency algorithm.
14234 @item -minline-sqrt-max-throughput
14235 @opindex minline-sqrt-max-throughput
14236 Generate code for inline square roots
14237 using the maximum throughput algorithm.
14239 @item -mno-inline-sqrt
14240 @opindex mno-inline-sqrt
14241 Do not generate inline code for @code{sqrt}.
14243 @item -mfused-madd
14244 @itemx -mno-fused-madd
14245 @opindex mfused-madd
14246 @opindex mno-fused-madd
14247 Do (don't) generate code that uses the fused multiply/add or multiply/subtract
14248 instructions.  The default is to use these instructions.
14250 @item -mno-dwarf2-asm
14251 @itemx -mdwarf2-asm
14252 @opindex mno-dwarf2-asm
14253 @opindex mdwarf2-asm
14254 Don't (or do) generate assembler code for the DWARF 2 line number debugging
14255 info.  This may be useful when not using the GNU assembler.
14257 @item -mearly-stop-bits
14258 @itemx -mno-early-stop-bits
14259 @opindex mearly-stop-bits
14260 @opindex mno-early-stop-bits
14261 Allow stop bits to be placed earlier than immediately preceding the
14262 instruction that triggered the stop bit.  This can improve instruction
14263 scheduling, but does not always do so.
14265 @item -mfixed-range=@var{register-range}
14266 @opindex mfixed-range
14267 Generate code treating the given register range as fixed registers.
14268 A fixed register is one that the register allocator cannot use.  This is
14269 useful when compiling kernel code.  A register range is specified as
14270 two registers separated by a dash.  Multiple register ranges can be
14271 specified separated by a comma.
14273 @item -mtls-size=@var{tls-size}
14274 @opindex mtls-size
14275 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
14278 @item -mtune=@var{cpu-type}
14279 @opindex mtune
14280 Tune the instruction scheduling for a particular CPU, Valid values are
14281 @samp{itanium}, @samp{itanium1}, @samp{merced}, @samp{itanium2},
14282 and @samp{mckinley}.
14284 @item -milp32
14285 @itemx -mlp64
14286 @opindex milp32
14287 @opindex mlp64
14288 Generate code for a 32-bit or 64-bit environment.
14289 The 32-bit environment sets int, long and pointer to 32 bits.
14290 The 64-bit environment sets int to 32 bits and long and pointer
14291 to 64 bits.  These are HP-UX specific flags.
14293 @item -mno-sched-br-data-spec
14294 @itemx -msched-br-data-spec
14295 @opindex mno-sched-br-data-spec
14296 @opindex msched-br-data-spec
14297 (Dis/En)able data speculative scheduling before reload.
14298 This results in generation of @code{ld.a} instructions and
14299 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
14300 The default is 'disable'.
14302 @item -msched-ar-data-spec
14303 @itemx -mno-sched-ar-data-spec
14304 @opindex msched-ar-data-spec
14305 @opindex mno-sched-ar-data-spec
14306 (En/Dis)able data speculative scheduling after reload.
14307 This results in generation of @code{ld.a} instructions and
14308 the corresponding check instructions (@code{ld.c} / @code{chk.a}).
14309 The default is 'enable'.
14311 @item -mno-sched-control-spec
14312 @itemx -msched-control-spec
14313 @opindex mno-sched-control-spec
14314 @opindex msched-control-spec
14315 (Dis/En)able control speculative scheduling.  This feature is
14316 available only during region scheduling (i.e.@: before reload).
14317 This results in generation of the @code{ld.s} instructions and
14318 the corresponding check instructions @code{chk.s}.
14319 The default is 'disable'.
14321 @item -msched-br-in-data-spec
14322 @itemx -mno-sched-br-in-data-spec
14323 @opindex msched-br-in-data-spec
14324 @opindex mno-sched-br-in-data-spec
14325 (En/Dis)able speculative scheduling of the instructions that
14326 are dependent on the data speculative loads before reload.
14327 This is effective only with @option{-msched-br-data-spec} enabled.
14328 The default is 'enable'.
14330 @item -msched-ar-in-data-spec
14331 @itemx -mno-sched-ar-in-data-spec
14332 @opindex msched-ar-in-data-spec
14333 @opindex mno-sched-ar-in-data-spec
14334 (En/Dis)able speculative scheduling of the instructions that
14335 are dependent on the data speculative loads after reload.
14336 This is effective only with @option{-msched-ar-data-spec} enabled.
14337 The default is 'enable'.
14339 @item -msched-in-control-spec
14340 @itemx -mno-sched-in-control-spec
14341 @opindex msched-in-control-spec
14342 @opindex mno-sched-in-control-spec
14343 (En/Dis)able speculative scheduling of the instructions that
14344 are dependent on the control speculative loads.
14345 This is effective only with @option{-msched-control-spec} enabled.
14346 The default is 'enable'.
14348 @item -mno-sched-prefer-non-data-spec-insns
14349 @itemx -msched-prefer-non-data-spec-insns
14350 @opindex mno-sched-prefer-non-data-spec-insns
14351 @opindex msched-prefer-non-data-spec-insns
14352 If enabled, data-speculative instructions are chosen for schedule
14353 only if there are no other choices at the moment.  This makes
14354 the use of the data speculation much more conservative.
14355 The default is 'disable'.
14357 @item -mno-sched-prefer-non-control-spec-insns
14358 @itemx -msched-prefer-non-control-spec-insns
14359 @opindex mno-sched-prefer-non-control-spec-insns
14360 @opindex msched-prefer-non-control-spec-insns
14361 If enabled, control-speculative instructions are chosen for schedule
14362 only if there are no other choices at the moment.  This makes
14363 the use of the control speculation much more conservative.
14364 The default is 'disable'.
14366 @item -mno-sched-count-spec-in-critical-path
14367 @itemx -msched-count-spec-in-critical-path
14368 @opindex mno-sched-count-spec-in-critical-path
14369 @opindex msched-count-spec-in-critical-path
14370 If enabled, speculative dependencies are considered during
14371 computation of the instructions priorities.  This makes the use of the
14372 speculation a bit more conservative.
14373 The default is 'disable'.
14375 @item -msched-spec-ldc
14376 @opindex msched-spec-ldc
14377 Use a simple data speculation check.  This option is on by default.
14379 @item -msched-control-spec-ldc
14380 @opindex msched-spec-ldc
14381 Use a simple check for control speculation.  This option is on by default.
14383 @item -msched-stop-bits-after-every-cycle
14384 @opindex msched-stop-bits-after-every-cycle
14385 Place a stop bit after every cycle when scheduling.  This option is on
14386 by default.
14388 @item -msched-fp-mem-deps-zero-cost
14389 @opindex msched-fp-mem-deps-zero-cost
14390 Assume that floating-point stores and loads are not likely to cause a conflict
14391 when placed into the same instruction group.  This option is disabled by
14392 default.
14394 @item -msel-sched-dont-check-control-spec
14395 @opindex msel-sched-dont-check-control-spec
14396 Generate checks for control speculation in selective scheduling.
14397 This flag is disabled by default.
14399 @item -msched-max-memory-insns=@var{max-insns}
14400 @opindex msched-max-memory-insns
14401 Limit on the number of memory insns per instruction group, giving lower
14402 priority to subsequent memory insns attempting to schedule in the same
14403 instruction group. Frequently useful to prevent cache bank conflicts.
14404 The default value is 1.
14406 @item -msched-max-memory-insns-hard-limit
14407 @opindex msched-max-memory-insns-hard-limit
14408 Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
14409 disallowing more than that number in an instruction group.
14410 Otherwise, the limit is ``soft'', meaning that non-memory operations
14411 are preferred when the limit is reached, but memory operations may still
14412 be scheduled.
14414 @end table
14416 @node LM32 Options
14417 @subsection LM32 Options
14418 @cindex LM32 options
14420 These @option{-m} options are defined for the Lattice Mico32 architecture:
14422 @table @gcctabopt
14423 @item -mbarrel-shift-enabled
14424 @opindex mbarrel-shift-enabled
14425 Enable barrel-shift instructions.
14427 @item -mdivide-enabled
14428 @opindex mdivide-enabled
14429 Enable divide and modulus instructions.
14431 @item -mmultiply-enabled
14432 @opindex multiply-enabled
14433 Enable multiply instructions.
14435 @item -msign-extend-enabled
14436 @opindex msign-extend-enabled
14437 Enable sign extend instructions.
14439 @item -muser-enabled
14440 @opindex muser-enabled
14441 Enable user-defined instructions.
14443 @end table
14445 @node M32C Options
14446 @subsection M32C Options
14447 @cindex M32C options
14449 @table @gcctabopt
14450 @item -mcpu=@var{name}
14451 @opindex mcpu=
14452 Select the CPU for which code is generated.  @var{name} may be one of
14453 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
14454 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
14455 the M32C/80 series.
14457 @item -msim
14458 @opindex msim
14459 Specifies that the program will be run on the simulator.  This causes
14460 an alternate runtime library to be linked in which supports, for
14461 example, file I/O@.  You must not use this option when generating
14462 programs that will run on real hardware; you must provide your own
14463 runtime library for whatever I/O functions are needed.
14465 @item -memregs=@var{number}
14466 @opindex memregs=
14467 Specifies the number of memory-based pseudo-registers GCC uses
14468 during code generation.  These pseudo-registers are used like real
14469 registers, so there is a tradeoff between GCC's ability to fit the
14470 code into available registers, and the performance penalty of using
14471 memory instead of registers.  Note that all modules in a program must
14472 be compiled with the same value for this option.  Because of that, you
14473 must not use this option with the default runtime libraries gcc
14474 builds.
14476 @end table
14478 @node M32R/D Options
14479 @subsection M32R/D Options
14480 @cindex M32R/D options
14482 These @option{-m} options are defined for Renesas M32R/D architectures:
14484 @table @gcctabopt
14485 @item -m32r2
14486 @opindex m32r2
14487 Generate code for the M32R/2@.
14489 @item -m32rx
14490 @opindex m32rx
14491 Generate code for the M32R/X@.
14493 @item -m32r
14494 @opindex m32r
14495 Generate code for the M32R@.  This is the default.
14497 @item -mmodel=small
14498 @opindex mmodel=small
14499 Assume all objects live in the lower 16MB of memory (so that their addresses
14500 can be loaded with the @code{ld24} instruction), and assume all subroutines
14501 are reachable with the @code{bl} instruction.
14502 This is the default.
14504 The addressability of a particular object can be set with the
14505 @code{model} attribute.
14507 @item -mmodel=medium
14508 @opindex mmodel=medium
14509 Assume objects may be anywhere in the 32-bit address space (the compiler
14510 generates @code{seth/add3} instructions to load their addresses), and
14511 assume all subroutines are reachable with the @code{bl} instruction.
14513 @item -mmodel=large
14514 @opindex mmodel=large
14515 Assume objects may be anywhere in the 32-bit address space (the compiler
14516 generates @code{seth/add3} instructions to load their addresses), and
14517 assume subroutines may not be reachable with the @code{bl} instruction
14518 (the compiler generates the much slower @code{seth/add3/jl}
14519 instruction sequence).
14521 @item -msdata=none
14522 @opindex msdata=none
14523 Disable use of the small data area.  Variables are put into
14524 one of @samp{.data}, @samp{.bss}, or @samp{.rodata} (unless the
14525 @code{section} attribute has been specified).
14526 This is the default.
14528 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
14529 Objects may be explicitly put in the small data area with the
14530 @code{section} attribute using one of these sections.
14532 @item -msdata=sdata
14533 @opindex msdata=sdata
14534 Put small global and static data in the small data area, but do not
14535 generate special code to reference them.
14537 @item -msdata=use
14538 @opindex msdata=use
14539 Put small global and static data in the small data area, and generate
14540 special instructions to reference them.
14542 @item -G @var{num}
14543 @opindex G
14544 @cindex smaller data references
14545 Put global and static objects less than or equal to @var{num} bytes
14546 into the small data or bss sections instead of the normal data or bss
14547 sections.  The default value of @var{num} is 8.
14548 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
14549 for this option to have any effect.
14551 All modules should be compiled with the same @option{-G @var{num}} value.
14552 Compiling with different values of @var{num} may or may not work; if it
14553 doesn't the linker gives an error message---incorrect code is not
14554 generated.
14556 @item -mdebug
14557 @opindex mdebug
14558 Makes the M32R specific code in the compiler display some statistics
14559 that might help in debugging programs.
14561 @item -malign-loops
14562 @opindex malign-loops
14563 Align all loops to a 32-byte boundary.
14565 @item -mno-align-loops
14566 @opindex mno-align-loops
14567 Do not enforce a 32-byte alignment for loops.  This is the default.
14569 @item -missue-rate=@var{number}
14570 @opindex missue-rate=@var{number}
14571 Issue @var{number} instructions per cycle.  @var{number} can only be 1
14572 or 2.
14574 @item -mbranch-cost=@var{number}
14575 @opindex mbranch-cost=@var{number}
14576 @var{number} can only be 1 or 2.  If it is 1 then branches are
14577 preferred over conditional code, if it is 2, then the opposite applies.
14579 @item -mflush-trap=@var{number}
14580 @opindex mflush-trap=@var{number}
14581 Specifies the trap number to use to flush the cache.  The default is
14582 12.  Valid numbers are between 0 and 15 inclusive.
14584 @item -mno-flush-trap
14585 @opindex mno-flush-trap
14586 Specifies that the cache cannot be flushed by using a trap.
14588 @item -mflush-func=@var{name}
14589 @opindex mflush-func=@var{name}
14590 Specifies the name of the operating system function to call to flush
14591 the cache.  The default is @emph{_flush_cache}, but a function call
14592 is only used if a trap is not available.
14594 @item -mno-flush-func
14595 @opindex mno-flush-func
14596 Indicates that there is no OS function for flushing the cache.
14598 @end table
14600 @node M680x0 Options
14601 @subsection M680x0 Options
14602 @cindex M680x0 options
14604 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
14605 The default settings depend on which architecture was selected when
14606 the compiler was configured; the defaults for the most common choices
14607 are given below.
14609 @table @gcctabopt
14610 @item -march=@var{arch}
14611 @opindex march
14612 Generate code for a specific M680x0 or ColdFire instruction set
14613 architecture.  Permissible values of @var{arch} for M680x0
14614 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
14615 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
14616 architectures are selected according to Freescale's ISA classification
14617 and the permissible values are: @samp{isaa}, @samp{isaaplus},
14618 @samp{isab} and @samp{isac}.
14620 GCC defines a macro @samp{__mcf@var{arch}__} whenever it is generating
14621 code for a ColdFire target.  The @var{arch} in this macro is one of the
14622 @option{-march} arguments given above.
14624 When used together, @option{-march} and @option{-mtune} select code
14625 that runs on a family of similar processors but that is optimized
14626 for a particular microarchitecture.
14628 @item -mcpu=@var{cpu}
14629 @opindex mcpu
14630 Generate code for a specific M680x0 or ColdFire processor.
14631 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
14632 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
14633 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
14634 below, which also classifies the CPUs into families:
14636 @multitable @columnfractions 0.20 0.80
14637 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
14638 @item @samp{51} @tab @samp{51} @samp{51ac} @samp{51ag} @samp{51cn} @samp{51em} @samp{51je} @samp{51jf} @samp{51jg} @samp{51jm} @samp{51mm} @samp{51qe} @samp{51qm}
14639 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
14640 @item @samp{5206e} @tab @samp{5206e}
14641 @item @samp{5208} @tab @samp{5207} @samp{5208}
14642 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
14643 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
14644 @item @samp{5216} @tab @samp{5214} @samp{5216}
14645 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
14646 @item @samp{5225} @tab @samp{5224} @samp{5225}
14647 @item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
14648 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
14649 @item @samp{5249} @tab @samp{5249}
14650 @item @samp{5250} @tab @samp{5250}
14651 @item @samp{5271} @tab @samp{5270} @samp{5271}
14652 @item @samp{5272} @tab @samp{5272}
14653 @item @samp{5275} @tab @samp{5274} @samp{5275}
14654 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
14655 @item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
14656 @item @samp{5307} @tab @samp{5307}
14657 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
14658 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
14659 @item @samp{5407} @tab @samp{5407}
14660 @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}
14661 @end multitable
14663 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
14664 @var{arch} is compatible with @var{cpu}.  Other combinations of
14665 @option{-mcpu} and @option{-march} are rejected.
14667 GCC defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
14668 @var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
14669 where the value of @var{family} is given by the table above.
14671 @item -mtune=@var{tune}
14672 @opindex mtune
14673 Tune the code for a particular microarchitecture, within the
14674 constraints set by @option{-march} and @option{-mcpu}.
14675 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
14676 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
14677 and @samp{cpu32}.  The ColdFire microarchitectures
14678 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
14680 You can also use @option{-mtune=68020-40} for code that needs
14681 to run relatively well on 68020, 68030 and 68040 targets.
14682 @option{-mtune=68020-60} is similar but includes 68060 targets
14683 as well.  These two options select the same tuning decisions as
14684 @option{-m68020-40} and @option{-m68020-60} respectively.
14686 GCC defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
14687 when tuning for 680x0 architecture @var{arch}.  It also defines
14688 @samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
14689 option is used.  If GCC is tuning for a range of architectures,
14690 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
14691 it defines the macros for every architecture in the range.
14693 GCC also defines the macro @samp{__m@var{uarch}__} when tuning for
14694 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
14695 of the arguments given above.
14697 @item -m68000
14698 @itemx -mc68000
14699 @opindex m68000
14700 @opindex mc68000
14701 Generate output for a 68000.  This is the default
14702 when the compiler is configured for 68000-based systems.
14703 It is equivalent to @option{-march=68000}.
14705 Use this option for microcontrollers with a 68000 or EC000 core,
14706 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
14708 @item -m68010
14709 @opindex m68010
14710 Generate output for a 68010.  This is the default
14711 when the compiler is configured for 68010-based systems.
14712 It is equivalent to @option{-march=68010}.
14714 @item -m68020
14715 @itemx -mc68020
14716 @opindex m68020
14717 @opindex mc68020
14718 Generate output for a 68020.  This is the default
14719 when the compiler is configured for 68020-based systems.
14720 It is equivalent to @option{-march=68020}.
14722 @item -m68030
14723 @opindex m68030
14724 Generate output for a 68030.  This is the default when the compiler is
14725 configured for 68030-based systems.  It is equivalent to
14726 @option{-march=68030}.
14728 @item -m68040
14729 @opindex m68040
14730 Generate output for a 68040.  This is the default when the compiler is
14731 configured for 68040-based systems.  It is equivalent to
14732 @option{-march=68040}.
14734 This option inhibits the use of 68881/68882 instructions that have to be
14735 emulated by software on the 68040.  Use this option if your 68040 does not
14736 have code to emulate those instructions.
14738 @item -m68060
14739 @opindex m68060
14740 Generate output for a 68060.  This is the default when the compiler is
14741 configured for 68060-based systems.  It is equivalent to
14742 @option{-march=68060}.
14744 This option inhibits the use of 68020 and 68881/68882 instructions that
14745 have to be emulated by software on the 68060.  Use this option if your 68060
14746 does not have code to emulate those instructions.
14748 @item -mcpu32
14749 @opindex mcpu32
14750 Generate output for a CPU32.  This is the default
14751 when the compiler is configured for CPU32-based systems.
14752 It is equivalent to @option{-march=cpu32}.
14754 Use this option for microcontrollers with a
14755 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
14756 68336, 68340, 68341, 68349 and 68360.
14758 @item -m5200
14759 @opindex m5200
14760 Generate output for a 520X ColdFire CPU@.  This is the default
14761 when the compiler is configured for 520X-based systems.
14762 It is equivalent to @option{-mcpu=5206}, and is now deprecated
14763 in favor of that option.
14765 Use this option for microcontroller with a 5200 core, including
14766 the MCF5202, MCF5203, MCF5204 and MCF5206.
14768 @item -m5206e
14769 @opindex m5206e
14770 Generate output for a 5206e ColdFire CPU@.  The option is now
14771 deprecated in favor of the equivalent @option{-mcpu=5206e}.
14773 @item -m528x
14774 @opindex m528x
14775 Generate output for a member of the ColdFire 528X family.
14776 The option is now deprecated in favor of the equivalent
14777 @option{-mcpu=528x}.
14779 @item -m5307
14780 @opindex m5307
14781 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
14782 in favor of the equivalent @option{-mcpu=5307}.
14784 @item -m5407
14785 @opindex m5407
14786 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
14787 in favor of the equivalent @option{-mcpu=5407}.
14789 @item -mcfv4e
14790 @opindex mcfv4e
14791 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
14792 This includes use of hardware floating-point instructions.
14793 The option is equivalent to @option{-mcpu=547x}, and is now
14794 deprecated in favor of that option.
14796 @item -m68020-40
14797 @opindex m68020-40
14798 Generate output for a 68040, without using any of the new instructions.
14799 This results in code that can run relatively efficiently on either a
14800 68020/68881 or a 68030 or a 68040.  The generated code does use the
14801 68881 instructions that are emulated on the 68040.
14803 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
14805 @item -m68020-60
14806 @opindex m68020-60
14807 Generate output for a 68060, without using any of the new instructions.
14808 This results in code that can run relatively efficiently on either a
14809 68020/68881 or a 68030 or a 68040.  The generated code does use the
14810 68881 instructions that are emulated on the 68060.
14812 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
14814 @item -mhard-float
14815 @itemx -m68881
14816 @opindex mhard-float
14817 @opindex m68881
14818 Generate floating-point instructions.  This is the default for 68020
14819 and above, and for ColdFire devices that have an FPU@.  It defines the
14820 macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
14821 on ColdFire targets.
14823 @item -msoft-float
14824 @opindex msoft-float
14825 Do not generate floating-point instructions; use library calls instead.
14826 This is the default for 68000, 68010, and 68832 targets.  It is also
14827 the default for ColdFire devices that have no FPU.
14829 @item -mdiv
14830 @itemx -mno-div
14831 @opindex mdiv
14832 @opindex mno-div
14833 Generate (do not generate) ColdFire hardware divide and remainder
14834 instructions.  If @option{-march} is used without @option{-mcpu},
14835 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
14836 architectures.  Otherwise, the default is taken from the target CPU
14837 (either the default CPU, or the one specified by @option{-mcpu}).  For
14838 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
14839 @option{-mcpu=5206e}.
14841 GCC defines the macro @samp{__mcfhwdiv__} when this option is enabled.
14843 @item -mshort
14844 @opindex mshort
14845 Consider type @code{int} to be 16 bits wide, like @code{short int}.
14846 Additionally, parameters passed on the stack are also aligned to a
14847 16-bit boundary even on targets whose API mandates promotion to 32-bit.
14849 @item -mno-short
14850 @opindex mno-short
14851 Do not consider type @code{int} to be 16 bits wide.  This is the default.
14853 @item -mnobitfield
14854 @itemx -mno-bitfield
14855 @opindex mnobitfield
14856 @opindex mno-bitfield
14857 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
14858 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
14860 @item -mbitfield
14861 @opindex mbitfield
14862 Do use the bit-field instructions.  The @option{-m68020} option implies
14863 @option{-mbitfield}.  This is the default if you use a configuration
14864 designed for a 68020.
14866 @item -mrtd
14867 @opindex mrtd
14868 Use a different function-calling convention, in which functions
14869 that take a fixed number of arguments return with the @code{rtd}
14870 instruction, which pops their arguments while returning.  This
14871 saves one instruction in the caller since there is no need to pop
14872 the arguments there.
14874 This calling convention is incompatible with the one normally
14875 used on Unix, so you cannot use it if you need to call libraries
14876 compiled with the Unix compiler.
14878 Also, you must provide function prototypes for all functions that
14879 take variable numbers of arguments (including @code{printf});
14880 otherwise incorrect code is generated for calls to those
14881 functions.
14883 In addition, seriously incorrect code results if you call a
14884 function with too many arguments.  (Normally, extra arguments are
14885 harmlessly ignored.)
14887 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
14888 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
14890 @item -mno-rtd
14891 @opindex mno-rtd
14892 Do not use the calling conventions selected by @option{-mrtd}.
14893 This is the default.
14895 @item -malign-int
14896 @itemx -mno-align-int
14897 @opindex malign-int
14898 @opindex mno-align-int
14899 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
14900 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
14901 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
14902 Aligning variables on 32-bit boundaries produces code that runs somewhat
14903 faster on processors with 32-bit busses at the expense of more memory.
14905 @strong{Warning:} if you use the @option{-malign-int} switch, GCC
14906 aligns structures containing the above types differently than
14907 most published application binary interface specifications for the m68k.
14909 @item -mpcrel
14910 @opindex mpcrel
14911 Use the pc-relative addressing mode of the 68000 directly, instead of
14912 using a global offset table.  At present, this option implies @option{-fpic},
14913 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
14914 not presently supported with @option{-mpcrel}, though this could be supported for
14915 68020 and higher processors.
14917 @item -mno-strict-align
14918 @itemx -mstrict-align
14919 @opindex mno-strict-align
14920 @opindex mstrict-align
14921 Do not (do) assume that unaligned memory references are handled by
14922 the system.
14924 @item -msep-data
14925 Generate code that allows the data segment to be located in a different
14926 area of memory from the text segment.  This allows for execute in place in
14927 an environment without virtual memory management.  This option implies
14928 @option{-fPIC}.
14930 @item -mno-sep-data
14931 Generate code that assumes that the data segment follows the text segment.
14932 This is the default.
14934 @item -mid-shared-library
14935 Generate code that supports shared libraries via the library ID method.
14936 This allows for execute in place and shared libraries in an environment
14937 without virtual memory management.  This option implies @option{-fPIC}.
14939 @item -mno-id-shared-library
14940 Generate code that doesn't assume ID based shared libraries are being used.
14941 This is the default.
14943 @item -mshared-library-id=n
14944 Specifies the identification number of the ID-based shared library being
14945 compiled.  Specifying a value of 0 generates more compact code; specifying
14946 other values forces the allocation of that number to the current
14947 library, but is no more space- or time-efficient than omitting this option.
14949 @item -mxgot
14950 @itemx -mno-xgot
14951 @opindex mxgot
14952 @opindex mno-xgot
14953 When generating position-independent code for ColdFire, generate code
14954 that works if the GOT has more than 8192 entries.  This code is
14955 larger and slower than code generated without this option.  On M680x0
14956 processors, this option is not needed; @option{-fPIC} suffices.
14958 GCC normally uses a single instruction to load values from the GOT@.
14959 While this is relatively efficient, it only works if the GOT
14960 is smaller than about 64k.  Anything larger causes the linker
14961 to report an error such as:
14963 @cindex relocation truncated to fit (ColdFire)
14964 @smallexample
14965 relocation truncated to fit: R_68K_GOT16O foobar
14966 @end smallexample
14968 If this happens, you should recompile your code with @option{-mxgot}.
14969 It should then work with very large GOTs.  However, code generated with
14970 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
14971 the value of a global symbol.
14973 Note that some linkers, including newer versions of the GNU linker,
14974 can create multiple GOTs and sort GOT entries.  If you have such a linker,
14975 you should only need to use @option{-mxgot} when compiling a single
14976 object file that accesses more than 8192 GOT entries.  Very few do.
14978 These options have no effect unless GCC is generating
14979 position-independent code.
14981 @end table
14983 @node MCore Options
14984 @subsection MCore Options
14985 @cindex MCore options
14987 These are the @samp{-m} options defined for the Motorola M*Core
14988 processors.
14990 @table @gcctabopt
14992 @item -mhardlit
14993 @itemx -mno-hardlit
14994 @opindex mhardlit
14995 @opindex mno-hardlit
14996 Inline constants into the code stream if it can be done in two
14997 instructions or less.
14999 @item -mdiv
15000 @itemx -mno-div
15001 @opindex mdiv
15002 @opindex mno-div
15003 Use the divide instruction.  (Enabled by default).
15005 @item -mrelax-immediate
15006 @itemx -mno-relax-immediate
15007 @opindex mrelax-immediate
15008 @opindex mno-relax-immediate
15009 Allow arbitrary sized immediates in bit operations.
15011 @item -mwide-bitfields
15012 @itemx -mno-wide-bitfields
15013 @opindex mwide-bitfields
15014 @opindex mno-wide-bitfields
15015 Always treat bit-fields as int-sized.
15017 @item -m4byte-functions
15018 @itemx -mno-4byte-functions
15019 @opindex m4byte-functions
15020 @opindex mno-4byte-functions
15021 Force all functions to be aligned to a 4-byte boundary.
15023 @item -mcallgraph-data
15024 @itemx -mno-callgraph-data
15025 @opindex mcallgraph-data
15026 @opindex mno-callgraph-data
15027 Emit callgraph information.
15029 @item -mslow-bytes
15030 @itemx -mno-slow-bytes
15031 @opindex mslow-bytes
15032 @opindex mno-slow-bytes
15033 Prefer word access when reading byte quantities.
15035 @item -mlittle-endian
15036 @itemx -mbig-endian
15037 @opindex mlittle-endian
15038 @opindex mbig-endian
15039 Generate code for a little-endian target.
15041 @item -m210
15042 @itemx -m340
15043 @opindex m210
15044 @opindex m340
15045 Generate code for the 210 processor.
15047 @item -mno-lsim
15048 @opindex mno-lsim
15049 Assume that runtime support has been provided and so omit the
15050 simulator library (@file{libsim.a)} from the linker command line.
15052 @item -mstack-increment=@var{size}
15053 @opindex mstack-increment
15054 Set the maximum amount for a single stack increment operation.  Large
15055 values can increase the speed of programs that contain functions
15056 that need a large amount of stack space, but they can also trigger a
15057 segmentation fault if the stack is extended too much.  The default
15058 value is 0x1000.
15060 @end table
15062 @node MeP Options
15063 @subsection MeP Options
15064 @cindex MeP options
15066 @table @gcctabopt
15068 @item -mabsdiff
15069 @opindex mabsdiff
15070 Enables the @code{abs} instruction, which is the absolute difference
15071 between two registers.
15073 @item -mall-opts
15074 @opindex mall-opts
15075 Enables all the optional instructions---average, multiply, divide, bit
15076 operations, leading zero, absolute difference, min/max, clip, and
15077 saturation.
15080 @item -maverage
15081 @opindex maverage
15082 Enables the @code{ave} instruction, which computes the average of two
15083 registers.
15085 @item -mbased=@var{n}
15086 @opindex mbased=
15087 Variables of size @var{n} bytes or smaller are placed in the
15088 @code{.based} section by default.  Based variables use the @code{$tp}
15089 register as a base register, and there is a 128-byte limit to the
15090 @code{.based} section.
15092 @item -mbitops
15093 @opindex mbitops
15094 Enables the bit operation instructions---bit test (@code{btstm}), set
15095 (@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
15096 test-and-set (@code{tas}).
15098 @item -mc=@var{name}
15099 @opindex mc=
15100 Selects which section constant data is placed in.  @var{name} may
15101 be @code{tiny}, @code{near}, or @code{far}.
15103 @item -mclip
15104 @opindex mclip
15105 Enables the @code{clip} instruction.  Note that @code{-mclip} is not
15106 useful unless you also provide @code{-mminmax}.
15108 @item -mconfig=@var{name}
15109 @opindex mconfig=
15110 Selects one of the build-in core configurations.  Each MeP chip has
15111 one or more modules in it; each module has a core CPU and a variety of
15112 coprocessors, optional instructions, and peripherals.  The
15113 @code{MeP-Integrator} tool, not part of GCC, provides these
15114 configurations through this option; using this option is the same as
15115 using all the corresponding command-line options.  The default
15116 configuration is @code{default}.
15118 @item -mcop
15119 @opindex mcop
15120 Enables the coprocessor instructions.  By default, this is a 32-bit
15121 coprocessor.  Note that the coprocessor is normally enabled via the
15122 @code{-mconfig=} option.
15124 @item -mcop32
15125 @opindex mcop32
15126 Enables the 32-bit coprocessor's instructions.
15128 @item -mcop64
15129 @opindex mcop64
15130 Enables the 64-bit coprocessor's instructions.
15132 @item -mivc2
15133 @opindex mivc2
15134 Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
15136 @item -mdc
15137 @opindex mdc
15138 Causes constant variables to be placed in the @code{.near} section.
15140 @item -mdiv
15141 @opindex mdiv
15142 Enables the @code{div} and @code{divu} instructions.
15144 @item -meb
15145 @opindex meb
15146 Generate big-endian code.
15148 @item -mel
15149 @opindex mel
15150 Generate little-endian code.
15152 @item -mio-volatile
15153 @opindex mio-volatile
15154 Tells the compiler that any variable marked with the @code{io}
15155 attribute is to be considered volatile.
15157 @item -ml
15158 @opindex ml
15159 Causes variables to be assigned to the @code{.far} section by default.
15161 @item -mleadz
15162 @opindex mleadz
15163 Enables the @code{leadz} (leading zero) instruction.
15165 @item -mm
15166 @opindex mm
15167 Causes variables to be assigned to the @code{.near} section by default.
15169 @item -mminmax
15170 @opindex mminmax
15171 Enables the @code{min} and @code{max} instructions.
15173 @item -mmult
15174 @opindex mmult
15175 Enables the multiplication and multiply-accumulate instructions.
15177 @item -mno-opts
15178 @opindex mno-opts
15179 Disables all the optional instructions enabled by @code{-mall-opts}.
15181 @item -mrepeat
15182 @opindex mrepeat
15183 Enables the @code{repeat} and @code{erepeat} instructions, used for
15184 low-overhead looping.
15186 @item -ms
15187 @opindex ms
15188 Causes all variables to default to the @code{.tiny} section.  Note
15189 that there is a 65536-byte limit to this section.  Accesses to these
15190 variables use the @code{%gp} base register.
15192 @item -msatur
15193 @opindex msatur
15194 Enables the saturation instructions.  Note that the compiler does not
15195 currently generate these itself, but this option is included for
15196 compatibility with other tools, like @code{as}.
15198 @item -msdram
15199 @opindex msdram
15200 Link the SDRAM-based runtime instead of the default ROM-based runtime.
15202 @item -msim
15203 @opindex msim
15204 Link the simulator runtime libraries.
15206 @item -msimnovec
15207 @opindex msimnovec
15208 Link the simulator runtime libraries, excluding built-in support
15209 for reset and exception vectors and tables.
15211 @item -mtf
15212 @opindex mtf
15213 Causes all functions to default to the @code{.far} section.  Without
15214 this option, functions default to the @code{.near} section.
15216 @item -mtiny=@var{n}
15217 @opindex mtiny=
15218 Variables that are @var{n} bytes or smaller are allocated to the
15219 @code{.tiny} section.  These variables use the @code{$gp} base
15220 register.  The default for this option is 4, but note that there's a
15221 65536-byte limit to the @code{.tiny} section.
15223 @end table
15225 @node MicroBlaze Options
15226 @subsection MicroBlaze Options
15227 @cindex MicroBlaze Options
15229 @table @gcctabopt
15231 @item -msoft-float
15232 @opindex msoft-float
15233 Use software emulation for floating point (default).
15235 @item -mhard-float
15236 @opindex mhard-float
15237 Use hardware floating-point instructions.
15239 @item -mmemcpy
15240 @opindex mmemcpy
15241 Do not optimize block moves, use @code{memcpy}.
15243 @item -mno-clearbss
15244 @opindex mno-clearbss
15245 This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
15247 @item -mcpu=@var{cpu-type}
15248 @opindex mcpu=
15249 Use features of and schedule code for given CPU.
15250 Supported values are in the format @samp{v@var{X}.@var{YY}.@var{Z}},
15251 where @var{X} is a major version, @var{YY} is the minor version, and
15252 @var{Z} is compatibility code.  Example values are @samp{v3.00.a},
15253 @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v5.00.b}, @samp{v6.00.a}.
15255 @item -mxl-soft-mul
15256 @opindex mxl-soft-mul
15257 Use software multiply emulation (default).
15259 @item -mxl-soft-div
15260 @opindex mxl-soft-div
15261 Use software emulation for divides (default).
15263 @item -mxl-barrel-shift
15264 @opindex mxl-barrel-shift
15265 Use the hardware barrel shifter.
15267 @item -mxl-pattern-compare
15268 @opindex mxl-pattern-compare
15269 Use pattern compare instructions.
15271 @item -msmall-divides
15272 @opindex msmall-divides
15273 Use table lookup optimization for small signed integer divisions.
15275 @item -mxl-stack-check
15276 @opindex mxl-stack-check
15277 This option is deprecated.  Use @option{-fstack-check} instead.
15279 @item -mxl-gp-opt
15280 @opindex mxl-gp-opt
15281 Use GP-relative @code{.sdata}/@code{.sbss} sections.
15283 @item -mxl-multiply-high
15284 @opindex mxl-multiply-high
15285 Use multiply high instructions for high part of 32x32 multiply.
15287 @item -mxl-float-convert
15288 @opindex mxl-float-convert
15289 Use hardware floating-point conversion instructions.
15291 @item -mxl-float-sqrt
15292 @opindex mxl-float-sqrt
15293 Use hardware floating-point square root instruction.
15295 @item -mxl-mode-@var{app-model}
15296 Select application model @var{app-model}.  Valid models are
15297 @table @samp
15298 @item executable
15299 normal executable (default), uses startup code @file{crt0.o}.
15301 @item xmdstub
15302 for use with Xilinx Microprocessor Debugger (XMD) based
15303 software intrusive debug agent called xmdstub. This uses startup file
15304 @file{crt1.o} and sets the start address of the program to be 0x800.
15306 @item bootstrap
15307 for applications that are loaded using a bootloader.
15308 This model uses startup file @file{crt2.o} which does not contain a processor
15309 reset vector handler. This is suitable for transferring control on a
15310 processor reset to the bootloader rather than the application.
15312 @item novectors
15313 for applications that do not require any of the
15314 MicroBlaze vectors. This option may be useful for applications running
15315 within a monitoring application. This model uses @file{crt3.o} as a startup file.
15316 @end table
15318 Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
15319 @option{-mxl-mode-@var{app-model}}.
15321 @end table
15323 @node MIPS Options
15324 @subsection MIPS Options
15325 @cindex MIPS options
15327 @table @gcctabopt
15329 @item -EB
15330 @opindex EB
15331 Generate big-endian code.
15333 @item -EL
15334 @opindex EL
15335 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
15336 configurations.
15338 @item -march=@var{arch}
15339 @opindex march
15340 Generate code that runs on @var{arch}, which can be the name of a
15341 generic MIPS ISA, or the name of a particular processor.
15342 The ISA names are:
15343 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
15344 @samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}.
15345 The processor names are:
15346 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
15347 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
15348 @samp{5kc}, @samp{5kf},
15349 @samp{20kc},
15350 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
15351 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
15352 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
15353 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
15354 @samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
15355 @samp{loongson2e}, @samp{loongson2f}, @samp{loongson3a},
15356 @samp{m4k},
15357 @samp{octeon}, @samp{octeon+}, @samp{octeon2},
15358 @samp{orion},
15359 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
15360 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
15361 @samp{rm7000}, @samp{rm9000},
15362 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
15363 @samp{sb1},
15364 @samp{sr71000},
15365 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
15366 @samp{vr5000}, @samp{vr5400}, @samp{vr5500},
15367 @samp{xlr} and @samp{xlp}.
15368 The special value @samp{from-abi} selects the
15369 most compatible architecture for the selected ABI (that is,
15370 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
15372 The native Linux/GNU toolchain also supports the value @samp{native},
15373 which selects the best architecture option for the host processor.
15374 @option{-march=native} has no effect if GCC does not recognize
15375 the processor.
15377 In processor names, a final @samp{000} can be abbreviated as @samp{k}
15378 (for example, @option{-march=r2k}).  Prefixes are optional, and
15379 @samp{vr} may be written @samp{r}.
15381 Names of the form @samp{@var{n}f2_1} refer to processors with
15382 FPUs clocked at half the rate of the core, names of the form
15383 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
15384 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
15385 processors with FPUs clocked a ratio of 3:2 with respect to the core.
15386 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
15387 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
15388 accepted as synonyms for @samp{@var{n}f1_1}.
15390 GCC defines two macros based on the value of this option.  The first
15391 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
15392 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
15393 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
15394 For example, @option{-march=r2000} sets @samp{_MIPS_ARCH}
15395 to @samp{"r2000"} and defines the macro @samp{_MIPS_ARCH_R2000}.
15397 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
15398 above.  In other words, it has the full prefix and does not
15399 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
15400 the macro names the resolved architecture (either @samp{"mips1"} or
15401 @samp{"mips3"}).  It names the default architecture when no
15402 @option{-march} option is given.
15404 @item -mtune=@var{arch}
15405 @opindex mtune
15406 Optimize for @var{arch}.  Among other things, this option controls
15407 the way instructions are scheduled, and the perceived cost of arithmetic
15408 operations.  The list of @var{arch} values is the same as for
15409 @option{-march}.
15411 When this option is not used, GCC optimizes for the processor
15412 specified by @option{-march}.  By using @option{-march} and
15413 @option{-mtune} together, it is possible to generate code that
15414 runs on a family of processors, but optimize the code for one
15415 particular member of that family.
15417 @option{-mtune} defines the macros @samp{_MIPS_TUNE} and
15418 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
15419 @option{-march} ones described above.
15421 @item -mips1
15422 @opindex mips1
15423 Equivalent to @option{-march=mips1}.
15425 @item -mips2
15426 @opindex mips2
15427 Equivalent to @option{-march=mips2}.
15429 @item -mips3
15430 @opindex mips3
15431 Equivalent to @option{-march=mips3}.
15433 @item -mips4
15434 @opindex mips4
15435 Equivalent to @option{-march=mips4}.
15437 @item -mips32
15438 @opindex mips32
15439 Equivalent to @option{-march=mips32}.
15441 @item -mips32r2
15442 @opindex mips32r2
15443 Equivalent to @option{-march=mips32r2}.
15445 @item -mips64
15446 @opindex mips64
15447 Equivalent to @option{-march=mips64}.
15449 @item -mips64r2
15450 @opindex mips64r2
15451 Equivalent to @option{-march=mips64r2}.
15453 @item -mips16
15454 @itemx -mno-mips16
15455 @opindex mips16
15456 @opindex mno-mips16
15457 Generate (do not generate) MIPS16 code.  If GCC is targeting a
15458 MIPS32 or MIPS64 architecture, it makes use of the MIPS16e ASE@.
15460 MIPS16 code generation can also be controlled on a per-function basis
15461 by means of @code{mips16} and @code{nomips16} attributes.
15462 @xref{Function Attributes}, for more information.
15464 @item -mflip-mips16
15465 @opindex mflip-mips16
15466 Generate MIPS16 code on alternating functions.  This option is provided
15467 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
15468 not intended for ordinary use in compiling user code.
15470 @item -minterlink-mips16
15471 @itemx -mno-interlink-mips16
15472 @opindex minterlink-mips16
15473 @opindex mno-interlink-mips16
15474 Require (do not require) that non-MIPS16 code be link-compatible with
15475 MIPS16 code.
15477 For example, non-MIPS16 code cannot jump directly to MIPS16 code;
15478 it must either use a call or an indirect jump.  @option{-minterlink-mips16}
15479 therefore disables direct jumps unless GCC knows that the target of the
15480 jump is not MIPS16.
15482 @item -mabi=32
15483 @itemx -mabi=o64
15484 @itemx -mabi=n32
15485 @itemx -mabi=64
15486 @itemx -mabi=eabi
15487 @opindex mabi=32
15488 @opindex mabi=o64
15489 @opindex mabi=n32
15490 @opindex mabi=64
15491 @opindex mabi=eabi
15492 Generate code for the given ABI@.
15494 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
15495 generates 64-bit code when you select a 64-bit architecture, but you
15496 can use @option{-mgp32} to get 32-bit code instead.
15498 For information about the O64 ABI, see
15499 @uref{http://gcc.gnu.org/@/projects/@/mipso64-abi.html}.
15501 GCC supports a variant of the o32 ABI in which floating-point registers
15502 are 64 rather than 32 bits wide.  You can select this combination with
15503 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @code{mthc1}
15504 and @code{mfhc1} instructions and is therefore only supported for
15505 MIPS32R2 processors.
15507 The register assignments for arguments and return values remain the
15508 same, but each scalar value is passed in a single 64-bit register
15509 rather than a pair of 32-bit registers.  For example, scalar
15510 floating-point values are returned in @samp{$f0} only, not a
15511 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
15512 remains the same, but all 64 bits are saved.
15514 @item -mabicalls
15515 @itemx -mno-abicalls
15516 @opindex mabicalls
15517 @opindex mno-abicalls
15518 Generate (do not generate) code that is suitable for SVR4-style
15519 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
15520 systems.
15522 @item -mshared
15523 @itemx -mno-shared
15524 Generate (do not generate) code that is fully position-independent,
15525 and that can therefore be linked into shared libraries.  This option
15526 only affects @option{-mabicalls}.
15528 All @option{-mabicalls} code has traditionally been position-independent,
15529 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
15530 as an extension, the GNU toolchain allows executables to use absolute
15531 accesses for locally-binding symbols.  It can also use shorter GP
15532 initialization sequences and generate direct calls to locally-defined
15533 functions.  This mode is selected by @option{-mno-shared}.
15535 @option{-mno-shared} depends on binutils 2.16 or higher and generates
15536 objects that can only be linked by the GNU linker.  However, the option
15537 does not affect the ABI of the final executable; it only affects the ABI
15538 of relocatable objects.  Using @option{-mno-shared} generally makes
15539 executables both smaller and quicker.
15541 @option{-mshared} is the default.
15543 @item -mplt
15544 @itemx -mno-plt
15545 @opindex mplt
15546 @opindex mno-plt
15547 Assume (do not assume) that the static and dynamic linkers
15548 support PLTs and copy relocations.  This option only affects
15549 @option{-mno-shared -mabicalls}.  For the n64 ABI, this option
15550 has no effect without @option{-msym32}.
15552 You can make @option{-mplt} the default by configuring
15553 GCC with @option{--with-mips-plt}.  The default is
15554 @option{-mno-plt} otherwise.
15556 @item -mxgot
15557 @itemx -mno-xgot
15558 @opindex mxgot
15559 @opindex mno-xgot
15560 Lift (do not lift) the usual restrictions on the size of the global
15561 offset table.
15563 GCC normally uses a single instruction to load values from the GOT@.
15564 While this is relatively efficient, it only works if the GOT
15565 is smaller than about 64k.  Anything larger causes the linker
15566 to report an error such as:
15568 @cindex relocation truncated to fit (MIPS)
15569 @smallexample
15570 relocation truncated to fit: R_MIPS_GOT16 foobar
15571 @end smallexample
15573 If this happens, you should recompile your code with @option{-mxgot}.
15574 This works with very large GOTs, although the code is also
15575 less efficient, since it takes three instructions to fetch the
15576 value of a global symbol.
15578 Note that some linkers can create multiple GOTs.  If you have such a
15579 linker, you should only need to use @option{-mxgot} when a single object
15580 file accesses more than 64k's worth of GOT entries.  Very few do.
15582 These options have no effect unless GCC is generating position
15583 independent code.
15585 @item -mgp32
15586 @opindex mgp32
15587 Assume that general-purpose registers are 32 bits wide.
15589 @item -mgp64
15590 @opindex mgp64
15591 Assume that general-purpose registers are 64 bits wide.
15593 @item -mfp32
15594 @opindex mfp32
15595 Assume that floating-point registers are 32 bits wide.
15597 @item -mfp64
15598 @opindex mfp64
15599 Assume that floating-point registers are 64 bits wide.
15601 @item -mhard-float
15602 @opindex mhard-float
15603 Use floating-point coprocessor instructions.
15605 @item -msoft-float
15606 @opindex msoft-float
15607 Do not use floating-point coprocessor instructions.  Implement
15608 floating-point calculations using library calls instead.
15610 @item -msingle-float
15611 @opindex msingle-float
15612 Assume that the floating-point coprocessor only supports single-precision
15613 operations.
15615 @item -mdouble-float
15616 @opindex mdouble-float
15617 Assume that the floating-point coprocessor supports double-precision
15618 operations.  This is the default.
15620 @item -mllsc
15621 @itemx -mno-llsc
15622 @opindex mllsc
15623 @opindex mno-llsc
15624 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
15625 implement atomic memory built-in functions.  When neither option is
15626 specified, GCC uses the instructions if the target architecture
15627 supports them.
15629 @option{-mllsc} is useful if the runtime environment can emulate the
15630 instructions and @option{-mno-llsc} can be useful when compiling for
15631 nonstandard ISAs.  You can make either option the default by
15632 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
15633 respectively.  @option{--with-llsc} is the default for some
15634 configurations; see the installation documentation for details.
15636 @item -mdsp
15637 @itemx -mno-dsp
15638 @opindex mdsp
15639 @opindex mno-dsp
15640 Use (do not use) revision 1 of the MIPS DSP ASE@.
15641 @xref{MIPS DSP Built-in Functions}.  This option defines the
15642 preprocessor macro @samp{__mips_dsp}.  It also defines
15643 @samp{__mips_dsp_rev} to 1.
15645 @item -mdspr2
15646 @itemx -mno-dspr2
15647 @opindex mdspr2
15648 @opindex mno-dspr2
15649 Use (do not use) revision 2 of the MIPS DSP ASE@.
15650 @xref{MIPS DSP Built-in Functions}.  This option defines the
15651 preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
15652 It also defines @samp{__mips_dsp_rev} to 2.
15654 @item -msmartmips
15655 @itemx -mno-smartmips
15656 @opindex msmartmips
15657 @opindex mno-smartmips
15658 Use (do not use) the MIPS SmartMIPS ASE.
15660 @item -mpaired-single
15661 @itemx -mno-paired-single
15662 @opindex mpaired-single
15663 @opindex mno-paired-single
15664 Use (do not use) paired-single floating-point instructions.
15665 @xref{MIPS Paired-Single Support}.  This option requires
15666 hardware floating-point support to be enabled.
15668 @item -mdmx
15669 @itemx -mno-mdmx
15670 @opindex mdmx
15671 @opindex mno-mdmx
15672 Use (do not use) MIPS Digital Media Extension instructions.
15673 This option can only be used when generating 64-bit code and requires
15674 hardware floating-point support to be enabled.
15676 @item -mips3d
15677 @itemx -mno-mips3d
15678 @opindex mips3d
15679 @opindex mno-mips3d
15680 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
15681 The option @option{-mips3d} implies @option{-mpaired-single}.
15683 @item -mmt
15684 @itemx -mno-mt
15685 @opindex mmt
15686 @opindex mno-mt
15687 Use (do not use) MT Multithreading instructions.
15689 @item -mlong64
15690 @opindex mlong64
15691 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
15692 an explanation of the default and the way that the pointer size is
15693 determined.
15695 @item -mlong32
15696 @opindex mlong32
15697 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
15699 The default size of @code{int}s, @code{long}s and pointers depends on
15700 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
15701 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
15702 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
15703 or the same size as integer registers, whichever is smaller.
15705 @item -msym32
15706 @itemx -mno-sym32
15707 @opindex msym32
15708 @opindex mno-sym32
15709 Assume (do not assume) that all symbols have 32-bit values, regardless
15710 of the selected ABI@.  This option is useful in combination with
15711 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
15712 to generate shorter and faster references to symbolic addresses.
15714 @item -G @var{num}
15715 @opindex G
15716 Put definitions of externally-visible data in a small data section
15717 if that data is no bigger than @var{num} bytes.  GCC can then access
15718 the data more efficiently; see @option{-mgpopt} for details.
15720 The default @option{-G} option depends on the configuration.
15722 @item -mlocal-sdata
15723 @itemx -mno-local-sdata
15724 @opindex mlocal-sdata
15725 @opindex mno-local-sdata
15726 Extend (do not extend) the @option{-G} behavior to local data too,
15727 such as to static variables in C@.  @option{-mlocal-sdata} is the
15728 default for all configurations.
15730 If the linker complains that an application is using too much small data,
15731 you might want to try rebuilding the less performance-critical parts with
15732 @option{-mno-local-sdata}.  You might also want to build large
15733 libraries with @option{-mno-local-sdata}, so that the libraries leave
15734 more room for the main program.
15736 @item -mextern-sdata
15737 @itemx -mno-extern-sdata
15738 @opindex mextern-sdata
15739 @opindex mno-extern-sdata
15740 Assume (do not assume) that externally-defined data is in
15741 a small data section if the size of that data is within the @option{-G} limit.
15742 @option{-mextern-sdata} is the default for all configurations.
15744 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
15745 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
15746 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
15747 is placed in a small data section.  If @var{Var} is defined by another
15748 module, you must either compile that module with a high-enough
15749 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
15750 definition.  If @var{Var} is common, you must link the application
15751 with a high-enough @option{-G} setting.
15753 The easiest way of satisfying these restrictions is to compile
15754 and link every module with the same @option{-G} option.  However,
15755 you may wish to build a library that supports several different
15756 small data limits.  You can do this by compiling the library with
15757 the highest supported @option{-G} setting and additionally using
15758 @option{-mno-extern-sdata} to stop the library from making assumptions
15759 about externally-defined data.
15761 @item -mgpopt
15762 @itemx -mno-gpopt
15763 @opindex mgpopt
15764 @opindex mno-gpopt
15765 Use (do not use) GP-relative accesses for symbols that are known to be
15766 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
15767 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
15768 configurations.
15770 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
15771 might not hold the value of @code{_gp}.  For example, if the code is
15772 part of a library that might be used in a boot monitor, programs that
15773 call boot monitor routines pass an unknown value in @code{$gp}.
15774 (In such situations, the boot monitor itself is usually compiled
15775 with @option{-G0}.)
15777 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
15778 @option{-mno-extern-sdata}.
15780 @item -membedded-data
15781 @itemx -mno-embedded-data
15782 @opindex membedded-data
15783 @opindex mno-embedded-data
15784 Allocate variables to the read-only data section first if possible, then
15785 next in the small data section if possible, otherwise in data.  This gives
15786 slightly slower code than the default, but reduces the amount of RAM required
15787 when executing, and thus may be preferred for some embedded systems.
15789 @item -muninit-const-in-rodata
15790 @itemx -mno-uninit-const-in-rodata
15791 @opindex muninit-const-in-rodata
15792 @opindex mno-uninit-const-in-rodata
15793 Put uninitialized @code{const} variables in the read-only data section.
15794 This option is only meaningful in conjunction with @option{-membedded-data}.
15796 @item -mcode-readable=@var{setting}
15797 @opindex mcode-readable
15798 Specify whether GCC may generate code that reads from executable sections.
15799 There are three possible settings:
15801 @table @gcctabopt
15802 @item -mcode-readable=yes
15803 Instructions may freely access executable sections.  This is the
15804 default setting.
15806 @item -mcode-readable=pcrel
15807 MIPS16 PC-relative load instructions can access executable sections,
15808 but other instructions must not do so.  This option is useful on 4KSc
15809 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
15810 It is also useful on processors that can be configured to have a dual
15811 instruction/data SRAM interface and that, like the M4K, automatically
15812 redirect PC-relative loads to the instruction RAM.
15814 @item -mcode-readable=no
15815 Instructions must not access executable sections.  This option can be
15816 useful on targets that are configured to have a dual instruction/data
15817 SRAM interface but that (unlike the M4K) do not automatically redirect
15818 PC-relative loads to the instruction RAM.
15819 @end table
15821 @item -msplit-addresses
15822 @itemx -mno-split-addresses
15823 @opindex msplit-addresses
15824 @opindex mno-split-addresses
15825 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
15826 relocation operators.  This option has been superseded by
15827 @option{-mexplicit-relocs} but is retained for backwards compatibility.
15829 @item -mexplicit-relocs
15830 @itemx -mno-explicit-relocs
15831 @opindex mexplicit-relocs
15832 @opindex mno-explicit-relocs
15833 Use (do not use) assembler relocation operators when dealing with symbolic
15834 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
15835 is to use assembler macros instead.
15837 @option{-mexplicit-relocs} is the default if GCC was configured
15838 to use an assembler that supports relocation operators.
15840 @item -mcheck-zero-division
15841 @itemx -mno-check-zero-division
15842 @opindex mcheck-zero-division
15843 @opindex mno-check-zero-division
15844 Trap (do not trap) on integer division by zero.
15846 The default is @option{-mcheck-zero-division}.
15848 @item -mdivide-traps
15849 @itemx -mdivide-breaks
15850 @opindex mdivide-traps
15851 @opindex mdivide-breaks
15852 MIPS systems check for division by zero by generating either a
15853 conditional trap or a break instruction.  Using traps results in
15854 smaller code, but is only supported on MIPS II and later.  Also, some
15855 versions of the Linux kernel have a bug that prevents trap from
15856 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
15857 allow conditional traps on architectures that support them and
15858 @option{-mdivide-breaks} to force the use of breaks.
15860 The default is usually @option{-mdivide-traps}, but this can be
15861 overridden at configure time using @option{--with-divide=breaks}.
15862 Divide-by-zero checks can be completely disabled using
15863 @option{-mno-check-zero-division}.
15865 @item -mmemcpy
15866 @itemx -mno-memcpy
15867 @opindex mmemcpy
15868 @opindex mno-memcpy
15869 Force (do not force) the use of @code{memcpy()} for non-trivial block
15870 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
15871 most constant-sized copies.
15873 @item -mlong-calls
15874 @itemx -mno-long-calls
15875 @opindex mlong-calls
15876 @opindex mno-long-calls
15877 Disable (do not disable) use of the @code{jal} instruction.  Calling
15878 functions using @code{jal} is more efficient but requires the caller
15879 and callee to be in the same 256 megabyte segment.
15881 This option has no effect on abicalls code.  The default is
15882 @option{-mno-long-calls}.
15884 @item -mmad
15885 @itemx -mno-mad
15886 @opindex mmad
15887 @opindex mno-mad
15888 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
15889 instructions, as provided by the R4650 ISA@.
15891 @item -mfused-madd
15892 @itemx -mno-fused-madd
15893 @opindex mfused-madd
15894 @opindex mno-fused-madd
15895 Enable (disable) use of the floating-point multiply-accumulate
15896 instructions, when they are available.  The default is
15897 @option{-mfused-madd}.
15899 When multiply-accumulate instructions are used, the intermediate
15900 product is calculated to infinite precision and is not subject to
15901 the FCSR Flush to Zero bit.  This may be undesirable in some
15902 circumstances.
15904 @item -nocpp
15905 @opindex nocpp
15906 Tell the MIPS assembler to not run its preprocessor over user
15907 assembler files (with a @samp{.s} suffix) when assembling them.
15909 @item -mfix-24k
15910 @item -mno-fix-24k
15911 @opindex mfix-24k
15912 @opindex mno-fix-24k
15913 Work around the 24K E48 (lost data on stores during refill) errata.
15914 The workarounds are implemented by the assembler rather than by GCC@.
15916 @item -mfix-r4000
15917 @itemx -mno-fix-r4000
15918 @opindex mfix-r4000
15919 @opindex mno-fix-r4000
15920 Work around certain R4000 CPU errata:
15921 @itemize @minus
15922 @item
15923 A double-word or a variable shift may give an incorrect result if executed
15924 immediately after starting an integer division.
15925 @item
15926 A double-word or a variable shift may give an incorrect result if executed
15927 while an integer multiplication is in progress.
15928 @item
15929 An integer division may give an incorrect result if started in a delay slot
15930 of a taken branch or a jump.
15931 @end itemize
15933 @item -mfix-r4400
15934 @itemx -mno-fix-r4400
15935 @opindex mfix-r4400
15936 @opindex mno-fix-r4400
15937 Work around certain R4400 CPU errata:
15938 @itemize @minus
15939 @item
15940 A double-word or a variable shift may give an incorrect result if executed
15941 immediately after starting an integer division.
15942 @end itemize
15944 @item -mfix-r10000
15945 @itemx -mno-fix-r10000
15946 @opindex mfix-r10000
15947 @opindex mno-fix-r10000
15948 Work around certain R10000 errata:
15949 @itemize @minus
15950 @item
15951 @code{ll}/@code{sc} sequences may not behave atomically on revisions
15952 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
15953 @end itemize
15955 This option can only be used if the target architecture supports
15956 branch-likely instructions.  @option{-mfix-r10000} is the default when
15957 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
15958 otherwise.
15960 @item -mfix-vr4120
15961 @itemx -mno-fix-vr4120
15962 @opindex mfix-vr4120
15963 Work around certain VR4120 errata:
15964 @itemize @minus
15965 @item
15966 @code{dmultu} does not always produce the correct result.
15967 @item
15968 @code{div} and @code{ddiv} do not always produce the correct result if one
15969 of the operands is negative.
15970 @end itemize
15971 The workarounds for the division errata rely on special functions in
15972 @file{libgcc.a}.  At present, these functions are only provided by
15973 the @code{mips64vr*-elf} configurations.
15975 Other VR4120 errata require a nop to be inserted between certain pairs of
15976 instructions.  These errata are handled by the assembler, not by GCC itself.
15978 @item -mfix-vr4130
15979 @opindex mfix-vr4130
15980 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
15981 workarounds are implemented by the assembler rather than by GCC,
15982 although GCC avoids using @code{mflo} and @code{mfhi} if the
15983 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
15984 instructions are available instead.
15986 @item -mfix-sb1
15987 @itemx -mno-fix-sb1
15988 @opindex mfix-sb1
15989 Work around certain SB-1 CPU core errata.
15990 (This flag currently works around the SB-1 revision 2
15991 ``F1'' and ``F2'' floating-point errata.)
15993 @item -mr10k-cache-barrier=@var{setting}
15994 @opindex mr10k-cache-barrier
15995 Specify whether GCC should insert cache barriers to avoid the
15996 side-effects of speculation on R10K processors.
15998 In common with many processors, the R10K tries to predict the outcome
15999 of a conditional branch and speculatively executes instructions from
16000 the ``taken'' branch.  It later aborts these instructions if the
16001 predicted outcome is wrong.  However, on the R10K, even aborted
16002 instructions can have side effects.
16004 This problem only affects kernel stores and, depending on the system,
16005 kernel loads.  As an example, a speculatively-executed store may load
16006 the target memory into cache and mark the cache line as dirty, even if
16007 the store itself is later aborted.  If a DMA operation writes to the
16008 same area of memory before the ``dirty'' line is flushed, the cached
16009 data overwrites the DMA-ed data.  See the R10K processor manual
16010 for a full description, including other potential problems.
16012 One workaround is to insert cache barrier instructions before every memory
16013 access that might be speculatively executed and that might have side
16014 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
16015 controls GCC's implementation of this workaround.  It assumes that
16016 aborted accesses to any byte in the following regions does not have
16017 side effects:
16019 @enumerate
16020 @item
16021 the memory occupied by the current function's stack frame;
16023 @item
16024 the memory occupied by an incoming stack argument;
16026 @item
16027 the memory occupied by an object with a link-time-constant address.
16028 @end enumerate
16030 It is the kernel's responsibility to ensure that speculative
16031 accesses to these regions are indeed safe.
16033 If the input program contains a function declaration such as:
16035 @smallexample
16036 void foo (void);
16037 @end smallexample
16039 then the implementation of @code{foo} must allow @code{j foo} and
16040 @code{jal foo} to be executed speculatively.  GCC honors this
16041 restriction for functions it compiles itself.  It expects non-GCC
16042 functions (such as hand-written assembly code) to do the same.
16044 The option has three forms:
16046 @table @gcctabopt
16047 @item -mr10k-cache-barrier=load-store
16048 Insert a cache barrier before a load or store that might be
16049 speculatively executed and that might have side effects even
16050 if aborted.
16052 @item -mr10k-cache-barrier=store
16053 Insert a cache barrier before a store that might be speculatively
16054 executed and that might have side effects even if aborted.
16056 @item -mr10k-cache-barrier=none
16057 Disable the insertion of cache barriers.  This is the default setting.
16058 @end table
16060 @item -mflush-func=@var{func}
16061 @itemx -mno-flush-func
16062 @opindex mflush-func
16063 Specifies the function to call to flush the I and D caches, or to not
16064 call any such function.  If called, the function must take the same
16065 arguments as the common @code{_flush_func()}, that is, the address of the
16066 memory range for which the cache is being flushed, the size of the
16067 memory range, and the number 3 (to flush both caches).  The default
16068 depends on the target GCC was configured for, but commonly is either
16069 @samp{_flush_func} or @samp{__cpu_flush}.
16071 @item mbranch-cost=@var{num}
16072 @opindex mbranch-cost
16073 Set the cost of branches to roughly @var{num} ``simple'' instructions.
16074 This cost is only a heuristic and is not guaranteed to produce
16075 consistent results across releases.  A zero cost redundantly selects
16076 the default, which is based on the @option{-mtune} setting.
16078 @item -mbranch-likely
16079 @itemx -mno-branch-likely
16080 @opindex mbranch-likely
16081 @opindex mno-branch-likely
16082 Enable or disable use of Branch Likely instructions, regardless of the
16083 default for the selected architecture.  By default, Branch Likely
16084 instructions may be generated if they are supported by the selected
16085 architecture.  An exception is for the MIPS32 and MIPS64 architectures
16086 and processors that implement those architectures; for those, Branch
16087 Likely instructions are not be generated by default because the MIPS32
16088 and MIPS64 architectures specifically deprecate their use.
16090 @item -mfp-exceptions
16091 @itemx -mno-fp-exceptions
16092 @opindex mfp-exceptions
16093 Specifies whether FP exceptions are enabled.  This affects how
16094 FP instructions are scheduled for some processors.
16095 The default is that FP exceptions are
16096 enabled.
16098 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
16099 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
16100 FP pipe.
16102 @item -mvr4130-align
16103 @itemx -mno-vr4130-align
16104 @opindex mvr4130-align
16105 The VR4130 pipeline is two-way superscalar, but can only issue two
16106 instructions together if the first one is 8-byte aligned.  When this
16107 option is enabled, GCC aligns pairs of instructions that it
16108 thinks should execute in parallel.
16110 This option only has an effect when optimizing for the VR4130.
16111 It normally makes code faster, but at the expense of making it bigger.
16112 It is enabled by default at optimization level @option{-O3}.
16114 @item -msynci
16115 @itemx -mno-synci
16116 @opindex msynci
16117 Enable (disable) generation of @code{synci} instructions on
16118 architectures that support it.  The @code{synci} instructions (if
16119 enabled) are generated when @code{__builtin___clear_cache()} is
16120 compiled.
16122 This option defaults to @code{-mno-synci}, but the default can be
16123 overridden by configuring with @code{--with-synci}.
16125 When compiling code for single processor systems, it is generally safe
16126 to use @code{synci}.  However, on many multi-core (SMP) systems, it
16127 does not invalidate the instruction caches on all cores and may lead
16128 to undefined behavior.
16130 @item -mrelax-pic-calls
16131 @itemx -mno-relax-pic-calls
16132 @opindex mrelax-pic-calls
16133 Try to turn PIC calls that are normally dispatched via register
16134 @code{$25} into direct calls.  This is only possible if the linker can
16135 resolve the destination at link-time and if the destination is within
16136 range for a direct call.
16138 @option{-mrelax-pic-calls} is the default if GCC was configured to use
16139 an assembler and a linker that supports the @code{.reloc} assembly
16140 directive and @code{-mexplicit-relocs} is in effect.  With
16141 @code{-mno-explicit-relocs}, this optimization can be performed by the
16142 assembler and the linker alone without help from the compiler.
16144 @item -mmcount-ra-address
16145 @itemx -mno-mcount-ra-address
16146 @opindex mmcount-ra-address
16147 @opindex mno-mcount-ra-address
16148 Emit (do not emit) code that allows @code{_mcount} to modify the
16149 calling function's return address.  When enabled, this option extends
16150 the usual @code{_mcount} interface with a new @var{ra-address}
16151 parameter, which has type @code{intptr_t *} and is passed in register
16152 @code{$12}.  @code{_mcount} can then modify the return address by
16153 doing both of the following:
16154 @itemize
16155 @item
16156 Returning the new address in register @code{$31}.
16157 @item
16158 Storing the new address in @code{*@var{ra-address}},
16159 if @var{ra-address} is nonnull.
16160 @end itemize
16162 The default is @option{-mno-mcount-ra-address}.
16164 @end table
16166 @node MMIX Options
16167 @subsection MMIX Options
16168 @cindex MMIX Options
16170 These options are defined for the MMIX:
16172 @table @gcctabopt
16173 @item -mlibfuncs
16174 @itemx -mno-libfuncs
16175 @opindex mlibfuncs
16176 @opindex mno-libfuncs
16177 Specify that intrinsic library functions are being compiled, passing all
16178 values in registers, no matter the size.
16180 @item -mepsilon
16181 @itemx -mno-epsilon
16182 @opindex mepsilon
16183 @opindex mno-epsilon
16184 Generate floating-point comparison instructions that compare with respect
16185 to the @code{rE} epsilon register.
16187 @item -mabi=mmixware
16188 @itemx -mabi=gnu
16189 @opindex mabi=mmixware
16190 @opindex mabi=gnu
16191 Generate code that passes function parameters and return values that (in
16192 the called function) are seen as registers @code{$0} and up, as opposed to
16193 the GNU ABI which uses global registers @code{$231} and up.
16195 @item -mzero-extend
16196 @itemx -mno-zero-extend
16197 @opindex mzero-extend
16198 @opindex mno-zero-extend
16199 When reading data from memory in sizes shorter than 64 bits, use (do not
16200 use) zero-extending load instructions by default, rather than
16201 sign-extending ones.
16203 @item -mknuthdiv
16204 @itemx -mno-knuthdiv
16205 @opindex mknuthdiv
16206 @opindex mno-knuthdiv
16207 Make the result of a division yielding a remainder have the same sign as
16208 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
16209 remainder follows the sign of the dividend.  Both methods are
16210 arithmetically valid, the latter being almost exclusively used.
16212 @item -mtoplevel-symbols
16213 @itemx -mno-toplevel-symbols
16214 @opindex mtoplevel-symbols
16215 @opindex mno-toplevel-symbols
16216 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
16217 code can be used with the @code{PREFIX} assembly directive.
16219 @item -melf
16220 @opindex melf
16221 Generate an executable in the ELF format, rather than the default
16222 @samp{mmo} format used by the @command{mmix} simulator.
16224 @item -mbranch-predict
16225 @itemx -mno-branch-predict
16226 @opindex mbranch-predict
16227 @opindex mno-branch-predict
16228 Use (do not use) the probable-branch instructions, when static branch
16229 prediction indicates a probable branch.
16231 @item -mbase-addresses
16232 @itemx -mno-base-addresses
16233 @opindex mbase-addresses
16234 @opindex mno-base-addresses
16235 Generate (do not generate) code that uses @emph{base addresses}.  Using a
16236 base address automatically generates a request (handled by the assembler
16237 and the linker) for a constant to be set up in a global register.  The
16238 register is used for one or more base address requests within the range 0
16239 to 255 from the value held in the register.  The generally leads to short
16240 and fast code, but the number of different data items that can be
16241 addressed is limited.  This means that a program that uses lots of static
16242 data may require @option{-mno-base-addresses}.
16244 @item -msingle-exit
16245 @itemx -mno-single-exit
16246 @opindex msingle-exit
16247 @opindex mno-single-exit
16248 Force (do not force) generated code to have a single exit point in each
16249 function.
16250 @end table
16252 @node MN10300 Options
16253 @subsection MN10300 Options
16254 @cindex MN10300 options
16256 These @option{-m} options are defined for Matsushita MN10300 architectures:
16258 @table @gcctabopt
16259 @item -mmult-bug
16260 @opindex mmult-bug
16261 Generate code to avoid bugs in the multiply instructions for the MN10300
16262 processors.  This is the default.
16264 @item -mno-mult-bug
16265 @opindex mno-mult-bug
16266 Do not generate code to avoid bugs in the multiply instructions for the
16267 MN10300 processors.
16269 @item -mam33
16270 @opindex mam33
16271 Generate code using features specific to the AM33 processor.
16273 @item -mno-am33
16274 @opindex mno-am33
16275 Do not generate code using features specific to the AM33 processor.  This
16276 is the default.
16278 @item -mam33-2
16279 @opindex mam33-2
16280 Generate code using features specific to the AM33/2.0 processor.
16282 @item -mam34
16283 @opindex mam34
16284 Generate code using features specific to the AM34 processor.
16286 @item -mtune=@var{cpu-type}
16287 @opindex mtune
16288 Use the timing characteristics of the indicated CPU type when
16289 scheduling instructions.  This does not change the targeted processor
16290 type.  The CPU type must be one of @samp{mn10300}, @samp{am33},
16291 @samp{am33-2} or @samp{am34}.
16293 @item -mreturn-pointer-on-d0
16294 @opindex mreturn-pointer-on-d0
16295 When generating a function that returns a pointer, return the pointer
16296 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
16297 only in @code{a0}, and attempts to call such functions without a prototype
16298 result in errors.  Note that this option is on by default; use
16299 @option{-mno-return-pointer-on-d0} to disable it.
16301 @item -mno-crt0
16302 @opindex mno-crt0
16303 Do not link in the C run-time initialization object file.
16305 @item -mrelax
16306 @opindex mrelax
16307 Indicate to the linker that it should perform a relaxation optimization pass
16308 to shorten branches, calls and absolute memory addresses.  This option only
16309 has an effect when used on the command line for the final link step.
16311 This option makes symbolic debugging impossible.
16313 @item -mliw
16314 @opindex mliw
16315 Allow the compiler to generate @emph{Long Instruction Word}
16316 instructions if the target is the @samp{AM33} or later.  This is the
16317 default.  This option defines the preprocessor macro @samp{__LIW__}.
16319 @item -mnoliw
16320 @opindex mnoliw
16321 Do not allow the compiler to generate @emph{Long Instruction Word}
16322 instructions.  This option defines the preprocessor macro
16323 @samp{__NO_LIW__}.
16325 @item -msetlb
16326 @opindex msetlb
16327 Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
16328 instructions if the target is the @samp{AM33} or later.  This is the
16329 default.  This option defines the preprocessor macro @samp{__SETLB__}.
16331 @item -mnosetlb
16332 @opindex mnosetlb
16333 Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
16334 instructions.  This option defines the preprocessor macro
16335 @samp{__NO_SETLB__}.
16337 @end table
16339 @node PDP-11 Options
16340 @subsection PDP-11 Options
16341 @cindex PDP-11 Options
16343 These options are defined for the PDP-11:
16345 @table @gcctabopt
16346 @item -mfpu
16347 @opindex mfpu
16348 Use hardware FPP floating point.  This is the default.  (FIS floating
16349 point on the PDP-11/40 is not supported.)
16351 @item -msoft-float
16352 @opindex msoft-float
16353 Do not use hardware floating point.
16355 @item -mac0
16356 @opindex mac0
16357 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
16359 @item -mno-ac0
16360 @opindex mno-ac0
16361 Return floating-point results in memory.  This is the default.
16363 @item -m40
16364 @opindex m40
16365 Generate code for a PDP-11/40.
16367 @item -m45
16368 @opindex m45
16369 Generate code for a PDP-11/45.  This is the default.
16371 @item -m10
16372 @opindex m10
16373 Generate code for a PDP-11/10.
16375 @item -mbcopy-builtin
16376 @opindex mbcopy-builtin
16377 Use inline @code{movmemhi} patterns for copying memory.  This is the
16378 default.
16380 @item -mbcopy
16381 @opindex mbcopy
16382 Do not use inline @code{movmemhi} patterns for copying memory.
16384 @item -mint16
16385 @itemx -mno-int32
16386 @opindex mint16
16387 @opindex mno-int32
16388 Use 16-bit @code{int}.  This is the default.
16390 @item -mint32
16391 @itemx -mno-int16
16392 @opindex mint32
16393 @opindex mno-int16
16394 Use 32-bit @code{int}.
16396 @item -mfloat64
16397 @itemx -mno-float32
16398 @opindex mfloat64
16399 @opindex mno-float32
16400 Use 64-bit @code{float}.  This is the default.
16402 @item -mfloat32
16403 @itemx -mno-float64
16404 @opindex mfloat32
16405 @opindex mno-float64
16406 Use 32-bit @code{float}.
16408 @item -mabshi
16409 @opindex mabshi
16410 Use @code{abshi2} pattern.  This is the default.
16412 @item -mno-abshi
16413 @opindex mno-abshi
16414 Do not use @code{abshi2} pattern.
16416 @item -mbranch-expensive
16417 @opindex mbranch-expensive
16418 Pretend that branches are expensive.  This is for experimenting with
16419 code generation only.
16421 @item -mbranch-cheap
16422 @opindex mbranch-cheap
16423 Do not pretend that branches are expensive.  This is the default.
16425 @item -munix-asm
16426 @opindex munix-asm
16427 Use Unix assembler syntax.  This is the default when configured for
16428 @samp{pdp11-*-bsd}.
16430 @item -mdec-asm
16431 @opindex mdec-asm
16432 Use DEC assembler syntax.  This is the default when configured for any
16433 PDP-11 target other than @samp{pdp11-*-bsd}.
16434 @end table
16436 @node picoChip Options
16437 @subsection picoChip Options
16438 @cindex picoChip options
16440 These @samp{-m} options are defined for picoChip implementations:
16442 @table @gcctabopt
16444 @item -mae=@var{ae_type}
16445 @opindex mcpu
16446 Set the instruction set, register set, and instruction scheduling
16447 parameters for array element type @var{ae_type}.  Supported values
16448 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
16450 @option{-mae=ANY} selects a completely generic AE type.  Code
16451 generated with this option runs on any of the other AE types.  The
16452 code is not as efficient as it would be if compiled for a specific
16453 AE type, and some types of operation (e.g., multiplication) do not
16454 work properly on all types of AE.
16456 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
16457 for compiled code, and is the default.
16459 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
16460 option may suffer from poor performance of byte (char) manipulation,
16461 since the DSP AE does not provide hardware support for byte load/stores.
16463 @item -msymbol-as-address
16464 Enable the compiler to directly use a symbol name as an address in a
16465 load/store instruction, without first loading it into a
16466 register.  Typically, the use of this option generates larger
16467 programs, which run faster than when the option isn't used.  However, the
16468 results vary from program to program, so it is left as a user option,
16469 rather than being permanently enabled.
16471 @item -mno-inefficient-warnings
16472 Disables warnings about the generation of inefficient code.  These
16473 warnings can be generated, for example, when compiling code that
16474 performs byte-level memory operations on the MAC AE type.  The MAC AE has
16475 no hardware support for byte-level memory operations, so all byte
16476 load/stores must be synthesized from word load/store operations.  This is
16477 inefficient and a warning is generated to indicate
16478 that you should rewrite the code to avoid byte operations, or to target
16479 an AE type that has the necessary hardware support.  This option disables
16480 these warnings.
16482 @end table
16484 @node PowerPC Options
16485 @subsection PowerPC Options
16486 @cindex PowerPC options
16488 These are listed under @xref{RS/6000 and PowerPC Options}.
16490 @node RL78 Options
16491 @subsection RL78 Options
16492 @cindex RL78 Options
16494 @table @gcctabopt
16496 @item -msim
16497 @opindex msim
16498 Links in additional target libraries to support operation within a
16499 simulator.
16501 @item -mmul=none
16502 @itemx -mmul=g13
16503 @itemx -mmul=rl78
16504 @opindex mmul
16505 Specifies the type of hardware multiplication support to be used.  The
16506 default is @code{none}, which uses software multiplication functions.
16507 The @code{g13} option is for the hardware multiply/divide peripheral
16508 only on the RL78/G13 targets.  The @code{rl78} option is for the
16509 standard hardware multiplication defined in the RL78 software manual.
16511 @end table
16513 @node RS/6000 and PowerPC Options
16514 @subsection IBM RS/6000 and PowerPC Options
16515 @cindex RS/6000 and PowerPC Options
16516 @cindex IBM RS/6000 and PowerPC Options
16518 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
16519 @table @gcctabopt
16520 @item -mpower
16521 @itemx -mno-power
16522 @itemx -mpower2
16523 @itemx -mno-power2
16524 @itemx -mpowerpc
16525 @itemx -mno-powerpc
16526 @itemx -mpowerpc-gpopt
16527 @itemx -mno-powerpc-gpopt
16528 @itemx -mpowerpc-gfxopt
16529 @itemx -mno-powerpc-gfxopt
16530 @need 800
16531 @itemx -mpowerpc64
16532 @itemx -mno-powerpc64
16533 @itemx -mmfcrf
16534 @itemx -mno-mfcrf
16535 @itemx -mpopcntb
16536 @itemx -mno-popcntb
16537 @itemx -mpopcntd
16538 @itemx -mno-popcntd
16539 @itemx -mfprnd
16540 @itemx -mno-fprnd
16541 @need 800
16542 @itemx -mcmpb
16543 @itemx -mno-cmpb
16544 @itemx -mmfpgpr
16545 @itemx -mno-mfpgpr
16546 @itemx -mhard-dfp
16547 @itemx -mno-hard-dfp
16548 @opindex mpower
16549 @opindex mno-power
16550 @opindex mpower2
16551 @opindex mno-power2
16552 @opindex mpowerpc
16553 @opindex mno-powerpc
16554 @opindex mpowerpc-gpopt
16555 @opindex mno-powerpc-gpopt
16556 @opindex mpowerpc-gfxopt
16557 @opindex mno-powerpc-gfxopt
16558 @opindex mpowerpc64
16559 @opindex mno-powerpc64
16560 @opindex mmfcrf
16561 @opindex mno-mfcrf
16562 @opindex mpopcntb
16563 @opindex mno-popcntb
16564 @opindex mpopcntd
16565 @opindex mno-popcntd
16566 @opindex mfprnd
16567 @opindex mno-fprnd
16568 @opindex mcmpb
16569 @opindex mno-cmpb
16570 @opindex mmfpgpr
16571 @opindex mno-mfpgpr
16572 @opindex mhard-dfp
16573 @opindex mno-hard-dfp
16574 GCC supports two related instruction set architectures for the
16575 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
16576 instructions supported by the @samp{rios} chip set used in the original
16577 RS/6000 systems and the @dfn{PowerPC} instruction set is the
16578 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
16579 the IBM 4xx, 6xx, and follow-on microprocessors.
16581 Neither architecture is a subset of the other.  However there is a
16582 large common subset of instructions supported by both.  An MQ
16583 register is included in processors supporting the POWER architecture.
16585 You use these options to specify which instructions are available on the
16586 processor you are using.  The default value of these options is
16587 determined when configuring GCC@.  Specifying the
16588 @option{-mcpu=@var{cpu_type}} overrides the specification of these
16589 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
16590 rather than the options listed above.
16592 The @option{-mpower} option allows GCC to generate instructions that
16593 are found only in the POWER architecture and to use the MQ register.
16594 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
16595 to generate instructions that are present in the POWER2 architecture but
16596 not the original POWER architecture.
16598 The @option{-mpowerpc} option allows GCC to generate instructions that
16599 are found only in the 32-bit subset of the PowerPC architecture.
16600 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
16601 GCC to use the optional PowerPC architecture instructions in the
16602 General Purpose group, including floating-point square root.  Specifying
16603 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
16604 use the optional PowerPC architecture instructions in the Graphics
16605 group, including floating-point select.
16607 The @option{-mmfcrf} option allows GCC to generate the move from
16608 condition register field instruction implemented on the POWER4
16609 processor and other processors that support the PowerPC V2.01
16610 architecture.
16611 The @option{-mpopcntb} option allows GCC to generate the popcount and
16612 double-precision FP reciprocal estimate instruction implemented on the
16613 POWER5 processor and other processors that support the PowerPC V2.02
16614 architecture.
16615 The @option{-mpopcntd} option allows GCC to generate the popcount
16616 instruction implemented on the POWER7 processor and other processors
16617 that support the PowerPC V2.06 architecture.
16618 The @option{-mfprnd} option allows GCC to generate the FP round to
16619 integer instructions implemented on the POWER5+ processor and other
16620 processors that support the PowerPC V2.03 architecture.
16621 The @option{-mcmpb} option allows GCC to generate the compare bytes
16622 instruction implemented on the POWER6 processor and other processors
16623 that support the PowerPC V2.05 architecture.
16624 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
16625 general-purpose register instructions implemented on the POWER6X
16626 processor and other processors that support the extended PowerPC V2.05
16627 architecture.
16628 The @option{-mhard-dfp} option allows GCC to generate the decimal
16629 floating-point instructions implemented on some POWER processors.
16631 The @option{-mpowerpc64} option allows GCC to generate the additional
16632 64-bit instructions that are found in the full PowerPC64 architecture
16633 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
16634 @option{-mno-powerpc64}.
16636 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
16637 uses only the instructions in the common subset of both
16638 architectures plus some special AIX common-mode calls, and does not use
16639 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
16640 permits GCC to use any instruction from either architecture and to
16641 allow use of the MQ register; specify this for the Motorola MPC601.
16643 @item -mnew-mnemonics
16644 @itemx -mold-mnemonics
16645 @opindex mnew-mnemonics
16646 @opindex mold-mnemonics
16647 Select which mnemonics to use in the generated assembler code.  With
16648 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
16649 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
16650 assembler mnemonics defined for the POWER architecture.  Instructions
16651 defined in only one architecture have only one mnemonic; GCC uses that
16652 mnemonic irrespective of which of these options is specified.
16654 GCC defaults to the mnemonics appropriate for the architecture in
16655 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
16656 value of these option.  Unless you are building a cross-compiler, you
16657 should normally not specify either @option{-mnew-mnemonics} or
16658 @option{-mold-mnemonics}, but should instead accept the default.
16660 @item -mcpu=@var{cpu_type}
16661 @opindex mcpu
16662 Set architecture type, register usage, choice of mnemonics, and
16663 instruction scheduling parameters for machine type @var{cpu_type}.
16664 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
16665 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
16666 @samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
16667 @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
16668 @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
16669 @samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
16670 @samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{e5500},
16671 @samp{e6500}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
16672 @samp{titan}, @samp{power}, @samp{power2}, @samp{power3},
16673 @samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
16674 @samp{power6x}, @samp{power7}, @samp{common}, @samp{powerpc},
16675 @samp{powerpc64}, @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc},
16676 and @samp{rs64}.
16678 @option{-mcpu=common} selects a completely generic processor.  Code
16679 generated under this option runs on any POWER or PowerPC processor.
16680 GCC uses only the instructions in the common subset of both
16681 architectures, and does not use the MQ register.  GCC assumes a generic
16682 processor model for scheduling purposes.
16684 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
16685 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
16686 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
16687 types, with an appropriate, generic processor model assumed for
16688 scheduling purposes.
16690 The other options specify a specific processor.  Code generated under
16691 those options runs best on that processor, and may not run at all on
16692 others.
16694 The @option{-mcpu} options automatically enable or disable the
16695 following options:
16697 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
16698 -mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64 @gol
16699 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
16700 -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx}
16702 The particular options set for any particular CPU varies between
16703 compiler versions, depending on what setting seems to produce optimal
16704 code for that CPU; it doesn't necessarily reflect the actual hardware's
16705 capabilities.  If you wish to set an individual option to a particular
16706 value, you may specify it after the @option{-mcpu} option, like
16707 @option{-mcpu=970 -mno-altivec}.
16709 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
16710 not enabled or disabled by the @option{-mcpu} option at present because
16711 AIX does not have full support for these options.  You may still
16712 enable or disable them individually if you're sure it'll work in your
16713 environment.
16715 @item -mtune=@var{cpu_type}
16716 @opindex mtune
16717 Set the instruction scheduling parameters for machine type
16718 @var{cpu_type}, but do not set the architecture type, register usage, or
16719 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} does.  The same
16720 values for @var{cpu_type} are used for @option{-mtune} as for
16721 @option{-mcpu}.  If both are specified, the code generated uses the
16722 architecture, registers, and mnemonics set by @option{-mcpu}, but the
16723 scheduling parameters set by @option{-mtune}.
16725 @item -mcmodel=small
16726 @opindex mcmodel=small
16727 Generate PowerPC64 code for the small model: The TOC is limited to
16728 64k.
16730 @item -mcmodel=medium
16731 @opindex mcmodel=medium
16732 Generate PowerPC64 code for the medium model: The TOC and other static
16733 data may be up to a total of 4G in size.
16735 @item -mcmodel=large
16736 @opindex mcmodel=large
16737 Generate PowerPC64 code for the large model: The TOC may be up to 4G
16738 in size.  Other data and code is only limited by the 64-bit address
16739 space.
16741 @item -maltivec
16742 @itemx -mno-altivec
16743 @opindex maltivec
16744 @opindex mno-altivec
16745 Generate code that uses (does not use) AltiVec instructions, and also
16746 enable the use of built-in functions that allow more direct access to
16747 the AltiVec instruction set.  You may also need to set
16748 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
16749 enhancements.
16751 @item -mvrsave
16752 @itemx -mno-vrsave
16753 @opindex mvrsave
16754 @opindex mno-vrsave
16755 Generate VRSAVE instructions when generating AltiVec code.
16757 @item -mgen-cell-microcode
16758 @opindex mgen-cell-microcode
16759 Generate Cell microcode instructions
16761 @item -mwarn-cell-microcode
16762 @opindex mwarn-cell-microcode
16763 Warning when a Cell microcode instruction is going to emitted.  An example
16764 of a Cell microcode instruction is a variable shift.
16766 @item -msecure-plt
16767 @opindex msecure-plt
16768 Generate code that allows @command{ld} and @command{ld.so}
16769 to build executables and shared
16770 libraries with non-executable @code{.plt} and @code{.got} sections.
16771 This is a PowerPC
16772 32-bit SYSV ABI option.
16774 @item -mbss-plt
16775 @opindex mbss-plt
16776 Generate code that uses a BSS @code{.plt} section that @command{ld.so}
16777 fills in, and
16778 requires @code{.plt} and @code{.got}
16779 sections that are both writable and executable.
16780 This is a PowerPC 32-bit SYSV ABI option.
16782 @item -misel
16783 @itemx -mno-isel
16784 @opindex misel
16785 @opindex mno-isel
16786 This switch enables or disables the generation of ISEL instructions.
16788 @item -misel=@var{yes/no}
16789 This switch has been deprecated.  Use @option{-misel} and
16790 @option{-mno-isel} instead.
16792 @item -mspe
16793 @itemx -mno-spe
16794 @opindex mspe
16795 @opindex mno-spe
16796 This switch enables or disables the generation of SPE simd
16797 instructions.
16799 @item -mpaired
16800 @itemx -mno-paired
16801 @opindex mpaired
16802 @opindex mno-paired
16803 This switch enables or disables the generation of PAIRED simd
16804 instructions.
16806 @item -mspe=@var{yes/no}
16807 This option has been deprecated.  Use @option{-mspe} and
16808 @option{-mno-spe} instead.
16810 @item -mvsx
16811 @itemx -mno-vsx
16812 @opindex mvsx
16813 @opindex mno-vsx
16814 Generate code that uses (does not use) vector/scalar (VSX)
16815 instructions, and also enable the use of built-in functions that allow
16816 more direct access to the VSX instruction set.
16818 @item -mfloat-gprs=@var{yes/single/double/no}
16819 @itemx -mfloat-gprs
16820 @opindex mfloat-gprs
16821 This switch enables or disables the generation of floating-point
16822 operations on the general-purpose registers for architectures that
16823 support it.
16825 The argument @var{yes} or @var{single} enables the use of
16826 single-precision floating-point operations.
16828 The argument @var{double} enables the use of single and
16829 double-precision floating-point operations.
16831 The argument @var{no} disables floating-point operations on the
16832 general-purpose registers.
16834 This option is currently only available on the MPC854x.
16836 @item -m32
16837 @itemx -m64
16838 @opindex m32
16839 @opindex m64
16840 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
16841 targets (including GNU/Linux).  The 32-bit environment sets int, long
16842 and pointer to 32 bits and generates code that runs on any PowerPC
16843 variant.  The 64-bit environment sets int to 32 bits and long and
16844 pointer to 64 bits, and generates code for PowerPC64, as for
16845 @option{-mpowerpc64}.
16847 @item -mfull-toc
16848 @itemx -mno-fp-in-toc
16849 @itemx -mno-sum-in-toc
16850 @itemx -mminimal-toc
16851 @opindex mfull-toc
16852 @opindex mno-fp-in-toc
16853 @opindex mno-sum-in-toc
16854 @opindex mminimal-toc
16855 Modify generation of the TOC (Table Of Contents), which is created for
16856 every executable file.  The @option{-mfull-toc} option is selected by
16857 default.  In that case, GCC allocates at least one TOC entry for
16858 each unique non-automatic variable reference in your program.  GCC
16859 also places floating-point constants in the TOC@.  However, only
16860 16,384 entries are available in the TOC@.
16862 If you receive a linker error message that saying you have overflowed
16863 the available TOC space, you can reduce the amount of TOC space used
16864 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
16865 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
16866 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
16867 generate code to calculate the sum of an address and a constant at
16868 run time instead of putting that sum into the TOC@.  You may specify one
16869 or both of these options.  Each causes GCC to produce very slightly
16870 slower and larger code at the expense of conserving TOC space.
16872 If you still run out of space in the TOC even when you specify both of
16873 these options, specify @option{-mminimal-toc} instead.  This option causes
16874 GCC to make only one TOC entry for every file.  When you specify this
16875 option, GCC produces code that is slower and larger but which
16876 uses extremely little TOC space.  You may wish to use this option
16877 only on files that contain less frequently-executed code.
16879 @item -maix64
16880 @itemx -maix32
16881 @opindex maix64
16882 @opindex maix32
16883 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
16884 @code{long} type, and the infrastructure needed to support them.
16885 Specifying @option{-maix64} implies @option{-mpowerpc64} and
16886 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
16887 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
16889 @item -mxl-compat
16890 @itemx -mno-xl-compat
16891 @opindex mxl-compat
16892 @opindex mno-xl-compat
16893 Produce code that conforms more closely to IBM XL compiler semantics
16894 when using AIX-compatible ABI@.  Pass floating-point arguments to
16895 prototyped functions beyond the register save area (RSA) on the stack
16896 in addition to argument FPRs.  Do not assume that most significant
16897 double in 128-bit long double value is properly rounded when comparing
16898 values and converting to double.  Use XL symbol names for long double
16899 support routines.
16901 The AIX calling convention was extended but not initially documented to
16902 handle an obscure K&R C case of calling a function that takes the
16903 address of its arguments with fewer arguments than declared.  IBM XL
16904 compilers access floating-point arguments that do not fit in the
16905 RSA from the stack when a subroutine is compiled without
16906 optimization.  Because always storing floating-point arguments on the
16907 stack is inefficient and rarely needed, this option is not enabled by
16908 default and only is necessary when calling subroutines compiled by IBM
16909 XL compilers without optimization.
16911 @item -mpe
16912 @opindex mpe
16913 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
16914 application written to use message passing with special startup code to
16915 enable the application to run.  The system must have PE installed in the
16916 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
16917 must be overridden with the @option{-specs=} option to specify the
16918 appropriate directory location.  The Parallel Environment does not
16919 support threads, so the @option{-mpe} option and the @option{-pthread}
16920 option are incompatible.
16922 @item -malign-natural
16923 @itemx -malign-power
16924 @opindex malign-natural
16925 @opindex malign-power
16926 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
16927 @option{-malign-natural} overrides the ABI-defined alignment of larger
16928 types, such as floating-point doubles, on their natural size-based boundary.
16929 The option @option{-malign-power} instructs GCC to follow the ABI-specified
16930 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
16932 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
16933 is not supported.
16935 @item -msoft-float
16936 @itemx -mhard-float
16937 @opindex msoft-float
16938 @opindex mhard-float
16939 Generate code that does not use (uses) the floating-point register set.
16940 Software floating-point emulation is provided if you use the
16941 @option{-msoft-float} option, and pass the option to GCC when linking.
16943 @item -msingle-float
16944 @itemx -mdouble-float
16945 @opindex msingle-float
16946 @opindex mdouble-float
16947 Generate code for single- or double-precision floating-point operations.
16948 @option{-mdouble-float} implies @option{-msingle-float}.
16950 @item -msimple-fpu
16951 @opindex msimple-fpu
16952 Do not generate @code{sqrt} and @code{div} instructions for hardware
16953 floating-point unit.
16955 @item -mfpu=@var{name}
16956 @opindex mfpu
16957 Specify type of floating-point unit.  Valid values for @var{name} are
16958 @samp{sp_lite} (equivalent to @option{-msingle-float -msimple-fpu}),
16959 @samp{dp_lite} (equivalent to @option{-mdouble-float -msimple-fpu}),
16960 @samp{sp_full} (equivalent to @option{-msingle-float}),
16961 and @samp{dp_full} (equivalent to @option{-mdouble-float}).
16963 @item -mxilinx-fpu
16964 @opindex mxilinx-fpu
16965 Perform optimizations for the floating-point unit on Xilinx PPC 405/440.
16967 @item -mmultiple
16968 @itemx -mno-multiple
16969 @opindex mmultiple
16970 @opindex mno-multiple
16971 Generate code that uses (does not use) the load multiple word
16972 instructions and the store multiple word instructions.  These
16973 instructions are generated by default on POWER systems, and not
16974 generated on PowerPC systems.  Do not use @option{-mmultiple} on little-endian
16975 PowerPC systems, since those instructions do not work when the
16976 processor is in little-endian mode.  The exceptions are PPC740 and
16977 PPC750 which permit these instructions in little-endian mode.
16979 @item -mstring
16980 @itemx -mno-string
16981 @opindex mstring
16982 @opindex mno-string
16983 Generate code that uses (does not use) the load string instructions
16984 and the store string word instructions to save multiple registers and
16985 do small block moves.  These instructions are generated by default on
16986 POWER systems, and not generated on PowerPC systems.  Do not use
16987 @option{-mstring} on little-endian PowerPC systems, since those
16988 instructions do not work when the processor is in little-endian mode.
16989 The exceptions are PPC740 and PPC750 which permit these instructions
16990 in little-endian mode.
16992 @item -mupdate
16993 @itemx -mno-update
16994 @opindex mupdate
16995 @opindex mno-update
16996 Generate code that uses (does not use) the load or store instructions
16997 that update the base register to the address of the calculated memory
16998 location.  These instructions are generated by default.  If you use
16999 @option{-mno-update}, there is a small window between the time that the
17000 stack pointer is updated and the address of the previous frame is
17001 stored, which means code that walks the stack frame across interrupts or
17002 signals may get corrupted data.
17004 @item -mavoid-indexed-addresses
17005 @itemx -mno-avoid-indexed-addresses
17006 @opindex mavoid-indexed-addresses
17007 @opindex mno-avoid-indexed-addresses
17008 Generate code that tries to avoid (not avoid) the use of indexed load
17009 or store instructions. These instructions can incur a performance
17010 penalty on Power6 processors in certain situations, such as when
17011 stepping through large arrays that cross a 16M boundary.  This option
17012 is enabled by default when targeting Power6 and disabled otherwise.
17014 @item -mfused-madd
17015 @itemx -mno-fused-madd
17016 @opindex mfused-madd
17017 @opindex mno-fused-madd
17018 Generate code that uses (does not use) the floating-point multiply and
17019 accumulate instructions.  These instructions are generated by default
17020 if hardware floating point is used.  The machine-dependent
17021 @option{-mfused-madd} option is now mapped to the machine-independent
17022 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
17023 mapped to @option{-ffp-contract=off}.
17025 @item -mmulhw
17026 @itemx -mno-mulhw
17027 @opindex mmulhw
17028 @opindex mno-mulhw
17029 Generate code that uses (does not use) the half-word multiply and
17030 multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
17031 These instructions are generated by default when targeting those
17032 processors.
17034 @item -mdlmzb
17035 @itemx -mno-dlmzb
17036 @opindex mdlmzb
17037 @opindex mno-dlmzb
17038 Generate code that uses (does not use) the string-search @samp{dlmzb}
17039 instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
17040 generated by default when targeting those processors.
17042 @item -mno-bit-align
17043 @itemx -mbit-align
17044 @opindex mno-bit-align
17045 @opindex mbit-align
17046 On System V.4 and embedded PowerPC systems do not (do) force structures
17047 and unions that contain bit-fields to be aligned to the base type of the
17048 bit-field.
17050 For example, by default a structure containing nothing but 8
17051 @code{unsigned} bit-fields of length 1 is aligned to a 4-byte
17052 boundary and has a size of 4 bytes.  By using @option{-mno-bit-align},
17053 the structure is aligned to a 1-byte boundary and is 1 byte in
17054 size.
17056 @item -mno-strict-align
17057 @itemx -mstrict-align
17058 @opindex mno-strict-align
17059 @opindex mstrict-align
17060 On System V.4 and embedded PowerPC systems do not (do) assume that
17061 unaligned memory references are handled by the system.
17063 @item -mrelocatable
17064 @itemx -mno-relocatable
17065 @opindex mrelocatable
17066 @opindex mno-relocatable
17067 Generate code that allows (does not allow) a static executable to be
17068 relocated to a different address at run time.  A simple embedded
17069 PowerPC system loader should relocate the entire contents of
17070 @code{.got2} and 4-byte locations listed in the @code{.fixup} section,
17071 a table of 32-bit addresses generated by this option.  For this to
17072 work, all objects linked together must be compiled with
17073 @option{-mrelocatable} or @option{-mrelocatable-lib}.
17074 @option{-mrelocatable} code aligns the stack to an 8-byte boundary.
17076 @item -mrelocatable-lib
17077 @itemx -mno-relocatable-lib
17078 @opindex mrelocatable-lib
17079 @opindex mno-relocatable-lib
17080 Like @option{-mrelocatable}, @option{-mrelocatable-lib} generates a
17081 @code{.fixup} section to allow static executables to be relocated at
17082 run time, but @option{-mrelocatable-lib} does not use the smaller stack
17083 alignment of @option{-mrelocatable}.  Objects compiled with
17084 @option{-mrelocatable-lib} may be linked with objects compiled with
17085 any combination of the @option{-mrelocatable} options.
17087 @item -mno-toc
17088 @itemx -mtoc
17089 @opindex mno-toc
17090 @opindex mtoc
17091 On System V.4 and embedded PowerPC systems do not (do) assume that
17092 register 2 contains a pointer to a global area pointing to the addresses
17093 used in the program.
17095 @item -mlittle
17096 @itemx -mlittle-endian
17097 @opindex mlittle
17098 @opindex mlittle-endian
17099 On System V.4 and embedded PowerPC systems compile code for the
17100 processor in little-endian mode.  The @option{-mlittle-endian} option is
17101 the same as @option{-mlittle}.
17103 @item -mbig
17104 @itemx -mbig-endian
17105 @opindex mbig
17106 @opindex mbig-endian
17107 On System V.4 and embedded PowerPC systems compile code for the
17108 processor in big-endian mode.  The @option{-mbig-endian} option is
17109 the same as @option{-mbig}.
17111 @item -mdynamic-no-pic
17112 @opindex mdynamic-no-pic
17113 On Darwin and Mac OS X systems, compile code so that it is not
17114 relocatable, but that its external references are relocatable.  The
17115 resulting code is suitable for applications, but not shared
17116 libraries.
17118 @item -msingle-pic-base
17119 @opindex msingle-pic-base
17120 Treat the register used for PIC addressing as read-only, rather than
17121 loading it in the prologue for each function.  The runtime system is
17122 responsible for initializing this register with an appropriate value
17123 before execution begins.
17125 @item -mprioritize-restricted-insns=@var{priority}
17126 @opindex mprioritize-restricted-insns
17127 This option controls the priority that is assigned to
17128 dispatch-slot restricted instructions during the second scheduling
17129 pass.  The argument @var{priority} takes the value @samp{0}, @samp{1},
17130 or @samp{2} to assign no, highest, or second-highest (respectively) 
17131 priority to dispatch-slot restricted
17132 instructions.
17134 @item -msched-costly-dep=@var{dependence_type}
17135 @opindex msched-costly-dep
17136 This option controls which dependences are considered costly
17137 by the target during instruction scheduling.  The argument
17138 @var{dependence_type} takes one of the following values:
17140 @table @asis
17141 @item @samp{no}
17142 No dependence is costly.
17144 @item @samp{all}
17145 All dependences are costly.
17147 @item @samp{true_store_to_load}
17148 A true dependence from store to load is costly.
17150 @item @samp{store_to_load}
17151 Any dependence from store to load is costly.
17153 @item @var{number}
17154 Any dependence for which the latency is greater than or equal to 
17155 @var{number} is costly.
17156 @end table
17158 @item -minsert-sched-nops=@var{scheme}
17159 @opindex minsert-sched-nops
17160 This option controls which NOP insertion scheme is used during
17161 the second scheduling pass.  The argument @var{scheme} takes one of the
17162 following values:
17164 @table @asis
17165 @item @samp{no}
17166 Don't insert NOPs.
17168 @item @samp{pad}
17169 Pad with NOPs any dispatch group that has vacant issue slots,
17170 according to the scheduler's grouping.
17172 @item @samp{regroup_exact}
17173 Insert NOPs to force costly dependent insns into
17174 separate groups.  Insert exactly as many NOPs as needed to force an insn
17175 to a new group, according to the estimated processor grouping.
17177 @item @var{number}
17178 Insert NOPs to force costly dependent insns into
17179 separate groups.  Insert @var{number} NOPs to force an insn to a new group.
17180 @end table
17182 @item -mcall-sysv
17183 @opindex mcall-sysv
17184 On System V.4 and embedded PowerPC systems compile code using calling
17185 conventions that adheres to the March 1995 draft of the System V
17186 Application Binary Interface, PowerPC processor supplement.  This is the
17187 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
17189 @item -mcall-sysv-eabi
17190 @itemx -mcall-eabi
17191 @opindex mcall-sysv-eabi
17192 @opindex mcall-eabi
17193 Specify both @option{-mcall-sysv} and @option{-meabi} options.
17195 @item -mcall-sysv-noeabi
17196 @opindex mcall-sysv-noeabi
17197 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
17199 @item -mcall-aixdesc
17200 @opindex m
17201 On System V.4 and embedded PowerPC systems compile code for the AIX
17202 operating system.
17204 @item -mcall-linux
17205 @opindex mcall-linux
17206 On System V.4 and embedded PowerPC systems compile code for the
17207 Linux-based GNU system.
17209 @item -mcall-freebsd
17210 @opindex mcall-freebsd
17211 On System V.4 and embedded PowerPC systems compile code for the
17212 FreeBSD operating system.
17214 @item -mcall-netbsd
17215 @opindex mcall-netbsd
17216 On System V.4 and embedded PowerPC systems compile code for the
17217 NetBSD operating system.
17219 @item -mcall-openbsd
17220 @opindex mcall-netbsd
17221 On System V.4 and embedded PowerPC systems compile code for the
17222 OpenBSD operating system.
17224 @item -maix-struct-return
17225 @opindex maix-struct-return
17226 Return all structures in memory (as specified by the AIX ABI)@.
17228 @item -msvr4-struct-return
17229 @opindex msvr4-struct-return
17230 Return structures smaller than 8 bytes in registers (as specified by the
17231 SVR4 ABI)@.
17233 @item -mabi=@var{abi-type}
17234 @opindex mabi
17235 Extend the current ABI with a particular extension, or remove such extension.
17236 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
17237 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
17239 @item -mabi=spe
17240 @opindex mabi=spe
17241 Extend the current ABI with SPE ABI extensions.  This does not change
17242 the default ABI, instead it adds the SPE ABI extensions to the current
17243 ABI@.
17245 @item -mabi=no-spe
17246 @opindex mabi=no-spe
17247 Disable Booke SPE ABI extensions for the current ABI@.
17249 @item -mabi=ibmlongdouble
17250 @opindex mabi=ibmlongdouble
17251 Change the current ABI to use IBM extended-precision long double.
17252 This is a PowerPC 32-bit SYSV ABI option.
17254 @item -mabi=ieeelongdouble
17255 @opindex mabi=ieeelongdouble
17256 Change the current ABI to use IEEE extended-precision long double.
17257 This is a PowerPC 32-bit Linux ABI option.
17259 @item -mprototype
17260 @itemx -mno-prototype
17261 @opindex mprototype
17262 @opindex mno-prototype
17263 On System V.4 and embedded PowerPC systems assume that all calls to
17264 variable argument functions are properly prototyped.  Otherwise, the
17265 compiler must insert an instruction before every non prototyped call to
17266 set or clear bit 6 of the condition code register (@var{CR}) to
17267 indicate whether floating-point values are passed in the floating-point
17268 registers in case the function takes variable arguments.  With
17269 @option{-mprototype}, only calls to prototyped variable argument functions
17270 set or clear the bit.
17272 @item -msim
17273 @opindex msim
17274 On embedded PowerPC systems, assume that the startup module is called
17275 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
17276 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
17277 configurations.
17279 @item -mmvme
17280 @opindex mmvme
17281 On embedded PowerPC systems, assume that the startup module is called
17282 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
17283 @file{libc.a}.
17285 @item -mads
17286 @opindex mads
17287 On embedded PowerPC systems, assume that the startup module is called
17288 @file{crt0.o} and the standard C libraries are @file{libads.a} and
17289 @file{libc.a}.
17291 @item -myellowknife
17292 @opindex myellowknife
17293 On embedded PowerPC systems, assume that the startup module is called
17294 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
17295 @file{libc.a}.
17297 @item -mvxworks
17298 @opindex mvxworks
17299 On System V.4 and embedded PowerPC systems, specify that you are
17300 compiling for a VxWorks system.
17302 @item -memb
17303 @opindex memb
17304 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
17305 header to indicate that @samp{eabi} extended relocations are used.
17307 @item -meabi
17308 @itemx -mno-eabi
17309 @opindex meabi
17310 @opindex mno-eabi
17311 On System V.4 and embedded PowerPC systems do (do not) adhere to the
17312 Embedded Applications Binary Interface (eabi) which is a set of
17313 modifications to the System V.4 specifications.  Selecting @option{-meabi}
17314 means that the stack is aligned to an 8-byte boundary, a function
17315 @code{__eabi} is called to from @code{main} to set up the eabi
17316 environment, and the @option{-msdata} option can use both @code{r2} and
17317 @code{r13} to point to two separate small data areas.  Selecting
17318 @option{-mno-eabi} means that the stack is aligned to a 16-byte boundary,
17319 do not call an initialization function from @code{main}, and the
17320 @option{-msdata} option only uses @code{r13} to point to a single
17321 small data area.  The @option{-meabi} option is on by default if you
17322 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
17324 @item -msdata=eabi
17325 @opindex msdata=eabi
17326 On System V.4 and embedded PowerPC systems, put small initialized
17327 @code{const} global and static data in the @samp{.sdata2} section, which
17328 is pointed to by register @code{r2}.  Put small initialized
17329 non-@code{const} global and static data in the @samp{.sdata} section,
17330 which is pointed to by register @code{r13}.  Put small uninitialized
17331 global and static data in the @samp{.sbss} section, which is adjacent to
17332 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
17333 incompatible with the @option{-mrelocatable} option.  The
17334 @option{-msdata=eabi} option also sets the @option{-memb} option.
17336 @item -msdata=sysv
17337 @opindex msdata=sysv
17338 On System V.4 and embedded PowerPC systems, put small global and static
17339 data in the @samp{.sdata} section, which is pointed to by register
17340 @code{r13}.  Put small uninitialized global and static data in the
17341 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
17342 The @option{-msdata=sysv} option is incompatible with the
17343 @option{-mrelocatable} option.
17345 @item -msdata=default
17346 @itemx -msdata
17347 @opindex msdata=default
17348 @opindex msdata
17349 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
17350 compile code the same as @option{-msdata=eabi}, otherwise compile code the
17351 same as @option{-msdata=sysv}.
17353 @item -msdata=data
17354 @opindex msdata=data
17355 On System V.4 and embedded PowerPC systems, put small global
17356 data in the @samp{.sdata} section.  Put small uninitialized global
17357 data in the @samp{.sbss} section.  Do not use register @code{r13}
17358 to address small data however.  This is the default behavior unless
17359 other @option{-msdata} options are used.
17361 @item -msdata=none
17362 @itemx -mno-sdata
17363 @opindex msdata=none
17364 @opindex mno-sdata
17365 On embedded PowerPC systems, put all initialized global and static data
17366 in the @samp{.data} section, and all uninitialized data in the
17367 @samp{.bss} section.
17369 @item -mblock-move-inline-limit=@var{num}
17370 @opindex mblock-move-inline-limit
17371 Inline all block moves (such as calls to @code{memcpy} or structure
17372 copies) less than or equal to @var{num} bytes.  The minimum value for
17373 @var{num} is 32 bytes on 32-bit targets and 64 bytes on 64-bit
17374 targets.  The default value is target-specific.
17376 @item -G @var{num}
17377 @opindex G
17378 @cindex smaller data references (PowerPC)
17379 @cindex .sdata/.sdata2 references (PowerPC)
17380 On embedded PowerPC systems, put global and static items less than or
17381 equal to @var{num} bytes into the small data or bss sections instead of
17382 the normal data or bss section.  By default, @var{num} is 8.  The
17383 @option{-G @var{num}} switch is also passed to the linker.
17384 All modules should be compiled with the same @option{-G @var{num}} value.
17386 @item -mregnames
17387 @itemx -mno-regnames
17388 @opindex mregnames
17389 @opindex mno-regnames
17390 On System V.4 and embedded PowerPC systems do (do not) emit register
17391 names in the assembly language output using symbolic forms.
17393 @item -mlongcall
17394 @itemx -mno-longcall
17395 @opindex mlongcall
17396 @opindex mno-longcall
17397 By default assume that all calls are far away so that a longer more
17398 expensive calling sequence is required.  This is required for calls
17399 further than 32 megabytes (33,554,432 bytes) from the current location.
17400 A short call is generated if the compiler knows
17401 the call cannot be that far away.  This setting can be overridden by
17402 the @code{shortcall} function attribute, or by @code{#pragma
17403 longcall(0)}.
17405 Some linkers are capable of detecting out-of-range calls and generating
17406 glue code on the fly.  On these systems, long calls are unnecessary and
17407 generate slower code.  As of this writing, the AIX linker can do this,
17408 as can the GNU linker for PowerPC/64.  It is planned to add this feature
17409 to the GNU linker for 32-bit PowerPC systems as well.
17411 On Darwin/PPC systems, @code{#pragma longcall} generates @code{jbsr
17412 callee, L42}, plus a @dfn{branch island} (glue code).  The two target
17413 addresses represent the callee and the branch island.  The
17414 Darwin/PPC linker prefers the first address and generates a @code{bl
17415 callee} if the PPC @code{bl} instruction reaches the callee directly;
17416 otherwise, the linker generates @code{bl L42} to call the branch
17417 island.  The branch island is appended to the body of the
17418 calling function; it computes the full 32-bit address of the callee
17419 and jumps to it.
17421 On Mach-O (Darwin) systems, this option directs the compiler emit to
17422 the glue for every direct call, and the Darwin linker decides whether
17423 to use or discard it.
17425 In the future, GCC may ignore all longcall specifications
17426 when the linker is known to generate glue.
17428 @item -mtls-markers
17429 @itemx -mno-tls-markers
17430 @opindex mtls-markers
17431 @opindex mno-tls-markers
17432 Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
17433 specifying the function argument.  The relocation allows the linker to
17434 reliably associate function call with argument setup instructions for
17435 TLS optimization, which in turn allows GCC to better schedule the
17436 sequence.
17438 @item -pthread
17439 @opindex pthread
17440 Adds support for multithreading with the @dfn{pthreads} library.
17441 This option sets flags for both the preprocessor and linker.
17443 @item -mrecip
17444 @itemx -mno-recip
17445 @opindex mrecip
17446 This option enables use of the reciprocal estimate and
17447 reciprocal square root estimate instructions with additional
17448 Newton-Raphson steps to increase precision instead of doing a divide or
17449 square root and divide for floating-point arguments.  You should use
17450 the @option{-ffast-math} option when using @option{-mrecip} (or at
17451 least @option{-funsafe-math-optimizations},
17452 @option{-finite-math-only}, @option{-freciprocal-math} and
17453 @option{-fno-trapping-math}).  Note that while the throughput of the
17454 sequence is generally higher than the throughput of the non-reciprocal
17455 instruction, the precision of the sequence can be decreased by up to 2
17456 ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
17457 roots.
17459 @item -mrecip=@var{opt}
17460 @opindex mrecip=opt
17461 This option allows to control which reciprocal estimate instructions
17462 may be used.  @var{opt} is a comma separated list of options, which may
17463 be preceded by a @code{!} to invert the option:
17464 @code{all}: enable all estimate instructions,
17465 @code{default}: enable the default instructions, equivalent to @option{-mrecip},
17466 @code{none}: disable all estimate instructions, equivalent to @option{-mno-recip};
17467 @code{div}: enable the reciprocal approximation instructions for both single and double precision;
17468 @code{divf}: enable the single-precision reciprocal approximation instructions;
17469 @code{divd}: enable the double-precision reciprocal approximation instructions;
17470 @code{rsqrt}: enable the reciprocal square root approximation instructions for both single and double precision;
17471 @code{rsqrtf}: enable the single-precision reciprocal square root approximation instructions;
17472 @code{rsqrtd}: enable the double-precision reciprocal square root approximation instructions;
17474 So, for example, @option{-mrecip=all,!rsqrtd} enables
17475 all of the reciprocal estimate instructions, except for the
17476 @code{FRSQRTE}, @code{XSRSQRTEDP}, and @code{XVRSQRTEDP} instructions
17477 which handle the double-precision reciprocal square root calculations.
17479 @item -mrecip-precision
17480 @itemx -mno-recip-precision
17481 @opindex mrecip-precision
17482 Assume (do not assume) that the reciprocal estimate instructions
17483 provide higher-precision estimates than is mandated by the PowerPC
17484 ABI.  Selecting @option{-mcpu=power6} or @option{-mcpu=power7}
17485 automatically selects @option{-mrecip-precision}.  The double-precision 
17486 square root estimate instructions are not generated by
17487 default on low-precision machines, since they do not provide an
17488 estimate that converges after three steps.
17490 @item -mveclibabi=@var{type}
17491 @opindex mveclibabi
17492 Specifies the ABI type to use for vectorizing intrinsics using an
17493 external library.  The only type supported at present is @code{mass},
17494 which specifies to use IBM's Mathematical Acceleration Subsystem
17495 (MASS) libraries for vectorizing intrinsics using external libraries.
17496 GCC currently emits calls to @code{acosd2}, @code{acosf4},
17497 @code{acoshd2}, @code{acoshf4}, @code{asind2}, @code{asinf4},
17498 @code{asinhd2}, @code{asinhf4}, @code{atan2d2}, @code{atan2f4},
17499 @code{atand2}, @code{atanf4}, @code{atanhd2}, @code{atanhf4},
17500 @code{cbrtd2}, @code{cbrtf4}, @code{cosd2}, @code{cosf4},
17501 @code{coshd2}, @code{coshf4}, @code{erfcd2}, @code{erfcf4},
17502 @code{erfd2}, @code{erff4}, @code{exp2d2}, @code{exp2f4},
17503 @code{expd2}, @code{expf4}, @code{expm1d2}, @code{expm1f4},
17504 @code{hypotd2}, @code{hypotf4}, @code{lgammad2}, @code{lgammaf4},
17505 @code{log10d2}, @code{log10f4}, @code{log1pd2}, @code{log1pf4},
17506 @code{log2d2}, @code{log2f4}, @code{logd2}, @code{logf4},
17507 @code{powd2}, @code{powf4}, @code{sind2}, @code{sinf4}, @code{sinhd2},
17508 @code{sinhf4}, @code{sqrtd2}, @code{sqrtf4}, @code{tand2},
17509 @code{tanf4}, @code{tanhd2}, and @code{tanhf4} when generating code
17510 for power7.  Both @option{-ftree-vectorize} and
17511 @option{-funsafe-math-optimizations} must also be enabled.  The MASS
17512 libraries must be specified at link time.
17514 @item -mfriz
17515 @itemx -mno-friz
17516 @opindex mfriz
17517 Generate (do not generate) the @code{friz} instruction when the
17518 @option{-funsafe-math-optimizations} option is used to optimize
17519 rounding of floating-point values to 64-bit integer and back to floating
17520 point.  The @code{friz} instruction does not return the same value if
17521 the floating-point number is too large to fit in an integer.
17523 @item -mpointers-to-nested-functions
17524 @itemx -mno-pointers-to-nested-functions
17525 @opindex mpointers-to-nested-functions
17526 Generate (do not generate) code to load up the static chain register
17527 (@var{r11}) when calling through a pointer on AIX and 64-bit Linux
17528 systems where a function pointer points to a 3-word descriptor giving
17529 the function address, TOC value to be loaded in register @var{r2}, and
17530 static chain value to be loaded in register @var{r11}.  The
17531 @option{-mpointers-to-nested-functions} is on by default.  You cannot
17532 call through pointers to nested functions or pointers
17533 to functions compiled in other languages that use the static chain if
17534 you use the @option{-mno-pointers-to-nested-functions}.
17536 @item -msave-toc-indirect
17537 @itemx -mno-save-toc-indirect
17538 @opindex msave-toc-indirect
17539 Generate (do not generate) code to save the TOC value in the reserved
17540 stack location in the function prologue if the function calls through
17541 a pointer on AIX and 64-bit Linux systems.  If the TOC value is not
17542 saved in the prologue, it is saved just before the call through the
17543 pointer.  The @option{-mno-save-toc-indirect} option is the default.
17544 @end table
17546 @node RX Options
17547 @subsection RX Options
17548 @cindex RX Options
17550 These command-line options are defined for RX targets:
17552 @table @gcctabopt
17553 @item -m64bit-doubles
17554 @itemx -m32bit-doubles
17555 @opindex m64bit-doubles
17556 @opindex m32bit-doubles
17557 Make the @code{double} data type be 64 bits (@option{-m64bit-doubles})
17558 or 32 bits (@option{-m32bit-doubles}) in size.  The default is
17559 @option{-m32bit-doubles}.  @emph{Note} RX floating-point hardware only
17560 works on 32-bit values, which is why the default is
17561 @option{-m32bit-doubles}.
17563 @item -fpu
17564 @itemx -nofpu
17565 @opindex fpu
17566 @opindex nofpu
17567 Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
17568 floating-point hardware.  The default is enabled for the @var{RX600}
17569 series and disabled for the @var{RX200} series.
17571 Floating-point instructions are only generated for 32-bit floating-point 
17572 values, however, so the FPU hardware is not used for doubles if the
17573 @option{-m64bit-doubles} option is used.
17575 @emph{Note} If the @option{-fpu} option is enabled then
17576 @option{-funsafe-math-optimizations} is also enabled automatically.
17577 This is because the RX FPU instructions are themselves unsafe.
17579 @item -mcpu=@var{name}
17580 @opindex -mcpu
17581 Selects the type of RX CPU to be targeted.  Currently three types are
17582 supported, the generic @var{RX600} and @var{RX200} series hardware and
17583 the specific @var{RX610} CPU.  The default is @var{RX600}.
17585 The only difference between @var{RX600} and @var{RX610} is that the
17586 @var{RX610} does not support the @code{MVTIPL} instruction.
17588 The @var{RX200} series does not have a hardware floating-point unit
17589 and so @option{-nofpu} is enabled by default when this type is
17590 selected.
17592 @item -mbig-endian-data
17593 @itemx -mlittle-endian-data
17594 @opindex mbig-endian-data
17595 @opindex mlittle-endian-data
17596 Store data (but not code) in the big-endian format.  The default is
17597 @option{-mlittle-endian-data}, i.e.@: to store data in the little-endian
17598 format.
17600 @item -msmall-data-limit=@var{N}
17601 @opindex msmall-data-limit
17602 Specifies the maximum size in bytes of global and static variables
17603 which can be placed into the small data area.  Using the small data
17604 area can lead to smaller and faster code, but the size of area is
17605 limited and it is up to the programmer to ensure that the area does
17606 not overflow.  Also when the small data area is used one of the RX's
17607 registers (usually @code{r13}) is reserved for use pointing to this
17608 area, so it is no longer available for use by the compiler.  This
17609 could result in slower and/or larger code if variables are pushed onto
17610 the stack instead of being held in this register.
17612 Note, common variables (variables that have not been initialized) and
17613 constants are not placed into the small data area as they are assigned
17614 to other sections in the output executable.
17616 The default value is zero, which disables this feature.  Note, this
17617 feature is not enabled by default with higher optimization levels
17618 (@option{-O2} etc) because of the potentially detrimental effects of
17619 reserving a register.  It is up to the programmer to experiment and
17620 discover whether this feature is of benefit to their program.  See the
17621 description of the @option{-mpid} option for a description of how the
17622 actual register to hold the small data area pointer is chosen.
17624 @item -msim
17625 @itemx -mno-sim
17626 @opindex msim
17627 @opindex mno-sim
17628 Use the simulator runtime.  The default is to use the libgloss board
17629 specific runtime.
17631 @item -mas100-syntax
17632 @itemx -mno-as100-syntax
17633 @opindex mas100-syntax
17634 @opindex mno-as100-syntax
17635 When generating assembler output use a syntax that is compatible with
17636 Renesas's AS100 assembler.  This syntax can also be handled by the GAS
17637 assembler but it has some restrictions so generating it is not the
17638 default option.
17640 @item -mmax-constant-size=@var{N}
17641 @opindex mmax-constant-size
17642 Specifies the maximum size, in bytes, of a constant that can be used as
17643 an operand in a RX instruction.  Although the RX instruction set does
17644 allow constants of up to 4 bytes in length to be used in instructions,
17645 a longer value equates to a longer instruction.  Thus in some
17646 circumstances it can be beneficial to restrict the size of constants
17647 that are used in instructions.  Constants that are too big are instead
17648 placed into a constant pool and referenced via register indirection.
17650 The value @var{N} can be between 0 and 4.  A value of 0 (the default)
17651 or 4 means that constants of any size are allowed.
17653 @item -mrelax
17654 @opindex mrelax
17655 Enable linker relaxation.  Linker relaxation is a process whereby the
17656 linker attempts to reduce the size of a program by finding shorter
17657 versions of various instructions.  Disabled by default.
17659 @item -mint-register=@var{N}
17660 @opindex mint-register
17661 Specify the number of registers to reserve for fast interrupt handler
17662 functions.  The value @var{N} can be between 0 and 4.  A value of 1
17663 means that register @code{r13} is reserved for the exclusive use
17664 of fast interrupt handlers.  A value of 2 reserves @code{r13} and
17665 @code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
17666 @code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
17667 A value of 0, the default, does not reserve any registers.
17669 @item -msave-acc-in-interrupts
17670 @opindex msave-acc-in-interrupts
17671 Specifies that interrupt handler functions should preserve the
17672 accumulator register.  This is only necessary if normal code might use
17673 the accumulator register, for example because it performs 64-bit
17674 multiplications.  The default is to ignore the accumulator as this
17675 makes the interrupt handlers faster.
17677 @item -mpid
17678 @itemx -mno-pid
17679 @opindex mpid
17680 @opindex mno-pid
17681 Enables the generation of position independent data.  When enabled any
17682 access to constant data is done via an offset from a base address
17683 held in a register.  This allows the location of constant data to be
17684 determined at run time without requiring the executable to be
17685 relocated, which is a benefit to embedded applications with tight
17686 memory constraints.  Data that can be modified is not affected by this
17687 option.
17689 Note, using this feature reserves a register, usually @code{r13}, for
17690 the constant data base address.  This can result in slower and/or
17691 larger code, especially in complicated functions.
17693 The actual register chosen to hold the constant data base address
17694 depends upon whether the @option{-msmall-data-limit} and/or the
17695 @option{-mint-register} command-line options are enabled.  Starting
17696 with register @code{r13} and proceeding downwards, registers are
17697 allocated first to satisfy the requirements of @option{-mint-register},
17698 then @option{-mpid} and finally @option{-msmall-data-limit}.  Thus it
17699 is possible for the small data area register to be @code{r8} if both
17700 @option{-mint-register=4} and @option{-mpid} are specified on the
17701 command line.
17703 By default this feature is not enabled.  The default can be restored
17704 via the @option{-mno-pid} command-line option.
17706 @end table
17708 @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
17709 has special significance to the RX port when used with the
17710 @code{interrupt} function attribute.  This attribute indicates a
17711 function intended to process fast interrupts.  GCC ensures
17712 that it only uses the registers @code{r10}, @code{r11}, @code{r12}
17713 and/or @code{r13} and only provided that the normal use of the
17714 corresponding registers have been restricted via the
17715 @option{-ffixed-@var{reg}} or @option{-mint-register} command-line
17716 options.
17718 @node S/390 and zSeries Options
17719 @subsection S/390 and zSeries Options
17720 @cindex S/390 and zSeries Options
17722 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
17724 @table @gcctabopt
17725 @item -mhard-float
17726 @itemx -msoft-float
17727 @opindex mhard-float
17728 @opindex msoft-float
17729 Use (do not use) the hardware floating-point instructions and registers
17730 for floating-point operations.  When @option{-msoft-float} is specified,
17731 functions in @file{libgcc.a} are used to perform floating-point
17732 operations.  When @option{-mhard-float} is specified, the compiler
17733 generates IEEE floating-point instructions.  This is the default.
17735 @item -mhard-dfp
17736 @itemx -mno-hard-dfp
17737 @opindex mhard-dfp
17738 @opindex mno-hard-dfp
17739 Use (do not use) the hardware decimal-floating-point instructions for
17740 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
17741 specified, functions in @file{libgcc.a} are used to perform
17742 decimal-floating-point operations.  When @option{-mhard-dfp} is
17743 specified, the compiler generates decimal-floating-point hardware
17744 instructions.  This is the default for @option{-march=z9-ec} or higher.
17746 @item -mlong-double-64
17747 @itemx -mlong-double-128
17748 @opindex mlong-double-64
17749 @opindex mlong-double-128
17750 These switches control the size of @code{long double} type. A size
17751 of 64 bits makes the @code{long double} type equivalent to the @code{double}
17752 type. This is the default.
17754 @item -mbackchain
17755 @itemx -mno-backchain
17756 @opindex mbackchain
17757 @opindex mno-backchain
17758 Store (do not store) the address of the caller's frame as backchain pointer
17759 into the callee's stack frame.
17760 A backchain may be needed to allow debugging using tools that do not understand
17761 DWARF 2 call frame information.
17762 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
17763 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
17764 the backchain is placed into the topmost word of the 96/160 byte register
17765 save area.
17767 In general, code compiled with @option{-mbackchain} is call-compatible with
17768 code compiled with @option{-mmo-backchain}; however, use of the backchain
17769 for debugging purposes usually requires that the whole binary is built with
17770 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
17771 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
17772 to build a linux kernel use @option{-msoft-float}.
17774 The default is to not maintain the backchain.
17776 @item -mpacked-stack
17777 @itemx -mno-packed-stack
17778 @opindex mpacked-stack
17779 @opindex mno-packed-stack
17780 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
17781 specified, the compiler uses the all fields of the 96/160 byte register save
17782 area only for their default purpose; unused fields still take up stack space.
17783 When @option{-mpacked-stack} is specified, register save slots are densely
17784 packed at the top of the register save area; unused space is reused for other
17785 purposes, allowing for more efficient use of the available stack space.
17786 However, when @option{-mbackchain} is also in effect, the topmost word of
17787 the save area is always used to store the backchain, and the return address
17788 register is always saved two words below the backchain.
17790 As long as the stack frame backchain is not used, code generated with
17791 @option{-mpacked-stack} is call-compatible with code generated with
17792 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
17793 S/390 or zSeries generated code that uses the stack frame backchain at run
17794 time, not just for debugging purposes.  Such code is not call-compatible
17795 with code compiled with @option{-mpacked-stack}.  Also, note that the
17796 combination of @option{-mbackchain},
17797 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
17798 to build a linux kernel use @option{-msoft-float}.
17800 The default is to not use the packed stack layout.
17802 @item -msmall-exec
17803 @itemx -mno-small-exec
17804 @opindex msmall-exec
17805 @opindex mno-small-exec
17806 Generate (or do not generate) code using the @code{bras} instruction
17807 to do subroutine calls.
17808 This only works reliably if the total executable size does not
17809 exceed 64k.  The default is to use the @code{basr} instruction instead,
17810 which does not have this limitation.
17812 @item -m64
17813 @itemx -m31
17814 @opindex m64
17815 @opindex m31
17816 When @option{-m31} is specified, generate code compliant to the
17817 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
17818 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
17819 particular to generate 64-bit instructions.  For the @samp{s390}
17820 targets, the default is @option{-m31}, while the @samp{s390x}
17821 targets default to @option{-m64}.
17823 @item -mzarch
17824 @itemx -mesa
17825 @opindex mzarch
17826 @opindex mesa
17827 When @option{-mzarch} is specified, generate code using the
17828 instructions available on z/Architecture.
17829 When @option{-mesa} is specified, generate code using the
17830 instructions available on ESA/390.  Note that @option{-mesa} is
17831 not possible with @option{-m64}.
17832 When generating code compliant to the GNU/Linux for S/390 ABI,
17833 the default is @option{-mesa}.  When generating code compliant
17834 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
17836 @item -mmvcle
17837 @itemx -mno-mvcle
17838 @opindex mmvcle
17839 @opindex mno-mvcle
17840 Generate (or do not generate) code using the @code{mvcle} instruction
17841 to perform block moves.  When @option{-mno-mvcle} is specified,
17842 use a @code{mvc} loop instead.  This is the default unless optimizing for
17843 size.
17845 @item -mdebug
17846 @itemx -mno-debug
17847 @opindex mdebug
17848 @opindex mno-debug
17849 Print (or do not print) additional debug information when compiling.
17850 The default is to not print debug information.
17852 @item -march=@var{cpu-type}
17853 @opindex march
17854 Generate code that runs on @var{cpu-type}, which is the name of a system
17855 representing a certain processor type.  Possible values for
17856 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
17857 @samp{z9-109}, @samp{z9-ec} and @samp{z10}.
17858 When generating code using the instructions available on z/Architecture,
17859 the default is @option{-march=z900}.  Otherwise, the default is
17860 @option{-march=g5}.
17862 @item -mtune=@var{cpu-type}
17863 @opindex mtune
17864 Tune to @var{cpu-type} everything applicable about the generated code,
17865 except for the ABI and the set of available instructions.
17866 The list of @var{cpu-type} values is the same as for @option{-march}.
17867 The default is the value used for @option{-march}.
17869 @item -mtpf-trace
17870 @itemx -mno-tpf-trace
17871 @opindex mtpf-trace
17872 @opindex mno-tpf-trace
17873 Generate code that adds (does not add) in TPF OS specific branches to trace
17874 routines in the operating system.  This option is off by default, even
17875 when compiling for the TPF OS@.
17877 @item -mfused-madd
17878 @itemx -mno-fused-madd
17879 @opindex mfused-madd
17880 @opindex mno-fused-madd
17881 Generate code that uses (does not use) the floating-point multiply and
17882 accumulate instructions.  These instructions are generated by default if
17883 hardware floating point is used.
17885 @item -mwarn-framesize=@var{framesize}
17886 @opindex mwarn-framesize
17887 Emit a warning if the current function exceeds the given frame size.  Because
17888 this is a compile-time check it doesn't need to be a real problem when the program
17889 runs.  It is intended to identify functions that most probably cause
17890 a stack overflow.  It is useful to be used in an environment with limited stack
17891 size e.g.@: the linux kernel.
17893 @item -mwarn-dynamicstack
17894 @opindex mwarn-dynamicstack
17895 Emit a warning if the function calls @code{alloca} or uses dynamically-sized
17896 arrays.  This is generally a bad idea with a limited stack size.
17898 @item -mstack-guard=@var{stack-guard}
17899 @itemx -mstack-size=@var{stack-size}
17900 @opindex mstack-guard
17901 @opindex mstack-size
17902 If these options are provided the s390 back end emits additional instructions in
17903 the function prologue which trigger a trap if the stack size is @var{stack-guard}
17904 bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
17905 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
17906 the frame size of the compiled function is chosen.
17907 These options are intended to be used to help debugging stack overflow problems.
17908 The additionally emitted code causes only little overhead and hence can also be
17909 used in production like systems without greater performance degradation.  The given
17910 values have to be exact powers of 2 and @var{stack-size} has to be greater than
17911 @var{stack-guard} without exceeding 64k.
17912 In order to be efficient the extra code makes the assumption that the stack starts
17913 at an address aligned to the value given by @var{stack-size}.
17914 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
17915 @end table
17917 @node Score Options
17918 @subsection Score Options
17919 @cindex Score Options
17921 These options are defined for Score implementations:
17923 @table @gcctabopt
17924 @item -meb
17925 @opindex meb
17926 Compile code for big-endian mode.  This is the default.
17928 @item -mel
17929 @opindex mel
17930 Compile code for little-endian mode.
17932 @item -mnhwloop
17933 @opindex mnhwloop
17934 Disable generate bcnz instruction.
17936 @item -muls
17937 @opindex muls
17938 Enable generate unaligned load and store instruction.
17940 @item -mmac
17941 @opindex mmac
17942 Enable the use of multiply-accumulate instructions. Disabled by default.
17944 @item -mscore5
17945 @opindex mscore5
17946 Specify the SCORE5 as the target architecture.
17948 @item -mscore5u
17949 @opindex mscore5u
17950 Specify the SCORE5U of the target architecture.
17952 @item -mscore7
17953 @opindex mscore7
17954 Specify the SCORE7 as the target architecture. This is the default.
17956 @item -mscore7d
17957 @opindex mscore7d
17958 Specify the SCORE7D as the target architecture.
17959 @end table
17961 @node SH Options
17962 @subsection SH Options
17964 These @samp{-m} options are defined for the SH implementations:
17966 @table @gcctabopt
17967 @item -m1
17968 @opindex m1
17969 Generate code for the SH1.
17971 @item -m2
17972 @opindex m2
17973 Generate code for the SH2.
17975 @item -m2e
17976 Generate code for the SH2e.
17978 @item -m2a-nofpu
17979 @opindex m2a-nofpu
17980 Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
17981 that the floating-point unit is not used.
17983 @item -m2a-single-only
17984 @opindex m2a-single-only
17985 Generate code for the SH2a-FPU, in such a way that no double-precision
17986 floating-point operations are used.
17988 @item -m2a-single
17989 @opindex m2a-single
17990 Generate code for the SH2a-FPU assuming the floating-point unit is in
17991 single-precision mode by default.
17993 @item -m2a
17994 @opindex m2a
17995 Generate code for the SH2a-FPU assuming the floating-point unit is in
17996 double-precision mode by default.
17998 @item -m3
17999 @opindex m3
18000 Generate code for the SH3.
18002 @item -m3e
18003 @opindex m3e
18004 Generate code for the SH3e.
18006 @item -m4-nofpu
18007 @opindex m4-nofpu
18008 Generate code for the SH4 without a floating-point unit.
18010 @item -m4-single-only
18011 @opindex m4-single-only
18012 Generate code for the SH4 with a floating-point unit that only
18013 supports single-precision arithmetic.
18015 @item -m4-single
18016 @opindex m4-single
18017 Generate code for the SH4 assuming the floating-point unit is in
18018 single-precision mode by default.
18020 @item -m4
18021 @opindex m4
18022 Generate code for the SH4.
18024 @item -m4a-nofpu
18025 @opindex m4a-nofpu
18026 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
18027 floating-point unit is not used.
18029 @item -m4a-single-only
18030 @opindex m4a-single-only
18031 Generate code for the SH4a, in such a way that no double-precision
18032 floating-point operations are used.
18034 @item -m4a-single
18035 @opindex m4a-single
18036 Generate code for the SH4a assuming the floating-point unit is in
18037 single-precision mode by default.
18039 @item -m4a
18040 @opindex m4a
18041 Generate code for the SH4a.
18043 @item -m4al
18044 @opindex m4al
18045 Same as @option{-m4a-nofpu}, except that it implicitly passes
18046 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
18047 instructions at the moment.
18049 @item -mb
18050 @opindex mb
18051 Compile code for the processor in big-endian mode.
18053 @item -ml
18054 @opindex ml
18055 Compile code for the processor in little-endian mode.
18057 @item -mdalign
18058 @opindex mdalign
18059 Align doubles at 64-bit boundaries.  Note that this changes the calling
18060 conventions, and thus some functions from the standard C library do
18061 not work unless you recompile it first with @option{-mdalign}.
18063 @item -mrelax
18064 @opindex mrelax
18065 Shorten some address references at link time, when possible; uses the
18066 linker option @option{-relax}.
18068 @item -mbigtable
18069 @opindex mbigtable
18070 Use 32-bit offsets in @code{switch} tables.  The default is to use
18071 16-bit offsets.
18073 @item -mbitops
18074 @opindex mbitops
18075 Enable the use of bit manipulation instructions on SH2A.
18077 @item -mfmovd
18078 @opindex mfmovd
18079 Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
18080 alignment constraints.
18082 @item -mhitachi
18083 @opindex mhitachi
18084 Comply with the calling conventions defined by Renesas.
18086 @item -mrenesas
18087 @opindex mhitachi
18088 Comply with the calling conventions defined by Renesas.
18090 @item -mno-renesas
18091 @opindex mhitachi
18092 Comply with the calling conventions defined for GCC before the Renesas
18093 conventions were available.  This option is the default for all
18094 targets of the SH toolchain.
18096 @item -mnomacsave
18097 @opindex mnomacsave
18098 Mark the @code{MAC} register as call-clobbered, even if
18099 @option{-mhitachi} is given.
18101 @item -mieee
18102 @opindex mieee
18103 Increase IEEE compliance of floating-point code.
18104 At the moment, this is equivalent to @option{-fno-finite-math-only}.
18105 When generating 16-bit SH opcodes, getting IEEE-conforming results for
18106 comparisons of NANs / infinities incurs extra overhead in every
18107 floating-point comparison, therefore the default is set to
18108 @option{-ffinite-math-only}.
18110 @item -minline-ic_invalidate
18111 @opindex minline-ic_invalidate
18112 Inline code to invalidate instruction cache entries after setting up
18113 nested function trampolines.
18114 This option has no effect if @option{-musermode} is in effect and the selected
18115 code generation option (e.g. @option{-m4}) does not allow the use of the @code{icbi}
18116 instruction.
18117 If the selected code generation option does not allow the use of the @code{icbi}
18118 instruction, and @option{-musermode} is not in effect, the inlined code
18119 manipulates the instruction cache address array directly with an associative
18120 write.  This not only requires privileged mode at run time, but it also
18121 fails if the cache line had been mapped via the TLB and has become unmapped.
18123 @item -misize
18124 @opindex misize
18125 Dump instruction size and location in the assembly code.
18127 @item -mpadstruct
18128 @opindex mpadstruct
18129 This option is deprecated.  It pads structures to multiple of 4 bytes,
18130 which is incompatible with the SH ABI@.
18132 @item -msoft-atomic
18133 @opindex msoft-atomic
18134 Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
18135 built-in functions.  The generated atomic sequences require support from the 
18136 interrupt / exception handling code of the system and are only suitable for
18137 single-core systems.  They will not operate correctly on multi-core systems.
18138 This option is enabled by default when the target is @code{sh-*-linux*}.
18139 When the target is SH4A, this option will also partially utilize the hardware
18140 atomic instructions @code{movli.l} and @code{movco.l} to create more
18141 efficient code.
18142 For details on the atomic built-in functions see @ref{__atomic Builtins}.
18144 @item -mhard-atomic
18145 @opindex hard-atomic
18146 Generate hardware atomic sequences for the atomic built-in functions.  This
18147 is only available on SH4A and is suitable for multi-core systems.  Code
18148 compiled with this option will also be compatible with gUSA aware
18149 interrupt / exception handling systems.  In contrast to the
18150 @option{-msoft-atomic} option this will only use the instructions
18151 @code{movli.l} and @code{movco.l} to create atomic sequences.
18153 @item -menable-tas
18154 @opindex menable-tas
18155 Generate the @code{tas.b} opcode for @code{__atomic_test_and_set}.
18156 Notice that depending on the particular hardware and software configuration
18157 this can degrade overall performance due to the operand cache line flushes
18158 that are implied by the @code{tas.b} instruction.  On multi-core SH4A
18159 processors the @code{tas.b} instruction must be used with caution since it
18160 can result in data corruption for certain cache configurations.
18162 @item -mspace
18163 @opindex mspace
18164 Optimize for space instead of speed.  Implied by @option{-Os}.
18166 @item -mprefergot
18167 @opindex mprefergot
18168 When generating position-independent code, emit function calls using
18169 the Global Offset Table instead of the Procedure Linkage Table.
18171 @item -musermode
18172 @opindex musermode
18173 Don't generate privileged mode only code.  This option
18174 implies @option{-mno-inline-ic_invalidate}
18175 if the inlined code would not work in user mode.
18176 This is the default when the target is @code{sh-*-linux*}.
18178 @item -multcost=@var{number}
18179 @opindex multcost=@var{number}
18180 Set the cost to assume for a multiply insn.
18182 @item -mdiv=@var{strategy}
18183 @opindex mdiv=@var{strategy}
18184 Set the division strategy to use for SHmedia code.  @var{strategy} must be
18185 one of: 
18187 @table @samp
18189 @item fp 
18190 Performs the operation in floating point.  This has a very high latency,
18191 but needs only a few instructions, so it might be a good choice if
18192 your code has enough easily-exploitable ILP to allow the compiler to
18193 schedule the floating-point instructions together with other instructions.
18194 Division by zero causes a floating-point exception.
18196 @item inv
18197 Uses integer operations to calculate the inverse of the divisor,
18198 and then multiplies the dividend with the inverse.  This strategy allows
18199 CSE and hoisting of the inverse calculation.  Division by zero calculates
18200 an unspecified result, but does not trap.
18202 @item inv:minlat
18203 A variant of @samp{inv} where, if no CSE or hoisting opportunities
18204 have been found, or if the entire operation has been hoisted to the same
18205 place, the last stages of the inverse calculation are intertwined with the
18206 final multiply to reduce the overall latency, at the expense of using a few
18207 more instructions, and thus offering fewer scheduling opportunities with
18208 other code.
18210 @item call
18211 Calls a library function that usually implements the @samp{inv:minlat}
18212 strategy.
18213 This gives high code density for @code{m5-*media-nofpu} compilations.
18215 @item call2
18216 Uses a different entry point of the same library function, where it
18217 assumes that a pointer to a lookup table has already been set up, which
18218 exposes the pointer load to CSE and code hoisting optimizations.
18220 @item inv:call
18221 @itemx inv:call2
18222 @itemx inv:fp
18223 Use the @samp{inv} algorithm for initial
18224 code generation, but if the code stays unoptimized, revert to the @samp{call},
18225 @samp{call2}, or @samp{fp} strategies, respectively.  Note that the
18226 potentially-trapping side effect of division by zero is carried by a
18227 separate instruction, so it is possible that all the integer instructions
18228 are hoisted out, but the marker for the side effect stays where it is.
18229 A recombination to floating-point operations or a call is not possible
18230 in that case.
18232 @item inv20u
18233 @itemx inv20l
18234 Variants of the @samp{inv:minlat} strategy.  In the case
18235 that the inverse calculation is not separated from the multiply, they speed
18236 up division where the dividend fits into 20 bits (plus sign where applicable)
18237 by inserting a test to skip a number of operations in this case; this test
18238 slows down the case of larger dividends.  @samp{inv20u} assumes the case of a such
18239 a small dividend to be unlikely, and @samp{inv20l} assumes it to be likely.
18241 @end table
18243 @item -maccumulate-outgoing-args
18244 @opindex maccumulate-outgoing-args
18245 Reserve space once for outgoing arguments in the function prologue rather
18246 than around each call.  Generally beneficial for performance and size.  Also
18247 needed for unwinding to avoid changing the stack frame around conditional code.
18249 @item -mdivsi3_libfunc=@var{name}
18250 @opindex mdivsi3_libfunc=@var{name}
18251 Set the name of the library function used for 32-bit signed division to
18252 @var{name}.
18253 This only affects the name used in the @samp{call} and @samp{inv:call}
18254 division strategies, and the compiler still expects the same
18255 sets of input/output/clobbered registers as if this option were not present.
18257 @item -mfixed-range=@var{register-range}
18258 @opindex mfixed-range
18259 Generate code treating the given register range as fixed registers.
18260 A fixed register is one that the register allocator can not use.  This is
18261 useful when compiling kernel code.  A register range is specified as
18262 two registers separated by a dash.  Multiple register ranges can be
18263 specified separated by a comma.
18265 @item -mindexed-addressing
18266 @opindex mindexed-addressing
18267 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
18268 This is only safe if the hardware and/or OS implement 32-bit wrap-around
18269 semantics for the indexed addressing mode.  The architecture allows the
18270 implementation of processors with 64-bit MMU, which the OS could use to
18271 get 32-bit addressing, but since no current hardware implementation supports
18272 this or any other way to make the indexed addressing mode safe to use in
18273 the 32-bit ABI, the default is @option{-mno-indexed-addressing}.
18275 @item -mgettrcost=@var{number}
18276 @opindex mgettrcost=@var{number}
18277 Set the cost assumed for the @code{gettr} instruction to @var{number}.
18278 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
18280 @item -mpt-fixed
18281 @opindex mpt-fixed
18282 Assume @code{pt*} instructions won't trap.  This generally generates
18283 better-scheduled code, but is unsafe on current hardware.
18284 The current architecture
18285 definition says that @code{ptabs} and @code{ptrel} trap when the target 
18286 anded with 3 is 3.
18287 This has the unintentional effect of making it unsafe to schedule these
18288 instructions before a branch, or hoist them out of a loop.  For example,
18289 @code{__do_global_ctors}, a part of @file{libgcc}
18290 that runs constructors at program
18291 startup, calls functions in a list which is delimited by @minus{}1.  With the
18292 @option{-mpt-fixed} option, the @code{ptabs} is done before testing against @minus{}1.
18293 That means that all the constructors run a bit more quickly, but when
18294 the loop comes to the end of the list, the program crashes because @code{ptabs}
18295 loads @minus{}1 into a target register.  
18297 Since this option is unsafe for any
18298 hardware implementing the current architecture specification, the default
18299 is @option{-mno-pt-fixed}.  Unless specified explicitly with 
18300 @option{-mgettrcost}, @option{-mno-pt-fixed} also implies @option{-mgettrcost=100};
18301 this deters register allocation from using target registers for storing
18302 ordinary integers.
18304 @item -minvalid-symbols
18305 @opindex minvalid-symbols
18306 Assume symbols might be invalid.  Ordinary function symbols generated by
18307 the compiler are always valid to load with
18308 @code{movi}/@code{shori}/@code{ptabs} or
18309 @code{movi}/@code{shori}/@code{ptrel},
18310 but with assembler and/or linker tricks it is possible
18311 to generate symbols that cause @code{ptabs} or @code{ptrel} to trap.
18312 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
18313 It prevents cross-basic-block CSE, hoisting and most scheduling
18314 of symbol loads.  The default is @option{-mno-invalid-symbols}.
18316 @item -mbranch-cost=@var{num}
18317 @opindex mbranch-cost=@var{num}
18318 Assume @var{num} to be the cost for a branch instruction.  Higher numbers
18319 make the compiler try to generate more branch-free code if possible.  
18320 If not specified the value is selected depending on the processor type that
18321 is being compiled for.
18323 @item -mcbranchdi
18324 @opindex mcbranchdi
18325 Enable the @code{cbranchdi4} instruction pattern.
18327 @item -mcmpeqdi
18328 @opindex mcmpeqdi
18329 Emit the @code{cmpeqdi_t} instruction pattern even when @option{-mcbranchdi}
18330 is in effect.
18332 @item -mfused-madd
18333 @itemx -mno-fused-madd
18334 @opindex mfused-madd
18335 @opindex mno-fused-madd
18336 Generate code that uses (does not use) the floating-point multiply and
18337 accumulate instructions.  These instructions are generated by default
18338 if hardware floating point is used.  The machine-dependent
18339 @option{-mfused-madd} option is now mapped to the machine-independent
18340 @option{-ffp-contract=fast} option, and @option{-mno-fused-madd} is
18341 mapped to @option{-ffp-contract=off}.
18343 @item -mfsca
18344 @itemx -mno-fsca
18345 @opindex mfsca
18346 @opindex mno-fsca
18347 Allow or disallow the compiler to emit the @code{fsca} instruction for sine
18348 and cosine approximations.  The option @code{-mfsca} must be used in
18349 combination with @code{-funsafe-math-optimizations}.  It is enabled by default
18350 when generating code for SH4A.  Using @code{-mno-fsca} disables sine and cosine
18351 approximations even if @code{-funsafe-math-optimizations} is in effect.
18353 @item -mfsrra
18354 @itemx -mno-fsrra
18355 @opindex mfsrra
18356 @opindex mno-fsrra
18357 Allow or disallow the compiler to emit the @code{fsrra} instruction for
18358 reciprocal square root approximations.  The option @code{-mfsrra} must be used
18359 in combination with @code{-funsafe-math-optimizations} and
18360 @code{-ffinite-math-only}.  It is enabled by default when generating code for
18361 SH4A.  Using @code{-mno-fsrra} disables reciprocal square root approximations
18362 even if @code{-funsafe-math-optimizations} and @code{-ffinite-math-only} are
18363 in effect.
18365 @item -mpretend-cmove
18366 @opindex mpretend-cmove
18367 Prefer zero-displacement conditional branches for conditional move instruction
18368 patterns.  This can result in faster code on the SH4 processor.
18370 @end table
18372 @node Solaris 2 Options
18373 @subsection Solaris 2 Options
18374 @cindex Solaris 2 options
18376 These @samp{-m} options are supported on Solaris 2:
18378 @table @gcctabopt
18379 @item -mimpure-text
18380 @opindex mimpure-text
18381 @option{-mimpure-text}, used in addition to @option{-shared}, tells
18382 the compiler to not pass @option{-z text} to the linker when linking a
18383 shared object.  Using this option, you can link position-dependent
18384 code into a shared object.
18386 @option{-mimpure-text} suppresses the ``relocations remain against
18387 allocatable but non-writable sections'' linker error message.
18388 However, the necessary relocations trigger copy-on-write, and the
18389 shared object is not actually shared across processes.  Instead of
18390 using @option{-mimpure-text}, you should compile all source code with
18391 @option{-fpic} or @option{-fPIC}.
18393 @end table
18395 These switches are supported in addition to the above on Solaris 2:
18397 @table @gcctabopt
18398 @item -pthreads
18399 @opindex pthreads
18400 Add support for multithreading using the POSIX threads library.  This
18401 option sets flags for both the preprocessor and linker.  This option does
18402 not affect the thread safety of object code produced  by the compiler or
18403 that of libraries supplied with it.
18405 @item -pthread
18406 @opindex pthread
18407 This is a synonym for @option{-pthreads}.
18408 @end table
18410 @node SPARC Options
18411 @subsection SPARC Options
18412 @cindex SPARC options
18414 These @samp{-m} options are supported on the SPARC:
18416 @table @gcctabopt
18417 @item -mno-app-regs
18418 @itemx -mapp-regs
18419 @opindex mno-app-regs
18420 @opindex mapp-regs
18421 Specify @option{-mapp-regs} to generate output using the global registers
18422 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
18423 is the default.
18425 To be fully SVR4 ABI compliant at the cost of some performance loss,
18426 specify @option{-mno-app-regs}.  You should compile libraries and system
18427 software with this option.
18429 @item -mflat
18430 @itemx -mno-flat
18431 @opindex mflat
18432 @opindex mno-flat
18433 With @option{-mflat}, the compiler does not generate save/restore instructions
18434 and uses a ``flat'' or single register window model.  This model is compatible
18435 with the regular register window model.  The local registers and the input
18436 registers (0--5) are still treated as ``call-saved'' registers and are
18437 saved on the stack as needed.
18439 With @option{-mno-flat} (the default), the compiler generates save/restore
18440 instructions (except for leaf functions).  This is the normal operating mode.
18442 @item -mfpu
18443 @itemx -mhard-float
18444 @opindex mfpu
18445 @opindex mhard-float
18446 Generate output containing floating-point instructions.  This is the
18447 default.
18449 @item -mno-fpu
18450 @itemx -msoft-float
18451 @opindex mno-fpu
18452 @opindex msoft-float
18453 Generate output containing library calls for floating point.
18454 @strong{Warning:} the requisite libraries are not available for all SPARC
18455 targets.  Normally the facilities of the machine's usual C compiler are
18456 used, but this cannot be done directly in cross-compilation.  You must make
18457 your own arrangements to provide suitable library functions for
18458 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
18459 @samp{sparclite-*-*} do provide software floating-point support.
18461 @option{-msoft-float} changes the calling convention in the output file;
18462 therefore, it is only useful if you compile @emph{all} of a program with
18463 this option.  In particular, you need to compile @file{libgcc.a}, the
18464 library that comes with GCC, with @option{-msoft-float} in order for
18465 this to work.
18467 @item -mhard-quad-float
18468 @opindex mhard-quad-float
18469 Generate output containing quad-word (long double) floating-point
18470 instructions.
18472 @item -msoft-quad-float
18473 @opindex msoft-quad-float
18474 Generate output containing library calls for quad-word (long double)
18475 floating-point instructions.  The functions called are those specified
18476 in the SPARC ABI@.  This is the default.
18478 As of this writing, there are no SPARC implementations that have hardware
18479 support for the quad-word floating-point instructions.  They all invoke
18480 a trap handler for one of these instructions, and then the trap handler
18481 emulates the effect of the instruction.  Because of the trap handler overhead,
18482 this is much slower than calling the ABI library routines.  Thus the
18483 @option{-msoft-quad-float} option is the default.
18485 @item -mno-unaligned-doubles
18486 @itemx -munaligned-doubles
18487 @opindex mno-unaligned-doubles
18488 @opindex munaligned-doubles
18489 Assume that doubles have 8-byte alignment.  This is the default.
18491 With @option{-munaligned-doubles}, GCC assumes that doubles have 8-byte
18492 alignment only if they are contained in another type, or if they have an
18493 absolute address.  Otherwise, it assumes they have 4-byte alignment.
18494 Specifying this option avoids some rare compatibility problems with code
18495 generated by other compilers.  It is not the default because it results
18496 in a performance loss, especially for floating-point code.
18498 @item -mno-faster-structs
18499 @itemx -mfaster-structs
18500 @opindex mno-faster-structs
18501 @opindex mfaster-structs
18502 With @option{-mfaster-structs}, the compiler assumes that structures
18503 should have 8-byte alignment.  This enables the use of pairs of
18504 @code{ldd} and @code{std} instructions for copies in structure
18505 assignment, in place of twice as many @code{ld} and @code{st} pairs.
18506 However, the use of this changed alignment directly violates the SPARC
18507 ABI@.  Thus, it's intended only for use on targets where the developer
18508 acknowledges that their resulting code is not directly in line with
18509 the rules of the ABI@.
18511 @item -mcpu=@var{cpu_type}
18512 @opindex mcpu
18513 Set the instruction set, register set, and instruction scheduling parameters
18514 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
18515 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
18516 @samp{leon}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
18517 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
18518 @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
18519 and @samp{niagara4}.
18521 Native Solaris and GNU/Linux toolchains also support the value @samp{native},
18522 which selects the best architecture option for the host processor.
18523 @option{-mcpu=native} has no effect if GCC does not recognize
18524 the processor.
18526 Default instruction scheduling parameters are used for values that select
18527 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
18528 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
18530 Here is a list of each supported architecture and their supported
18531 implementations.
18533 @table @asis
18534 @item v7
18535 cypress
18537 @item v8
18538 supersparc, hypersparc, leon
18540 @item sparclite
18541 f930, f934, sparclite86x
18543 @item sparclet
18544 tsc701
18546 @item v9
18547 ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4
18548 @end table
18550 By default (unless configured otherwise), GCC generates code for the V7
18551 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
18552 additionally optimizes it for the Cypress CY7C602 chip, as used in the
18553 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
18554 SPARCStation 1, 2, IPX etc.
18556 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
18557 architecture.  The only difference from V7 code is that the compiler emits
18558 the integer multiply and integer divide instructions which exist in SPARC-V8
18559 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
18560 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
18561 2000 series.
18563 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
18564 the SPARC architecture.  This adds the integer multiply, integer divide step
18565 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
18566 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
18567 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
18568 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
18569 MB86934 chip, which is the more recent SPARClite with FPU@.
18571 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
18572 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
18573 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
18574 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
18575 optimizes it for the TEMIC SPARClet chip.
18577 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
18578 architecture.  This adds 64-bit integer and floating-point move instructions,
18579 3 additional floating-point condition code registers and conditional move
18580 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
18581 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
18582 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
18583 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
18584 @option{-mcpu=niagara}, the compiler additionally optimizes it for
18585 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
18586 additionally optimizes it for Sun UltraSPARC T2 chips. With
18587 @option{-mcpu=niagara3}, the compiler additionally optimizes it for Sun
18588 UltraSPARC T3 chips.  With @option{-mcpu=niagara4}, the compiler
18589 additionally optimizes it for Sun UltraSPARC T4 chips.
18591 @item -mtune=@var{cpu_type}
18592 @opindex mtune
18593 Set the instruction scheduling parameters for machine type
18594 @var{cpu_type}, but do not set the instruction set or register set that the
18595 option @option{-mcpu=@var{cpu_type}} does.
18597 The same values for @option{-mcpu=@var{cpu_type}} can be used for
18598 @option{-mtune=@var{cpu_type}}, but the only useful values are those
18599 that select a particular CPU implementation.  Those are @samp{cypress},
18600 @samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934},
18601 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3},
18602 @samp{niagara}, @samp{niagara2}, @samp{niagara3} and @samp{niagara4}.  With
18603 native Solaris and GNU/Linux toolchains, @samp{native} can also be used.
18605 @item -mv8plus
18606 @itemx -mno-v8plus
18607 @opindex mv8plus
18608 @opindex mno-v8plus
18609 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
18610 difference from the V8 ABI is that the global and out registers are
18611 considered 64 bits wide.  This is enabled by default on Solaris in 32-bit
18612 mode for all SPARC-V9 processors.
18614 @item -mvis
18615 @itemx -mno-vis
18616 @opindex mvis
18617 @opindex mno-vis
18618 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
18619 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
18621 @item -mvis2
18622 @itemx -mno-vis2
18623 @opindex mvis2
18624 @opindex mno-vis2
18625 With @option{-mvis2}, GCC generates code that takes advantage of
18626 version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
18627 default is @option{-mvis2} when targeting a cpu that supports such
18628 instructions, such as UltraSPARC-III and later.  Setting @option{-mvis2}
18629 also sets @option{-mvis}.
18631 @item -mvis3
18632 @itemx -mno-vis3
18633 @opindex mvis3
18634 @opindex mno-vis3
18635 With @option{-mvis3}, GCC generates code that takes advantage of
18636 version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
18637 default is @option{-mvis3} when targeting a cpu that supports such
18638 instructions, such as niagara-3 and later.  Setting @option{-mvis3}
18639 also sets @option{-mvis2} and @option{-mvis}.
18641 @item -mpopc
18642 @itemx -mno-popc
18643 @opindex mpopc
18644 @opindex mno-popc
18645 With @option{-mpopc}, GCC generates code that takes advantage of the UltraSPARC
18646 population count instruction.  The default is @option{-mpopc}
18647 when targeting a cpu that supports such instructions, such as Niagara-2 and
18648 later.
18650 @item -mfmaf
18651 @itemx -mno-fmaf
18652 @opindex mfmaf
18653 @opindex mno-fmaf
18654 With @option{-mfmaf}, GCC generates code that takes advantage of the UltraSPARC
18655 Fused Multiply-Add Floating-point extensions.  The default is @option{-mfmaf}
18656 when targeting a cpu that supports such instructions, such as Niagara-3 and
18657 later.
18659 @item -mfix-at697f
18660 @opindex mfix-at697f
18661 Enable the documented workaround for the single erratum of the Atmel AT697F
18662 processor (which corresponds to erratum #13 of the AT697E processor).
18663 @end table
18665 These @samp{-m} options are supported in addition to the above
18666 on SPARC-V9 processors in 64-bit environments:
18668 @table @gcctabopt
18669 @item -mlittle-endian
18670 @opindex mlittle-endian
18671 Generate code for a processor running in little-endian mode.  It is only
18672 available for a few configurations and most notably not on Solaris and Linux.
18674 @item -m32
18675 @itemx -m64
18676 @opindex m32
18677 @opindex m64
18678 Generate code for a 32-bit or 64-bit environment.
18679 The 32-bit environment sets int, long and pointer to 32 bits.
18680 The 64-bit environment sets int to 32 bits and long and pointer
18681 to 64 bits.
18683 @item -mcmodel=@var{which}
18684 @opindex mcmodel
18685 Set the code model to one of
18687 @table @samp
18688 @item medlow
18689 The Medium/Low code model: 64-bit addresses, programs
18690 must be linked in the low 32 bits of memory.  Programs can be statically
18691 or dynamically linked.
18693 @item medmid
18694 The Medium/Middle code model: 64-bit addresses, programs
18695 must be linked in the low 44 bits of memory, the text and data segments must
18696 be less than 2GB in size and the data segment must be located within 2GB of
18697 the text segment.
18699 @item medany
18700 The Medium/Anywhere code model: 64-bit addresses, programs
18701 may be linked anywhere in memory, the text and data segments must be less
18702 than 2GB in size and the data segment must be located within 2GB of the
18703 text segment.
18705 @item embmedany
18706 The Medium/Anywhere code model for embedded systems:
18707 64-bit addresses, the text and data segments must be less than 2GB in
18708 size, both starting anywhere in memory (determined at link time).  The
18709 global register %g4 points to the base of the data segment.  Programs
18710 are statically linked and PIC is not supported.
18711 @end table
18713 @item -mmemory-model=@var{mem-model}
18714 @opindex mmemory-model
18715 Set the memory model in force on the processor to one of
18717 @table @samp
18718 @item default
18719 The default memory model for the processor and operating system.
18721 @item rmo
18722 Relaxed Memory Order
18724 @item pso
18725 Partial Store Order
18727 @item tso
18728 Total Store Order
18730 @item sc
18731 Sequential Consistency
18732 @end table
18734 These memory models are formally defined in Appendix D of the Sparc V9
18735 architecture manual, as set in the processor's @code{PSTATE.MM} field.
18737 @item -mstack-bias
18738 @itemx -mno-stack-bias
18739 @opindex mstack-bias
18740 @opindex mno-stack-bias
18741 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
18742 frame pointer if present, are offset by @minus{}2047 which must be added back
18743 when making stack frame references.  This is the default in 64-bit mode.
18744 Otherwise, assume no such offset is present.
18745 @end table
18747 @node SPU Options
18748 @subsection SPU Options
18749 @cindex SPU options
18751 These @samp{-m} options are supported on the SPU:
18753 @table @gcctabopt
18754 @item -mwarn-reloc
18755 @itemx -merror-reloc
18756 @opindex mwarn-reloc
18757 @opindex merror-reloc
18759 The loader for SPU does not handle dynamic relocations.  By default, GCC
18760 gives an error when it generates code that requires a dynamic
18761 relocation.  @option{-mno-error-reloc} disables the error,
18762 @option{-mwarn-reloc} generates a warning instead.
18764 @item -msafe-dma
18765 @itemx -munsafe-dma
18766 @opindex msafe-dma
18767 @opindex munsafe-dma
18769 Instructions that initiate or test completion of DMA must not be
18770 reordered with respect to loads and stores of the memory that is being
18771 accessed.
18772 With @option{-munsafe-dma} you must use the @code{volatile} keyword to protect
18773 memory accesses, but that can lead to inefficient code in places where the
18774 memory is known to not change.  Rather than mark the memory as volatile,
18775 you can use @option{-msafe-dma} to tell the compiler to treat
18776 the DMA instructions as potentially affecting all memory.  
18778 @item -mbranch-hints
18779 @opindex mbranch-hints
18781 By default, GCC generates a branch hint instruction to avoid
18782 pipeline stalls for always-taken or probably-taken branches.  A hint
18783 is not generated closer than 8 instructions away from its branch.
18784 There is little reason to disable them, except for debugging purposes,
18785 or to make an object a little bit smaller.
18787 @item -msmall-mem
18788 @itemx -mlarge-mem
18789 @opindex msmall-mem
18790 @opindex mlarge-mem
18792 By default, GCC generates code assuming that addresses are never larger
18793 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
18794 a full 32-bit address.
18796 @item -mstdmain
18797 @opindex mstdmain
18799 By default, GCC links against startup code that assumes the SPU-style
18800 main function interface (which has an unconventional parameter list).
18801 With @option{-mstdmain}, GCC links your program against startup
18802 code that assumes a C99-style interface to @code{main}, including a
18803 local copy of @code{argv} strings.
18805 @item -mfixed-range=@var{register-range}
18806 @opindex mfixed-range
18807 Generate code treating the given register range as fixed registers.
18808 A fixed register is one that the register allocator can not use.  This is
18809 useful when compiling kernel code.  A register range is specified as
18810 two registers separated by a dash.  Multiple register ranges can be
18811 specified separated by a comma.
18813 @item -mea32
18814 @itemx -mea64
18815 @opindex mea32
18816 @opindex mea64
18817 Compile code assuming that pointers to the PPU address space accessed
18818 via the @code{__ea} named address space qualifier are either 32 or 64
18819 bits wide.  The default is 32 bits.  As this is an ABI changing option,
18820 all object code in an executable must be compiled with the same setting.
18822 @item -maddress-space-conversion
18823 @itemx -mno-address-space-conversion
18824 @opindex maddress-space-conversion
18825 @opindex mno-address-space-conversion
18826 Allow/disallow treating the @code{__ea} address space as superset
18827 of the generic address space.  This enables explicit type casts
18828 between @code{__ea} and generic pointer as well as implicit
18829 conversions of generic pointers to @code{__ea} pointers.  The
18830 default is to allow address space pointer conversions.
18832 @item -mcache-size=@var{cache-size}
18833 @opindex mcache-size
18834 This option controls the version of libgcc that the compiler links to an
18835 executable and selects a software-managed cache for accessing variables
18836 in the @code{__ea} address space with a particular cache size.  Possible
18837 options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
18838 and @samp{128}.  The default cache size is 64KB.
18840 @item -matomic-updates
18841 @itemx -mno-atomic-updates
18842 @opindex matomic-updates
18843 @opindex mno-atomic-updates
18844 This option controls the version of libgcc that the compiler links to an
18845 executable and selects whether atomic updates to the software-managed
18846 cache of PPU-side variables are used.  If you use atomic updates, changes
18847 to a PPU variable from SPU code using the @code{__ea} named address space
18848 qualifier do not interfere with changes to other PPU variables residing
18849 in the same cache line from PPU code.  If you do not use atomic updates,
18850 such interference may occur; however, writing back cache lines is
18851 more efficient.  The default behavior is to use atomic updates.
18853 @item -mdual-nops
18854 @itemx -mdual-nops=@var{n}
18855 @opindex mdual-nops
18856 By default, GCC inserts nops to increase dual issue when it expects
18857 it to increase performance.  @var{n} can be a value from 0 to 10.  A
18858 smaller @var{n} inserts fewer nops.  10 is the default, 0 is the
18859 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
18861 @item -mhint-max-nops=@var{n}
18862 @opindex mhint-max-nops
18863 Maximum number of nops to insert for a branch hint.  A branch hint must
18864 be at least 8 instructions away from the branch it is affecting.  GCC
18865 inserts up to @var{n} nops to enforce this, otherwise it does not
18866 generate the branch hint.
18868 @item -mhint-max-distance=@var{n}
18869 @opindex mhint-max-distance
18870 The encoding of the branch hint instruction limits the hint to be within
18871 256 instructions of the branch it is affecting.  By default, GCC makes
18872 sure it is within 125.
18874 @item -msafe-hints
18875 @opindex msafe-hints
18876 Work around a hardware bug that causes the SPU to stall indefinitely.
18877 By default, GCC inserts the @code{hbrp} instruction to make sure
18878 this stall won't happen.
18880 @end table
18882 @node System V Options
18883 @subsection Options for System V
18885 These additional options are available on System V Release 4 for
18886 compatibility with other compilers on those systems:
18888 @table @gcctabopt
18889 @item -G
18890 @opindex G
18891 Create a shared object.
18892 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
18894 @item -Qy
18895 @opindex Qy
18896 Identify the versions of each tool used by the compiler, in a
18897 @code{.ident} assembler directive in the output.
18899 @item -Qn
18900 @opindex Qn
18901 Refrain from adding @code{.ident} directives to the output file (this is
18902 the default).
18904 @item -YP,@var{dirs}
18905 @opindex YP
18906 Search the directories @var{dirs}, and no others, for libraries
18907 specified with @option{-l}.
18909 @item -Ym,@var{dir}
18910 @opindex Ym
18911 Look in the directory @var{dir} to find the M4 preprocessor.
18912 The assembler uses this option.
18913 @c This is supposed to go with a -Yd for predefined M4 macro files, but
18914 @c the generic assembler that comes with Solaris takes just -Ym.
18915 @end table
18917 @node TILE-Gx Options
18918 @subsection TILE-Gx Options
18919 @cindex TILE-Gx options
18921 These @samp{-m} options are supported on the TILE-Gx:
18923 @table @gcctabopt
18924 @item -mcpu=@var{name}
18925 @opindex mcpu
18926 Selects the type of CPU to be targeted.  Currently the only supported
18927 type is @samp{tilegx}.
18929 @item -m32
18930 @itemx -m64
18931 @opindex m32
18932 @opindex m64
18933 Generate code for a 32-bit or 64-bit environment.  The 32-bit
18934 environment sets int, long, and pointer to 32 bits.  The 64-bit
18935 environment sets int to 32 bits and long and pointer to 64 bits.
18936 @end table
18938 @node TILEPro Options
18939 @subsection TILEPro Options
18940 @cindex TILEPro options
18942 These @samp{-m} options are supported on the TILEPro:
18944 @table @gcctabopt
18945 @item -mcpu=@var{name}
18946 @opindex mcpu
18947 Selects the type of CPU to be targeted.  Currently the only supported
18948 type is @samp{tilepro}.
18950 @item -m32
18951 @opindex m32
18952 Generate code for a 32-bit environment, which sets int, long, and
18953 pointer to 32 bits.  This is the only supported behavior so the flag
18954 is essentially ignored.
18955 @end table
18957 @node V850 Options
18958 @subsection V850 Options
18959 @cindex V850 Options
18961 These @samp{-m} options are defined for V850 implementations:
18963 @table @gcctabopt
18964 @item -mlong-calls
18965 @itemx -mno-long-calls
18966 @opindex mlong-calls
18967 @opindex mno-long-calls
18968 Treat all calls as being far away (near).  If calls are assumed to be
18969 far away, the compiler always loads the function's address into a
18970 register, and calls indirect through the pointer.
18972 @item -mno-ep
18973 @itemx -mep
18974 @opindex mno-ep
18975 @opindex mep
18976 Do not optimize (do optimize) basic blocks that use the same index
18977 pointer 4 or more times to copy pointer into the @code{ep} register, and
18978 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
18979 option is on by default if you optimize.
18981 @item -mno-prolog-function
18982 @itemx -mprolog-function
18983 @opindex mno-prolog-function
18984 @opindex mprolog-function
18985 Do not use (do use) external functions to save and restore registers
18986 at the prologue and epilogue of a function.  The external functions
18987 are slower, but use less code space if more than one function saves
18988 the same number of registers.  The @option{-mprolog-function} option
18989 is on by default if you optimize.
18991 @item -mspace
18992 @opindex mspace
18993 Try to make the code as small as possible.  At present, this just turns
18994 on the @option{-mep} and @option{-mprolog-function} options.
18996 @item -mtda=@var{n}
18997 @opindex mtda
18998 Put static or global variables whose size is @var{n} bytes or less into
18999 the tiny data area that register @code{ep} points to.  The tiny data
19000 area can hold up to 256 bytes in total (128 bytes for byte references).
19002 @item -msda=@var{n}
19003 @opindex msda
19004 Put static or global variables whose size is @var{n} bytes or less into
19005 the small data area that register @code{gp} points to.  The small data
19006 area can hold up to 64 kilobytes.
19008 @item -mzda=@var{n}
19009 @opindex mzda
19010 Put static or global variables whose size is @var{n} bytes or less into
19011 the first 32 kilobytes of memory.
19013 @item -mv850
19014 @opindex mv850
19015 Specify that the target processor is the V850.
19017 @item -mbig-switch
19018 @opindex mbig-switch
19019 Generate code suitable for big switch tables.  Use this option only if
19020 the assembler/linker complain about out of range branches within a switch
19021 table.
19023 @item -mapp-regs
19024 @opindex mapp-regs
19025 This option causes r2 and r5 to be used in the code generated by
19026 the compiler.  This setting is the default.
19028 @item -mno-app-regs
19029 @opindex mno-app-regs
19030 This option causes r2 and r5 to be treated as fixed registers.
19032 @item -mv850e2v3
19033 @opindex mv850e2v3
19034 Specify that the target processor is the V850E2V3.  The preprocessor
19035 constant @samp{__v850e2v3__} is defined if
19036 this option is used.
19038 @item -mv850e2
19039 @opindex mv850e2
19040 Specify that the target processor is the V850E2.  The preprocessor
19041 constant @samp{__v850e2__} is defined if this option is used.
19043 @item -mv850e1
19044 @opindex mv850e1
19045 Specify that the target processor is the V850E1.  The preprocessor
19046 constants @samp{__v850e1__} and @samp{__v850e__} are defined if
19047 this option is used.
19049 @item -mv850es
19050 @opindex mv850es
19051 Specify that the target processor is the V850ES.  This is an alias for
19052 the @option{-mv850e1} option.
19054 @item -mv850e
19055 @opindex mv850e
19056 Specify that the target processor is the V850E@.  The preprocessor
19057 constant @samp{__v850e__} is defined if this option is used.
19059 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
19060 nor @option{-mv850e2} nor @option{-mv850e2v3}
19061 are defined then a default target processor is chosen and the
19062 relevant @samp{__v850*__} preprocessor constant is defined.
19064 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
19065 defined, regardless of which processor variant is the target.
19067 @item -mdisable-callt
19068 @opindex mdisable-callt
19069 This option suppresses generation of the @code{CALLT} instruction for the
19070 v850e, v850e1, v850e2 and v850e2v3 flavors of the v850 architecture.  The default is
19071 @option{-mno-disable-callt} which allows the @code{CALLT} instruction to be used.
19073 @end table
19075 @node VAX Options
19076 @subsection VAX Options
19077 @cindex VAX options
19079 These @samp{-m} options are defined for the VAX:
19081 @table @gcctabopt
19082 @item -munix
19083 @opindex munix
19084 Do not output certain jump instructions (@code{aobleq} and so on)
19085 that the Unix assembler for the VAX cannot handle across long
19086 ranges.
19088 @item -mgnu
19089 @opindex mgnu
19090 Do output those jump instructions, on the assumption that the
19091 GNU assembler is being used.
19093 @item -mg
19094 @opindex mg
19095 Output code for G-format floating-point numbers instead of D-format.
19096 @end table
19098 @node VMS Options
19099 @subsection VMS Options
19101 These @samp{-m} options are defined for the VMS implementations:
19103 @table @gcctabopt
19104 @item -mvms-return-codes
19105 @opindex mvms-return-codes
19106 Return VMS condition codes from @code{main}. The default is to return POSIX-style
19107 condition (e.g.@ error) codes.
19109 @item -mdebug-main=@var{prefix}
19110 @opindex mdebug-main=@var{prefix}
19111 Flag the first routine whose name starts with @var{prefix} as the main
19112 routine for the debugger.
19114 @item -mmalloc64
19115 @opindex mmalloc64
19116 Default to 64-bit memory allocation routines.
19118 @item -mpointer-size=@var{size}
19119 @opindex -mpointer-size=@var{size}
19120 Set the default size of pointers. Possible options for @var{size} are
19121 @samp{32} or @samp{short} for 32 bit pointers, @samp{64} or @samp{long}
19122 for 64 bit pointers, and @samp{no} for supporting only 32 bit pointers.
19123 The later option disables @code{pragma pointer_size}.
19124 @end table
19126 @node VxWorks Options
19127 @subsection VxWorks Options
19128 @cindex VxWorks Options
19130 The options in this section are defined for all VxWorks targets.
19131 Options specific to the target hardware are listed with the other
19132 options for that target.
19134 @table @gcctabopt
19135 @item -mrtp
19136 @opindex mrtp
19137 GCC can generate code for both VxWorks kernels and real time processes
19138 (RTPs).  This option switches from the former to the latter.  It also
19139 defines the preprocessor macro @code{__RTP__}.
19141 @item -non-static
19142 @opindex non-static
19143 Link an RTP executable against shared libraries rather than static
19144 libraries.  The options @option{-static} and @option{-shared} can
19145 also be used for RTPs (@pxref{Link Options}); @option{-static}
19146 is the default.
19148 @item -Bstatic
19149 @itemx -Bdynamic
19150 @opindex Bstatic
19151 @opindex Bdynamic
19152 These options are passed down to the linker.  They are defined for
19153 compatibility with Diab.
19155 @item -Xbind-lazy
19156 @opindex Xbind-lazy
19157 Enable lazy binding of function calls.  This option is equivalent to
19158 @option{-Wl,-z,now} and is defined for compatibility with Diab.
19160 @item -Xbind-now
19161 @opindex Xbind-now
19162 Disable lazy binding of function calls.  This option is the default and
19163 is defined for compatibility with Diab.
19164 @end table
19166 @node x86-64 Options
19167 @subsection x86-64 Options
19168 @cindex x86-64 options
19170 These are listed under @xref{i386 and x86-64 Options}.
19172 @node Xstormy16 Options
19173 @subsection Xstormy16 Options
19174 @cindex Xstormy16 Options
19176 These options are defined for Xstormy16:
19178 @table @gcctabopt
19179 @item -msim
19180 @opindex msim
19181 Choose startup files and linker script suitable for the simulator.
19182 @end table
19184 @node Xtensa Options
19185 @subsection Xtensa Options
19186 @cindex Xtensa Options
19188 These options are supported for Xtensa targets:
19190 @table @gcctabopt
19191 @item -mconst16
19192 @itemx -mno-const16
19193 @opindex mconst16
19194 @opindex mno-const16
19195 Enable or disable use of @code{CONST16} instructions for loading
19196 constant values.  The @code{CONST16} instruction is currently not a
19197 standard option from Tensilica.  When enabled, @code{CONST16}
19198 instructions are always used in place of the standard @code{L32R}
19199 instructions.  The use of @code{CONST16} is enabled by default only if
19200 the @code{L32R} instruction is not available.
19202 @item -mfused-madd
19203 @itemx -mno-fused-madd
19204 @opindex mfused-madd
19205 @opindex mno-fused-madd
19206 Enable or disable use of fused multiply/add and multiply/subtract
19207 instructions in the floating-point option.  This has no effect if the
19208 floating-point option is not also enabled.  Disabling fused multiply/add
19209 and multiply/subtract instructions forces the compiler to use separate
19210 instructions for the multiply and add/subtract operations.  This may be
19211 desirable in some cases where strict IEEE 754-compliant results are
19212 required: the fused multiply add/subtract instructions do not round the
19213 intermediate result, thereby producing results with @emph{more} bits of
19214 precision than specified by the IEEE standard.  Disabling fused multiply
19215 add/subtract instructions also ensures that the program output is not
19216 sensitive to the compiler's ability to combine multiply and add/subtract
19217 operations.
19219 @item -mserialize-volatile
19220 @itemx -mno-serialize-volatile
19221 @opindex mserialize-volatile
19222 @opindex mno-serialize-volatile
19223 When this option is enabled, GCC inserts @code{MEMW} instructions before
19224 @code{volatile} memory references to guarantee sequential consistency.
19225 The default is @option{-mserialize-volatile}.  Use
19226 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
19228 @item -mforce-no-pic
19229 @opindex mforce-no-pic
19230 For targets, like GNU/Linux, where all user-mode Xtensa code must be
19231 position-independent code (PIC), this option disables PIC for compiling
19232 kernel code.
19234 @item -mtext-section-literals
19235 @itemx -mno-text-section-literals
19236 @opindex mtext-section-literals
19237 @opindex mno-text-section-literals
19238 Control the treatment of literal pools.  The default is
19239 @option{-mno-text-section-literals}, which places literals in a separate
19240 section in the output file.  This allows the literal pool to be placed
19241 in a data RAM/ROM, and it also allows the linker to combine literal
19242 pools from separate object files to remove redundant literals and
19243 improve code size.  With @option{-mtext-section-literals}, the literals
19244 are interspersed in the text section in order to keep them as close as
19245 possible to their references.  This may be necessary for large assembly
19246 files.
19248 @item -mtarget-align
19249 @itemx -mno-target-align
19250 @opindex mtarget-align
19251 @opindex mno-target-align
19252 When this option is enabled, GCC instructs the assembler to
19253 automatically align instructions to reduce branch penalties at the
19254 expense of some code density.  The assembler attempts to widen density
19255 instructions to align branch targets and the instructions following call
19256 instructions.  If there are not enough preceding safe density
19257 instructions to align a target, no widening is performed.  The
19258 default is @option{-mtarget-align}.  These options do not affect the
19259 treatment of auto-aligned instructions like @code{LOOP}, which the
19260 assembler always aligns, either by widening density instructions or
19261 by inserting NOP instructions.
19263 @item -mlongcalls
19264 @itemx -mno-longcalls
19265 @opindex mlongcalls
19266 @opindex mno-longcalls
19267 When this option is enabled, GCC instructs the assembler to translate
19268 direct calls to indirect calls unless it can determine that the target
19269 of a direct call is in the range allowed by the call instruction.  This
19270 translation typically occurs for calls to functions in other source
19271 files.  Specifically, the assembler translates a direct @code{CALL}
19272 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
19273 The default is @option{-mno-longcalls}.  This option should be used in
19274 programs where the call target can potentially be out of range.  This
19275 option is implemented in the assembler, not the compiler, so the
19276 assembly code generated by GCC still shows direct call
19277 instructions---look at the disassembled object code to see the actual
19278 instructions.  Note that the assembler uses an indirect call for
19279 every cross-file call, not just those that really are out of range.
19280 @end table
19282 @node zSeries Options
19283 @subsection zSeries Options
19284 @cindex zSeries options
19286 These are listed under @xref{S/390 and zSeries Options}.
19288 @node Code Gen Options
19289 @section Options for Code Generation Conventions
19290 @cindex code generation conventions
19291 @cindex options, code generation
19292 @cindex run-time options
19294 These machine-independent options control the interface conventions
19295 used in code generation.
19297 Most of them have both positive and negative forms; the negative form
19298 of @option{-ffoo} is @option{-fno-foo}.  In the table below, only
19299 one of the forms is listed---the one that is not the default.  You
19300 can figure out the other form by either removing @samp{no-} or adding
19303 @table @gcctabopt
19304 @item -fbounds-check
19305 @opindex fbounds-check
19306 For front ends that support it, generate additional code to check that
19307 indices used to access arrays are within the declared range.  This is
19308 currently only supported by the Java and Fortran front ends, where
19309 this option defaults to true and false respectively.
19311 @item -fstack-reuse=@var{reuse-level}
19312 @opindex fstack_reuse
19313 This option controls stack space reuse for user declared local/auto variables
19314 and compiler generated temporaries.  @var{reuse_level} can be @samp{all},
19315 @samp{named_vars}, or @samp{none}. @samp{all} enables stack reuse for all
19316 local variables and temporaries, @samp{named_vars} enables the reuse only for
19317 user defined local variables with names, and @samp{none} disables stack reuse
19318 completely. The default value is @samp{all}. The option is needed when the
19319 program extends the lifetime of a scoped local variable or a compiler generated
19320 temporary beyond the end point defined by the language.  When a lifetime of
19321 a variable ends, and if the variable lives in memory, the optimizing compiler
19322 has the freedom to reuse its stack space with other temporaries or scoped
19323 local variables whose live range does not overlap with it. Legacy code extending
19324 local lifetime will likely to break with the stack reuse optimization.
19326 For example,
19328 @smallexample
19329    int *p;
19330    @{
19331      int local1;
19333      p = &local1;
19334      local1 = 10;
19335      ....
19336    @}
19337    @{
19338       int local2;
19339       local2 = 20;
19340       ...
19341    @}
19343    if (*p == 10)  // out of scope use of local1
19344      @{
19346      @}
19347 @end smallexample
19349 Another example:
19350 @smallexample
19352    struct A
19353    @{
19354        A(int k) : i(k), j(k) @{ @}
19355        int i;
19356        int j;
19357    @};
19359    A *ap;
19361    void foo(const A& ar)
19362    @{
19363       ap = &ar;
19364    @}
19366    void bar()
19367    @{
19368       foo(A(10)); // temp object's lifetime ends when foo returns
19370       @{
19371         A a(20);
19372         ....
19373       @}
19374       ap->i+= 10;  // ap references out of scope temp whose space
19375                    // is reused with a. What is the value of ap->i?
19376    @}
19378 @end smallexample
19380 The lifetime of a compiler generated temporary is well defined by the C++
19381 standard. When a lifetime of a temporary ends, and if the temporary lives
19382 in memory, the optimizing compiler has the freedom to reuse its stack
19383 space with other temporaries or scoped local variables whose live range
19384 does not overlap with it. However some of the legacy code relies on
19385 the behavior of older compilers in which temporaries' stack space is
19386 not reused, the aggressive stack reuse can lead to runtime errors. This
19387 option is used to control the temporary stack reuse optimization.
19389 @item -ftrapv
19390 @opindex ftrapv
19391 This option generates traps for signed overflow on addition, subtraction,
19392 multiplication operations.
19394 @item -fwrapv
19395 @opindex fwrapv
19396 This option instructs the compiler to assume that signed arithmetic
19397 overflow of addition, subtraction and multiplication wraps around
19398 using twos-complement representation.  This flag enables some optimizations
19399 and disables others.  This option is enabled by default for the Java
19400 front end, as required by the Java language specification.
19402 @item -fexceptions
19403 @opindex fexceptions
19404 Enable exception handling.  Generates extra code needed to propagate
19405 exceptions.  For some targets, this implies GCC generates frame
19406 unwind information for all functions, which can produce significant data
19407 size overhead, although it does not affect execution.  If you do not
19408 specify this option, GCC enables it by default for languages like
19409 C++ that normally require exception handling, and disables it for
19410 languages like C that do not normally require it.  However, you may need
19411 to enable this option when compiling C code that needs to interoperate
19412 properly with exception handlers written in C++.  You may also wish to
19413 disable this option if you are compiling older C++ programs that don't
19414 use exception handling.
19416 @item -fnon-call-exceptions
19417 @opindex fnon-call-exceptions
19418 Generate code that allows trapping instructions to throw exceptions.
19419 Note that this requires platform-specific runtime support that does
19420 not exist everywhere.  Moreover, it only allows @emph{trapping}
19421 instructions to throw exceptions, i.e.@: memory references or floating-point
19422 instructions.  It does not allow exceptions to be thrown from
19423 arbitrary signal handlers such as @code{SIGALRM}.
19425 @item -fdelete-dead-exceptions
19426 @opindex fdelete-dead-exceptions
19427 Consider that instructions that may throw exceptions but don't otherwise
19428 contribute to the execution of the program can be optimized away.
19429 This option is enabled by default for the Ada front end, as permitted by
19430 the Ada language specification.
19431 Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
19433 @item -funwind-tables
19434 @opindex funwind-tables
19435 Similar to @option{-fexceptions}, except that it just generates any needed
19436 static data, but does not affect the generated code in any other way.
19437 You normally do not need to enable this option; instead, a language processor
19438 that needs this handling enables it on your behalf.
19440 @item -fasynchronous-unwind-tables
19441 @opindex fasynchronous-unwind-tables
19442 Generate unwind table in DWARF 2 format, if supported by target machine.  The
19443 table is exact at each instruction boundary, so it can be used for stack
19444 unwinding from asynchronous events (such as debugger or garbage collector).
19446 @item -fpcc-struct-return
19447 @opindex fpcc-struct-return
19448 Return ``short'' @code{struct} and @code{union} values in memory like
19449 longer ones, rather than in registers.  This convention is less
19450 efficient, but it has the advantage of allowing intercallability between
19451 GCC-compiled files and files compiled with other compilers, particularly
19452 the Portable C Compiler (pcc).
19454 The precise convention for returning structures in memory depends
19455 on the target configuration macros.
19457 Short structures and unions are those whose size and alignment match
19458 that of some integer type.
19460 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
19461 switch is not binary compatible with code compiled with the
19462 @option{-freg-struct-return} switch.
19463 Use it to conform to a non-default application binary interface.
19465 @item -freg-struct-return
19466 @opindex freg-struct-return
19467 Return @code{struct} and @code{union} values in registers when possible.
19468 This is more efficient for small structures than
19469 @option{-fpcc-struct-return}.
19471 If you specify neither @option{-fpcc-struct-return} nor
19472 @option{-freg-struct-return}, GCC defaults to whichever convention is
19473 standard for the target.  If there is no standard convention, GCC
19474 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
19475 the principal compiler.  In those cases, we can choose the standard, and
19476 we chose the more efficient register return alternative.
19478 @strong{Warning:} code compiled with the @option{-freg-struct-return}
19479 switch is not binary compatible with code compiled with the
19480 @option{-fpcc-struct-return} switch.
19481 Use it to conform to a non-default application binary interface.
19483 @item -fshort-enums
19484 @opindex fshort-enums
19485 Allocate to an @code{enum} type only as many bytes as it needs for the
19486 declared range of possible values.  Specifically, the @code{enum} type
19487 is equivalent to the smallest integer type that has enough room.
19489 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
19490 code that is not binary compatible with code generated without that switch.
19491 Use it to conform to a non-default application binary interface.
19493 @item -fshort-double
19494 @opindex fshort-double
19495 Use the same size for @code{double} as for @code{float}.
19497 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
19498 code that is not binary compatible with code generated without that switch.
19499 Use it to conform to a non-default application binary interface.
19501 @item -fshort-wchar
19502 @opindex fshort-wchar
19503 Override the underlying type for @samp{wchar_t} to be @samp{short
19504 unsigned int} instead of the default for the target.  This option is
19505 useful for building programs to run under WINE@.
19507 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
19508 code that is not binary compatible with code generated without that switch.
19509 Use it to conform to a non-default application binary interface.
19511 @item -fno-common
19512 @opindex fno-common
19513 In C code, controls the placement of uninitialized global variables.
19514 Unix C compilers have traditionally permitted multiple definitions of
19515 such variables in different compilation units by placing the variables
19516 in a common block.
19517 This is the behavior specified by @option{-fcommon}, and is the default
19518 for GCC on most targets.
19519 On the other hand, this behavior is not required by ISO C, and on some
19520 targets may carry a speed or code size penalty on variable references.
19521 The @option{-fno-common} option specifies that the compiler should place
19522 uninitialized global variables in the data section of the object file,
19523 rather than generating them as common blocks.
19524 This has the effect that if the same variable is declared
19525 (without @code{extern}) in two different compilations,
19526 you get a multiple-definition error when you link them.
19527 In this case, you must compile with @option{-fcommon} instead.
19528 Compiling with @option{-fno-common} is useful on targets for which
19529 it provides better performance, or if you wish to verify that the
19530 program will work on other systems that always treat uninitialized
19531 variable declarations this way.
19533 @item -fno-ident
19534 @opindex fno-ident
19535 Ignore the @samp{#ident} directive.
19537 @item -finhibit-size-directive
19538 @opindex finhibit-size-directive
19539 Don't output a @code{.size} assembler directive, or anything else that
19540 would cause trouble if the function is split in the middle, and the
19541 two halves are placed at locations far apart in memory.  This option is
19542 used when compiling @file{crtstuff.c}; you should not need to use it
19543 for anything else.
19545 @item -fverbose-asm
19546 @opindex fverbose-asm
19547 Put extra commentary information in the generated assembly code to
19548 make it more readable.  This option is generally only of use to those
19549 who actually need to read the generated assembly code (perhaps while
19550 debugging the compiler itself).
19552 @option{-fno-verbose-asm}, the default, causes the
19553 extra information to be omitted and is useful when comparing two assembler
19554 files.
19556 @item -frecord-gcc-switches
19557 @opindex frecord-gcc-switches
19558 This switch causes the command line used to invoke the
19559 compiler to be recorded into the object file that is being created.
19560 This switch is only implemented on some targets and the exact format
19561 of the recording is target and binary file format dependent, but it
19562 usually takes the form of a section containing ASCII text.  This
19563 switch is related to the @option{-fverbose-asm} switch, but that
19564 switch only records information in the assembler output file as
19565 comments, so it never reaches the object file.
19566 See also @option{-grecord-gcc-switches} for another
19567 way of storing compiler options into the object file.
19569 @item -fpic
19570 @opindex fpic
19571 @cindex global offset table
19572 @cindex PIC
19573 Generate position-independent code (PIC) suitable for use in a shared
19574 library, if supported for the target machine.  Such code accesses all
19575 constant addresses through a global offset table (GOT)@.  The dynamic
19576 loader resolves the GOT entries when the program starts (the dynamic
19577 loader is not part of GCC; it is part of the operating system).  If
19578 the GOT size for the linked executable exceeds a machine-specific
19579 maximum size, you get an error message from the linker indicating that
19580 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
19581 instead.  (These maximums are 8k on the SPARC and 32k
19582 on the m68k and RS/6000.  The 386 has no such limit.)
19584 Position-independent code requires special support, and therefore works
19585 only on certain machines.  For the 386, GCC supports PIC for System V
19586 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
19587 position-independent.
19589 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
19590 are defined to 1.
19592 @item -fPIC
19593 @opindex fPIC
19594 If supported for the target machine, emit position-independent code,
19595 suitable for dynamic linking and avoiding any limit on the size of the
19596 global offset table.  This option makes a difference on the m68k,
19597 PowerPC and SPARC@.
19599 Position-independent code requires special support, and therefore works
19600 only on certain machines.
19602 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
19603 are defined to 2.
19605 @item -fpie
19606 @itemx -fPIE
19607 @opindex fpie
19608 @opindex fPIE
19609 These options are similar to @option{-fpic} and @option{-fPIC}, but
19610 generated position independent code can be only linked into executables.
19611 Usually these options are used when @option{-pie} GCC option is
19612 used during linking.
19614 @option{-fpie} and @option{-fPIE} both define the macros
19615 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
19616 for @option{-fpie} and 2 for @option{-fPIE}.
19618 @item -fno-jump-tables
19619 @opindex fno-jump-tables
19620 Do not use jump tables for switch statements even where it would be
19621 more efficient than other code generation strategies.  This option is
19622 of use in conjunction with @option{-fpic} or @option{-fPIC} for
19623 building code that forms part of a dynamic linker and cannot
19624 reference the address of a jump table.  On some targets, jump tables
19625 do not require a GOT and this option is not needed.
19627 @item -ffixed-@var{reg}
19628 @opindex ffixed
19629 Treat the register named @var{reg} as a fixed register; generated code
19630 should never refer to it (except perhaps as a stack pointer, frame
19631 pointer or in some other fixed role).
19633 @var{reg} must be the name of a register.  The register names accepted
19634 are machine-specific and are defined in the @code{REGISTER_NAMES}
19635 macro in the machine description macro file.
19637 This flag does not have a negative form, because it specifies a
19638 three-way choice.
19640 @item -fcall-used-@var{reg}
19641 @opindex fcall-used
19642 Treat the register named @var{reg} as an allocable register that is
19643 clobbered by function calls.  It may be allocated for temporaries or
19644 variables that do not live across a call.  Functions compiled this way
19645 do not save and restore the register @var{reg}.
19647 It is an error to use this flag with the frame pointer or stack pointer.
19648 Use of this flag for other registers that have fixed pervasive roles in
19649 the machine's execution model produces disastrous results.
19651 This flag does not have a negative form, because it specifies a
19652 three-way choice.
19654 @item -fcall-saved-@var{reg}
19655 @opindex fcall-saved
19656 Treat the register named @var{reg} as an allocable register saved by
19657 functions.  It may be allocated even for temporaries or variables that
19658 live across a call.  Functions compiled this way save and restore
19659 the register @var{reg} if they use it.
19661 It is an error to use this flag with the frame pointer or stack pointer.
19662 Use of this flag for other registers that have fixed pervasive roles in
19663 the machine's execution model produces disastrous results.
19665 A different sort of disaster results from the use of this flag for
19666 a register in which function values may be returned.
19668 This flag does not have a negative form, because it specifies a
19669 three-way choice.
19671 @item -fpack-struct[=@var{n}]
19672 @opindex fpack-struct
19673 Without a value specified, pack all structure members together without
19674 holes.  When a value is specified (which must be a small power of two), pack
19675 structure members according to this value, representing the maximum
19676 alignment (that is, objects with default alignment requirements larger than
19677 this are output potentially unaligned at the next fitting location.
19679 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
19680 code that is not binary compatible with code generated without that switch.
19681 Additionally, it makes the code suboptimal.
19682 Use it to conform to a non-default application binary interface.
19684 @item -finstrument-functions
19685 @opindex finstrument-functions
19686 Generate instrumentation calls for entry and exit to functions.  Just
19687 after function entry and just before function exit, the following
19688 profiling functions are called with the address of the current
19689 function and its call site.  (On some platforms,
19690 @code{__builtin_return_address} does not work beyond the current
19691 function, so the call site information may not be available to the
19692 profiling functions otherwise.)
19694 @smallexample
19695 void __cyg_profile_func_enter (void *this_fn,
19696                                void *call_site);
19697 void __cyg_profile_func_exit  (void *this_fn,
19698                                void *call_site);
19699 @end smallexample
19701 The first argument is the address of the start of the current function,
19702 which may be looked up exactly in the symbol table.
19704 This instrumentation is also done for functions expanded inline in other
19705 functions.  The profiling calls indicate where, conceptually, the
19706 inline function is entered and exited.  This means that addressable
19707 versions of such functions must be available.  If all your uses of a
19708 function are expanded inline, this may mean an additional expansion of
19709 code size.  If you use @samp{extern inline} in your C code, an
19710 addressable version of such functions must be provided.  (This is
19711 normally the case anyway, but if you get lucky and the optimizer always
19712 expands the functions inline, you might have gotten away without
19713 providing static copies.)
19715 A function may be given the attribute @code{no_instrument_function}, in
19716 which case this instrumentation is not done.  This can be used, for
19717 example, for the profiling functions listed above, high-priority
19718 interrupt routines, and any functions from which the profiling functions
19719 cannot safely be called (perhaps signal handlers, if the profiling
19720 routines generate output or allocate memory).
19722 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
19723 @opindex finstrument-functions-exclude-file-list
19725 Set the list of functions that are excluded from instrumentation (see
19726 the description of @code{-finstrument-functions}).  If the file that
19727 contains a function definition matches with one of @var{file}, then
19728 that function is not instrumented.  The match is done on substrings:
19729 if the @var{file} parameter is a substring of the file name, it is
19730 considered to be a match.
19732 For example:
19734 @smallexample
19735 -finstrument-functions-exclude-file-list=/bits/stl,include/sys
19736 @end smallexample
19738 @noindent
19739 excludes any inline function defined in files whose pathnames
19740 contain @code{/bits/stl} or @code{include/sys}.
19742 If, for some reason, you want to include letter @code{','} in one of
19743 @var{sym}, write @code{'\,'}. For example,
19744 @code{-finstrument-functions-exclude-file-list='\,\,tmp'}
19745 (note the single quote surrounding the option).
19747 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
19748 @opindex finstrument-functions-exclude-function-list
19750 This is similar to @code{-finstrument-functions-exclude-file-list},
19751 but this option sets the list of function names to be excluded from
19752 instrumentation.  The function name to be matched is its user-visible
19753 name, such as @code{vector<int> blah(const vector<int> &)}, not the
19754 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
19755 match is done on substrings: if the @var{sym} parameter is a substring
19756 of the function name, it is considered to be a match.  For C99 and C++
19757 extended identifiers, the function name must be given in UTF-8, not
19758 using universal character names.
19760 @item -fstack-check
19761 @opindex fstack-check
19762 Generate code to verify that you do not go beyond the boundary of the
19763 stack.  You should specify this flag if you are running in an
19764 environment with multiple threads, but only rarely need to specify it in
19765 a single-threaded environment since stack overflow is automatically
19766 detected on nearly all systems if there is only one stack.
19768 Note that this switch does not actually cause checking to be done; the
19769 operating system or the language runtime must do that.  The switch causes
19770 generation of code to ensure that they see the stack being extended.
19772 You can additionally specify a string parameter: @code{no} means no
19773 checking, @code{generic} means force the use of old-style checking,
19774 @code{specific} means use the best checking method and is equivalent
19775 to bare @option{-fstack-check}.
19777 Old-style checking is a generic mechanism that requires no specific
19778 target support in the compiler but comes with the following drawbacks:
19780 @enumerate
19781 @item
19782 Modified allocation strategy for large objects: they are always
19783 allocated dynamically if their size exceeds a fixed threshold.
19785 @item
19786 Fixed limit on the size of the static frame of functions: when it is
19787 topped by a particular function, stack checking is not reliable and
19788 a warning is issued by the compiler.
19790 @item
19791 Inefficiency: because of both the modified allocation strategy and the
19792 generic implementation, the performances of the code are hampered.
19793 @end enumerate
19795 Note that old-style stack checking is also the fallback method for
19796 @code{specific} if no target support has been added in the compiler.
19798 @item -fstack-limit-register=@var{reg}
19799 @itemx -fstack-limit-symbol=@var{sym}
19800 @itemx -fno-stack-limit
19801 @opindex fstack-limit-register
19802 @opindex fstack-limit-symbol
19803 @opindex fno-stack-limit
19804 Generate code to ensure that the stack does not grow beyond a certain value,
19805 either the value of a register or the address of a symbol.  If a larger
19806 stack is required, a signal is raised at run time.  For most targets,
19807 the signal is raised before the stack overruns the boundary, so
19808 it is possible to catch the signal without taking special precautions.
19810 For instance, if the stack starts at absolute address @samp{0x80000000}
19811 and grows downwards, you can use the flags
19812 @option{-fstack-limit-symbol=__stack_limit} and
19813 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
19814 of 128KB@.  Note that this may only work with the GNU linker.
19816 @item -fsplit-stack
19817 @opindex fsplit-stack
19818 Generate code to automatically split the stack before it overflows.
19819 The resulting program has a discontiguous stack which can only
19820 overflow if the program is unable to allocate any more memory.  This
19821 is most useful when running threaded programs, as it is no longer
19822 necessary to calculate a good stack size to use for each thread.  This
19823 is currently only implemented for the i386 and x86_64 back ends running
19824 GNU/Linux.
19826 When code compiled with @option{-fsplit-stack} calls code compiled
19827 without @option{-fsplit-stack}, there may not be much stack space
19828 available for the latter code to run.  If compiling all code,
19829 including library code, with @option{-fsplit-stack} is not an option,
19830 then the linker can fix up these calls so that the code compiled
19831 without @option{-fsplit-stack} always has a large stack.  Support for
19832 this is implemented in the gold linker in GNU binutils release 2.21
19833 and later.
19835 @item -fleading-underscore
19836 @opindex fleading-underscore
19837 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
19838 change the way C symbols are represented in the object file.  One use
19839 is to help link with legacy assembly code.
19841 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
19842 generate code that is not binary compatible with code generated without that
19843 switch.  Use it to conform to a non-default application binary interface.
19844 Not all targets provide complete support for this switch.
19846 @item -ftls-model=@var{model}
19847 @opindex ftls-model
19848 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
19849 The @var{model} argument should be one of @code{global-dynamic},
19850 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
19852 The default without @option{-fpic} is @code{initial-exec}; with
19853 @option{-fpic} the default is @code{global-dynamic}.
19855 @item -fvisibility=@var{default|internal|hidden|protected}
19856 @opindex fvisibility
19857 Set the default ELF image symbol visibility to the specified option---all
19858 symbols are marked with this unless overridden within the code.
19859 Using this feature can very substantially improve linking and
19860 load times of shared object libraries, produce more optimized
19861 code, provide near-perfect API export and prevent symbol clashes.
19862 It is @strong{strongly} recommended that you use this in any shared objects
19863 you distribute.
19865 Despite the nomenclature, @code{default} always means public; i.e.,
19866 available to be linked against from outside the shared object.
19867 @code{protected} and @code{internal} are pretty useless in real-world
19868 usage so the only other commonly used option is @code{hidden}.
19869 The default if @option{-fvisibility} isn't specified is
19870 @code{default}, i.e., make every
19871 symbol public---this causes the same behavior as previous versions of
19872 GCC@.
19874 A good explanation of the benefits offered by ensuring ELF
19875 symbols have the correct visibility is given by ``How To Write
19876 Shared Libraries'' by Ulrich Drepper (which can be found at
19877 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
19878 solution made possible by this option to marking things hidden when
19879 the default is public is to make the default hidden and mark things
19880 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
19881 and @code{__attribute__ ((visibility("default")))} instead of
19882 @code{__declspec(dllexport)} you get almost identical semantics with
19883 identical syntax.  This is a great boon to those working with
19884 cross-platform projects.
19886 For those adding visibility support to existing code, you may find
19887 @samp{#pragma GCC visibility} of use.  This works by you enclosing
19888 the declarations you wish to set visibility for with (for example)
19889 @samp{#pragma GCC visibility push(hidden)} and
19890 @samp{#pragma GCC visibility pop}.
19891 Bear in mind that symbol visibility should be viewed @strong{as
19892 part of the API interface contract} and thus all new code should
19893 always specify visibility when it is not the default; i.e., declarations
19894 only for use within the local DSO should @strong{always} be marked explicitly
19895 as hidden as so to avoid PLT indirection overheads---making this
19896 abundantly clear also aids readability and self-documentation of the code.
19897 Note that due to ISO C++ specification requirements, @code{operator new} and
19898 @code{operator delete} must always be of default visibility.
19900 Be aware that headers from outside your project, in particular system
19901 headers and headers from any other library you use, may not be
19902 expecting to be compiled with visibility other than the default.  You
19903 may need to explicitly say @samp{#pragma GCC visibility push(default)}
19904 before including any such headers.
19906 @samp{extern} declarations are not affected by @option{-fvisibility}, so
19907 a lot of code can be recompiled with @option{-fvisibility=hidden} with
19908 no modifications.  However, this means that calls to @code{extern}
19909 functions with no explicit visibility use the PLT, so it is more
19910 effective to use @code{__attribute ((visibility))} and/or
19911 @code{#pragma GCC visibility} to tell the compiler which @code{extern}
19912 declarations should be treated as hidden.
19914 Note that @option{-fvisibility} does affect C++ vague linkage
19915 entities. This means that, for instance, an exception class that is
19916 be thrown between DSOs must be explicitly marked with default
19917 visibility so that the @samp{type_info} nodes are unified between
19918 the DSOs.
19920 An overview of these techniques, their benefits and how to use them
19921 is at @uref{http://gcc.gnu.org/@/wiki/@/Visibility}.
19923 @item -fstrict-volatile-bitfields
19924 @opindex fstrict-volatile-bitfields
19925 This option should be used if accesses to volatile bit-fields (or other
19926 structure fields, although the compiler usually honors those types
19927 anyway) should use a single access of the width of the
19928 field's type, aligned to a natural alignment if possible.  For
19929 example, targets with memory-mapped peripheral registers might require
19930 all such accesses to be 16 bits wide; with this flag the user could
19931 declare all peripheral bit-fields as @code{unsigned short} (assuming short
19932 is 16 bits on these targets) to force GCC to use 16-bit accesses
19933 instead of, perhaps, a more efficient 32-bit access.
19935 If this option is disabled, the compiler uses the most efficient
19936 instruction.  In the previous example, that might be a 32-bit load
19937 instruction, even though that accesses bytes that do not contain
19938 any portion of the bit-field, or memory-mapped registers unrelated to
19939 the one being updated.
19941 If the target requires strict alignment, and honoring the field
19942 type would require violating this alignment, a warning is issued.
19943 If the field has @code{packed} attribute, the access is done without
19944 honoring the field type.  If the field doesn't have @code{packed}
19945 attribute, the access is done honoring the field type.  In both cases,
19946 GCC assumes that the user knows something about the target hardware
19947 that it is unaware of.
19949 The default value of this option is determined by the application binary
19950 interface for the target processor.
19952 @item -fsync-libcalls
19953 @opindex fsync-libcalls
19954 This option controls whether any out-of-line instance of the @code{__sync}
19955 family of functions may be used to implement the C++11 @code{__atomic}
19956 family of functions.
19958 The default value of this option is enabled, thus the only useful form
19959 of the option is @option{-fno-sync-libcalls}.  This option is used in
19960 the implementation of the @file{libatomic} runtime library.
19962 @end table
19964 @c man end
19966 @node Environment Variables
19967 @section Environment Variables Affecting GCC
19968 @cindex environment variables
19970 @c man begin ENVIRONMENT
19971 This section describes several environment variables that affect how GCC
19972 operates.  Some of them work by specifying directories or prefixes to use
19973 when searching for various kinds of files.  Some are used to specify other
19974 aspects of the compilation environment.
19976 Note that you can also specify places to search using options such as
19977 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
19978 take precedence over places specified using environment variables, which
19979 in turn take precedence over those specified by the configuration of GCC@.
19980 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
19981 GNU Compiler Collection (GCC) Internals}.
19983 @table @env
19984 @item LANG
19985 @itemx LC_CTYPE
19986 @c @itemx LC_COLLATE
19987 @itemx LC_MESSAGES
19988 @c @itemx LC_MONETARY
19989 @c @itemx LC_NUMERIC
19990 @c @itemx LC_TIME
19991 @itemx LC_ALL
19992 @findex LANG
19993 @findex LC_CTYPE
19994 @c @findex LC_COLLATE
19995 @findex LC_MESSAGES
19996 @c @findex LC_MONETARY
19997 @c @findex LC_NUMERIC
19998 @c @findex LC_TIME
19999 @findex LC_ALL
20000 @cindex locale
20001 These environment variables control the way that GCC uses
20002 localization information which allows GCC to work with different
20003 national conventions.  GCC inspects the locale categories
20004 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
20005 so.  These locale categories can be set to any value supported by your
20006 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
20007 Kingdom encoded in UTF-8.
20009 The @env{LC_CTYPE} environment variable specifies character
20010 classification.  GCC uses it to determine the character boundaries in
20011 a string; this is needed for some multibyte encodings that contain quote
20012 and escape characters that are otherwise interpreted as a string
20013 end or escape.
20015 The @env{LC_MESSAGES} environment variable specifies the language to
20016 use in diagnostic messages.
20018 If the @env{LC_ALL} environment variable is set, it overrides the value
20019 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
20020 and @env{LC_MESSAGES} default to the value of the @env{LANG}
20021 environment variable.  If none of these variables are set, GCC
20022 defaults to traditional C English behavior.
20024 @item TMPDIR
20025 @findex TMPDIR
20026 If @env{TMPDIR} is set, it specifies the directory to use for temporary
20027 files.  GCC uses temporary files to hold the output of one stage of
20028 compilation which is to be used as input to the next stage: for example,
20029 the output of the preprocessor, which is the input to the compiler
20030 proper.
20032 @item GCC_COMPARE_DEBUG
20033 @findex GCC_COMPARE_DEBUG
20034 Setting @env{GCC_COMPARE_DEBUG} is nearly equivalent to passing
20035 @option{-fcompare-debug} to the compiler driver.  See the documentation
20036 of this option for more details.
20038 @item GCC_EXEC_PREFIX
20039 @findex GCC_EXEC_PREFIX
20040 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
20041 names of the subprograms executed by the compiler.  No slash is added
20042 when this prefix is combined with the name of a subprogram, but you can
20043 specify a prefix that ends with a slash if you wish.
20045 If @env{GCC_EXEC_PREFIX} is not set, GCC attempts to figure out
20046 an appropriate prefix to use based on the pathname it is invoked with.
20048 If GCC cannot find the subprogram using the specified prefix, it
20049 tries looking in the usual places for the subprogram.
20051 The default value of @env{GCC_EXEC_PREFIX} is
20052 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
20053 the installed compiler. In many cases @var{prefix} is the value
20054 of @code{prefix} when you ran the @file{configure} script.
20056 Other prefixes specified with @option{-B} take precedence over this prefix.
20058 This prefix is also used for finding files such as @file{crt0.o} that are
20059 used for linking.
20061 In addition, the prefix is used in an unusual way in finding the
20062 directories to search for header files.  For each of the standard
20063 directories whose name normally begins with @samp{/usr/local/lib/gcc}
20064 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
20065 replacing that beginning with the specified prefix to produce an
20066 alternate directory name.  Thus, with @option{-Bfoo/}, GCC searches
20067 @file{foo/bar} just before it searches the standard directory 
20068 @file{/usr/local/lib/bar}.
20069 If a standard directory begins with the configured
20070 @var{prefix} then the value of @var{prefix} is replaced by
20071 @env{GCC_EXEC_PREFIX} when looking for header files.
20073 @item COMPILER_PATH
20074 @findex COMPILER_PATH
20075 The value of @env{COMPILER_PATH} is a colon-separated list of
20076 directories, much like @env{PATH}.  GCC tries the directories thus
20077 specified when searching for subprograms, if it can't find the
20078 subprograms using @env{GCC_EXEC_PREFIX}.
20080 @item LIBRARY_PATH
20081 @findex LIBRARY_PATH
20082 The value of @env{LIBRARY_PATH} is a colon-separated list of
20083 directories, much like @env{PATH}.  When configured as a native compiler,
20084 GCC tries the directories thus specified when searching for special
20085 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
20086 using GCC also uses these directories when searching for ordinary
20087 libraries for the @option{-l} option (but directories specified with
20088 @option{-L} come first).
20090 @item LANG
20091 @findex LANG
20092 @cindex locale definition
20093 This variable is used to pass locale information to the compiler.  One way in
20094 which this information is used is to determine the character set to be used
20095 when character literals, string literals and comments are parsed in C and C++.
20096 When the compiler is configured to allow multibyte characters,
20097 the following values for @env{LANG} are recognized:
20099 @table @samp
20100 @item C-JIS
20101 Recognize JIS characters.
20102 @item C-SJIS
20103 Recognize SJIS characters.
20104 @item C-EUCJP
20105 Recognize EUCJP characters.
20106 @end table
20108 If @env{LANG} is not defined, or if it has some other value, then the
20109 compiler uses @code{mblen} and @code{mbtowc} as defined by the default locale to
20110 recognize and translate multibyte characters.
20111 @end table
20113 @noindent
20114 Some additional environment variables affect the behavior of the
20115 preprocessor.
20117 @include cppenv.texi
20119 @c man end
20121 @node Precompiled Headers
20122 @section Using Precompiled Headers
20123 @cindex precompiled headers
20124 @cindex speed of compilation
20126 Often large projects have many header files that are included in every
20127 source file.  The time the compiler takes to process these header files
20128 over and over again can account for nearly all of the time required to
20129 build the project.  To make builds faster, GCC allows you to
20130 @dfn{precompile} a header file.
20132 To create a precompiled header file, simply compile it as you would any
20133 other file, if necessary using the @option{-x} option to make the driver
20134 treat it as a C or C++ header file.  You may want to use a
20135 tool like @command{make} to keep the precompiled header up-to-date when
20136 the headers it contains change.
20138 A precompiled header file is searched for when @code{#include} is
20139 seen in the compilation.  As it searches for the included file
20140 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
20141 compiler looks for a precompiled header in each directory just before it
20142 looks for the include file in that directory.  The name searched for is
20143 the name specified in the @code{#include} with @samp{.gch} appended.  If
20144 the precompiled header file can't be used, it is ignored.
20146 For instance, if you have @code{#include "all.h"}, and you have
20147 @file{all.h.gch} in the same directory as @file{all.h}, then the
20148 precompiled header file is used if possible, and the original
20149 header is used otherwise.
20151 Alternatively, you might decide to put the precompiled header file in a
20152 directory and use @option{-I} to ensure that directory is searched
20153 before (or instead of) the directory containing the original header.
20154 Then, if you want to check that the precompiled header file is always
20155 used, you can put a file of the same name as the original header in this
20156 directory containing an @code{#error} command.
20158 This also works with @option{-include}.  So yet another way to use
20159 precompiled headers, good for projects not designed with precompiled
20160 header files in mind, is to simply take most of the header files used by
20161 a project, include them from another header file, precompile that header
20162 file, and @option{-include} the precompiled header.  If the header files
20163 have guards against multiple inclusion, they are skipped because
20164 they've already been included (in the precompiled header).
20166 If you need to precompile the same header file for different
20167 languages, targets, or compiler options, you can instead make a
20168 @emph{directory} named like @file{all.h.gch}, and put each precompiled
20169 header in the directory, perhaps using @option{-o}.  It doesn't matter
20170 what you call the files in the directory; every precompiled header in
20171 the directory is considered.  The first precompiled header
20172 encountered in the directory that is valid for this compilation is
20173 used; they're searched in no particular order.
20175 There are many other possibilities, limited only by your imagination,
20176 good sense, and the constraints of your build system.
20178 A precompiled header file can be used only when these conditions apply:
20180 @itemize
20181 @item
20182 Only one precompiled header can be used in a particular compilation.
20184 @item
20185 A precompiled header can't be used once the first C token is seen.  You
20186 can have preprocessor directives before a precompiled header; you cannot
20187 include a precompiled header from inside another header.
20189 @item
20190 The precompiled header file must be produced for the same language as
20191 the current compilation.  You can't use a C precompiled header for a C++
20192 compilation.
20194 @item
20195 The precompiled header file must have been produced by the same compiler
20196 binary as the current compilation is using.
20198 @item
20199 Any macros defined before the precompiled header is included must
20200 either be defined in the same way as when the precompiled header was
20201 generated, or must not affect the precompiled header, which usually
20202 means that they don't appear in the precompiled header at all.
20204 The @option{-D} option is one way to define a macro before a
20205 precompiled header is included; using a @code{#define} can also do it.
20206 There are also some options that define macros implicitly, like
20207 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
20208 defined this way.
20210 @item If debugging information is output when using the precompiled
20211 header, using @option{-g} or similar, the same kind of debugging information
20212 must have been output when building the precompiled header.  However,
20213 a precompiled header built using @option{-g} can be used in a compilation
20214 when no debugging information is being output.
20216 @item The same @option{-m} options must generally be used when building
20217 and using the precompiled header.  @xref{Submodel Options},
20218 for any cases where this rule is relaxed.
20220 @item Each of the following options must be the same when building and using
20221 the precompiled header:
20223 @gccoptlist{-fexceptions}
20225 @item
20226 Some other command-line options starting with @option{-f},
20227 @option{-p}, or @option{-O} must be defined in the same way as when
20228 the precompiled header was generated.  At present, it's not clear
20229 which options are safe to change and which are not; the safest choice
20230 is to use exactly the same options when generating and using the
20231 precompiled header.  The following are known to be safe:
20233 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
20234 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
20235 -fsched-verbose=@var{number}  -fschedule-insns  -fvisibility= @gol
20236 -pedantic-errors}
20238 @end itemize
20240 For all of these except the last, the compiler automatically
20241 ignores the precompiled header if the conditions aren't met.  If you
20242 find an option combination that doesn't work and doesn't cause the
20243 precompiled header to be ignored, please consider filing a bug report,
20244 see @ref{Bugs}.
20246 If you do use differing options when generating and using the
20247 precompiled header, the actual behavior is a mixture of the
20248 behavior for the options.  For instance, if you use @option{-g} to
20249 generate the precompiled header but not when using it, you may or may
20250 not get debugging information for routines in the precompiled header.