OSDN Git Service

gcc/
[pf3gnuchains/gcc-fork.git] / gcc / doc / invoke.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 @c Free Software Foundation, Inc.
4 @c This is part of the GCC manual.
5 @c For copying conditions, see the file gcc.texi.
6
7 @ignore
8 @c man begin INCLUDE
9 @include gcc-vers.texi
10 @c man end
11
12 @c man begin COPYRIGHT
13 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
14 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
15 Free Software Foundation, Inc.
16
17 Permission is granted to copy, distribute and/or modify this document
18 under the terms of the GNU Free Documentation License, Version 1.2 or
19 any later version published by the Free Software Foundation; with the
20 Invariant Sections being ``GNU General Public License'' and ``Funding
21 Free Software'', the Front-Cover texts being (a) (see below), and with
22 the Back-Cover Texts being (b) (see below).  A copy of the license is
23 included in the gfdl(7) man page.
24
25 (a) The FSF's Front-Cover Text is:
26
27      A GNU Manual
28
29 (b) The FSF's Back-Cover Text is:
30
31      You have freedom to copy and modify this GNU Manual, like GNU
32      software.  Copies published by the Free Software Foundation raise
33      funds for GNU development.
34 @c man end
35 @c Set file name and title for the man page.
36 @setfilename gcc
37 @settitle GNU project C and C++ compiler
38 @c man begin SYNOPSIS
39 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
40     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
41     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
42     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
43     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
44     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
45     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
46
47 Only the most useful options are listed here; see below for the
48 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
49 @c man end
50 @c man begin SEEALSO
51 gpl(7), gfdl(7), fsf-funding(7),
52 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
53 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
54 @file{ld}, @file{binutils} and @file{gdb}.
55 @c man end
56 @c man begin BUGS
57 For instructions on reporting bugs, see
58 @w{@value{BUGURL}}.
59 @c man end
60 @c man begin AUTHOR
61 See the Info entry for @command{gcc}, or
62 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
63 for contributors to GCC@.
64 @c man end
65 @end ignore
66
67 @node Invoking GCC
68 @chapter GCC Command Options
69 @cindex GCC command options
70 @cindex command options
71 @cindex options, GCC command
72
73 @c man begin DESCRIPTION
74 When you invoke GCC, it normally does preprocessing, compilation,
75 assembly and linking.  The ``overall options'' allow you to stop this
76 process at an intermediate stage.  For example, the @option{-c} option
77 says not to run the linker.  Then the output consists of object files
78 output by the assembler.
79
80 Other options are passed on to one stage of processing.  Some options
81 control the preprocessor and others the compiler itself.  Yet other
82 options control the assembler and linker; most of these are not
83 documented here, since you rarely need to use any of them.
84
85 @cindex C compilation options
86 Most of the command line options that you can use with GCC are useful
87 for C programs; when an option is only useful with another language
88 (usually C++), the explanation says so explicitly.  If the description
89 for a particular option does not mention a source language, you can use
90 that option with all supported languages.
91
92 @cindex C++ compilation options
93 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
94 options for compiling C++ programs.
95
96 @cindex grouping options
97 @cindex options, grouping
98 The @command{gcc} program accepts options and file names as operands.  Many
99 options have multi-letter names; therefore multiple single-letter options
100 may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
101 -v}}.
102
103 @cindex order of options
104 @cindex options, order
105 You can mix options and other arguments.  For the most part, the order
106 you use doesn't matter.  Order does matter when you use several
107 options of the same kind; for example, if you specify @option{-L} more
108 than once, the directories are searched in the order specified.  Also,
109 the placement of the @option{-l} option is significant.
110
111 Many options have long names starting with @samp{-f} or with
112 @samp{-W}---for example,
113 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
114 these have both positive and negative forms; the negative form of
115 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
116 only one of these two forms, whichever one is not the default.
117
118 @c man end
119
120 @xref{Option Index}, for an index to GCC's options.
121
122 @menu
123 * Option Summary::      Brief list of all options, without explanations.
124 * Overall Options::     Controlling the kind of output:
125                         an executable, object files, assembler files,
126                         or preprocessed source.
127 * Invoking G++::        Compiling C++ programs.
128 * C Dialect Options::   Controlling the variant of C language compiled.
129 * C++ Dialect Options:: Variations on C++.
130 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
131                         and Objective-C++.
132 * Language Independent Options:: Controlling how diagnostics should be
133                         formatted.
134 * Warning Options::     How picky should the compiler be?
135 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
136 * Optimize Options::    How much optimization?
137 * Preprocessor Options:: Controlling header files and macro definitions.
138                          Also, getting dependency information for Make.
139 * Assembler Options::   Passing options to the assembler.
140 * Link Options::        Specifying libraries and so on.
141 * Directory Options::   Where to find header files and libraries.
142                         Where to find the compiler executable files.
143 * Spec Files::          How to pass switches to sub-processes.
144 * Target Options::      Running a cross-compiler, or an old version of GCC.
145 * Submodel Options::    Specifying minor hardware or convention variations,
146                         such as 68010 vs 68020.
147 * Code Gen Options::    Specifying conventions for function calls, data layout
148                         and register usage.
149 * Environment Variables:: Env vars that affect GCC.
150 * Precompiled Headers:: Compiling a header once, and using it many times.
151 * Running Protoize::    Automatically adding or removing function prototypes.
152 @end menu
153
154 @c man begin OPTIONS
155
156 @node Option Summary
157 @section Option Summary
158
159 Here is a summary of all the options, grouped by type.  Explanations are
160 in the following sections.
161
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}  -combine  -pipe  -pass-exit-codes  @gol
166 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
167 --version -wrapper@@@var{file}}
168
169 @item C Language Options
170 @xref{C Dialect Options,,Options Controlling C Dialect}.
171 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
172 -aux-info @var{filename} @gol
173 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
174 -fhosted  -ffreestanding -fopenmp -fms-extensions @gol
175 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
176 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
177 -fsigned-bitfields  -fsigned-char @gol
178 -funsigned-bitfields  -funsigned-char}
179
180 @item C++ Language Options
181 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
182 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
183 -fconserve-space  -ffriend-injection @gol
184 -fno-elide-constructors @gol
185 -fno-enforce-eh-specs @gol
186 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
187 -fno-implicit-templates @gol
188 -fno-implicit-inline-templates @gol
189 -fno-implement-inlines  -fms-extensions @gol
190 -fno-nonansi-builtins  -fno-operator-names @gol
191 -fno-optional-diags  -fpermissive @gol
192 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
193 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
194 -fno-default-inline  -fvisibility-inlines-hidden @gol
195 -fvisibility-ms-compat @gol
196 -Wabi  -Wctor-dtor-privacy @gol
197 -Wnon-virtual-dtor  -Wreorder @gol
198 -Weffc++  -Wstrict-null-sentinel @gol
199 -Wno-non-template-friend  -Wold-style-cast @gol
200 -Woverloaded-virtual  -Wno-pmf-conversions @gol
201 -Wsign-promo}
202
203 @item Objective-C and Objective-C++ Language Options
204 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
205 Objective-C and Objective-C++ Dialects}.
206 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
207 -fgnu-runtime  -fnext-runtime @gol
208 -fno-nil-receivers @gol
209 -fobjc-call-cxx-cdtors @gol
210 -fobjc-direct-dispatch @gol
211 -fobjc-exceptions @gol
212 -fobjc-gc @gol
213 -freplace-objc-classes @gol
214 -fzero-link @gol
215 -gen-decls @gol
216 -Wassign-intercept @gol
217 -Wno-protocol  -Wselector @gol
218 -Wstrict-selector-match @gol
219 -Wundeclared-selector}
220
221 @item Language Independent Options
222 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
223 @gccoptlist{-fmessage-length=@var{n}  @gol
224 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
225 -fdiagnostics-show-option}
226
227 @item Warning Options
228 @xref{Warning Options,,Options to Request or Suppress Warnings}.
229 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
230 -w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds @gol
231 -Wno-attributes -Wno-builtin-macro-redefined @gol
232 -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual  @gol
233 -Wchar-subscripts -Wclobbered  -Wcomment @gol
234 -Wconversion  -Wcoverage-mismatch  -Wno-deprecated  @gol
235 -Wno-deprecated-declarations -Wdisabled-optimization  @gol
236 -Wdisallowed-function-list=@var{sym},@var{sym},@dots{} @gol
237 -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
238 -Werror  -Werror=* @gol
239 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
240 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
241 -Wformat-security  -Wformat-y2k @gol
242 -Wframe-larger-than=@var{len} -Wignored-qualifiers @gol
243 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
244 -Winit-self  -Winline @gol
245 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
246 -Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
247 -Wlogical-op -Wlong-long @gol
248 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
249 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
250 -Wmissing-noreturn  -Wno-mudflap @gol
251 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
252 -Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
253 -Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
254 -Wpointer-arith  -Wno-pointer-to-int-cast @gol
255 -Wredundant-decls @gol
256 -Wreturn-type  -Wsequence-point  -Wshadow @gol
257 -Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
258 -Wstrict-aliasing -Wstrict-aliasing=n @gol
259 -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
260 -Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand @gol
261 -Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized @gol
262 -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
263 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
264 -Wunused-value  -Wunused-variable @gol
265 -Wvariadic-macros -Wvla @gol
266 -Wvolatile-register-var  -Wwrite-strings}
267
268 @item C and Objective-C-only Warning Options
269 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
270 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
271 -Wold-style-declaration  -Wold-style-definition @gol
272 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
273 -Wdeclaration-after-statement -Wpointer-sign}
274
275 @item Debugging Options
276 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
277 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
278 -fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
279 -fdump-noaddr -fdump-unnumbered @gol
280 -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
281 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
282 -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
283 -fdump-statistics @gol
284 -fdump-tree-all @gol
285 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
286 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
287 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
288 -fdump-tree-ch @gol
289 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
290 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
291 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
292 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
293 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
294 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
295 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
296 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
297 -fdump-tree-nrv -fdump-tree-vect @gol
298 -fdump-tree-sink @gol
299 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
300 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
301 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
302 -ftree-vectorizer-verbose=@var{n} @gol
303 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
304 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
305 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
306 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
307 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
308 -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
309 -ftest-coverage  -ftime-report -fvar-tracking @gol
310 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
311 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
312 -fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
313 -fdebug-prefix-map=@var{old}=@var{new} @gol
314 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
315 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
316 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
317 -print-multi-directory  -print-multi-lib @gol
318 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
319 -print-sysroot -print-sysroot-headers-suffix @gol
320 -save-temps  -time}
321
322 @item Optimization Options
323 @xref{Optimize Options,,Options that Control Optimization}.
324 @gccoptlist{
325 -falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
326 -falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
327 -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
328 -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
329 -fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol
330 -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol
331 -fdata-sections -fdce -fdce @gol
332 -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol
333 -fearly-inlining -fexpensive-optimizations -ffast-math @gol
334 -ffinite-math-only -ffloat-store -fforward-propagate @gol
335 -ffunction-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol
336 -fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
337 -finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
338 -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta @gol 
339 -fipa-pure-const -fipa-reference -fipa-struct-reorg @gol
340 -fipa-type-escape -fira-algorithm=@var{algorithm} @gol
341 -fira-region=@var{region} -fira-coalesce -fno-ira-share-save-slots @gol
342 -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
343 -fivopts -fkeep-inline-functions -fkeep-static-consts @gol
344 -floop-block -floop-interchange -floop-strip-mine @gol
345 -fmerge-all-constants -fmerge-constants -fmodulo-sched @gol
346 -fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol
347 -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol
348 -fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
349 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
350 -fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
351 -fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
352 -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
353 -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol
354 -fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
355 -fprofile-generate=@var{path} @gol
356 -fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
357 -freciprocal-math -fregmove -frename-registers -freorder-blocks @gol
358 -freorder-blocks-and-partition -freorder-functions @gol
359 -frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
360 -frounding-math -frtl-abstract-sequences -fsched2-use-superblocks @gol
361 -fsched2-use-traces -fsched-spec-load -fsched-spec-load-dangerous @gol
362 -fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
363 -fschedule-insns -fschedule-insns2 -fsection-anchors -fsee @gol
364 -fselective-scheduling -fselective-scheduling2 @gol
365 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
366 -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
367 -fsplit-wide-types -fstack-protector -fstack-protector-all @gol
368 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer @gol
369 -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol
370 -ftree-copyrename -ftree-dce @gol
371 -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im @gol
372 -ftree-loop-distribution @gol
373 -ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
374 -ftree-parallelize-loops=@var{n} -ftree-pre -ftree-reassoc @gol
375 -ftree-sink -ftree-sra -ftree-switch-conversion @gol
376 -ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
377 -funit-at-a-time -funroll-all-loops -funroll-loops @gol
378 -funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
379 -fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
380 -fwhole-program @gol
381 --param @var{name}=@var{value}
382 -O  -O0  -O1  -O2  -O3  -Os}
383
384 @item Preprocessor Options
385 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
386 @gccoptlist{-A@var{question}=@var{answer} @gol
387 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
388 -C  -dD  -dI  -dM  -dN @gol
389 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
390 -idirafter @var{dir} @gol
391 -include @var{file}  -imacros @var{file} @gol
392 -iprefix @var{file}  -iwithprefix @var{dir} @gol
393 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
394 -imultilib @var{dir} -isysroot @var{dir} @gol
395 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
396 -P  -fworking-directory  -remap @gol
397 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
398 -Xpreprocessor @var{option}}
399
400 @item Assembler Option
401 @xref{Assembler Options,,Passing Options to the Assembler}.
402 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
403
404 @item Linker Options
405 @xref{Link Options,,Options for Linking}.
406 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
407 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
408 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
409 -T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
410 -u @var{symbol}}
411
412 @item Directory Options
413 @xref{Directory Options,,Options for Directory Search}.
414 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
415 -specs=@var{file}  -I- --sysroot=@var{dir}}
416
417 @item Target Options
418 @c I wrote this xref this way to avoid overfull hbox. -- rms
419 @xref{Target Options}.
420 @gccoptlist{-V @var{version}  -b @var{machine}}
421
422 @item Machine Dependent Options
423 @xref{Submodel Options,,Hardware Models and Configurations}.
424 @c This list is ordered alphanumerically by subsection name.
425 @c Try and put the significant identifier (CPU or system) first,
426 @c so users have a clue at guessing where the ones they want will be.
427
428 @emph{ARC Options}
429 @gccoptlist{-EB  -EL @gol
430 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
431 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
432
433 @emph{ARM Options}
434 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
435 -mabi=@var{name} @gol
436 -mapcs-stack-check  -mno-apcs-stack-check @gol
437 -mapcs-float  -mno-apcs-float @gol
438 -mapcs-reentrant  -mno-apcs-reentrant @gol
439 -msched-prolog  -mno-sched-prolog @gol
440 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
441 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
442 -mthumb-interwork  -mno-thumb-interwork @gol
443 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
444 -mstructure-size-boundary=@var{n} @gol
445 -mabort-on-noreturn @gol
446 -mlong-calls  -mno-long-calls @gol
447 -msingle-pic-base  -mno-single-pic-base @gol
448 -mpic-register=@var{reg} @gol
449 -mnop-fun-dllimport @gol
450 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
451 -mpoke-function-name @gol
452 -mthumb  -marm @gol
453 -mtpcs-frame  -mtpcs-leaf-frame @gol
454 -mcaller-super-interworking  -mcallee-super-interworking @gol
455 -mtp=@var{name} @gol
456 -mword-relocations @gol
457 -mfix-cortex-m3-ldrd}
458
459 @emph{AVR Options}
460 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
461 -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
462
463 @emph{Blackfin Options}
464 @gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
465 -msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
466 -mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
467 -mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
468 -mno-id-shared-library  -mshared-library-id=@var{n} @gol
469 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
470 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
471 -mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
472 -micplb}
473
474 @emph{CRIS Options}
475 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
476 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
477 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
478 -mstack-align  -mdata-align  -mconst-align @gol
479 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
480 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
481 -mmul-bug-workaround  -mno-mul-bug-workaround}
482
483 @emph{CRX Options}
484 @gccoptlist{-mmac -mpush-args}
485
486 @emph{Darwin Options}
487 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
488 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
489 -client_name  -compatibility_version  -current_version @gol
490 -dead_strip @gol
491 -dependency-file  -dylib_file  -dylinker_install_name @gol
492 -dynamic  -dynamiclib  -exported_symbols_list @gol
493 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
494 -force_flat_namespace  -headerpad_max_install_names @gol
495 -iframework @gol
496 -image_base  -init  -install_name  -keep_private_externs @gol
497 -multi_module  -multiply_defined  -multiply_defined_unused @gol
498 -noall_load   -no_dead_strip_inits_and_terms @gol
499 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
500 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
501 -private_bundle  -read_only_relocs  -sectalign @gol
502 -sectobjectsymbols  -whyload  -seg1addr @gol
503 -sectcreate  -sectobjectsymbols  -sectorder @gol
504 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
505 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
506 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
507 -single_module  -static  -sub_library  -sub_umbrella @gol
508 -twolevel_namespace  -umbrella  -undefined @gol
509 -unexported_symbols_list  -weak_reference_mismatches @gol
510 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
511 -mkernel -mone-byte-bool}
512
513 @emph{DEC Alpha Options}
514 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
515 -mieee  -mieee-with-inexact  -mieee-conformant @gol
516 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
517 -mtrap-precision=@var{mode}  -mbuild-constants @gol
518 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
519 -mbwx  -mmax  -mfix  -mcix @gol
520 -mfloat-vax  -mfloat-ieee @gol
521 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
522 -msmall-text  -mlarge-text @gol
523 -mmemory-latency=@var{time}}
524
525 @emph{DEC Alpha/VMS Options}
526 @gccoptlist{-mvms-return-codes}
527
528 @emph{FR30 Options}
529 @gccoptlist{-msmall-model -mno-lsim}
530
531 @emph{FRV Options}
532 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
533 -mhard-float  -msoft-float @gol
534 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
535 -mdouble  -mno-double @gol
536 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
537 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
538 -mlinked-fp  -mlong-calls  -malign-labels @gol
539 -mlibrary-pic  -macc-4  -macc-8 @gol
540 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
541 -moptimize-membar -mno-optimize-membar @gol
542 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
543 -mvliw-branch  -mno-vliw-branch @gol
544 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
545 -mno-nested-cond-exec  -mtomcat-stats @gol
546 -mTLS -mtls @gol
547 -mcpu=@var{cpu}}
548
549 @emph{GNU/Linux Options}
550 @gccoptlist{-muclibc}
551
552 @emph{H8/300 Options}
553 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
554
555 @emph{HPPA Options}
556 @gccoptlist{-march=@var{architecture-type} @gol
557 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
558 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
559 -mfixed-range=@var{register-range} @gol
560 -mjump-in-delay -mlinker-opt -mlong-calls @gol
561 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
562 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
563 -mno-jump-in-delay  -mno-long-load-store @gol
564 -mno-portable-runtime  -mno-soft-float @gol
565 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
566 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
567 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
568 -munix=@var{unix-std}  -nolibdld  -static  -threads}
569
570 @emph{i386 and x86-64 Options}
571 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
572 -mfpmath=@var{unit} @gol
573 -masm=@var{dialect}  -mno-fancy-math-387 @gol
574 -mno-fp-ret-in-387  -msoft-float @gol
575 -mno-wide-multiply  -mrtd  -malign-double @gol
576 -mpreferred-stack-boundary=@var{num}
577 -mincoming-stack-boundary=@var{num}
578 -mcld -mcx16 -msahf -mrecip @gol
579 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
580 -maes -mpclmul @gol
581 -msse4a -m3dnow -mpopcnt -mabm -msse5 @gol
582 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
583 -minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
584 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
585 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
586 -mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol
587 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
588 -mcmodel=@var{code-model} @gol
589 -m32  -m64 -mlarge-data-threshold=@var{num} @gol
590 -mfused-madd -mno-fused-madd -msse2avx}
591
592 @emph{IA-64 Options}
593 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
594 -mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
595 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
596 -minline-float-divide-max-throughput @gol
597 -minline-int-divide-min-latency @gol
598 -minline-int-divide-max-throughput  @gol
599 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
600 -mno-dwarf2-asm -mearly-stop-bits @gol
601 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
602 -mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol
603 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol
604 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
605 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol
606 -mno-sched-prefer-non-data-spec-insns @gol
607 -mno-sched-prefer-non-control-spec-insns @gol
608 -mno-sched-count-spec-in-critical-path}
609
610 @emph{M32R/D Options}
611 @gccoptlist{-m32r2 -m32rx -m32r @gol
612 -mdebug @gol
613 -malign-loops -mno-align-loops @gol
614 -missue-rate=@var{number} @gol
615 -mbranch-cost=@var{number} @gol
616 -mmodel=@var{code-size-model-type} @gol
617 -msdata=@var{sdata-type} @gol
618 -mno-flush-func -mflush-func=@var{name} @gol
619 -mno-flush-trap -mflush-trap=@var{number} @gol
620 -G @var{num}}
621
622 @emph{M32C Options}
623 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
624
625 @emph{M680x0 Options}
626 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
627 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
628 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
629 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
630 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
631 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
632 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
633 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
634 -mxgot -mno-xgot}
635
636 @emph{M68hc1x Options}
637 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
638 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
639 -msoft-reg-count=@var{count}}
640
641 @emph{MCore Options}
642 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
643 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
644 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
645 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
646 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
647
648 @emph{MIPS Options}
649 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
650 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
651 -mips64  -mips64r2 @gol
652 -mips16  -mno-mips16  -mflip-mips16 @gol
653 -minterlink-mips16  -mno-interlink-mips16 @gol
654 -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
655 -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
656 -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
657 -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
658 -mfpu=@var{fpu-type} @gol
659 -msmartmips  -mno-smartmips @gol
660 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
661 -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
662 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
663 -G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
664 -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
665 -membedded-data  -mno-embedded-data @gol
666 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
667 -mcode-readable=@var{setting} @gol
668 -msplit-addresses  -mno-split-addresses @gol
669 -mexplicit-relocs  -mno-explicit-relocs @gol
670 -mcheck-zero-division  -mno-check-zero-division @gol
671 -mdivide-traps  -mdivide-breaks @gol
672 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
673 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
674 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
675 -mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120 @gol
676 -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
677 -mflush-func=@var{func}  -mno-flush-func @gol
678 -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
679 -mfp-exceptions -mno-fp-exceptions @gol
680 -mvr4130-align -mno-vr4130-align}
681
682 @emph{MMIX Options}
683 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
684 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
685 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
686 -mno-base-addresses  -msingle-exit  -mno-single-exit}
687
688 @emph{MN10300 Options}
689 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
690 -mam33  -mno-am33 @gol
691 -mam33-2  -mno-am33-2 @gol
692 -mreturn-pointer-on-d0 @gol
693 -mno-crt0  -mrelax}
694
695 @emph{PDP-11 Options}
696 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
697 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
698 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
699 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
700 -mbranch-expensive  -mbranch-cheap @gol
701 -msplit  -mno-split  -munix-asm  -mdec-asm}
702
703 @emph{picoChip Options}
704 @gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N}
705 -msymbol-as-address -mno-inefficient-warnings}
706
707 @emph{PowerPC Options}
708 See RS/6000 and PowerPC Options.
709
710 @emph{RS/6000 and PowerPC Options}
711 @gccoptlist{-mcpu=@var{cpu-type} @gol
712 -mtune=@var{cpu-type} @gol
713 -mpower  -mno-power  -mpower2  -mno-power2 @gol
714 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
715 -maltivec  -mno-altivec @gol
716 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
717 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
718 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd @gol
719 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
720 -mnew-mnemonics  -mold-mnemonics @gol
721 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
722 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
723 -malign-power  -malign-natural @gol
724 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
725 -msingle-float -mdouble-float -msimple-fpu @gol
726 -mstring  -mno-string  -mupdate  -mno-update @gol
727 -mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
728 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
729 -mstrict-align  -mno-strict-align  -mrelocatable @gol
730 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
731 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
732 -mdynamic-no-pic  -maltivec  -mswdiv @gol
733 -mprioritize-restricted-insns=@var{priority} @gol
734 -msched-costly-dep=@var{dependence_type} @gol
735 -minsert-sched-nops=@var{scheme} @gol
736 -mcall-sysv  -mcall-netbsd @gol
737 -maix-struct-return  -msvr4-struct-return @gol
738 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
739 -misel -mno-isel @gol
740 -misel=yes  -misel=no @gol
741 -mspe -mno-spe @gol
742 -mspe=yes  -mspe=no @gol
743 -mpaired @gol
744 -mgen-cell-microcode -mwarn-cell-microcode @gol
745 -mvrsave -mno-vrsave @gol
746 -mmulhw -mno-mulhw @gol
747 -mdlmzb -mno-dlmzb @gol
748 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
749 -mprototype  -mno-prototype @gol
750 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
751 -msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread}
752
753 @emph{S/390 and zSeries Options}
754 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
755 -mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
756 -mlong-double-64 -mlong-double-128 @gol
757 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
758 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
759 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
760 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
761 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
762
763 @emph{Score Options}
764 @gccoptlist{-meb -mel @gol
765 -mnhwloop @gol
766 -muls @gol
767 -mmac @gol
768 -mscore5 -mscore5u -mscore7 -mscore7d}
769
770 @emph{SH Options}
771 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
772 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
773 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
774 -m5-64media  -m5-64media-nofpu @gol
775 -m5-32media  -m5-32media-nofpu @gol
776 -m5-compact  -m5-compact-nofpu @gol
777 -mb  -ml  -mdalign  -mrelax @gol
778 -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
779 -mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
780 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
781 -mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
782 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
783 -minvalid-symbols}
784
785 @emph{SPARC Options}
786 @gccoptlist{-mcpu=@var{cpu-type} @gol
787 -mtune=@var{cpu-type} @gol
788 -mcmodel=@var{code-model} @gol
789 -m32  -m64  -mapp-regs  -mno-app-regs @gol
790 -mfaster-structs  -mno-faster-structs @gol
791 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
792 -mhard-quad-float  -msoft-quad-float @gol
793 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
794 -mstack-bias  -mno-stack-bias @gol
795 -munaligned-doubles  -mno-unaligned-doubles @gol
796 -mv8plus  -mno-v8plus  -mvis  -mno-vis
797 -threads -pthreads -pthread}
798
799 @emph{SPU Options}
800 @gccoptlist{-mwarn-reloc -merror-reloc @gol
801 -msafe-dma -munsafe-dma @gol
802 -mbranch-hints @gol
803 -msmall-mem -mlarge-mem -mstdmain @gol
804 -mfixed-range=@var{register-range}}
805
806 @emph{System V Options}
807 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
808
809 @emph{V850 Options}
810 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
811 -mprolog-function  -mno-prolog-function  -mspace @gol
812 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
813 -mapp-regs  -mno-app-regs @gol
814 -mdisable-callt  -mno-disable-callt @gol
815 -mv850e1 @gol
816 -mv850e @gol
817 -mv850  -mbig-switch}
818
819 @emph{VAX Options}
820 @gccoptlist{-mg  -mgnu  -munix}
821
822 @emph{VxWorks Options}
823 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
824 -Xbind-lazy  -Xbind-now}
825
826 @emph{x86-64 Options}
827 See i386 and x86-64 Options.
828
829 @emph{Xstormy16 Options}
830 @gccoptlist{-msim}
831
832 @emph{Xtensa Options}
833 @gccoptlist{-mconst16 -mno-const16 @gol
834 -mfused-madd  -mno-fused-madd @gol
835 -mserialize-volatile  -mno-serialize-volatile @gol
836 -mtext-section-literals  -mno-text-section-literals @gol
837 -mtarget-align  -mno-target-align @gol
838 -mlongcalls  -mno-longcalls}
839
840 @emph{zSeries Options}
841 See S/390 and zSeries Options.
842
843 @item Code Generation Options
844 @xref{Code Gen Options,,Options for Code Generation Conventions}.
845 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
846 -ffixed-@var{reg}  -fexceptions @gol
847 -fnon-call-exceptions  -funwind-tables @gol
848 -fasynchronous-unwind-tables @gol
849 -finhibit-size-directive  -finstrument-functions @gol
850 -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
851 -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
852 -fno-common  -fno-ident @gol
853 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
854 -fno-jump-tables @gol
855 -frecord-gcc-switches @gol
856 -freg-struct-return  -fshort-enums @gol
857 -fshort-double  -fshort-wchar @gol
858 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
859 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
860 -fno-stack-limit  -fargument-alias  -fargument-noalias @gol
861 -fargument-noalias-global  -fargument-noalias-anything @gol
862 -fleading-underscore  -ftls-model=@var{model} @gol
863 -ftrapv  -fwrapv  -fbounds-check @gol
864 -fvisibility}
865 @end table
866
867 @menu
868 * Overall Options::     Controlling the kind of output:
869                         an executable, object files, assembler files,
870                         or preprocessed source.
871 * C Dialect Options::   Controlling the variant of C language compiled.
872 * C++ Dialect Options:: Variations on C++.
873 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
874                         and Objective-C++.
875 * Language Independent Options:: Controlling how diagnostics should be
876                         formatted.
877 * Warning Options::     How picky should the compiler be?
878 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
879 * Optimize Options::    How much optimization?
880 * Preprocessor Options:: Controlling header files and macro definitions.
881                          Also, getting dependency information for Make.
882 * Assembler Options::   Passing options to the assembler.
883 * Link Options::        Specifying libraries and so on.
884 * Directory Options::   Where to find header files and libraries.
885                         Where to find the compiler executable files.
886 * Spec Files::          How to pass switches to sub-processes.
887 * Target Options::      Running a cross-compiler, or an old version of GCC.
888 @end menu
889
890 @node Overall Options
891 @section Options Controlling the Kind of Output
892
893 Compilation can involve up to four stages: preprocessing, compilation
894 proper, assembly and linking, always in that order.  GCC is capable of
895 preprocessing and compiling several files either into several
896 assembler input files, or into one assembler input file; then each
897 assembler input file produces an object file, and linking combines all
898 the object files (those newly compiled, and those specified as input)
899 into an executable file.
900
901 @cindex file name suffix
902 For any given input file, the file name suffix determines what kind of
903 compilation is done:
904
905 @table @gcctabopt
906 @item @var{file}.c
907 C source code which must be preprocessed.
908
909 @item @var{file}.i
910 C source code which should not be preprocessed.
911
912 @item @var{file}.ii
913 C++ source code which should not be preprocessed.
914
915 @item @var{file}.m
916 Objective-C source code.  Note that you must link with the @file{libobjc}
917 library to make an Objective-C program work.
918
919 @item @var{file}.mi
920 Objective-C source code which should not be preprocessed.
921
922 @item @var{file}.mm
923 @itemx @var{file}.M
924 Objective-C++ source code.  Note that you must link with the @file{libobjc}
925 library to make an Objective-C++ program work.  Note that @samp{.M} refers
926 to a literal capital M@.
927
928 @item @var{file}.mii
929 Objective-C++ source code which should not be preprocessed.
930
931 @item @var{file}.h
932 C, C++, Objective-C or Objective-C++ header file to be turned into a
933 precompiled header.
934
935 @item @var{file}.cc
936 @itemx @var{file}.cp
937 @itemx @var{file}.cxx
938 @itemx @var{file}.cpp
939 @itemx @var{file}.CPP
940 @itemx @var{file}.c++
941 @itemx @var{file}.C
942 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
943 the last two letters must both be literally @samp{x}.  Likewise,
944 @samp{.C} refers to a literal capital C@.
945
946 @item @var{file}.mm
947 @itemx @var{file}.M
948 Objective-C++ source code which must be preprocessed.
949
950 @item @var{file}.mii
951 Objective-C++ source code which should not be preprocessed.
952
953 @item @var{file}.hh
954 @itemx @var{file}.H
955 @itemx @var{file}.hp
956 @itemx @var{file}.hxx
957 @itemx @var{file}.hpp
958 @itemx @var{file}.HPP
959 @itemx @var{file}.h++
960 @itemx @var{file}.tcc
961 C++ header file to be turned into a precompiled header.
962
963 @item @var{file}.f
964 @itemx @var{file}.for
965 @itemx @var{file}.ftn
966 Fixed form Fortran source code which should not be preprocessed.
967
968 @item @var{file}.F
969 @itemx @var{file}.FOR
970 @itemx @var{file}.fpp
971 @itemx @var{file}.FPP
972 @itemx @var{file}.FTN
973 Fixed form Fortran source code which must be preprocessed (with the traditional
974 preprocessor).
975
976 @item @var{file}.f90
977 @itemx @var{file}.f95
978 @itemx @var{file}.f03
979 @itemx @var{file}.f08
980 Free form Fortran source code which should not be preprocessed.
981
982 @item @var{file}.F90
983 @itemx @var{file}.F95
984 @itemx @var{file}.F03
985 @itemx @var{file}.F08
986 Free form Fortran source code which must be preprocessed (with the
987 traditional preprocessor).
988
989 @c FIXME: Descriptions of Java file types.
990 @c @var{file}.java
991 @c @var{file}.class
992 @c @var{file}.zip
993 @c @var{file}.jar
994
995 @item @var{file}.ads
996 Ada source code file which contains a library unit declaration (a
997 declaration of a package, subprogram, or generic, or a generic
998 instantiation), or a library unit renaming declaration (a package,
999 generic, or subprogram renaming declaration).  Such files are also
1000 called @dfn{specs}.
1001
1002 @item @var{file}.adb
1003 Ada source code file containing a library unit body (a subprogram or
1004 package body).  Such files are also called @dfn{bodies}.
1005
1006 @c GCC also knows about some suffixes for languages not yet included:
1007 @c Pascal:
1008 @c @var{file}.p
1009 @c @var{file}.pas
1010 @c Ratfor:
1011 @c @var{file}.r
1012
1013 @item @var{file}.s
1014 Assembler code.
1015
1016 @item @var{file}.S
1017 @itemx @var{file}.sx
1018 Assembler code which must be preprocessed.
1019
1020 @item @var{other}
1021 An object file to be fed straight into linking.
1022 Any file name with no recognized suffix is treated this way.
1023 @end table
1024
1025 @opindex x
1026 You can specify the input language explicitly with the @option{-x} option:
1027
1028 @table @gcctabopt
1029 @item -x @var{language}
1030 Specify explicitly the @var{language} for the following input files
1031 (rather than letting the compiler choose a default based on the file
1032 name suffix).  This option applies to all following input files until
1033 the next @option{-x} option.  Possible values for @var{language} are:
1034 @smallexample
1035 c  c-header  c-cpp-output
1036 c++  c++-header  c++-cpp-output
1037 objective-c  objective-c-header  objective-c-cpp-output
1038 objective-c++ objective-c++-header objective-c++-cpp-output
1039 assembler  assembler-with-cpp
1040 ada
1041 f77  f77-cpp-input f95  f95-cpp-input
1042 java
1043 @end smallexample
1044
1045 @item -x none
1046 Turn off any specification of a language, so that subsequent files are
1047 handled according to their file name suffixes (as they are if @option{-x}
1048 has not been used at all).
1049
1050 @item -pass-exit-codes
1051 @opindex pass-exit-codes
1052 Normally the @command{gcc} program will exit with the code of 1 if any
1053 phase of the compiler returns a non-success return code.  If you specify
1054 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
1055 numerically highest error produced by any phase that returned an error
1056 indication.  The C, C++, and Fortran frontends return 4, if an internal
1057 compiler error is encountered.
1058 @end table
1059
1060 If you only want some of the stages of compilation, you can use
1061 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1062 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1063 @command{gcc} is to stop.  Note that some combinations (for example,
1064 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1065
1066 @table @gcctabopt
1067 @item -c
1068 @opindex c
1069 Compile or assemble the source files, but do not link.  The linking
1070 stage simply is not done.  The ultimate output is in the form of an
1071 object file for each source file.
1072
1073 By default, the object file name for a source file is made by replacing
1074 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1075
1076 Unrecognized input files, not requiring compilation or assembly, are
1077 ignored.
1078
1079 @item -S
1080 @opindex S
1081 Stop after the stage of compilation proper; do not assemble.  The output
1082 is in the form of an assembler code file for each non-assembler input
1083 file specified.
1084
1085 By default, the assembler file name for a source file is made by
1086 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1087
1088 Input files that don't require compilation are ignored.
1089
1090 @item -E
1091 @opindex E
1092 Stop after the preprocessing stage; do not run the compiler proper.  The
1093 output is in the form of preprocessed source code, which is sent to the
1094 standard output.
1095
1096 Input files which don't require preprocessing are ignored.
1097
1098 @cindex output file option
1099 @item -o @var{file}
1100 @opindex o
1101 Place output in file @var{file}.  This applies regardless to whatever
1102 sort of output is being produced, whether it be an executable file,
1103 an object file, an assembler file or preprocessed C code.
1104
1105 If @option{-o} is not specified, the default is to put an executable
1106 file in @file{a.out}, the object file for
1107 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1108 assembler file in @file{@var{source}.s}, a precompiled header file in
1109 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1110 standard output.
1111
1112 @item -v
1113 @opindex v
1114 Print (on standard error output) the commands executed to run the stages
1115 of compilation.  Also print the version number of the compiler driver
1116 program and of the preprocessor and the compiler proper.
1117
1118 @item -###
1119 @opindex ###
1120 Like @option{-v} except the commands are not executed and all command
1121 arguments are quoted.  This is useful for shell scripts to capture the
1122 driver-generated command lines.
1123
1124 @item -pipe
1125 @opindex pipe
1126 Use pipes rather than temporary files for communication between the
1127 various stages of compilation.  This fails to work on some systems where
1128 the assembler is unable to read from a pipe; but the GNU assembler has
1129 no trouble.
1130
1131 @item -combine
1132 @opindex combine
1133 If you are compiling multiple source files, this option tells the driver
1134 to pass all the source files to the compiler at once (for those
1135 languages for which the compiler can handle this).  This will allow
1136 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1137 language for which this is supported is C@.  If you pass source files for
1138 multiple languages to the driver, using this option, the driver will invoke
1139 the compiler(s) that support IMA once each, passing each compiler all the
1140 source files appropriate for it.  For those languages that do not support
1141 IMA this option will be ignored, and the compiler will be invoked once for
1142 each source file in that language.  If you use this option in conjunction
1143 with @option{-save-temps}, the compiler will generate multiple
1144 pre-processed files
1145 (one for each source file), but only one (combined) @file{.o} or
1146 @file{.s} file.
1147
1148 @item --help
1149 @opindex help
1150 Print (on the standard output) a description of the command line options
1151 understood by @command{gcc}.  If the @option{-v} option is also specified
1152 then @option{--help} will also be passed on to the various processes
1153 invoked by @command{gcc}, so that they can display the command line options
1154 they accept.  If the @option{-Wextra} option has also been specified
1155 (prior to the @option{--help} option), then command line options which
1156 have no documentation associated with them will also be displayed.
1157
1158 @item --target-help
1159 @opindex target-help
1160 Print (on the standard output) a description of target-specific command
1161 line options for each tool.  For some targets extra target-specific
1162 information may also be printed.
1163
1164 @item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1165 Print (on the standard output) a description of the command line
1166 options understood by the compiler that fit into all specified classes
1167 and qualifiers.  These are the supported classes:
1168
1169 @table @asis
1170 @item @samp{optimizers}
1171 This will display all of the optimization options supported by the
1172 compiler.
1173
1174 @item @samp{warnings}
1175 This will display all of the options controlling warning messages
1176 produced by the compiler.
1177
1178 @item @samp{target}
1179 This will display target-specific options.  Unlike the
1180 @option{--target-help} option however, target-specific options of the
1181 linker and assembler will not be displayed.  This is because those
1182 tools do not currently support the extended @option{--help=} syntax.
1183
1184 @item @samp{params}
1185 This will display the values recognized by the @option{--param}
1186 option.
1187
1188 @item @var{language}
1189 This will display the options supported for @var{language}, where 
1190 @var{language} is the name of one of the languages supported in this 
1191 version of GCC.
1192
1193 @item @samp{common}
1194 This will display the options that are common to all languages.
1195 @end table
1196
1197 These are the supported qualifiers:
1198
1199 @table @asis
1200 @item @samp{undocumented}
1201 Display only those options which are undocumented.
1202
1203 @item @samp{joined}
1204 Display options which take an argument that appears after an equal
1205 sign in the same continuous piece of text, such as:
1206 @samp{--help=target}.
1207
1208 @item @samp{separate}
1209 Display options which take an argument that appears as a separate word
1210 following the original option, such as: @samp{-o output-file}.
1211 @end table
1212
1213 Thus for example to display all the undocumented target-specific
1214 switches supported by the compiler the following can be used:
1215
1216 @smallexample
1217 --help=target,undocumented
1218 @end smallexample
1219
1220 The sense of a qualifier can be inverted by prefixing it with the
1221 @samp{^} character, so for example to display all binary warning
1222 options (i.e., ones that are either on or off and that do not take an
1223 argument), which have a description the following can be used:
1224
1225 @smallexample
1226 --help=warnings,^joined,^undocumented
1227 @end smallexample
1228
1229 The argument to @option{--help=} should not consist solely of inverted
1230 qualifiers.
1231
1232 Combining several classes is possible, although this usually
1233 restricts the output by so much that there is nothing to display.  One
1234 case where it does work however is when one of the classes is
1235 @var{target}.  So for example to display all the target-specific
1236 optimization options the following can be used:
1237
1238 @smallexample
1239 --help=target,optimizers
1240 @end smallexample
1241
1242 The @option{--help=} option can be repeated on the command line.  Each
1243 successive use will display its requested class of options, skipping
1244 those that have already been displayed.
1245
1246 If the @option{-Q} option appears on the command line before the
1247 @option{--help=} option, then the descriptive text displayed by
1248 @option{--help=} is changed.  Instead of describing the displayed
1249 options, an indication is given as to whether the option is enabled,
1250 disabled or set to a specific value (assuming that the compiler
1251 knows this at the point where the @option{--help=} option is used).
1252
1253 Here is a truncated example from the ARM port of @command{gcc}:
1254
1255 @smallexample
1256   % gcc -Q -mabi=2 --help=target -c
1257   The following options are target specific:
1258   -mabi=                                2
1259   -mabort-on-noreturn                   [disabled]
1260   -mapcs                                [disabled]
1261 @end smallexample
1262
1263 The output is sensitive to the effects of previous command line
1264 options, so for example it is possible to find out which optimizations
1265 are enabled at @option{-O2} by using:
1266
1267 @smallexample
1268 -Q -O2 --help=optimizers
1269 @end smallexample
1270
1271 Alternatively you can discover which binary optimizations are enabled
1272 by @option{-O3} by using:
1273
1274 @smallexample
1275 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1276 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1277 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1278 @end smallexample
1279
1280 @item --version
1281 @opindex version
1282 Display the version number and copyrights of the invoked GCC@.
1283
1284 @item -wrapper
1285 @opindex wrapper
1286 Invoke all subcommands under a wrapper program. It takes a single
1287 comma separated list as an argument, which will be used to invoke
1288 the wrapper:
1289
1290 @smallexample
1291 gcc -c t.c -wrapper gdb,--args
1292 @end smallexample
1293
1294 This will invoke all subprograms of gcc under "gdb --args",
1295 thus cc1 invocation will be "gdb --args cc1 ...".
1296
1297 @include @value{srcdir}/../libiberty/at-file.texi
1298 @end table
1299
1300 @node Invoking G++
1301 @section Compiling C++ Programs
1302
1303 @cindex suffixes for C++ source
1304 @cindex C++ source file suffixes
1305 C++ source files conventionally use one of the suffixes @samp{.C},
1306 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1307 @samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1308 @samp{.H}, or (for shared template code) @samp{.tcc}; and
1309 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1310 files with these names and compiles them as C++ programs even if you
1311 call the compiler the same way as for compiling C programs (usually
1312 with the name @command{gcc}).
1313
1314 @findex g++
1315 @findex c++
1316 However, the use of @command{gcc} does not add the C++ library.
1317 @command{g++} is a program that calls GCC and treats @samp{.c},
1318 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1319 files unless @option{-x} is used, and automatically specifies linking
1320 against the C++ library.  This program is also useful when
1321 precompiling a C header file with a @samp{.h} extension for use in C++
1322 compilations.  On many systems, @command{g++} is also installed with
1323 the name @command{c++}.
1324
1325 @cindex invoking @command{g++}
1326 When you compile C++ programs, you may specify many of the same
1327 command-line options that you use for compiling programs in any
1328 language; or command-line options meaningful for C and related
1329 languages; or options that are meaningful only for C++ programs.
1330 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1331 explanations of options for languages related to C@.
1332 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1333 explanations of options that are meaningful only for C++ programs.
1334
1335 @node C Dialect Options
1336 @section Options Controlling C Dialect
1337 @cindex dialect options
1338 @cindex language dialect options
1339 @cindex options, dialect
1340
1341 The following options control the dialect of C (or languages derived
1342 from C, such as C++, Objective-C and Objective-C++) that the compiler
1343 accepts:
1344
1345 @table @gcctabopt
1346 @cindex ANSI support
1347 @cindex ISO support
1348 @item -ansi
1349 @opindex ansi
1350 In C mode, this is equivalent to @samp{-std=c89}. In C++ mode, it is
1351 equivalent to @samp{-std=c++98}.
1352
1353 This turns off certain features of GCC that are incompatible with ISO
1354 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1355 such as the @code{asm} and @code{typeof} keywords, and
1356 predefined macros such as @code{unix} and @code{vax} that identify the
1357 type of system you are using.  It also enables the undesirable and
1358 rarely used ISO trigraph feature.  For the C compiler,
1359 it disables recognition of C++ style @samp{//} comments as well as
1360 the @code{inline} keyword.
1361
1362 The alternate keywords @code{__asm__}, @code{__extension__},
1363 @code{__inline__} and @code{__typeof__} continue to work despite
1364 @option{-ansi}.  You would not want to use them in an ISO C program, of
1365 course, but it is useful to put them in header files that might be included
1366 in compilations done with @option{-ansi}.  Alternate predefined macros
1367 such as @code{__unix__} and @code{__vax__} are also available, with or
1368 without @option{-ansi}.
1369
1370 The @option{-ansi} option does not cause non-ISO programs to be
1371 rejected gratuitously.  For that, @option{-pedantic} is required in
1372 addition to @option{-ansi}.  @xref{Warning Options}.
1373
1374 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1375 option is used.  Some header files may notice this macro and refrain
1376 from declaring certain functions or defining certain macros that the
1377 ISO standard doesn't call for; this is to avoid interfering with any
1378 programs that might use these names for other things.
1379
1380 Functions that would normally be built in but do not have semantics
1381 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1382 functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1383 built-in functions provided by GCC}, for details of the functions
1384 affected.
1385
1386 @item -std=
1387 @opindex std
1388 Determine the language standard. @xref{Standards,,Language Standards
1389 Supported by GCC}, for details of these standard versions.  This option
1390 is currently only supported when compiling C or C++. 
1391
1392 The compiler can accept several base standards, such as @samp{c89} or
1393 @samp{c++98}, and GNU dialects of those standards, such as
1394 @samp{gnu89} or @samp{gnu++98}.  By specifying a base standard, the
1395 compiler will accept all programs following that standard and those
1396 using GNU extensions that do not contradict it.  For example,
1397 @samp{-std=c89} turns off certain features of GCC that are
1398 incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1399 keywords, but not other GNU extensions that do not have a meaning in
1400 ISO C90, such as omitting the middle term of a @code{?:}
1401 expression. On the other hand, by specifying a GNU dialect of a
1402 standard, all features the compiler support are enabled, even when
1403 those features change the meaning of the base standard and some
1404 strict-conforming programs may be rejected.  The particular standard
1405 is used by @option{-pedantic} to identify which features are GNU
1406 extensions given that version of the standard. For example
1407 @samp{-std=gnu89 -pedantic} would warn about C++ style @samp{//}
1408 comments, while @samp{-std=gnu99 -pedantic} would not.
1409
1410 A value for this option must be provided; possible values are
1411
1412 @table @samp
1413 @item c89
1414 @itemx iso9899:1990
1415 Support all ISO C90 programs (certain GNU extensions that conflict
1416 with ISO C90 are disabled). Same as @option{-ansi} for C code.
1417
1418 @item iso9899:199409
1419 ISO C90 as modified in amendment 1.
1420
1421 @item c99
1422 @itemx c9x
1423 @itemx iso9899:1999
1424 @itemx iso9899:199x
1425 ISO C99.  Note that this standard is not yet fully supported; see
1426 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1427 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1428
1429 @item gnu89
1430 GNU dialect of ISO C90 (including some C99 features). This
1431 is the default for C code.
1432
1433 @item gnu99
1434 @itemx gnu9x
1435 GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC,
1436 this will become the default.  The name @samp{gnu9x} is deprecated.
1437
1438 @item c++98
1439 The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for
1440 C++ code.
1441
1442 @item gnu++98
1443 GNU dialect of @option{-std=c++98}.  This is the default for
1444 C++ code.
1445
1446 @item c++0x
1447 The working draft of the upcoming ISO C++0x standard. This option
1448 enables experimental features that are likely to be included in
1449 C++0x. The working draft is constantly changing, and any feature that is
1450 enabled by this flag may be removed from future versions of GCC if it is
1451 not part of the C++0x standard.
1452
1453 @item gnu++0x
1454 GNU dialect of @option{-std=c++0x}. This option enables
1455 experimental features that may be removed in future versions of GCC.
1456 @end table
1457
1458 @item -fgnu89-inline
1459 @opindex fgnu89-inline
1460 The option @option{-fgnu89-inline} tells GCC to use the traditional
1461 GNU semantics for @code{inline} functions when in C99 mode.
1462 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1463 is accepted and ignored by GCC versions 4.1.3 up to but not including
1464 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1465 C99 mode.  Using this option is roughly equivalent to adding the
1466 @code{gnu_inline} function attribute to all inline functions
1467 (@pxref{Function Attributes}).
1468
1469 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1470 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1471 specifies the default behavior).  This option was first supported in
1472 GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1473
1474 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1475 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1476 in effect for @code{inline} functions.  @xref{Common Predefined
1477 Macros,,,cpp,The C Preprocessor}.
1478
1479 @item -aux-info @var{filename}
1480 @opindex aux-info
1481 Output to the given filename prototyped declarations for all functions
1482 declared and/or defined in a translation unit, including those in header
1483 files.  This option is silently ignored in any language other than C@.
1484
1485 Besides declarations, the file indicates, in comments, the origin of
1486 each declaration (source file and line), whether the declaration was
1487 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1488 @samp{O} for old, respectively, in the first character after the line
1489 number and the colon), and whether it came from a declaration or a
1490 definition (@samp{C} or @samp{F}, respectively, in the following
1491 character).  In the case of function definitions, a K&R-style list of
1492 arguments followed by their declarations is also provided, inside
1493 comments, after the declaration.
1494
1495 @item -fno-asm
1496 @opindex fno-asm
1497 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1498 keyword, so that code can use these words as identifiers.  You can use
1499 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1500 instead.  @option{-ansi} implies @option{-fno-asm}.
1501
1502 In C++, this switch only affects the @code{typeof} keyword, since
1503 @code{asm} and @code{inline} are standard keywords.  You may want to
1504 use the @option{-fno-gnu-keywords} flag instead, which has the same
1505 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1506 switch only affects the @code{asm} and @code{typeof} keywords, since
1507 @code{inline} is a standard keyword in ISO C99.
1508
1509 @item -fno-builtin
1510 @itemx -fno-builtin-@var{function}
1511 @opindex fno-builtin
1512 @cindex built-in functions
1513 Don't recognize built-in functions that do not begin with
1514 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1515 functions provided by GCC}, for details of the functions affected,
1516 including those which are not built-in functions when @option{-ansi} or
1517 @option{-std} options for strict ISO C conformance are used because they
1518 do not have an ISO standard meaning.
1519
1520 GCC normally generates special code to handle certain built-in functions
1521 more efficiently; for instance, calls to @code{alloca} may become single
1522 instructions that adjust the stack directly, and calls to @code{memcpy}
1523 may become inline copy loops.  The resulting code is often both smaller
1524 and faster, but since the function calls no longer appear as such, you
1525 cannot set a breakpoint on those calls, nor can you change the behavior
1526 of the functions by linking with a different library.  In addition,
1527 when a function is recognized as a built-in function, GCC may use
1528 information about that function to warn about problems with calls to
1529 that function, or to generate more efficient code, even if the
1530 resulting code still contains calls to that function.  For example,
1531 warnings are given with @option{-Wformat} for bad calls to
1532 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1533 known not to modify global memory.
1534
1535 With the @option{-fno-builtin-@var{function}} option
1536 only the built-in function @var{function} is
1537 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1538 function is named that is not built-in in this version of GCC, this
1539 option is ignored.  There is no corresponding
1540 @option{-fbuiltin-@var{function}} option; if you wish to enable
1541 built-in functions selectively when using @option{-fno-builtin} or
1542 @option{-ffreestanding}, you may define macros such as:
1543
1544 @smallexample
1545 #define abs(n)          __builtin_abs ((n))
1546 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1547 @end smallexample
1548
1549 @item -fhosted
1550 @opindex fhosted
1551 @cindex hosted environment
1552
1553 Assert that compilation takes place in a hosted environment.  This implies
1554 @option{-fbuiltin}.  A hosted environment is one in which the
1555 entire standard library is available, and in which @code{main} has a return
1556 type of @code{int}.  Examples are nearly everything except a kernel.
1557 This is equivalent to @option{-fno-freestanding}.
1558
1559 @item -ffreestanding
1560 @opindex ffreestanding
1561 @cindex hosted environment
1562
1563 Assert that compilation takes place in a freestanding environment.  This
1564 implies @option{-fno-builtin}.  A freestanding environment
1565 is one in which the standard library may not exist, and program startup may
1566 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1567 This is equivalent to @option{-fno-hosted}.
1568
1569 @xref{Standards,,Language Standards Supported by GCC}, for details of
1570 freestanding and hosted environments.
1571
1572 @item -fopenmp
1573 @opindex fopenmp
1574 @cindex openmp parallel
1575 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1576 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1577 compiler generates parallel code according to the OpenMP Application
1578 Program Interface v2.5 @w{@uref{http://www.openmp.org/}}.  This option
1579 implies @option{-pthread}, and thus is only supported on targets that
1580 have support for @option{-pthread}.
1581
1582 @item -fms-extensions
1583 @opindex fms-extensions
1584 Accept some non-standard constructs used in Microsoft header files.
1585
1586 Some cases of unnamed fields in structures and unions are only
1587 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1588 fields within structs/unions}, for details.
1589
1590 @item -trigraphs
1591 @opindex trigraphs
1592 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1593 options for strict ISO C conformance) implies @option{-trigraphs}.
1594
1595 @item -no-integrated-cpp
1596 @opindex no-integrated-cpp
1597 Performs a compilation in two passes: preprocessing and compiling.  This
1598 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1599 @option{-B} option.  The user supplied compilation step can then add in
1600 an additional preprocessing step after normal preprocessing but before
1601 compiling.  The default is to use the integrated cpp (internal cpp)
1602
1603 The semantics of this option will change if "cc1", "cc1plus", and
1604 "cc1obj" are merged.
1605
1606 @cindex traditional C language
1607 @cindex C language, traditional
1608 @item -traditional
1609 @itemx -traditional-cpp
1610 @opindex traditional-cpp
1611 @opindex traditional
1612 Formerly, these options caused GCC to attempt to emulate a pre-standard
1613 C compiler.  They are now only supported with the @option{-E} switch.
1614 The preprocessor continues to support a pre-standard mode.  See the GNU
1615 CPP manual for details.
1616
1617 @item -fcond-mismatch
1618 @opindex fcond-mismatch
1619 Allow conditional expressions with mismatched types in the second and
1620 third arguments.  The value of such an expression is void.  This option
1621 is not supported for C++.
1622
1623 @item -flax-vector-conversions
1624 @opindex flax-vector-conversions
1625 Allow implicit conversions between vectors with differing numbers of
1626 elements and/or incompatible element types.  This option should not be
1627 used for new code.
1628
1629 @item -funsigned-char
1630 @opindex funsigned-char
1631 Let the type @code{char} be unsigned, like @code{unsigned char}.
1632
1633 Each kind of machine has a default for what @code{char} should
1634 be.  It is either like @code{unsigned char} by default or like
1635 @code{signed char} by default.
1636
1637 Ideally, a portable program should always use @code{signed char} or
1638 @code{unsigned char} when it depends on the signedness of an object.
1639 But many programs have been written to use plain @code{char} and
1640 expect it to be signed, or expect it to be unsigned, depending on the
1641 machines they were written for.  This option, and its inverse, let you
1642 make such a program work with the opposite default.
1643
1644 The type @code{char} is always a distinct type from each of
1645 @code{signed char} or @code{unsigned char}, even though its behavior
1646 is always just like one of those two.
1647
1648 @item -fsigned-char
1649 @opindex fsigned-char
1650 Let the type @code{char} be signed, like @code{signed char}.
1651
1652 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1653 the negative form of @option{-funsigned-char}.  Likewise, the option
1654 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1655
1656 @item -fsigned-bitfields
1657 @itemx -funsigned-bitfields
1658 @itemx -fno-signed-bitfields
1659 @itemx -fno-unsigned-bitfields
1660 @opindex fsigned-bitfields
1661 @opindex funsigned-bitfields
1662 @opindex fno-signed-bitfields
1663 @opindex fno-unsigned-bitfields
1664 These options control whether a bit-field is signed or unsigned, when the
1665 declaration does not use either @code{signed} or @code{unsigned}.  By
1666 default, such a bit-field is signed, because this is consistent: the
1667 basic integer types such as @code{int} are signed types.
1668 @end table
1669
1670 @node C++ Dialect Options
1671 @section Options Controlling C++ Dialect
1672
1673 @cindex compiler options, C++
1674 @cindex C++ options, command line
1675 @cindex options, C++
1676 This section describes the command-line options that are only meaningful
1677 for C++ programs; but you can also use most of the GNU compiler options
1678 regardless of what language your program is in.  For example, you
1679 might compile a file @code{firstClass.C} like this:
1680
1681 @smallexample
1682 g++ -g -frepo -O -c firstClass.C
1683 @end smallexample
1684
1685 @noindent
1686 In this example, only @option{-frepo} is an option meant
1687 only for C++ programs; you can use the other options with any
1688 language supported by GCC@.
1689
1690 Here is a list of options that are @emph{only} for compiling C++ programs:
1691
1692 @table @gcctabopt
1693
1694 @item -fabi-version=@var{n}
1695 @opindex fabi-version
1696 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1697 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1698 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1699 the version that conforms most closely to the C++ ABI specification.
1700 Therefore, the ABI obtained using version 0 will change as ABI bugs
1701 are fixed.
1702
1703 The default is version 2.
1704
1705 @item -fno-access-control
1706 @opindex fno-access-control
1707 Turn off all access checking.  This switch is mainly useful for working
1708 around bugs in the access control code.
1709
1710 @item -fcheck-new
1711 @opindex fcheck-new
1712 Check that the pointer returned by @code{operator new} is non-null
1713 before attempting to modify the storage allocated.  This check is
1714 normally unnecessary because the C++ standard specifies that
1715 @code{operator new} will only return @code{0} if it is declared
1716 @samp{throw()}, in which case the compiler will always check the
1717 return value even without this option.  In all other cases, when
1718 @code{operator new} has a non-empty exception specification, memory
1719 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1720 @samp{new (nothrow)}.
1721
1722 @item -fconserve-space
1723 @opindex fconserve-space
1724 Put uninitialized or runtime-initialized global variables into the
1725 common segment, as C does.  This saves space in the executable at the
1726 cost of not diagnosing duplicate definitions.  If you compile with this
1727 flag and your program mysteriously crashes after @code{main()} has
1728 completed, you may have an object that is being destroyed twice because
1729 two definitions were merged.
1730
1731 This option is no longer useful on most targets, now that support has
1732 been added for putting variables into BSS without making them common.
1733
1734 @item -ffriend-injection
1735 @opindex ffriend-injection
1736 Inject friend functions into the enclosing namespace, so that they are
1737 visible outside the scope of the class in which they are declared.
1738 Friend functions were documented to work this way in the old Annotated
1739 C++ Reference Manual, and versions of G++ before 4.1 always worked
1740 that way.  However, in ISO C++ a friend function which is not declared
1741 in an enclosing scope can only be found using argument dependent
1742 lookup.  This option causes friends to be injected as they were in
1743 earlier releases.
1744
1745 This option is for compatibility, and may be removed in a future
1746 release of G++.
1747
1748 @item -fno-elide-constructors
1749 @opindex fno-elide-constructors
1750 The C++ standard allows an implementation to omit creating a temporary
1751 which is only used to initialize another object of the same type.
1752 Specifying this option disables that optimization, and forces G++ to
1753 call the copy constructor in all cases.
1754
1755 @item -fno-enforce-eh-specs
1756 @opindex fno-enforce-eh-specs
1757 Don't generate code to check for violation of exception specifications
1758 at runtime.  This option violates the C++ standard, but may be useful
1759 for reducing code size in production builds, much like defining
1760 @samp{NDEBUG}.  This does not give user code permission to throw
1761 exceptions in violation of the exception specifications; the compiler
1762 will still optimize based on the specifications, so throwing an
1763 unexpected exception will result in undefined behavior.
1764
1765 @item -ffor-scope
1766 @itemx -fno-for-scope
1767 @opindex ffor-scope
1768 @opindex fno-for-scope
1769 If @option{-ffor-scope} is specified, the scope of variables declared in
1770 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1771 as specified by the C++ standard.
1772 If @option{-fno-for-scope} is specified, the scope of variables declared in
1773 a @i{for-init-statement} extends to the end of the enclosing scope,
1774 as was the case in old versions of G++, and other (traditional)
1775 implementations of C++.
1776
1777 The default if neither flag is given to follow the standard,
1778 but to allow and give a warning for old-style code that would
1779 otherwise be invalid, or have different behavior.
1780
1781 @item -fno-gnu-keywords
1782 @opindex fno-gnu-keywords
1783 Do not recognize @code{typeof} as a keyword, so that code can use this
1784 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1785 @option{-ansi} implies @option{-fno-gnu-keywords}.
1786
1787 @item -fno-implicit-templates
1788 @opindex fno-implicit-templates
1789 Never emit code for non-inline templates which are instantiated
1790 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1791 @xref{Template Instantiation}, for more information.
1792
1793 @item -fno-implicit-inline-templates
1794 @opindex fno-implicit-inline-templates
1795 Don't emit code for implicit instantiations of inline templates, either.
1796 The default is to handle inlines differently so that compiles with and
1797 without optimization will need the same set of explicit instantiations.
1798
1799 @item -fno-implement-inlines
1800 @opindex fno-implement-inlines
1801 To save space, do not emit out-of-line copies of inline functions
1802 controlled by @samp{#pragma implementation}.  This will cause linker
1803 errors if these functions are not inlined everywhere they are called.
1804
1805 @item -fms-extensions
1806 @opindex fms-extensions
1807 Disable pedantic warnings about constructs used in MFC, such as implicit
1808 int and getting a pointer to member function via non-standard syntax.
1809
1810 @item -fno-nonansi-builtins
1811 @opindex fno-nonansi-builtins
1812 Disable built-in declarations of functions that are not mandated by
1813 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1814 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1815
1816 @item -fno-operator-names
1817 @opindex fno-operator-names
1818 Do not treat the operator name keywords @code{and}, @code{bitand},
1819 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1820 synonyms as keywords.
1821
1822 @item -fno-optional-diags
1823 @opindex fno-optional-diags
1824 Disable diagnostics that the standard says a compiler does not need to
1825 issue.  Currently, the only such diagnostic issued by G++ is the one for
1826 a name having multiple meanings within a class.
1827
1828 @item -fpermissive
1829 @opindex fpermissive
1830 Downgrade some diagnostics about nonconformant code from errors to
1831 warnings.  Thus, using @option{-fpermissive} will allow some
1832 nonconforming code to compile.
1833
1834 @item -frepo
1835 @opindex frepo
1836 Enable automatic template instantiation at link time.  This option also
1837 implies @option{-fno-implicit-templates}.  @xref{Template
1838 Instantiation}, for more information.
1839
1840 @item -fno-rtti
1841 @opindex fno-rtti
1842 Disable generation of information about every class with virtual
1843 functions for use by the C++ runtime type identification features
1844 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1845 of the language, you can save some space by using this flag.  Note that
1846 exception handling uses the same information, but it will generate it as
1847 needed. The @samp{dynamic_cast} operator can still be used for casts that
1848 do not require runtime type information, i.e.@: casts to @code{void *} or to
1849 unambiguous base classes.
1850
1851 @item -fstats
1852 @opindex fstats
1853 Emit statistics about front-end processing at the end of the compilation.
1854 This information is generally only useful to the G++ development team.
1855
1856 @item -ftemplate-depth-@var{n}
1857 @opindex ftemplate-depth
1858 Set the maximum instantiation depth for template classes to @var{n}.
1859 A limit on the template instantiation depth is needed to detect
1860 endless recursions during template class instantiation.  ANSI/ISO C++
1861 conforming programs must not rely on a maximum depth greater than 17.
1862
1863 @item -fno-threadsafe-statics
1864 @opindex fno-threadsafe-statics
1865 Do not emit the extra code to use the routines specified in the C++
1866 ABI for thread-safe initialization of local statics.  You can use this
1867 option to reduce code size slightly in code that doesn't need to be
1868 thread-safe.
1869
1870 @item -fuse-cxa-atexit
1871 @opindex fuse-cxa-atexit
1872 Register destructors for objects with static storage duration with the
1873 @code{__cxa_atexit} function rather than the @code{atexit} function.
1874 This option is required for fully standards-compliant handling of static
1875 destructors, but will only work if your C library supports
1876 @code{__cxa_atexit}.
1877
1878 @item -fno-use-cxa-get-exception-ptr
1879 @opindex fno-use-cxa-get-exception-ptr
1880 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
1881 will cause @code{std::uncaught_exception} to be incorrect, but is necessary
1882 if the runtime routine is not available.
1883
1884 @item -fvisibility-inlines-hidden
1885 @opindex fvisibility-inlines-hidden
1886 This switch declares that the user does not attempt to compare
1887 pointers to inline methods where the addresses of the two functions
1888 were taken in different shared objects.
1889
1890 The effect of this is that GCC may, effectively, mark inline methods with
1891 @code{__attribute__ ((visibility ("hidden")))} so that they do not
1892 appear in the export table of a DSO and do not require a PLT indirection
1893 when used within the DSO@.  Enabling this option can have a dramatic effect
1894 on load and link times of a DSO as it massively reduces the size of the
1895 dynamic export table when the library makes heavy use of templates.
1896
1897 The behavior of this switch is not quite the same as marking the
1898 methods as hidden directly, because it does not affect static variables
1899 local to the function or cause the compiler to deduce that
1900 the function is defined in only one shared object.
1901
1902 You may mark a method as having a visibility explicitly to negate the
1903 effect of the switch for that method.  For example, if you do want to
1904 compare pointers to a particular inline method, you might mark it as
1905 having default visibility.  Marking the enclosing class with explicit
1906 visibility will have no effect.
1907
1908 Explicitly instantiated inline methods are unaffected by this option
1909 as their linkage might otherwise cross a shared library boundary.
1910 @xref{Template Instantiation}.
1911
1912 @item -fvisibility-ms-compat
1913 @opindex fvisibility-ms-compat
1914 This flag attempts to use visibility settings to make GCC's C++
1915 linkage model compatible with that of Microsoft Visual Studio.
1916
1917 The flag makes these changes to GCC's linkage model:
1918
1919 @enumerate
1920 @item
1921 It sets the default visibility to @code{hidden}, like
1922 @option{-fvisibility=hidden}.
1923
1924 @item
1925 Types, but not their members, are not hidden by default.
1926
1927 @item
1928 The One Definition Rule is relaxed for types without explicit
1929 visibility specifications which are defined in more than one different
1930 shared object: those declarations are permitted if they would have
1931 been permitted when this option was not used.
1932 @end enumerate
1933
1934 In new code it is better to use @option{-fvisibility=hidden} and
1935 export those classes which are intended to be externally visible.
1936 Unfortunately it is possible for code to rely, perhaps accidentally,
1937 on the Visual Studio behavior.
1938
1939 Among the consequences of these changes are that static data members
1940 of the same type with the same name but defined in different shared
1941 objects will be different, so changing one will not change the other;
1942 and that pointers to function members defined in different shared
1943 objects may not compare equal.  When this flag is given, it is a
1944 violation of the ODR to define types with the same name differently.
1945
1946 @item -fno-weak
1947 @opindex fno-weak
1948 Do not use weak symbol support, even if it is provided by the linker.
1949 By default, G++ will use weak symbols if they are available.  This
1950 option exists only for testing, and should not be used by end-users;
1951 it will result in inferior code and has no benefits.  This option may
1952 be removed in a future release of G++.
1953
1954 @item -nostdinc++
1955 @opindex nostdinc++
1956 Do not search for header files in the standard directories specific to
1957 C++, but do still search the other standard directories.  (This option
1958 is used when building the C++ library.)
1959 @end table
1960
1961 In addition, these optimization, warning, and code generation options
1962 have meanings only for C++ programs:
1963
1964 @table @gcctabopt
1965 @item -fno-default-inline
1966 @opindex fno-default-inline
1967 Do not assume @samp{inline} for functions defined inside a class scope.
1968 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1969 functions will have linkage like inline functions; they just won't be
1970 inlined by default.
1971
1972 @item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
1973 @opindex Wabi
1974 @opindex Wno-abi
1975 Warn when G++ generates code that is probably not compatible with the
1976 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
1977 all such cases, there are probably some cases that are not warned about,
1978 even though G++ is generating incompatible code.  There may also be
1979 cases where warnings are emitted even though the code that is generated
1980 will be compatible.
1981
1982 You should rewrite your code to avoid these warnings if you are
1983 concerned about the fact that code generated by G++ may not be binary
1984 compatible with code generated by other compilers.
1985
1986 The known incompatibilities at this point include:
1987
1988 @itemize @bullet
1989
1990 @item
1991 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1992 pack data into the same byte as a base class.  For example:
1993
1994 @smallexample
1995 struct A @{ virtual void f(); int f1 : 1; @};
1996 struct B : public A @{ int f2 : 1; @};
1997 @end smallexample
1998
1999 @noindent
2000 In this case, G++ will place @code{B::f2} into the same byte
2001 as@code{A::f1}; other compilers will not.  You can avoid this problem
2002 by explicitly padding @code{A} so that its size is a multiple of the
2003 byte size on your platform; that will cause G++ and other compilers to
2004 layout @code{B} identically.
2005
2006 @item
2007 Incorrect handling of tail-padding for virtual bases.  G++ does not use
2008 tail padding when laying out virtual bases.  For example:
2009
2010 @smallexample
2011 struct A @{ virtual void f(); char c1; @};
2012 struct B @{ B(); char c2; @};
2013 struct C : public A, public virtual B @{@};
2014 @end smallexample
2015
2016 @noindent
2017 In this case, G++ will not place @code{B} into the tail-padding for
2018 @code{A}; other compilers will.  You can avoid this problem by
2019 explicitly padding @code{A} so that its size is a multiple of its
2020 alignment (ignoring virtual base classes); that will cause G++ and other
2021 compilers to layout @code{C} identically.
2022
2023 @item
2024 Incorrect handling of bit-fields with declared widths greater than that
2025 of their underlying types, when the bit-fields appear in a union.  For
2026 example:
2027
2028 @smallexample
2029 union U @{ int i : 4096; @};
2030 @end smallexample
2031
2032 @noindent
2033 Assuming that an @code{int} does not have 4096 bits, G++ will make the
2034 union too small by the number of bits in an @code{int}.
2035
2036 @item
2037 Empty classes can be placed at incorrect offsets.  For example:
2038
2039 @smallexample
2040 struct A @{@};
2041
2042 struct B @{
2043   A a;
2044   virtual void f ();
2045 @};
2046
2047 struct C : public B, public A @{@};
2048 @end smallexample
2049
2050 @noindent
2051 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
2052 it should be placed at offset zero.  G++ mistakenly believes that the
2053 @code{A} data member of @code{B} is already at offset zero.
2054
2055 @item
2056 Names of template functions whose types involve @code{typename} or
2057 template template parameters can be mangled incorrectly.
2058
2059 @smallexample
2060 template <typename Q>
2061 void f(typename Q::X) @{@}
2062
2063 template <template <typename> class Q>
2064 void f(typename Q<int>::X) @{@}
2065 @end smallexample
2066
2067 @noindent
2068 Instantiations of these templates may be mangled incorrectly.
2069
2070 @end itemize
2071
2072 It also warns psABI related changes.  The known psABI changes at this
2073 point include:
2074
2075 @itemize @bullet
2076
2077 @item
2078 For SYSV/x86-64, when passing union with long double, it is changed to
2079 pass in memory as specified in psABI.  For example:
2080
2081 @smallexample
2082 union U @{
2083   long double ld;
2084   int i;
2085 @};
2086 @end smallexample
2087
2088 @noindent
2089 @code{union U} will always be passed in memory.
2090
2091 @end itemize
2092
2093 @item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2094 @opindex Wctor-dtor-privacy
2095 @opindex Wno-ctor-dtor-privacy
2096 Warn when a class seems unusable because all the constructors or
2097 destructors in that class are private, and it has neither friends nor
2098 public static member functions.
2099
2100 @item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2101 @opindex Wnon-virtual-dtor
2102 @opindex Wno-non-virtual-dtor
2103 Warn when a class has virtual functions and accessible non-virtual
2104 destructor, in which case it would be possible but unsafe to delete
2105 an instance of a derived class through a pointer to the base class.
2106 This warning is also enabled if -Weffc++ is specified.
2107
2108 @item -Wreorder @r{(C++ and Objective-C++ only)}
2109 @opindex Wreorder
2110 @opindex Wno-reorder
2111 @cindex reordering, warning
2112 @cindex warning for reordering of member initializers
2113 Warn when the order of member initializers given in the code does not
2114 match the order in which they must be executed.  For instance:
2115
2116 @smallexample
2117 struct A @{
2118   int i;
2119   int j;
2120   A(): j (0), i (1) @{ @}
2121 @};
2122 @end smallexample
2123
2124 The compiler will rearrange the member initializers for @samp{i}
2125 and @samp{j} to match the declaration order of the members, emitting
2126 a warning to that effect.  This warning is enabled by @option{-Wall}.
2127 @end table
2128
2129 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2130
2131 @table @gcctabopt
2132 @item -Weffc++ @r{(C++ and Objective-C++ only)}
2133 @opindex Weffc++
2134 @opindex Wno-effc++
2135 Warn about violations of the following style guidelines from Scott Meyers'
2136 @cite{Effective C++} book:
2137
2138 @itemize @bullet
2139 @item
2140 Item 11:  Define a copy constructor and an assignment operator for classes
2141 with dynamically allocated memory.
2142
2143 @item
2144 Item 12:  Prefer initialization to assignment in constructors.
2145
2146 @item
2147 Item 14:  Make destructors virtual in base classes.
2148
2149 @item
2150 Item 15:  Have @code{operator=} return a reference to @code{*this}.
2151
2152 @item
2153 Item 23:  Don't try to return a reference when you must return an object.
2154
2155 @end itemize
2156
2157 Also warn about violations of the following style guidelines from
2158 Scott Meyers' @cite{More Effective C++} book:
2159
2160 @itemize @bullet
2161 @item
2162 Item 6:  Distinguish between prefix and postfix forms of increment and
2163 decrement operators.
2164
2165 @item
2166 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2167
2168 @end itemize
2169
2170 When selecting this option, be aware that the standard library
2171 headers do not obey all of these guidelines; use @samp{grep -v}
2172 to filter out those warnings.
2173
2174 @item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2175 @opindex Wstrict-null-sentinel
2176 @opindex Wno-strict-null-sentinel
2177 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2178 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2179 to @code{__null}.  Although it is a null pointer constant not a null pointer,
2180 it is guaranteed to be of the same size as a pointer.  But this use is
2181 not portable across different compilers.
2182
2183 @item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2184 @opindex Wno-non-template-friend
2185 @opindex Wnon-template-friend
2186 Disable warnings when non-templatized friend functions are declared
2187 within a template.  Since the advent of explicit template specification
2188 support in G++, if the name of the friend is an unqualified-id (i.e.,
2189 @samp{friend foo(int)}), the C++ language specification demands that the
2190 friend declare or define an ordinary, nontemplate function.  (Section
2191 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2192 could be interpreted as a particular specialization of a templatized
2193 function.  Because this non-conforming behavior is no longer the default
2194 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2195 check existing code for potential trouble spots and is on by default.
2196 This new compiler behavior can be turned off with
2197 @option{-Wno-non-template-friend} which keeps the conformant compiler code
2198 but disables the helpful warning.
2199
2200 @item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2201 @opindex Wold-style-cast
2202 @opindex Wno-old-style-cast
2203 Warn if an old-style (C-style) cast to a non-void type is used within
2204 a C++ program.  The new-style casts (@samp{dynamic_cast},
2205 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2206 less vulnerable to unintended effects and much easier to search for.
2207
2208 @item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2209 @opindex Woverloaded-virtual
2210 @opindex Wno-overloaded-virtual
2211 @cindex overloaded virtual fn, warning
2212 @cindex warning for overloaded virtual fn
2213 Warn when a function declaration hides virtual functions from a
2214 base class.  For example, in:
2215
2216 @smallexample
2217 struct A @{
2218   virtual void f();
2219 @};
2220
2221 struct B: public A @{
2222   void f(int);
2223 @};
2224 @end smallexample
2225
2226 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2227 like:
2228
2229 @smallexample
2230 B* b;
2231 b->f();
2232 @end smallexample
2233
2234 will fail to compile.
2235
2236 @item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2237 @opindex Wno-pmf-conversions
2238 @opindex Wpmf-conversions
2239 Disable the diagnostic for converting a bound pointer to member function
2240 to a plain pointer.
2241
2242 @item -Wsign-promo @r{(C++ and Objective-C++ only)}
2243 @opindex Wsign-promo
2244 @opindex Wno-sign-promo
2245 Warn when overload resolution chooses a promotion from unsigned or
2246 enumerated type to a signed type, over a conversion to an unsigned type of
2247 the same size.  Previous versions of G++ would try to preserve
2248 unsignedness, but the standard mandates the current behavior.
2249
2250 @smallexample
2251 struct A @{
2252   operator int ();
2253   A& operator = (int);
2254 @};
2255
2256 main ()
2257 @{
2258   A a,b;
2259   a = b;
2260 @}
2261 @end smallexample
2262
2263 In this example, G++ will synthesize a default @samp{A& operator =
2264 (const A&);}, while cfront will use the user-defined @samp{operator =}.
2265 @end table
2266
2267 @node Objective-C and Objective-C++ Dialect Options
2268 @section Options Controlling Objective-C and Objective-C++ Dialects
2269
2270 @cindex compiler options, Objective-C and Objective-C++
2271 @cindex Objective-C and Objective-C++ options, command line
2272 @cindex options, Objective-C and Objective-C++
2273 (NOTE: This manual does not describe the Objective-C and Objective-C++
2274 languages themselves.  See @xref{Standards,,Language Standards
2275 Supported by GCC}, for references.)
2276
2277 This section describes the command-line options that are only meaningful
2278 for Objective-C and Objective-C++ programs, but you can also use most of
2279 the language-independent GNU compiler options.
2280 For example, you might compile a file @code{some_class.m} like this:
2281
2282 @smallexample
2283 gcc -g -fgnu-runtime -O -c some_class.m
2284 @end smallexample
2285
2286 @noindent
2287 In this example, @option{-fgnu-runtime} is an option meant only for
2288 Objective-C and Objective-C++ programs; you can use the other options with
2289 any language supported by GCC@.
2290
2291 Note that since Objective-C is an extension of the C language, Objective-C
2292 compilations may also use options specific to the C front-end (e.g.,
2293 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2294 C++-specific options (e.g., @option{-Wabi}).
2295
2296 Here is a list of options that are @emph{only} for compiling Objective-C
2297 and Objective-C++ programs:
2298
2299 @table @gcctabopt
2300 @item -fconstant-string-class=@var{class-name}
2301 @opindex fconstant-string-class
2302 Use @var{class-name} as the name of the class to instantiate for each
2303 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2304 class name is @code{NXConstantString} if the GNU runtime is being used, and
2305 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2306 @option{-fconstant-cfstrings} option, if also present, will override the
2307 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2308 to be laid out as constant CoreFoundation strings.
2309
2310 @item -fgnu-runtime
2311 @opindex fgnu-runtime
2312 Generate object code compatible with the standard GNU Objective-C
2313 runtime.  This is the default for most types of systems.
2314
2315 @item -fnext-runtime
2316 @opindex fnext-runtime
2317 Generate output compatible with the NeXT runtime.  This is the default
2318 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2319 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2320 used.
2321
2322 @item -fno-nil-receivers
2323 @opindex fno-nil-receivers
2324 Assume that all Objective-C message dispatches (e.g.,
2325 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
2326 is not @code{nil}.  This allows for more efficient entry points in the runtime
2327 to be used.  Currently, this option is only available in conjunction with
2328 the NeXT runtime on Mac OS X 10.3 and later.
2329
2330 @item -fobjc-call-cxx-cdtors
2331 @opindex fobjc-call-cxx-cdtors
2332 For each Objective-C class, check if any of its instance variables is a
2333 C++ object with a non-trivial default constructor.  If so, synthesize a
2334 special @code{- (id) .cxx_construct} instance method that will run
2335 non-trivial default constructors on any such instance variables, in order,
2336 and then return @code{self}.  Similarly, check if any instance variable
2337 is a C++ object with a non-trivial destructor, and if so, synthesize a
2338 special @code{- (void) .cxx_destruct} method that will run
2339 all such default destructors, in reverse order.
2340
2341 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2342 thusly generated will only operate on instance variables declared in the
2343 current Objective-C class, and not those inherited from superclasses.  It
2344 is the responsibility of the Objective-C runtime to invoke all such methods
2345 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2346 will be invoked by the runtime immediately after a new object
2347 instance is allocated; the @code{- (void) .cxx_destruct} methods will
2348 be invoked immediately before the runtime deallocates an object instance.
2349
2350 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2351 support for invoking the @code{- (id) .cxx_construct} and
2352 @code{- (void) .cxx_destruct} methods.
2353
2354 @item -fobjc-direct-dispatch
2355 @opindex fobjc-direct-dispatch
2356 Allow fast jumps to the message dispatcher.  On Darwin this is
2357 accomplished via the comm page.
2358
2359 @item -fobjc-exceptions
2360 @opindex fobjc-exceptions
2361 Enable syntactic support for structured exception handling in Objective-C,
2362 similar to what is offered by C++ and Java.  This option is
2363 unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2364 earlier.
2365
2366 @smallexample
2367   @@try @{
2368     @dots{}
2369        @@throw expr;
2370     @dots{}
2371   @}
2372   @@catch (AnObjCClass *exc) @{
2373     @dots{}
2374       @@throw expr;
2375     @dots{}
2376       @@throw;
2377     @dots{}
2378   @}
2379   @@catch (AnotherClass *exc) @{
2380     @dots{}
2381   @}
2382   @@catch (id allOthers) @{
2383     @dots{}
2384   @}
2385   @@finally @{
2386     @dots{}
2387       @@throw expr;
2388     @dots{}
2389   @}
2390 @end smallexample
2391
2392 The @code{@@throw} statement may appear anywhere in an Objective-C or
2393 Objective-C++ program; when used inside of a @code{@@catch} block, the
2394 @code{@@throw} may appear without an argument (as shown above), in which case
2395 the object caught by the @code{@@catch} will be rethrown.
2396
2397 Note that only (pointers to) Objective-C objects may be thrown and
2398 caught using this scheme.  When an object is thrown, it will be caught
2399 by the nearest @code{@@catch} clause capable of handling objects of that type,
2400 analogously to how @code{catch} blocks work in C++ and Java.  A
2401 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2402 any and all Objective-C exceptions not caught by previous @code{@@catch}
2403 clauses (if any).
2404
2405 The @code{@@finally} clause, if present, will be executed upon exit from the
2406 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2407 regardless of whether any exceptions are thrown, caught or rethrown
2408 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2409 of the @code{finally} clause in Java.
2410
2411 There are several caveats to using the new exception mechanism:
2412
2413 @itemize @bullet
2414 @item
2415 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2416 idioms provided by the @code{NSException} class, the new
2417 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2418 systems, due to additional functionality needed in the (NeXT) Objective-C
2419 runtime.
2420
2421 @item
2422 As mentioned above, the new exceptions do not support handling
2423 types other than Objective-C objects.   Furthermore, when used from
2424 Objective-C++, the Objective-C exception model does not interoperate with C++
2425 exceptions at this time.  This means you cannot @code{@@throw} an exception
2426 from Objective-C and @code{catch} it in C++, or vice versa
2427 (i.e., @code{throw @dots{} @@catch}).
2428 @end itemize
2429
2430 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2431 blocks for thread-safe execution:
2432
2433 @smallexample
2434   @@synchronized (ObjCClass *guard) @{
2435     @dots{}
2436   @}
2437 @end smallexample
2438
2439 Upon entering the @code{@@synchronized} block, a thread of execution shall
2440 first check whether a lock has been placed on the corresponding @code{guard}
2441 object by another thread.  If it has, the current thread shall wait until
2442 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2443 the current thread will place its own lock on it, execute the code contained in
2444 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2445 making @code{guard} available to other threads).
2446
2447 Unlike Java, Objective-C does not allow for entire methods to be marked
2448 @code{@@synchronized}.  Note that throwing exceptions out of
2449 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2450 to be unlocked properly.
2451
2452 @item -fobjc-gc
2453 @opindex fobjc-gc
2454 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2455
2456 @item -freplace-objc-classes
2457 @opindex freplace-objc-classes
2458 Emit a special marker instructing @command{ld(1)} not to statically link in
2459 the resulting object file, and allow @command{dyld(1)} to load it in at
2460 run time instead.  This is used in conjunction with the Fix-and-Continue
2461 debugging mode, where the object file in question may be recompiled and
2462 dynamically reloaded in the course of program execution, without the need
2463 to restart the program itself.  Currently, Fix-and-Continue functionality
2464 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2465 and later.
2466
2467 @item -fzero-link
2468 @opindex fzero-link
2469 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2470 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2471 compile time) with static class references that get initialized at load time,
2472 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2473 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2474 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2475 for individual class implementations to be modified during program execution.
2476
2477 @item -gen-decls
2478 @opindex gen-decls
2479 Dump interface declarations for all classes seen in the source file to a
2480 file named @file{@var{sourcename}.decl}.
2481
2482 @item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
2483 @opindex Wassign-intercept
2484 @opindex Wno-assign-intercept
2485 Warn whenever an Objective-C assignment is being intercepted by the
2486 garbage collector.
2487
2488 @item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
2489 @opindex Wno-protocol
2490 @opindex Wprotocol
2491 If a class is declared to implement a protocol, a warning is issued for
2492 every method in the protocol that is not implemented by the class.  The
2493 default behavior is to issue a warning for every method not explicitly
2494 implemented in the class, even if a method implementation is inherited
2495 from the superclass.  If you use the @option{-Wno-protocol} option, then
2496 methods inherited from the superclass are considered to be implemented,
2497 and no warning is issued for them.
2498
2499 @item -Wselector @r{(Objective-C and Objective-C++ only)}
2500 @opindex Wselector
2501 @opindex Wno-selector
2502 Warn if multiple methods of different types for the same selector are
2503 found during compilation.  The check is performed on the list of methods
2504 in the final stage of compilation.  Additionally, a check is performed
2505 for each selector appearing in a @code{@@selector(@dots{})}
2506 expression, and a corresponding method for that selector has been found
2507 during compilation.  Because these checks scan the method table only at
2508 the end of compilation, these warnings are not produced if the final
2509 stage of compilation is not reached, for example because an error is
2510 found during compilation, or because the @option{-fsyntax-only} option is
2511 being used.
2512
2513 @item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
2514 @opindex Wstrict-selector-match
2515 @opindex Wno-strict-selector-match
2516 Warn if multiple methods with differing argument and/or return types are
2517 found for a given selector when attempting to send a message using this
2518 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2519 is off (which is the default behavior), the compiler will omit such warnings
2520 if any differences found are confined to types which share the same size
2521 and alignment.
2522
2523 @item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
2524 @opindex Wundeclared-selector
2525 @opindex Wno-undeclared-selector
2526 Warn if a @code{@@selector(@dots{})} expression referring to an
2527 undeclared selector is found.  A selector is considered undeclared if no
2528 method with that name has been declared before the
2529 @code{@@selector(@dots{})} expression, either explicitly in an
2530 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2531 an @code{@@implementation} section.  This option always performs its
2532 checks as soon as a @code{@@selector(@dots{})} expression is found,
2533 while @option{-Wselector} only performs its checks in the final stage of
2534 compilation.  This also enforces the coding style convention
2535 that methods and selectors must be declared before being used.
2536
2537 @item -print-objc-runtime-info
2538 @opindex print-objc-runtime-info
2539 Generate C header describing the largest structure that is passed by
2540 value, if any.
2541
2542 @end table
2543
2544 @node Language Independent Options
2545 @section Options to Control Diagnostic Messages Formatting
2546 @cindex options to control diagnostics formatting
2547 @cindex diagnostic messages
2548 @cindex message formatting
2549
2550 Traditionally, diagnostic messages have been formatted irrespective of
2551 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2552 below can be used to control the diagnostic messages formatting
2553 algorithm, e.g.@: how many characters per line, how often source location
2554 information should be reported.  Right now, only the C++ front end can
2555 honor these options.  However it is expected, in the near future, that
2556 the remaining front ends would be able to digest them correctly.
2557
2558 @table @gcctabopt
2559 @item -fmessage-length=@var{n}
2560 @opindex fmessage-length
2561 Try to format error messages so that they fit on lines of about @var{n}
2562 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2563 the front ends supported by GCC@.  If @var{n} is zero, then no
2564 line-wrapping will be done; each error message will appear on a single
2565 line.
2566
2567 @opindex fdiagnostics-show-location
2568 @item -fdiagnostics-show-location=once
2569 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2570 reporter to emit @emph{once} source location information; that is, in
2571 case the message is too long to fit on a single physical line and has to
2572 be wrapped, the source location won't be emitted (as prefix) again,
2573 over and over, in subsequent continuation lines.  This is the default
2574 behavior.
2575
2576 @item -fdiagnostics-show-location=every-line
2577 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2578 messages reporter to emit the same source location information (as
2579 prefix) for physical lines that result from the process of breaking
2580 a message which is too long to fit on a single line.
2581
2582 @item -fdiagnostics-show-option
2583 @opindex fdiagnostics-show-option
2584 This option instructs the diagnostic machinery to add text to each
2585 diagnostic emitted, which indicates which command line option directly
2586 controls that diagnostic, when such an option is known to the
2587 diagnostic machinery.
2588
2589 @item -Wcoverage-mismatch
2590 @opindex Wcoverage-mismatch
2591 Warn if feedback profiles do not match when using the
2592 @option{-fprofile-use} option.
2593 If a source file was changed between @option{-fprofile-gen} and
2594 @option{-fprofile-use}, the files with the profile feedback can fail
2595 to match the source file and GCC can not use the profile feedback
2596 information.  By default, GCC emits an error message in this case.
2597 The option @option{-Wcoverage-mismatch} emits a warning instead of an
2598 error.  GCC does not use appropriate feedback profiles, so using this
2599 option can result in poorly optimized code.  This option is useful
2600 only in the case of very minor changes such as bug fixes to an
2601 existing code-base.
2602
2603 @end table
2604
2605 @node Warning Options
2606 @section Options to Request or Suppress Warnings
2607 @cindex options to control warnings
2608 @cindex warning messages
2609 @cindex messages, warning
2610 @cindex suppressing warnings
2611
2612 Warnings are diagnostic messages that report constructions which
2613 are not inherently erroneous but which are risky or suggest there
2614 may have been an error.
2615
2616 The following language-independent options do not enable specific
2617 warnings but control the kinds of diagnostics produced by GCC.
2618
2619 @table @gcctabopt
2620 @cindex syntax checking
2621 @item -fsyntax-only
2622 @opindex fsyntax-only
2623 Check the code for syntax errors, but don't do anything beyond that.
2624
2625 @item -w
2626 @opindex w
2627 Inhibit all warning messages.
2628
2629 @item -Werror
2630 @opindex Werror
2631 @opindex Wno-error
2632 Make all warnings into errors.
2633
2634 @item -Werror=
2635 @opindex Werror=
2636 @opindex Wno-error=
2637 Make the specified warning into an error.  The specifier for a warning
2638 is appended, for example @option{-Werror=switch} turns the warnings
2639 controlled by @option{-Wswitch} into errors.  This switch takes a
2640 negative form, to be used to negate @option{-Werror} for specific
2641 warnings, for example @option{-Wno-error=switch} makes
2642 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
2643 is in effect.  You can use the @option{-fdiagnostics-show-option}
2644 option to have each controllable warning amended with the option which
2645 controls it, to determine what to use with this option.
2646
2647 Note that specifying @option{-Werror=}@var{foo} automatically implies
2648 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
2649 imply anything.
2650
2651 @item -Wfatal-errors
2652 @opindex Wfatal-errors
2653 @opindex Wno-fatal-errors
2654 This option causes the compiler to abort compilation on the first error
2655 occurred rather than trying to keep going and printing further error
2656 messages.
2657
2658 @end table
2659
2660 You can request many specific warnings with options beginning
2661 @samp{-W}, for example @option{-Wimplicit} to request warnings on
2662 implicit declarations.  Each of these specific warning options also
2663 has a negative form beginning @samp{-Wno-} to turn off warnings; for
2664 example, @option{-Wno-implicit}.  This manual lists only one of the
2665 two forms, whichever is not the default.  For further,
2666 language-specific options also refer to @ref{C++ Dialect Options} and
2667 @ref{Objective-C and Objective-C++ Dialect Options}.
2668
2669 @table @gcctabopt
2670 @item -pedantic
2671 @opindex pedantic
2672 Issue all the warnings demanded by strict ISO C and ISO C++;
2673 reject all programs that use forbidden extensions, and some other
2674 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2675 version of the ISO C standard specified by any @option{-std} option used.
2676
2677 Valid ISO C and ISO C++ programs should compile properly with or without
2678 this option (though a rare few will require @option{-ansi} or a
2679 @option{-std} option specifying the required version of ISO C)@.  However,
2680 without this option, certain GNU extensions and traditional C and C++
2681 features are supported as well.  With this option, they are rejected.
2682
2683 @option{-pedantic} does not cause warning messages for use of the
2684 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2685 warnings are also disabled in the expression that follows
2686 @code{__extension__}.  However, only system header files should use
2687 these escape routes; application programs should avoid them.
2688 @xref{Alternate Keywords}.
2689
2690 Some users try to use @option{-pedantic} to check programs for strict ISO
2691 C conformance.  They soon find that it does not do quite what they want:
2692 it finds some non-ISO practices, but not all---only those for which
2693 ISO C @emph{requires} a diagnostic, and some others for which
2694 diagnostics have been added.
2695
2696 A feature to report any failure to conform to ISO C might be useful in
2697 some instances, but would require considerable additional work and would
2698 be quite different from @option{-pedantic}.  We don't have plans to
2699 support such a feature in the near future.
2700
2701 Where the standard specified with @option{-std} represents a GNU
2702 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2703 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2704 extended dialect is based.  Warnings from @option{-pedantic} are given
2705 where they are required by the base standard.  (It would not make sense
2706 for such warnings to be given only for features not in the specified GNU
2707 C dialect, since by definition the GNU dialects of C include all
2708 features the compiler supports with the given option, and there would be
2709 nothing to warn about.)
2710
2711 @item -pedantic-errors
2712 @opindex pedantic-errors
2713 Like @option{-pedantic}, except that errors are produced rather than
2714 warnings.
2715
2716 @item -Wall
2717 @opindex Wall
2718 @opindex Wno-all
2719 This enables all the warnings about constructions that some users
2720 consider questionable, and that are easy to avoid (or modify to
2721 prevent the warning), even in conjunction with macros.  This also
2722 enables some language-specific warnings described in @ref{C++ Dialect
2723 Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
2724
2725 @option{-Wall} turns on the following warning flags:
2726
2727 @gccoptlist{-Waddress   @gol
2728 -Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
2729 -Wc++0x-compat  @gol
2730 -Wchar-subscripts  @gol
2731 -Wimplicit-int  @gol
2732 -Wimplicit-function-declaration  @gol
2733 -Wcomment  @gol
2734 -Wformat   @gol
2735 -Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
2736 -Wmissing-braces  @gol
2737 -Wnonnull  @gol
2738 -Wparentheses  @gol
2739 -Wpointer-sign  @gol
2740 -Wreorder   @gol
2741 -Wreturn-type  @gol
2742 -Wsequence-point  @gol
2743 -Wsign-compare @r{(only in C++)}  @gol
2744 -Wstrict-aliasing  @gol
2745 -Wstrict-overflow=1  @gol
2746 -Wswitch  @gol
2747 -Wtrigraphs  @gol
2748 -Wuninitialized  @gol
2749 -Wunknown-pragmas  @gol
2750 -Wunused-function  @gol
2751 -Wunused-label     @gol
2752 -Wunused-value     @gol
2753 -Wunused-variable  @gol
2754 -Wvolatile-register-var @gol
2755 }
2756
2757 Note that some warning flags are not implied by @option{-Wall}.  Some of
2758 them warn about constructions that users generally do not consider
2759 questionable, but which occasionally you might wish to check for;
2760 others warn about constructions that are necessary or hard to avoid in
2761 some cases, and there is no simple way to modify the code to suppress
2762 the warning. Some of them are enabled by @option{-Wextra} but many of
2763 them must be enabled individually.
2764
2765 @item -Wextra
2766 @opindex W
2767 @opindex Wextra
2768 @opindex Wno-extra
2769 This enables some extra warning flags that are not enabled by
2770 @option{-Wall}. (This option used to be called @option{-W}.  The older
2771 name is still supported, but the newer name is more descriptive.)
2772
2773 @gccoptlist{-Wclobbered  @gol
2774 -Wempty-body  @gol
2775 -Wignored-qualifiers @gol
2776 -Wmissing-field-initializers  @gol
2777 -Wmissing-parameter-type @r{(C only)}  @gol
2778 -Wold-style-declaration @r{(C only)}  @gol
2779 -Woverride-init  @gol
2780 -Wsign-compare  @gol
2781 -Wtype-limits  @gol
2782 -Wuninitialized  @gol
2783 -Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
2784 }
2785
2786 The option @option{-Wextra} also prints warning messages for the
2787 following cases:
2788
2789 @itemize @bullet
2790
2791 @item
2792 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2793 @samp{>}, or @samp{>=}.
2794
2795 @item 
2796 (C++ only) An enumerator and a non-enumerator both appear in a
2797 conditional expression.
2798
2799 @item 
2800 (C++ only) Ambiguous virtual bases.
2801
2802 @item 
2803 (C++ only) Subscripting an array which has been declared @samp{register}.
2804
2805 @item 
2806 (C++ only) Taking the address of a variable which has been declared
2807 @samp{register}.
2808
2809 @item 
2810 (C++ only) A base class is not initialized in a derived class' copy
2811 constructor.
2812
2813 @end itemize
2814
2815 @item -Wchar-subscripts
2816 @opindex Wchar-subscripts
2817 @opindex Wno-char-subscripts
2818 Warn if an array subscript has type @code{char}.  This is a common cause
2819 of error, as programmers often forget that this type is signed on some
2820 machines.
2821 This warning is enabled by @option{-Wall}.
2822
2823 @item -Wcomment
2824 @opindex Wcomment
2825 @opindex Wno-comment
2826 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2827 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2828 This warning is enabled by @option{-Wall}.
2829
2830 @item -Wformat
2831 @opindex Wformat
2832 @opindex Wno-format
2833 @opindex ffreestanding
2834 @opindex fno-builtin
2835 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2836 the arguments supplied have types appropriate to the format string
2837 specified, and that the conversions specified in the format string make
2838 sense.  This includes standard functions, and others specified by format
2839 attributes (@pxref{Function Attributes}), in the @code{printf},
2840 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2841 not in the C standard) families (or other target-specific families).
2842 Which functions are checked without format attributes having been
2843 specified depends on the standard version selected, and such checks of
2844 functions without the attribute specified are disabled by
2845 @option{-ffreestanding} or @option{-fno-builtin}.
2846
2847 The formats are checked against the format features supported by GNU
2848 libc version 2.2.  These include all ISO C90 and C99 features, as well
2849 as features from the Single Unix Specification and some BSD and GNU
2850 extensions.  Other library implementations may not support all these
2851 features; GCC does not support warning about features that go beyond a
2852 particular library's limitations.  However, if @option{-pedantic} is used
2853 with @option{-Wformat}, warnings will be given about format features not
2854 in the selected standard version (but not for @code{strfmon} formats,
2855 since those are not in any version of the C standard).  @xref{C Dialect
2856 Options,,Options Controlling C Dialect}.
2857
2858 Since @option{-Wformat} also checks for null format arguments for
2859 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2860
2861 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2862 aspects of format checking, the options @option{-Wformat-y2k},
2863 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2864 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2865 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2866
2867 @item -Wformat-y2k
2868 @opindex Wformat-y2k
2869 @opindex Wno-format-y2k
2870 If @option{-Wformat} is specified, also warn about @code{strftime}
2871 formats which may yield only a two-digit year.
2872
2873 @item -Wno-format-contains-nul
2874 @opindex Wno-format-contains-nul
2875 @opindex Wformat-contains-nul
2876 If @option{-Wformat} is specified, do not warn about format strings that
2877 contain NUL bytes.
2878
2879 @item -Wno-format-extra-args
2880 @opindex Wno-format-extra-args
2881 @opindex Wformat-extra-args
2882 If @option{-Wformat} is specified, do not warn about excess arguments to a
2883 @code{printf} or @code{scanf} format function.  The C standard specifies
2884 that such arguments are ignored.
2885
2886 Where the unused arguments lie between used arguments that are
2887 specified with @samp{$} operand number specifications, normally
2888 warnings are still given, since the implementation could not know what
2889 type to pass to @code{va_arg} to skip the unused arguments.  However,
2890 in the case of @code{scanf} formats, this option will suppress the
2891 warning if the unused arguments are all pointers, since the Single
2892 Unix Specification says that such unused arguments are allowed.
2893
2894 @item -Wno-format-zero-length @r{(C and Objective-C only)}
2895 @opindex Wno-format-zero-length
2896 @opindex Wformat-zero-length
2897 If @option{-Wformat} is specified, do not warn about zero-length formats.
2898 The C standard specifies that zero-length formats are allowed.
2899
2900 @item -Wformat-nonliteral
2901 @opindex Wformat-nonliteral
2902 @opindex Wno-format-nonliteral
2903 If @option{-Wformat} is specified, also warn if the format string is not a
2904 string literal and so cannot be checked, unless the format function
2905 takes its format arguments as a @code{va_list}.
2906
2907 @item -Wformat-security
2908 @opindex Wformat-security
2909 @opindex Wno-format-security
2910 If @option{-Wformat} is specified, also warn about uses of format
2911 functions that represent possible security problems.  At present, this
2912 warns about calls to @code{printf} and @code{scanf} functions where the
2913 format string is not a string literal and there are no format arguments,
2914 as in @code{printf (foo);}.  This may be a security hole if the format
2915 string came from untrusted input and contains @samp{%n}.  (This is
2916 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2917 in future warnings may be added to @option{-Wformat-security} that are not
2918 included in @option{-Wformat-nonliteral}.)
2919
2920 @item -Wformat=2
2921 @opindex Wformat=2
2922 @opindex Wno-format=2
2923 Enable @option{-Wformat} plus format checks not included in
2924 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2925 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2926
2927 @item -Wnonnull @r{(C and Objective-C only)}
2928 @opindex Wnonnull
2929 @opindex Wno-nonnull
2930 Warn about passing a null pointer for arguments marked as
2931 requiring a non-null value by the @code{nonnull} function attribute.
2932
2933 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2934 can be disabled with the @option{-Wno-nonnull} option.
2935
2936 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
2937 @opindex Winit-self
2938 @opindex Wno-init-self
2939 Warn about uninitialized variables which are initialized with themselves.
2940 Note this option can only be used with the @option{-Wuninitialized} option.
2941
2942 For example, GCC will warn about @code{i} being uninitialized in the
2943 following snippet only when @option{-Winit-self} has been specified:
2944 @smallexample
2945 @group
2946 int f()
2947 @{
2948   int i = i;
2949   return i;
2950 @}
2951 @end group
2952 @end smallexample
2953
2954 @item -Wimplicit-int @r{(C and Objective-C only)}
2955 @opindex Wimplicit-int
2956 @opindex Wno-implicit-int
2957 Warn when a declaration does not specify a type.
2958 This warning is enabled by @option{-Wall}.
2959
2960 @item -Wimplicit-function-declaration @r{(C and Objective-C only)}
2961 @opindex Wimplicit-function-declaration
2962 @opindex Wno-implicit-function-declaration
2963 Give a warning whenever a function is used before being declared. In
2964 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
2965 enabled by default and it is made into an error by
2966 @option{-pedantic-errors}. This warning is also enabled by
2967 @option{-Wall}.
2968
2969 @item -Wimplicit
2970 @opindex Wimplicit
2971 @opindex Wno-implicit
2972 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2973 This warning is enabled by @option{-Wall}.
2974
2975 @item -Wignored-qualifiers @r{(C and C++ only)}
2976 @opindex Wignored-qualifiers
2977 @opindex Wno-ignored-qualifiers
2978 Warn if the return type of a function has a type qualifier
2979 such as @code{const}.  For ISO C such a type qualifier has no effect,
2980 since the value returned by a function is not an lvalue.
2981 For C++, the warning is only emitted for scalar types or @code{void}.
2982 ISO C prohibits qualified @code{void} return types on function
2983 definitions, so such return types always receive a warning
2984 even without this option.
2985
2986 This warning is also enabled by @option{-Wextra}.
2987
2988 @item -Wmain
2989 @opindex Wmain
2990 @opindex Wno-main
2991 Warn if the type of @samp{main} is suspicious.  @samp{main} should be
2992 a function with external linkage, returning int, taking either zero
2993 arguments, two, or three arguments of appropriate types.  This warning
2994 is enabled by default in C++ and is enabled by either @option{-Wall}
2995 or @option{-pedantic}.
2996
2997 @item -Wmissing-braces
2998 @opindex Wmissing-braces
2999 @opindex Wno-missing-braces
3000 Warn if an aggregate or union initializer is not fully bracketed.  In
3001 the following example, the initializer for @samp{a} is not fully
3002 bracketed, but that for @samp{b} is fully bracketed.
3003
3004 @smallexample
3005 int a[2][2] = @{ 0, 1, 2, 3 @};
3006 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3007 @end smallexample
3008
3009 This warning is enabled by @option{-Wall}.
3010
3011 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3012 @opindex Wmissing-include-dirs
3013 @opindex Wno-missing-include-dirs
3014 Warn if a user-supplied include directory does not exist.
3015
3016 @item -Wparentheses
3017 @opindex Wparentheses
3018 @opindex Wno-parentheses
3019 Warn if parentheses are omitted in certain contexts, such
3020 as when there is an assignment in a context where a truth value
3021 is expected, or when operators are nested whose precedence people
3022 often get confused about.
3023
3024 Also warn if a comparison like @samp{x<=y<=z} appears; this is
3025 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3026 interpretation from that of ordinary mathematical notation.
3027
3028 Also warn about constructions where there may be confusion to which
3029 @code{if} statement an @code{else} branch belongs.  Here is an example of
3030 such a case:
3031
3032 @smallexample
3033 @group
3034 @{
3035   if (a)
3036     if (b)
3037       foo ();
3038   else
3039     bar ();
3040 @}
3041 @end group
3042 @end smallexample
3043
3044 In C/C++, every @code{else} branch belongs to the innermost possible
3045 @code{if} statement, which in this example is @code{if (b)}.  This is
3046 often not what the programmer expected, as illustrated in the above
3047 example by indentation the programmer chose.  When there is the
3048 potential for this confusion, GCC will issue a warning when this flag
3049 is specified.  To eliminate the warning, add explicit braces around
3050 the innermost @code{if} statement so there is no way the @code{else}
3051 could belong to the enclosing @code{if}.  The resulting code would
3052 look like this:
3053
3054 @smallexample
3055 @group
3056 @{
3057   if (a)
3058     @{
3059       if (b)
3060         foo ();
3061       else
3062         bar ();
3063     @}
3064 @}
3065 @end group
3066 @end smallexample
3067
3068 This warning is enabled by @option{-Wall}.
3069
3070 @item -Wsequence-point
3071 @opindex Wsequence-point
3072 @opindex Wno-sequence-point
3073 Warn about code that may have undefined semantics because of violations
3074 of sequence point rules in the C and C++ standards.
3075
3076 The C and C++ standards defines the order in which expressions in a C/C++
3077 program are evaluated in terms of @dfn{sequence points}, which represent
3078 a partial ordering between the execution of parts of the program: those
3079 executed before the sequence point, and those executed after it.  These
3080 occur after the evaluation of a full expression (one which is not part
3081 of a larger expression), after the evaluation of the first operand of a
3082 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3083 function is called (but after the evaluation of its arguments and the
3084 expression denoting the called function), and in certain other places.
3085 Other than as expressed by the sequence point rules, the order of
3086 evaluation of subexpressions of an expression is not specified.  All
3087 these rules describe only a partial order rather than a total order,
3088 since, for example, if two functions are called within one expression
3089 with no sequence point between them, the order in which the functions
3090 are called is not specified.  However, the standards committee have
3091 ruled that function calls do not overlap.
3092
3093 It is not specified when between sequence points modifications to the
3094 values of objects take effect.  Programs whose behavior depends on this
3095 have undefined behavior; the C and C++ standards specify that ``Between
3096 the previous and next sequence point an object shall have its stored
3097 value modified at most once by the evaluation of an expression.
3098 Furthermore, the prior value shall be read only to determine the value
3099 to be stored.''.  If a program breaks these rules, the results on any
3100 particular implementation are entirely unpredictable.
3101
3102 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3103 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3104 diagnosed by this option, and it may give an occasional false positive
3105 result, but in general it has been found fairly effective at detecting
3106 this sort of problem in programs.
3107
3108 The standard is worded confusingly, therefore there is some debate
3109 over the precise meaning of the sequence point rules in subtle cases.
3110 Links to discussions of the problem, including proposed formal
3111 definitions, may be found on the GCC readings page, at
3112 @w{@uref{http://gcc.gnu.org/readings.html}}.
3113
3114 This warning is enabled by @option{-Wall} for C and C++.
3115
3116 @item -Wreturn-type
3117 @opindex Wreturn-type
3118 @opindex Wno-return-type
3119 Warn whenever a function is defined with a return-type that defaults
3120 to @code{int}.  Also warn about any @code{return} statement with no
3121 return-value in a function whose return-type is not @code{void}
3122 (falling off the end of the function body is considered returning
3123 without a value), and about a @code{return} statement with a
3124 expression in a function whose return-type is @code{void}.
3125
3126 For C++, a function without return type always produces a diagnostic
3127 message, even when @option{-Wno-return-type} is specified.  The only
3128 exceptions are @samp{main} and functions defined in system headers.
3129
3130 This warning is enabled by @option{-Wall}.
3131
3132 @item -Wswitch
3133 @opindex Wswitch
3134 @opindex Wno-switch
3135 Warn whenever a @code{switch} statement has an index of enumerated type
3136 and lacks a @code{case} for one or more of the named codes of that
3137 enumeration.  (The presence of a @code{default} label prevents this
3138 warning.)  @code{case} labels outside the enumeration range also
3139 provoke warnings when this option is used.
3140 This warning is enabled by @option{-Wall}.
3141
3142 @item -Wswitch-default
3143 @opindex Wswitch-default
3144 @opindex Wno-switch-default
3145 Warn whenever a @code{switch} statement does not have a @code{default}
3146 case.
3147
3148 @item -Wswitch-enum
3149 @opindex Wswitch-enum
3150 @opindex Wno-switch-enum
3151 Warn whenever a @code{switch} statement has an index of enumerated type
3152 and lacks a @code{case} for one or more of the named codes of that
3153 enumeration.  @code{case} labels outside the enumeration range also
3154 provoke warnings when this option is used.
3155
3156 @item -Wsync-nand @r{(C and C++ only)}
3157 @opindex Wsync-nand
3158 @opindex Wno-sync-nand
3159 Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3160 built-in functions are used.  These functions changed semantics in GCC 4.4.
3161
3162 @item -Wtrigraphs
3163 @opindex Wtrigraphs
3164 @opindex Wno-trigraphs
3165 Warn if any trigraphs are encountered that might change the meaning of
3166 the program (trigraphs within comments are not warned about).
3167 This warning is enabled by @option{-Wall}.
3168
3169 @item -Wunused-function
3170 @opindex Wunused-function
3171 @opindex Wno-unused-function
3172 Warn whenever a static function is declared but not defined or a
3173 non-inline static function is unused.
3174 This warning is enabled by @option{-Wall}.
3175
3176 @item -Wunused-label
3177 @opindex Wunused-label
3178 @opindex Wno-unused-label
3179 Warn whenever a label is declared but not used.
3180 This warning is enabled by @option{-Wall}.
3181
3182 To suppress this warning use the @samp{unused} attribute
3183 (@pxref{Variable Attributes}).
3184
3185 @item -Wunused-parameter
3186 @opindex Wunused-parameter
3187 @opindex Wno-unused-parameter
3188 Warn whenever a function parameter is unused aside from its declaration.
3189
3190 To suppress this warning use the @samp{unused} attribute
3191 (@pxref{Variable Attributes}).
3192
3193 @item -Wunused-variable
3194 @opindex Wunused-variable
3195 @opindex Wno-unused-variable
3196 Warn whenever a local variable or non-constant static variable is unused
3197 aside from its declaration.
3198 This warning is enabled by @option{-Wall}.
3199
3200 To suppress this warning use the @samp{unused} attribute
3201 (@pxref{Variable Attributes}).
3202
3203 @item -Wunused-value
3204 @opindex Wunused-value
3205 @opindex Wno-unused-value
3206 Warn whenever a statement computes a result that is explicitly not
3207 used. To suppress this warning cast the unused expression to
3208 @samp{void}. This includes an expression-statement or the left-hand
3209 side of a comma expression that contains no side effects. For example,
3210 an expression such as @samp{x[i,j]} will cause a warning, while
3211 @samp{x[(void)i,j]} will not.
3212
3213 This warning is enabled by @option{-Wall}.
3214
3215 @item -Wunused
3216 @opindex Wunused
3217 @opindex Wno-unused
3218 All the above @option{-Wunused} options combined.
3219
3220 In order to get a warning about an unused function parameter, you must
3221 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
3222 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
3223
3224 @item -Wuninitialized
3225 @opindex Wuninitialized
3226 @opindex Wno-uninitialized
3227 Warn if an automatic variable is used without first being initialized
3228 or if a variable may be clobbered by a @code{setjmp} call. In C++,
3229 warn if a non-static reference or non-static @samp{const} member
3230 appears in a class without constructors.
3231
3232 If you want to warn about code which uses the uninitialized value of the
3233 variable in its own initializer, use the @option{-Winit-self} option.
3234
3235 These warnings occur for individual uninitialized or clobbered
3236 elements of structure, union or array variables as well as for
3237 variables which are uninitialized or clobbered as a whole.  They do
3238 not occur for variables or elements declared @code{volatile}.  Because
3239 these warnings depend on optimization, the exact variables or elements
3240 for which there are warnings will depend on the precise optimization
3241 options and version of GCC used.
3242
3243 Note that there may be no warning about a variable that is used only
3244 to compute a value that itself is never used, because such
3245 computations may be deleted by data flow analysis before the warnings
3246 are printed.
3247
3248 These warnings are made optional because GCC is not smart
3249 enough to see all the reasons why the code might be correct
3250 despite appearing to have an error.  Here is one example of how
3251 this can happen:
3252
3253 @smallexample
3254 @group
3255 @{
3256   int x;
3257   switch (y)
3258     @{
3259     case 1: x = 1;
3260       break;
3261     case 2: x = 4;
3262       break;
3263     case 3: x = 5;
3264     @}
3265   foo (x);
3266 @}
3267 @end group
3268 @end smallexample
3269
3270 @noindent
3271 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3272 always initialized, but GCC doesn't know this.  Here is
3273 another common case:
3274
3275 @smallexample
3276 @{
3277   int save_y;
3278   if (change_y) save_y = y, y = new_y;
3279   @dots{}
3280   if (change_y) y = save_y;
3281 @}
3282 @end smallexample
3283
3284 @noindent
3285 This has no bug because @code{save_y} is used only if it is set.
3286
3287 @cindex @code{longjmp} warnings
3288 This option also warns when a non-volatile automatic variable might be
3289 changed by a call to @code{longjmp}.  These warnings as well are possible
3290 only in optimizing compilation.
3291
3292 The compiler sees only the calls to @code{setjmp}.  It cannot know
3293 where @code{longjmp} will be called; in fact, a signal handler could
3294 call it at any point in the code.  As a result, you may get a warning
3295 even when there is in fact no problem because @code{longjmp} cannot
3296 in fact be called at the place which would cause a problem.
3297
3298 Some spurious warnings can be avoided if you declare all the functions
3299 you use that never return as @code{noreturn}.  @xref{Function
3300 Attributes}.
3301
3302 This warning is enabled by @option{-Wall} or @option{-Wextra}.
3303
3304 @item -Wunknown-pragmas
3305 @opindex Wunknown-pragmas
3306 @opindex Wno-unknown-pragmas
3307 @cindex warning for unknown pragmas
3308 @cindex unknown pragmas, warning
3309 @cindex pragmas, warning of unknown
3310 Warn when a #pragma directive is encountered which is not understood by
3311 GCC@.  If this command line option is used, warnings will even be issued
3312 for unknown pragmas in system header files.  This is not the case if
3313 the warnings were only enabled by the @option{-Wall} command line option.
3314
3315 @item -Wno-pragmas
3316 @opindex Wno-pragmas
3317 @opindex Wpragmas
3318 Do not warn about misuses of pragmas, such as incorrect parameters,
3319 invalid syntax, or conflicts between pragmas.  See also
3320 @samp{-Wunknown-pragmas}.
3321
3322 @item -Wstrict-aliasing
3323 @opindex Wstrict-aliasing
3324 @opindex Wno-strict-aliasing
3325 This option is only active when @option{-fstrict-aliasing} is active.
3326 It warns about code which might break the strict aliasing rules that the
3327 compiler is using for optimization.  The warning does not catch all
3328 cases, but does attempt to catch the more common pitfalls.  It is
3329 included in @option{-Wall}.
3330 It is equivalent to @option{-Wstrict-aliasing=3}
3331
3332 @item -Wstrict-aliasing=n
3333 @opindex Wstrict-aliasing=n
3334 @opindex Wno-strict-aliasing=n
3335 This option is only active when @option{-fstrict-aliasing} is active.
3336 It warns about code which might break the strict aliasing rules that the
3337 compiler is using for optimization.
3338 Higher levels correspond to higher accuracy (fewer false positives).
3339 Higher levels also correspond to more effort, similar to the way -O works.
3340 @option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n},
3341 with n=3.
3342
3343 Level 1: Most aggressive, quick, least accurate.
3344 Possibly useful when higher levels
3345 do not warn but -fstrict-aliasing still breaks the code, as it has very few 
3346 false negatives.  However, it has many false positives.
3347 Warns for all pointer conversions between possibly incompatible types, 
3348 even if never dereferenced.  Runs in the frontend only.
3349
3350 Level 2: Aggressive, quick, not too precise.
3351 May still have many false positives (not as many as level 1 though),
3352 and few false negatives (but possibly more than level 1).
3353 Unlike level 1, it only warns when an address is taken.  Warns about
3354 incomplete types.  Runs in the frontend only.
3355
3356 Level 3 (default for @option{-Wstrict-aliasing}): 
3357 Should have very few false positives and few false 
3358 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3359 Takes care of the common punn+dereference pattern in the frontend:
3360 @code{*(int*)&some_float}.
3361 If optimization is enabled, it also runs in the backend, where it deals 
3362 with multiple statement cases using flow-sensitive points-to information.
3363 Only warns when the converted pointer is dereferenced.
3364 Does not warn about incomplete types.
3365
3366 @item -Wstrict-overflow
3367 @itemx -Wstrict-overflow=@var{n}
3368 @opindex Wstrict-overflow
3369 @opindex Wno-strict-overflow
3370 This option is only active when @option{-fstrict-overflow} is active.
3371 It warns about cases where the compiler optimizes based on the
3372 assumption that signed overflow does not occur.  Note that it does not
3373 warn about all cases where the code might overflow: it only warns
3374 about cases where the compiler implements some optimization.  Thus
3375 this warning depends on the optimization level.
3376
3377 An optimization which assumes that signed overflow does not occur is
3378 perfectly safe if the values of the variables involved are such that
3379 overflow never does, in fact, occur.  Therefore this warning can
3380 easily give a false positive: a warning about code which is not
3381 actually a problem.  To help focus on important issues, several
3382 warning levels are defined.  No warnings are issued for the use of
3383 undefined signed overflow when estimating how many iterations a loop
3384 will require, in particular when determining whether a loop will be
3385 executed at all.
3386
3387 @table @gcctabopt
3388 @item -Wstrict-overflow=1
3389 Warn about cases which are both questionable and easy to avoid.  For
3390 example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
3391 compiler will simplify this to @code{1}.  This level of
3392 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3393 are not, and must be explicitly requested.
3394
3395 @item -Wstrict-overflow=2
3396 Also warn about other cases where a comparison is simplified to a
3397 constant.  For example: @code{abs (x) >= 0}.  This can only be
3398 simplified when @option{-fstrict-overflow} is in effect, because
3399 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3400 zero.  @option{-Wstrict-overflow} (with no level) is the same as
3401 @option{-Wstrict-overflow=2}.
3402
3403 @item -Wstrict-overflow=3
3404 Also warn about other cases where a comparison is simplified.  For
3405 example: @code{x + 1 > 1} will be simplified to @code{x > 0}.
3406
3407 @item -Wstrict-overflow=4
3408 Also warn about other simplifications not covered by the above cases.
3409 For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.
3410
3411 @item -Wstrict-overflow=5
3412 Also warn about cases where the compiler reduces the magnitude of a
3413 constant involved in a comparison.  For example: @code{x + 2 > y} will
3414 be simplified to @code{x + 1 >= y}.  This is reported only at the
3415 highest warning level because this simplification applies to many
3416 comparisons, so this warning level will give a very large number of
3417 false positives.
3418 @end table
3419
3420 @item -Warray-bounds
3421 @opindex Wno-array-bounds
3422 @opindex Warray-bounds
3423 This option is only active when @option{-ftree-vrp} is active
3424 (default for -O2 and above). It warns about subscripts to arrays
3425 that are always out of bounds. This warning is enabled by @option{-Wall}.
3426
3427 @item -Wno-div-by-zero
3428 @opindex Wno-div-by-zero
3429 @opindex Wdiv-by-zero
3430 Do not warn about compile-time integer division by zero.  Floating point
3431 division by zero is not warned about, as it can be a legitimate way of
3432 obtaining infinities and NaNs.
3433
3434 @item -Wsystem-headers
3435 @opindex Wsystem-headers
3436 @opindex Wno-system-headers
3437 @cindex warnings from system headers
3438 @cindex system headers, warnings from
3439 Print warning messages for constructs found in system header files.
3440 Warnings from system headers are normally suppressed, on the assumption
3441 that they usually do not indicate real problems and would only make the
3442 compiler output harder to read.  Using this command line option tells
3443 GCC to emit warnings from system headers as if they occurred in user
3444 code.  However, note that using @option{-Wall} in conjunction with this
3445 option will @emph{not} warn about unknown pragmas in system
3446 headers---for that, @option{-Wunknown-pragmas} must also be used.
3447
3448 @item -Wfloat-equal
3449 @opindex Wfloat-equal
3450 @opindex Wno-float-equal
3451 Warn if floating point values are used in equality comparisons.
3452
3453 The idea behind this is that sometimes it is convenient (for the
3454 programmer) to consider floating-point values as approximations to
3455 infinitely precise real numbers.  If you are doing this, then you need
3456 to compute (by analyzing the code, or in some other way) the maximum or
3457 likely maximum error that the computation introduces, and allow for it
3458 when performing comparisons (and when producing output, but that's a
3459 different problem).  In particular, instead of testing for equality, you
3460 would check to see whether the two values have ranges that overlap; and
3461 this is done with the relational operators, so equality comparisons are
3462 probably mistaken.
3463
3464 @item -Wtraditional @r{(C and Objective-C only)}
3465 @opindex Wtraditional
3466 @opindex Wno-traditional
3467 Warn about certain constructs that behave differently in traditional and
3468 ISO C@.  Also warn about ISO C constructs that have no traditional C
3469 equivalent, and/or problematic constructs which should be avoided.
3470
3471 @itemize @bullet
3472 @item
3473 Macro parameters that appear within string literals in the macro body.
3474 In traditional C macro replacement takes place within string literals,
3475 but does not in ISO C@.
3476
3477 @item
3478 In traditional C, some preprocessor directives did not exist.
3479 Traditional preprocessors would only consider a line to be a directive
3480 if the @samp{#} appeared in column 1 on the line.  Therefore
3481 @option{-Wtraditional} warns about directives that traditional C
3482 understands but would ignore because the @samp{#} does not appear as the
3483 first character on the line.  It also suggests you hide directives like
3484 @samp{#pragma} not understood by traditional C by indenting them.  Some
3485 traditional implementations would not recognize @samp{#elif}, so it
3486 suggests avoiding it altogether.
3487
3488 @item
3489 A function-like macro that appears without arguments.
3490
3491 @item
3492 The unary plus operator.
3493
3494 @item
3495 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3496 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3497 constants.)  Note, these suffixes appear in macros defined in the system
3498 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3499 Use of these macros in user code might normally lead to spurious
3500 warnings, however GCC's integrated preprocessor has enough context to
3501 avoid warning in these cases.
3502
3503 @item
3504 A function declared external in one block and then used after the end of
3505 the block.
3506
3507 @item
3508 A @code{switch} statement has an operand of type @code{long}.
3509
3510 @item
3511 A non-@code{static} function declaration follows a @code{static} one.
3512 This construct is not accepted by some traditional C compilers.
3513
3514 @item
3515 The ISO type of an integer constant has a different width or
3516 signedness from its traditional type.  This warning is only issued if
3517 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3518 typically represent bit patterns, are not warned about.
3519
3520 @item
3521 Usage of ISO string concatenation is detected.
3522
3523 @item
3524 Initialization of automatic aggregates.
3525
3526 @item
3527 Identifier conflicts with labels.  Traditional C lacks a separate
3528 namespace for labels.
3529
3530 @item
3531 Initialization of unions.  If the initializer is zero, the warning is
3532 omitted.  This is done under the assumption that the zero initializer in
3533 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3534 initializer warnings and relies on default initialization to zero in the
3535 traditional C case.
3536
3537 @item
3538 Conversions by prototypes between fixed/floating point values and vice
3539 versa.  The absence of these prototypes when compiling with traditional
3540 C would cause serious problems.  This is a subset of the possible
3541 conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3542
3543 @item
3544 Use of ISO C style function definitions.  This warning intentionally is
3545 @emph{not} issued for prototype declarations or variadic functions
3546 because these ISO C features will appear in your code when using
3547 libiberty's traditional C compatibility macros, @code{PARAMS} and
3548 @code{VPARAMS}.  This warning is also bypassed for nested functions
3549 because that feature is already a GCC extension and thus not relevant to
3550 traditional C compatibility.
3551 @end itemize
3552
3553 @item -Wtraditional-conversion @r{(C and Objective-C only)}
3554 @opindex Wtraditional-conversion
3555 @opindex Wno-traditional-conversion
3556 Warn if a prototype causes a type conversion that is different from what
3557 would happen to the same argument in the absence of a prototype.  This
3558 includes conversions of fixed point to floating and vice versa, and
3559 conversions changing the width or signedness of a fixed point argument
3560 except when the same as the default promotion.
3561
3562 @item -Wdeclaration-after-statement @r{(C and Objective-C only)}
3563 @opindex Wdeclaration-after-statement
3564 @opindex Wno-declaration-after-statement
3565 Warn when a declaration is found after a statement in a block.  This
3566 construct, known from C++, was introduced with ISO C99 and is by default
3567 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3568 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3569
3570 @item -Wundef
3571 @opindex Wundef
3572 @opindex Wno-undef
3573 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3574
3575 @item -Wno-endif-labels
3576 @opindex Wno-endif-labels
3577 @opindex Wendif-labels
3578 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3579
3580 @item -Wshadow
3581 @opindex Wshadow
3582 @opindex Wno-shadow
3583 Warn whenever a local variable shadows another local variable, parameter or
3584 global variable or whenever a built-in function is shadowed.
3585
3586 @item -Wlarger-than=@var{len}
3587 @opindex Wlarger-than=@var{len}
3588 @opindex Wlarger-than-@var{len}
3589 Warn whenever an object of larger than @var{len} bytes is defined.
3590
3591 @item -Wframe-larger-than=@var{len}
3592 @opindex Wframe-larger-than
3593 Warn if the size of a function frame is larger than @var{len} bytes.
3594 The computation done to determine the stack frame size is approximate
3595 and not conservative.
3596 The actual requirements may be somewhat greater than @var{len}
3597 even if you do not get a warning.  In addition, any space allocated
3598 via @code{alloca}, variable-length arrays, or related constructs
3599 is not included by the compiler when determining
3600 whether or not to issue a warning.
3601
3602 @item -Wunsafe-loop-optimizations
3603 @opindex Wunsafe-loop-optimizations
3604 @opindex Wno-unsafe-loop-optimizations
3605 Warn if the loop cannot be optimized because the compiler could not
3606 assume anything on the bounds of the loop indices.  With
3607 @option{-funsafe-loop-optimizations} warn if the compiler made
3608 such assumptions.
3609
3610 @item -Wno-pedantic-ms-format @r{(MinGW targets only)}
3611 @opindex Wno-pedantic-ms-format
3612 @opindex Wpedantic-ms-format
3613 Disables the warnings about non-ISO @code{printf} / @code{scanf} format
3614 width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets
3615 depending on the MS runtime, when you are using the options @option{-Wformat}
3616 and @option{-pedantic} without gnu-extensions.
3617
3618 @item -Wpointer-arith
3619 @opindex Wpointer-arith
3620 @opindex Wno-pointer-arith
3621 Warn about anything that depends on the ``size of'' a function type or
3622 of @code{void}.  GNU C assigns these types a size of 1, for
3623 convenience in calculations with @code{void *} pointers and pointers
3624 to functions.  In C++, warn also when an arithmetic operation involves
3625 @code{NULL}.  This warning is also enabled by @option{-pedantic}.
3626
3627 @item -Wtype-limits
3628 @opindex Wtype-limits
3629 @opindex Wno-type-limits
3630 Warn if a comparison is always true or always false due to the limited
3631 range of the data type, but do not warn for constant expressions.  For
3632 example, warn if an unsigned variable is compared against zero with
3633 @samp{<} or @samp{>=}.  This warning is also enabled by
3634 @option{-Wextra}.
3635
3636 @item -Wbad-function-cast @r{(C and Objective-C only)}
3637 @opindex Wbad-function-cast
3638 @opindex Wno-bad-function-cast
3639 Warn whenever a function call is cast to a non-matching type.
3640 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3641
3642 @item -Wc++-compat @r{(C and Objective-C only)}
3643 Warn about ISO C constructs that are outside of the common subset of
3644 ISO C and ISO C++, e.g.@: request for implicit conversion from
3645 @code{void *} to a pointer to non-@code{void} type.
3646
3647 @item -Wc++0x-compat @r{(C++ and Objective-C++ only)}
3648 Warn about C++ constructs whose meaning differs between ISO C++ 1998 and
3649 ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will become keywords
3650 in ISO C++ 200x.  This warning is enabled by @option{-Wall}.
3651
3652 @item -Wcast-qual
3653 @opindex Wcast-qual
3654 @opindex Wno-cast-qual
3655 Warn whenever a pointer is cast so as to remove a type qualifier from
3656 the target type.  For example, warn if a @code{const char *} is cast
3657 to an ordinary @code{char *}.
3658
3659 @item -Wcast-align
3660 @opindex Wcast-align
3661 @opindex Wno-cast-align
3662 Warn whenever a pointer is cast such that the required alignment of the
3663 target is increased.  For example, warn if a @code{char *} is cast to
3664 an @code{int *} on machines where integers can only be accessed at
3665 two- or four-byte boundaries.
3666
3667 @item -Wwrite-strings
3668 @opindex Wwrite-strings
3669 @opindex Wno-write-strings
3670 When compiling C, give string constants the type @code{const
3671 char[@var{length}]} so that copying the address of one into a
3672 non-@code{const} @code{char *} pointer will get a warning.  These
3673 warnings will help you find at compile time code that can try to write
3674 into a string constant, but only if you have been very careful about
3675 using @code{const} in declarations and prototypes.  Otherwise, it will
3676 just be a nuisance. This is why we did not make @option{-Wall} request
3677 these warnings.
3678
3679 When compiling C++, warn about the deprecated conversion from string
3680 literals to @code{char *}.  This warning is enabled by default for C++
3681 programs.
3682
3683 @item -Wclobbered
3684 @opindex Wclobbered
3685 @opindex Wno-clobbered
3686 Warn for variables that might be changed by @samp{longjmp} or
3687 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
3688
3689 @item -Wconversion
3690 @opindex Wconversion
3691 @opindex Wno-conversion
3692 Warn for implicit conversions that may alter a value. This includes
3693 conversions between real and integer, like @code{abs (x)} when
3694 @code{x} is @code{double}; conversions between signed and unsigned,
3695 like @code{unsigned ui = -1}; and conversions to smaller types, like
3696 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3697 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3698 changed by the conversion like in @code{abs (2.0)}.  Warnings about
3699 conversions between signed and unsigned integers can be disabled by
3700 using @option{-Wno-sign-conversion}.
3701
3702 For C++, also warn for conversions between @code{NULL} and non-pointer
3703 types; confusing overload resolution for user-defined conversions; and
3704 conversions that will never use a type conversion operator:
3705 conversions to @code{void}, the same type, a base class or a reference
3706 to them. Warnings about conversions between signed and unsigned
3707 integers are disabled by default in C++ unless
3708 @option{-Wsign-conversion} is explicitly enabled.
3709
3710 @item -Wempty-body
3711 @opindex Wempty-body
3712 @opindex Wno-empty-body
3713 Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
3714 while} statement.  This warning is also enabled by @option{-Wextra}.
3715
3716 @item -Wenum-compare @r{(C++ and Objective-C++ only)}
3717 @opindex Wenum-compare
3718 @opindex Wno-enum-compare
3719 Warn about a comparison between values of different enum types. This
3720 warning is enabled by default.
3721
3722 @item -Wsign-compare
3723 @opindex Wsign-compare
3724 @opindex Wno-sign-compare
3725 @cindex warning for comparison of signed and unsigned values
3726 @cindex comparison of signed and unsigned values, warning
3727 @cindex signed and unsigned values, comparison warning
3728 Warn when a comparison between signed and unsigned values could produce
3729 an incorrect result when the signed value is converted to unsigned.
3730 This warning is also enabled by @option{-Wextra}; to get the other warnings
3731 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3732
3733 @item -Wsign-conversion
3734 @opindex Wsign-conversion
3735 @opindex Wno-sign-conversion
3736 Warn for implicit conversions that may change the sign of an integer
3737 value, like assigning a signed integer expression to an unsigned
3738 integer variable. An explicit cast silences the warning. In C, this
3739 option is enabled also by @option{-Wconversion}.
3740
3741 @item -Waddress
3742 @opindex Waddress
3743 @opindex Wno-address
3744 Warn about suspicious uses of memory addresses. These include using
3745 the address of a function in a conditional expression, such as
3746 @code{void func(void); if (func)}, and comparisons against the memory
3747 address of a string literal, such as @code{if (x == "abc")}.  Such
3748 uses typically indicate a programmer error: the address of a function
3749 always evaluates to true, so their use in a conditional usually
3750 indicate that the programmer forgot the parentheses in a function
3751 call; and comparisons against string literals result in unspecified
3752 behavior and are not portable in C, so they usually indicate that the
3753 programmer intended to use @code{strcmp}.  This warning is enabled by
3754 @option{-Wall}.
3755
3756 @item -Wlogical-op
3757 @opindex Wlogical-op
3758 @opindex Wno-logical-op
3759 Warn about suspicious uses of logical operators in expressions.
3760 This includes using logical operators in contexts where a
3761 bit-wise operator is likely to be expected.
3762
3763 @item -Waggregate-return
3764 @opindex Waggregate-return
3765 @opindex Wno-aggregate-return
3766 Warn if any functions that return structures or unions are defined or
3767 called.  (In languages where you can return an array, this also elicits
3768 a warning.)
3769
3770 @item -Wno-attributes
3771 @opindex Wno-attributes
3772 @opindex Wattributes
3773 Do not warn if an unexpected @code{__attribute__} is used, such as
3774 unrecognized attributes, function attributes applied to variables,
3775 etc.  This will not stop errors for incorrect use of supported
3776 attributes.
3777
3778 @item -Wno-builtin-macro-redefined
3779 @opindex Wno-builtin-macro-redefined
3780 @opindex Wbuiltin-macro-redefined
3781 Do not warn if certain built-in macros are redefined.  This suppresses
3782 warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
3783 @code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
3784
3785 @item -Wstrict-prototypes @r{(C and Objective-C only)}
3786 @opindex Wstrict-prototypes
3787 @opindex Wno-strict-prototypes
3788 Warn if a function is declared or defined without specifying the
3789 argument types.  (An old-style function definition is permitted without
3790 a warning if preceded by a declaration which specifies the argument
3791 types.)
3792
3793 @item -Wold-style-declaration @r{(C and Objective-C only)}
3794 @opindex Wold-style-declaration
3795 @opindex Wno-old-style-declaration
3796 Warn for obsolescent usages, according to the C Standard, in a
3797 declaration. For example, warn if storage-class specifiers like
3798 @code{static} are not the first things in a declaration.  This warning
3799 is also enabled by @option{-Wextra}.
3800
3801 @item -Wold-style-definition @r{(C and Objective-C only)}
3802 @opindex Wold-style-definition
3803 @opindex Wno-old-style-definition
3804 Warn if an old-style function definition is used.  A warning is given
3805 even if there is a previous prototype.
3806
3807 @item -Wmissing-parameter-type @r{(C and Objective-C only)}
3808 @opindex Wmissing-parameter-type
3809 @opindex Wno-missing-parameter-type
3810 A function parameter is declared without a type specifier in K&R-style
3811 functions:
3812
3813 @smallexample
3814 void foo(bar) @{ @}
3815 @end smallexample
3816
3817 This warning is also enabled by @option{-Wextra}.
3818
3819 @item -Wmissing-prototypes @r{(C and Objective-C only)}
3820 @opindex Wmissing-prototypes
3821 @opindex Wno-missing-prototypes
3822 Warn if a global function is defined without a previous prototype
3823 declaration.  This warning is issued even if the definition itself
3824 provides a prototype.  The aim is to detect global functions that fail
3825 to be declared in header files.
3826
3827 @item -Wmissing-declarations
3828 @opindex Wmissing-declarations
3829 @opindex Wno-missing-declarations
3830 Warn if a global function is defined without a previous declaration.
3831 Do so even if the definition itself provides a prototype.
3832 Use this option to detect global functions that are not declared in
3833 header files.  In C++, no warnings are issued for function templates,
3834 or for inline functions, or for functions in anonymous namespaces.
3835
3836 @item -Wmissing-field-initializers
3837 @opindex Wmissing-field-initializers
3838 @opindex Wno-missing-field-initializers
3839 @opindex W
3840 @opindex Wextra
3841 @opindex Wno-extra
3842 Warn if a structure's initializer has some fields missing.  For
3843 example, the following code would cause such a warning, because
3844 @code{x.h} is implicitly zero:
3845
3846 @smallexample
3847 struct s @{ int f, g, h; @};
3848 struct s x = @{ 3, 4 @};
3849 @end smallexample
3850
3851 This option does not warn about designated initializers, so the following
3852 modification would not trigger a warning:
3853
3854 @smallexample
3855 struct s @{ int f, g, h; @};
3856 struct s x = @{ .f = 3, .g = 4 @};
3857 @end smallexample
3858
3859 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
3860 warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
3861
3862 @item -Wmissing-noreturn
3863 @opindex Wmissing-noreturn
3864 @opindex Wno-missing-noreturn
3865 Warn about functions which might be candidates for attribute @code{noreturn}.
3866 Note these are only possible candidates, not absolute ones.  Care should
3867 be taken to manually verify functions actually do not ever return before
3868 adding the @code{noreturn} attribute, otherwise subtle code generation
3869 bugs could be introduced.  You will not get a warning for @code{main} in
3870 hosted C environments.
3871
3872 @item -Wmissing-format-attribute
3873 @opindex Wmissing-format-attribute
3874 @opindex Wno-missing-format-attribute
3875 @opindex Wformat
3876 @opindex Wno-format
3877 Warn about function pointers which might be candidates for @code{format}
3878 attributes.  Note these are only possible candidates, not absolute ones.
3879 GCC will guess that function pointers with @code{format} attributes that
3880 are used in assignment, initialization, parameter passing or return
3881 statements should have a corresponding @code{format} attribute in the
3882 resulting type.  I.e.@: the left-hand side of the assignment or
3883 initialization, the type of the parameter variable, or the return type
3884 of the containing function respectively should also have a @code{format}
3885 attribute to avoid the warning.
3886
3887 GCC will also warn about function definitions which might be
3888 candidates for @code{format} attributes.  Again, these are only
3889 possible candidates.  GCC will guess that @code{format} attributes
3890 might be appropriate for any function that calls a function like
3891 @code{vprintf} or @code{vscanf}, but this might not always be the
3892 case, and some functions for which @code{format} attributes are
3893 appropriate may not be detected.
3894
3895 @item -Wno-multichar
3896 @opindex Wno-multichar
3897 @opindex Wmultichar
3898 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
3899 Usually they indicate a typo in the user's code, as they have
3900 implementation-defined values, and should not be used in portable code.
3901
3902 @item -Wnormalized=<none|id|nfc|nfkc>
3903 @opindex Wnormalized=
3904 @cindex NFC
3905 @cindex NFKC
3906 @cindex character set, input normalization
3907 In ISO C and ISO C++, two identifiers are different if they are
3908 different sequences of characters.  However, sometimes when characters
3909 outside the basic ASCII character set are used, you can have two
3910 different character sequences that look the same.  To avoid confusion,
3911 the ISO 10646 standard sets out some @dfn{normalization rules} which
3912 when applied ensure that two sequences that look the same are turned into
3913 the same sequence.  GCC can warn you if you are using identifiers which
3914 have not been normalized; this option controls that warning.
3915
3916 There are four levels of warning that GCC supports.  The default is
3917 @option{-Wnormalized=nfc}, which warns about any identifier which is
3918 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
3919 recommended form for most uses.
3920
3921 Unfortunately, there are some characters which ISO C and ISO C++ allow
3922 in identifiers that when turned into NFC aren't allowable as
3923 identifiers.  That is, there's no way to use these symbols in portable
3924 ISO C or C++ and have all your identifiers in NFC@.
3925 @option{-Wnormalized=id} suppresses the warning for these characters.
3926 It is hoped that future versions of the standards involved will correct
3927 this, which is why this option is not the default.
3928
3929 You can switch the warning off for all characters by writing
3930 @option{-Wnormalized=none}.  You would only want to do this if you
3931 were using some other normalization scheme (like ``D''), because
3932 otherwise you can easily create bugs that are literally impossible to see.
3933
3934 Some characters in ISO 10646 have distinct meanings but look identical
3935 in some fonts or display methodologies, especially once formatting has
3936 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
3937 LETTER N'', will display just like a regular @code{n} which has been
3938 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
3939 normalization scheme to convert all these into a standard form as
3940 well, and GCC will warn if your code is not in NFKC if you use
3941 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
3942 about every identifier that contains the letter O because it might be
3943 confused with the digit 0, and so is not the default, but may be
3944 useful as a local coding convention if the programming environment is
3945 unable to be fixed to display these characters distinctly.
3946
3947 @item -Wno-deprecated
3948 @opindex Wno-deprecated
3949 @opindex Wdeprecated
3950 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
3951
3952 @item -Wno-deprecated-declarations
3953 @opindex Wno-deprecated-declarations
3954 @opindex Wdeprecated-declarations
3955 Do not warn about uses of functions (@pxref{Function Attributes}),
3956 variables (@pxref{Variable Attributes}), and types (@pxref{Type
3957 Attributes}) marked as deprecated by using the @code{deprecated}
3958 attribute.
3959
3960 @item -Wno-overflow
3961 @opindex Wno-overflow
3962 @opindex Woverflow
3963 Do not warn about compile-time overflow in constant expressions.
3964
3965 @item -Woverride-init @r{(C and Objective-C only)}
3966 @opindex Woverride-init
3967 @opindex Wno-override-init
3968 @opindex W
3969 @opindex Wextra
3970 @opindex Wno-extra
3971 Warn if an initialized field without side effects is overridden when
3972 using designated initializers (@pxref{Designated Inits, , Designated
3973 Initializers}).
3974
3975 This warning is included in @option{-Wextra}.  To get other
3976 @option{-Wextra} warnings without this one, use @samp{-Wextra
3977 -Wno-override-init}.
3978
3979 @item -Wpacked
3980 @opindex Wpacked
3981 @opindex Wno-packed
3982 Warn if a structure is given the packed attribute, but the packed
3983 attribute has no effect on the layout or size of the structure.
3984 Such structures may be mis-aligned for little benefit.  For
3985 instance, in this code, the variable @code{f.x} in @code{struct bar}
3986 will be misaligned even though @code{struct bar} does not itself
3987 have the packed attribute:
3988
3989 @smallexample
3990 @group
3991 struct foo @{
3992   int x;
3993   char a, b, c, d;
3994 @} __attribute__((packed));
3995 struct bar @{
3996   char z;
3997   struct foo f;
3998 @};
3999 @end group
4000 @end smallexample
4001
4002 @item -Wpacked-bitfield-compat
4003 @opindex Wpacked-bitfield-compat
4004 @opindex Wno-packed-bitfield-compat
4005 The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
4006 on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
4007 the change can lead to differences in the structure layout.  GCC
4008 informs you when the offset of such a field has changed in GCC 4.4.
4009 For example there is no longer a 4-bit padding between field @code{a}
4010 and @code{b} in this structure:
4011
4012 @smallexample
4013 struct foo
4014 @{
4015   char a:4;
4016   char b:8;
4017 @} __attribute__ ((packed));
4018 @end smallexample
4019
4020 This warning is enabled by default.  Use
4021 @option{-Wno-packed-bitfield-compat} to disable this warning.
4022
4023 @item -Wpadded
4024 @opindex Wpadded
4025 @opindex Wno-padded
4026 Warn if padding is included in a structure, either to align an element
4027 of the structure or to align the whole structure.  Sometimes when this
4028 happens it is possible to rearrange the fields of the structure to
4029 reduce the padding and so make the structure smaller.
4030
4031 @item -Wredundant-decls
4032 @opindex Wredundant-decls
4033 @opindex Wno-redundant-decls
4034 Warn if anything is declared more than once in the same scope, even in
4035 cases where multiple declaration is valid and changes nothing.
4036
4037 @item -Wnested-externs @r{(C and Objective-C only)}
4038 @opindex Wnested-externs
4039 @opindex Wno-nested-externs
4040 Warn if an @code{extern} declaration is encountered within a function.
4041
4042 @item -Wunreachable-code
4043 @opindex Wunreachable-code
4044 @opindex Wno-unreachable-code
4045 Warn if the compiler detects that code will never be executed.
4046
4047 This option is intended to warn when the compiler detects that at
4048 least a whole line of source code will never be executed, because
4049 some condition is never satisfied or because it is after a
4050 procedure that never returns.
4051
4052 It is possible for this option to produce a warning even though there
4053 are circumstances under which part of the affected line can be executed,
4054 so care should be taken when removing apparently-unreachable code.
4055
4056 For instance, when a function is inlined, a warning may mean that the
4057 line is unreachable in only one inlined copy of the function.
4058
4059 This option is not made part of @option{-Wall} because in a debugging
4060 version of a program there is often substantial code which checks
4061 correct functioning of the program and is, hopefully, unreachable
4062 because the program does work.  Another common use of unreachable
4063 code is to provide behavior which is selectable at compile-time.
4064
4065 @item -Winline
4066 @opindex Winline
4067 @opindex Wno-inline
4068 Warn if a function can not be inlined and it was declared as inline.
4069 Even with this option, the compiler will not warn about failures to
4070 inline functions declared in system headers.
4071
4072 The compiler uses a variety of heuristics to determine whether or not
4073 to inline a function.  For example, the compiler takes into account
4074 the size of the function being inlined and the amount of inlining
4075 that has already been done in the current function.  Therefore,
4076 seemingly insignificant changes in the source program can cause the
4077 warnings produced by @option{-Winline} to appear or disappear.
4078
4079 @item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
4080 @opindex Wno-invalid-offsetof
4081 @opindex Winvalid-offsetof
4082 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
4083 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
4084 to a non-POD type is undefined.  In existing C++ implementations,
4085 however, @samp{offsetof} typically gives meaningful results even when
4086 applied to certain kinds of non-POD types. (Such as a simple
4087 @samp{struct} that fails to be a POD type only by virtue of having a
4088 constructor.)  This flag is for users who are aware that they are
4089 writing nonportable code and who have deliberately chosen to ignore the
4090 warning about it.
4091
4092 The restrictions on @samp{offsetof} may be relaxed in a future version
4093 of the C++ standard.
4094
4095 @item -Wno-int-to-pointer-cast @r{(C and Objective-C only)}
4096 @opindex Wno-int-to-pointer-cast
4097 @opindex Wint-to-pointer-cast
4098 Suppress warnings from casts to pointer type of an integer of a
4099 different size.
4100
4101 @item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
4102 @opindex Wno-pointer-to-int-cast
4103 @opindex Wpointer-to-int-cast
4104 Suppress warnings from casts from a pointer to an integer type of a
4105 different size.
4106
4107 @item -Winvalid-pch
4108 @opindex Winvalid-pch
4109 @opindex Wno-invalid-pch
4110 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
4111 the search path but can't be used.
4112
4113 @item -Wlong-long
4114 @opindex Wlong-long
4115 @opindex Wno-long-long
4116 Warn if @samp{long long} type is used.  This is default.  To inhibit
4117 the warning messages, use @option{-Wno-long-long}.  Flags
4118 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
4119 only when @option{-pedantic} flag is used.
4120
4121 @item -Wvariadic-macros
4122 @opindex Wvariadic-macros
4123 @opindex Wno-variadic-macros
4124 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
4125 alternate syntax when in pedantic ISO C99 mode.  This is default.
4126 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
4127
4128 @item -Wvla
4129 @opindex Wvla
4130 @opindex Wno-vla
4131 Warn if variable length array is used in the code.
4132 @option{-Wno-vla} will prevent the @option{-pedantic} warning of
4133 the variable length array.
4134
4135 @item -Wvolatile-register-var
4136 @opindex Wvolatile-register-var
4137 @opindex Wno-volatile-register-var
4138 Warn if a register variable is declared volatile.  The volatile
4139 modifier does not inhibit all optimizations that may eliminate reads
4140 and/or writes to register variables.  This warning is enabled by
4141 @option{-Wall}.
4142
4143 @item -Wdisabled-optimization
4144 @opindex Wdisabled-optimization
4145 @opindex Wno-disabled-optimization
4146 Warn if a requested optimization pass is disabled.  This warning does
4147 not generally indicate that there is anything wrong with your code; it
4148 merely indicates that GCC's optimizers were unable to handle the code
4149 effectively.  Often, the problem is that your code is too big or too
4150 complex; GCC will refuse to optimize programs when the optimization
4151 itself is likely to take inordinate amounts of time.
4152
4153 @item -Wpointer-sign @r{(C and Objective-C only)}
4154 @opindex Wpointer-sign
4155 @opindex Wno-pointer-sign
4156 Warn for pointer argument passing or assignment with different signedness.
4157 This option is only supported for C and Objective-C@.  It is implied by
4158 @option{-Wall} and by @option{-pedantic}, which can be disabled with
4159 @option{-Wno-pointer-sign}.
4160
4161 @item -Wstack-protector
4162 @opindex Wstack-protector
4163 @opindex Wno-stack-protector
4164 This option is only active when @option{-fstack-protector} is active.  It
4165 warns about functions that will not be protected against stack smashing.
4166
4167 @item -Wno-mudflap
4168 @opindex Wno-mudflap
4169 Suppress warnings about constructs that cannot be instrumented by
4170 @option{-fmudflap}.
4171
4172 @item -Woverlength-strings
4173 @opindex Woverlength-strings
4174 @opindex Wno-overlength-strings
4175 Warn about string constants which are longer than the ``minimum
4176 maximum'' length specified in the C standard.  Modern compilers
4177 generally allow string constants which are much longer than the
4178 standard's minimum limit, but very portable programs should avoid
4179 using longer strings.
4180
4181 The limit applies @emph{after} string constant concatenation, and does
4182 not count the trailing NUL@.  In C89, the limit was 509 characters; in
4183 C99, it was raised to 4095.  C++98 does not specify a normative
4184 minimum maximum, so we do not diagnose overlength strings in C++@.
4185
4186 This option is implied by @option{-pedantic}, and can be disabled with
4187 @option{-Wno-overlength-strings}.
4188
4189 @item -Wdisallowed-function-list=@var{sym},@var{sym},@dots{}
4190 @opindex Wdisallowed-function-list
4191
4192 If any of @var{sym} is called, GCC will issue a warning. This can be useful
4193 in enforcing coding conventions that ban calls to certain functions, for
4194 example, @code{alloca}, @code{malloc}, etc.
4195 @end table
4196
4197 @node Debugging Options
4198 @section Options for Debugging Your Program or GCC
4199 @cindex options, debugging
4200 @cindex debugging information options
4201
4202 GCC has various special options that are used for debugging
4203 either your program or GCC:
4204
4205 @table @gcctabopt
4206 @item -g
4207 @opindex g
4208 Produce debugging information in the operating system's native format
4209 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
4210 information.
4211
4212 On most systems that use stabs format, @option{-g} enables use of extra
4213 debugging information that only GDB can use; this extra information
4214 makes debugging work better in GDB but will probably make other debuggers
4215 crash or
4216 refuse to read the program.  If you want to control for certain whether
4217 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
4218 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
4219
4220 GCC allows you to use @option{-g} with
4221 @option{-O}.  The shortcuts taken by optimized code may occasionally
4222 produce surprising results: some variables you declared may not exist
4223 at all; flow of control may briefly move where you did not expect it;
4224 some statements may not be executed because they compute constant
4225 results or their values were already at hand; some statements may
4226 execute in different places because they were moved out of loops.
4227
4228 Nevertheless it proves possible to debug optimized output.  This makes
4229 it reasonable to use the optimizer for programs that might have bugs.
4230
4231 The following options are useful when GCC is generated with the
4232 capability for more than one debugging format.
4233
4234 @item -ggdb
4235 @opindex ggdb
4236 Produce debugging information for use by GDB@.  This means to use the
4237 most expressive format available (DWARF 2, stabs, or the native format
4238 if neither of those are supported), including GDB extensions if at all
4239 possible.
4240
4241 @item -gstabs
4242 @opindex gstabs
4243 Produce debugging information in stabs format (if that is supported),
4244 without GDB extensions.  This is the format used by DBX on most BSD
4245 systems.  On MIPS, Alpha and System V Release 4 systems this option
4246 produces stabs debugging output which is not understood by DBX or SDB@.
4247 On System V Release 4 systems this option requires the GNU assembler.
4248
4249 @item -feliminate-unused-debug-symbols
4250 @opindex feliminate-unused-debug-symbols
4251 Produce debugging information in stabs format (if that is supported),
4252 for only symbols that are actually used.
4253
4254 @item -femit-class-debug-always
4255 Instead of emitting debugging information for a C++ class in only one
4256 object file, emit it in all object files using the class.  This option
4257 should be used only with debuggers that are unable to handle the way GCC
4258 normally emits debugging information for classes because using this
4259 option will increase the size of debugging information by as much as a
4260 factor of two.
4261
4262 @item -gstabs+
4263 @opindex gstabs+
4264 Produce debugging information in stabs format (if that is supported),
4265 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4266 use of these extensions is likely to make other debuggers crash or
4267 refuse to read the program.
4268
4269 @item -gcoff
4270 @opindex gcoff
4271 Produce debugging information in COFF format (if that is supported).
4272 This is the format used by SDB on most System V systems prior to
4273 System V Release 4.
4274
4275 @item -gxcoff
4276 @opindex gxcoff
4277 Produce debugging information in XCOFF format (if that is supported).
4278 This is the format used by the DBX debugger on IBM RS/6000 systems.
4279
4280 @item -gxcoff+
4281 @opindex gxcoff+
4282 Produce debugging information in XCOFF format (if that is supported),
4283 using GNU extensions understood only by the GNU debugger (GDB)@.  The
4284 use of these extensions is likely to make other debuggers crash or
4285 refuse to read the program, and may cause assemblers other than the GNU
4286 assembler (GAS) to fail with an error.
4287
4288 @item -gdwarf-2
4289 @opindex gdwarf-2
4290 Produce debugging information in DWARF version 2 format (if that is
4291 supported).  This is the format used by DBX on IRIX 6.  With this
4292 option, GCC uses features of DWARF version 3 when they are useful;
4293 version 3 is upward compatible with version 2, but may still cause
4294 problems for older debuggers.
4295
4296 @item -gvms
4297 @opindex gvms
4298 Produce debugging information in VMS debug format (if that is
4299 supported).  This is the format used by DEBUG on VMS systems.
4300
4301 @item -g@var{level}
4302 @itemx -ggdb@var{level}
4303 @itemx -gstabs@var{level}
4304 @itemx -gcoff@var{level}
4305 @itemx -gxcoff@var{level}
4306 @itemx -gvms@var{level}
4307 Request debugging information and also use @var{level} to specify how
4308 much information.  The default level is 2.
4309
4310 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
4311 @option{-g}.
4312
4313 Level 1 produces minimal information, enough for making backtraces in
4314 parts of the program that you don't plan to debug.  This includes
4315 descriptions of functions and external variables, but no information
4316 about local variables and no line numbers.
4317
4318 Level 3 includes extra information, such as all the macro definitions
4319 present in the program.  Some debuggers support macro expansion when
4320 you use @option{-g3}.
4321
4322 @option{-gdwarf-2} does not accept a concatenated debug level, because
4323 GCC used to support an option @option{-gdwarf} that meant to generate
4324 debug information in version 1 of the DWARF format (which is very
4325 different from version 2), and it would have been too confusing.  That
4326 debug format is long obsolete, but the option cannot be changed now.
4327 Instead use an additional @option{-g@var{level}} option to change the
4328 debug level for DWARF2.
4329
4330 @item -feliminate-dwarf2-dups
4331 @opindex feliminate-dwarf2-dups
4332 Compress DWARF2 debugging information by eliminating duplicated
4333 information about each symbol.  This option only makes sense when
4334 generating DWARF2 debugging information with @option{-gdwarf-2}.
4335
4336 @item -femit-struct-debug-baseonly
4337 Emit debug information for struct-like types
4338 only when the base name of the compilation source file
4339 matches the base name of file in which the struct was defined.
4340
4341 This option substantially reduces the size of debugging information,
4342 but at significant potential loss in type information to the debugger.
4343 See @option{-femit-struct-debug-reduced} for a less aggressive option.
4344 See @option{-femit-struct-debug-detailed} for more detailed control.
4345
4346 This option works only with DWARF 2.
4347
4348 @item -femit-struct-debug-reduced
4349 Emit debug information for struct-like types
4350 only when the base name of the compilation source file
4351 matches the base name of file in which the type was defined,
4352 unless the struct is a template or defined in a system header.
4353
4354 This option significantly reduces the size of debugging information,
4355 with some potential loss in type information to the debugger.
4356 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
4357 See @option{-femit-struct-debug-detailed} for more detailed control.
4358
4359 This option works only with DWARF 2.
4360
4361 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
4362 Specify the struct-like types
4363 for which the compiler will generate debug information.
4364 The intent is to reduce duplicate struct debug information
4365 between different object files within the same program.
4366
4367 This option is a detailed version of
4368 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
4369 which will serve for most needs.
4370
4371 A specification has the syntax
4372 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
4373
4374 The optional first word limits the specification to
4375 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
4376 A struct type is used directly when it is the type of a variable, member.
4377 Indirect uses arise through pointers to structs.
4378 That is, when use of an incomplete struct would be legal, the use is indirect.
4379 An example is
4380 @samp{struct one direct; struct two * indirect;}.
4381
4382 The optional second word limits the specification to
4383 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
4384 Generic structs are a bit complicated to explain.
4385 For C++, these are non-explicit specializations of template classes,
4386 or non-template classes within the above.
4387 Other programming languages have generics,
4388 but @samp{-femit-struct-debug-detailed} does not yet implement them.
4389
4390 The third word specifies the source files for those
4391 structs for which the compiler will emit debug information.
4392 The values @samp{none} and @samp{any} have the normal meaning.
4393 The value @samp{base} means that
4394 the base of name of the file in which the type declaration appears
4395 must match the base of the name of the main compilation file.
4396 In practice, this means that
4397 types declared in @file{foo.c} and @file{foo.h} will have debug information,
4398 but types declared in other header will not.
4399 The value @samp{sys} means those types satisfying @samp{base}
4400 or declared in system or compiler headers.
4401
4402 You may need to experiment to determine the best settings for your application.
4403
4404 The default is @samp{-femit-struct-debug-detailed=all}.
4405
4406 This option works only with DWARF 2.
4407
4408 @item -fno-merge-debug-strings
4409 @opindex fmerge-debug-strings
4410 @opindex fno-merge-debug-strings
4411 Direct the linker to merge together strings which are identical in
4412 different object files.  This is not supported by all assemblers or
4413 linker.  This decreases the size of the debug information in the
4414 output file at the cost of increasing link processing time.  This is
4415 on by default.
4416
4417 @item -fdebug-prefix-map=@var{old}=@var{new}
4418 @opindex fdebug-prefix-map
4419 When compiling files in directory @file{@var{old}}, record debugging
4420 information describing them as in @file{@var{new}} instead.
4421
4422 @item -fno-dwarf2-cfi-asm
4423 @opindex fdwarf2-cfi-asm
4424 @opindex fno-dwarf2-cfi-asm
4425 Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
4426 instead of using GAS @code{.cfi_*} directives.
4427
4428 @cindex @command{prof}
4429 @item -p
4430 @opindex p
4431 Generate extra code to write profile information suitable for the
4432 analysis program @command{prof}.  You must use this option when compiling
4433 the source files you want data about, and you must also use it when
4434 linking.
4435
4436 @cindex @command{gprof}
4437 @item -pg
4438 @opindex pg
4439 Generate extra code to write profile information suitable for the
4440 analysis program @command{gprof}.  You must use this option when compiling
4441 the source files you want data about, and you must also use it when
4442 linking.
4443
4444 @item -Q
4445 @opindex Q
4446 Makes the compiler print out each function name as it is compiled, and
4447 print some statistics about each pass when it finishes.
4448
4449 @item -ftime-report
4450 @opindex ftime-report
4451 Makes the compiler print some statistics about the time consumed by each
4452 pass when it finishes.
4453
4454 @item -fmem-report
4455 @opindex fmem-report
4456 Makes the compiler print some statistics about permanent memory
4457 allocation when it finishes.
4458
4459 @item -fpre-ipa-mem-report
4460 @opindex fpre-ipa-mem-report
4461 @item -fpost-ipa-mem-report
4462 @opindex fpost-ipa-mem-report
4463 Makes the compiler print some statistics about permanent memory
4464 allocation before or after interprocedural optimization.
4465
4466 @item -fprofile-arcs
4467 @opindex fprofile-arcs
4468 Add code so that program flow @dfn{arcs} are instrumented.  During
4469 execution the program records how many times each branch and call is
4470 executed and how many times it is taken or returns.  When the compiled
4471 program exits it saves this data to a file called
4472 @file{@var{auxname}.gcda} for each source file.  The data may be used for
4473 profile-directed optimizations (@option{-fbranch-probabilities}), or for
4474 test coverage analysis (@option{-ftest-coverage}).  Each object file's
4475 @var{auxname} is generated from the name of the output file, if
4476 explicitly specified and it is not the final executable, otherwise it is
4477 the basename of the source file.  In both cases any suffix is removed
4478 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
4479 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
4480 @xref{Cross-profiling}.
4481
4482 @cindex @command{gcov}
4483 @item --coverage
4484 @opindex coverage
4485
4486 This option is used to compile and link code instrumented for coverage
4487 analysis.  The option is a synonym for @option{-fprofile-arcs}
4488 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
4489 linking).  See the documentation for those options for more details.
4490
4491 @itemize
4492
4493 @item
4494 Compile the source files with @option{-fprofile-arcs} plus optimization
4495 and code generation options.  For test coverage analysis, use the
4496 additional @option{-ftest-coverage} option.  You do not need to profile
4497 every source file in a program.
4498
4499 @item
4500 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
4501 (the latter implies the former).
4502
4503 @item
4504 Run the program on a representative workload to generate the arc profile
4505 information.  This may be repeated any number of times.  You can run
4506 concurrent instances of your program, and provided that the file system
4507 supports locking, the data files will be correctly updated.  Also
4508 @code{fork} calls are detected and correctly handled (double counting
4509 will not happen).
4510
4511 @item
4512 For profile-directed optimizations, compile the source files again with
4513 the same optimization and code generation options plus
4514 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
4515 Control Optimization}).
4516
4517 @item
4518 For test coverage analysis, use @command{gcov} to produce human readable
4519 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
4520 @command{gcov} documentation for further information.
4521
4522 @end itemize
4523
4524 With @option{-fprofile-arcs}, for each function of your program GCC
4525 creates a program flow graph, then finds a spanning tree for the graph.
4526 Only arcs that are not on the spanning tree have to be instrumented: the
4527 compiler adds code to count the number of times that these arcs are
4528 executed.  When an arc is the only exit or only entrance to a block, the
4529 instrumentation code can be added to the block; otherwise, a new basic
4530 block must be created to hold the instrumentation code.
4531
4532 @need 2000
4533 @item -ftest-coverage
4534 @opindex ftest-coverage
4535 Produce a notes file that the @command{gcov} code-coverage utility
4536 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
4537 show program coverage.  Each source file's note file is called
4538 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
4539 above for a description of @var{auxname} and instructions on how to
4540 generate test coverage data.  Coverage data will match the source files
4541 more closely, if you do not optimize.
4542
4543 @item -fdbg-cnt-list
4544 @opindex fdbg-cnt-list
4545 Print the name and the counter upperbound for all debug counters.
4546
4547 @item -fdbg-cnt=@var{counter-value-list}
4548 @opindex fdbg-cnt
4549 Set the internal debug counter upperbound. @var{counter-value-list} 
4550 is a comma-separated list of @var{name}:@var{value} pairs
4551 which sets the upperbound of each debug counter @var{name} to @var{value}.
4552 All debug counters have the initial upperbound of @var{UINT_MAX},
4553 thus dbg_cnt() returns true always unless the upperbound is set by this option.
4554 e.g. With -fdbg-cnt=dce:10,tail_call:0
4555 dbg_cnt(dce) will return true only for first 10 invocations
4556 and dbg_cnt(tail_call) will return false always.
4557
4558 @item -d@var{letters}
4559 @itemx -fdump-rtl-@var{pass}
4560 @opindex d
4561 Says to make debugging dumps during compilation at times specified by
4562 @var{letters}.    This is used for debugging the RTL-based passes of the
4563 compiler.  The file names for most of the dumps are made by appending a
4564 pass number and a word to the @var{dumpname}.  @var{dumpname} is generated
4565 from the name of the output file, if explicitly specified and it is not
4566 an executable, otherwise it is the basename of the source file. These
4567 switches may have different effects when @option{-E} is used for
4568 preprocessing.
4569
4570 Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
4571 @option{-d} option @var{letters}.  Here are the possible
4572 letters for use in @var{pass} and @var{letters}, and their meanings:
4573
4574 @table @gcctabopt
4575
4576 @item -fdump-rtl-alignments
4577 @opindex fdump-rtl-alignments
4578 Dump after branch alignments have been computed.
4579
4580 @item -fdump-rtl-asmcons
4581 @opindex fdump-rtl-asmcons
4582 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4583
4584 @item -fdump-rtl-auto_inc_dec
4585 @opindex fdump-rtl-auto_inc_dec
4586 Dump after auto-inc-dec discovery.  This pass is only run on
4587 architectures that have auto inc or auto dec instructions.
4588
4589 @item -fdump-rtl-barriers
4590 @opindex fdump-rtl-barriers
4591 Dump after cleaning up the barrier instructions.
4592
4593 @item -fdump-rtl-bbpart
4594 @opindex fdump-rtl-bbpart
4595 Dump after partitioning hot and cold basic blocks.
4596
4597 @item -fdump-rtl-bbro
4598 @opindex fdump-rtl-bbro
4599 Dump after block reordering.
4600
4601 @item -fdump-rtl-btl1
4602 @itemx -fdump-rtl-btl2
4603 @opindex fdump-rtl-btl2
4604 @opindex fdump-rtl-btl2
4605 @option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
4606 after the two branch
4607 target load optimization passes.
4608
4609 @item -fdump-rtl-bypass
4610 @opindex fdump-rtl-bypass
4611 Dump after jump bypassing and control flow optimizations.
4612
4613 @item -fdump-rtl-combine
4614 @opindex fdump-rtl-combine
4615 Dump after the RTL instruction combination pass.
4616
4617 @item -fdump-rtl-compgotos
4618 @opindex fdump-rtl-compgotos
4619 Dump after dumplicating the computed gotos.
4620
4621 @item -fdump-rtl-ce1
4622 @itemx -fdump-rtl-ce2
4623 @itemx -fdump-rtl-ce3
4624 @opindex fdump-rtl-ce1
4625 @opindex fdump-rtl-ce2
4626 @opindex fdump-rtl-ce3
4627 @option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
4628 @option{-fdump-rtl-ce3} enable dumping after the three
4629 if conversion passes. 
4630
4631 @itemx -fdump-rtl-cprop_hardreg
4632 @opindex fdump-rtl-cprop_hardreg
4633 Dump after hard register copy propagation.
4634
4635 @itemx -fdump-rtl-csa
4636 @opindex fdump-rtl-csa
4637 Dump after combining stack adjustments.
4638
4639 @item -fdump-rtl-cse1
4640 @itemx -fdump-rtl-cse2
4641 @opindex fdump-rtl-cse1
4642 @opindex fdump-rtl-cse2
4643 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
4644 the two common sub-expression elimination passes.
4645
4646 @itemx -fdump-rtl-dce
4647 @opindex fdump-rtl-dce
4648 Dump after the standalone dead code elimination passes.
4649
4650 @itemx -fdump-rtl-dbr
4651 @opindex fdump-rtl-dbr
4652 Dump after delayed branch scheduling.
4653
4654 @item -fdump-rtl-dce1
4655 @itemx -fdump-rtl-dce2
4656 @opindex fdump-rtl-dce1
4657 @opindex fdump-rtl-dce2
4658 @option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
4659 the two dead store elimination passes.
4660
4661 @item -fdump-rtl-eh
4662 @opindex fdump-rtl-eh
4663 Dump after finalization of EH handling code.
4664
4665 @item -fdump-rtl-eh_ranges
4666 @opindex fdump-rtl-eh_ranges
4667 Dump after conversion of EH handling range regions.
4668
4669 @item -fdump-rtl-expand
4670 @opindex fdump-rtl-expand
4671 Dump after RTL generation.
4672
4673 @item -fdump-rtl-fwprop1
4674 @itemx -fdump-rtl-fwprop2
4675 @opindex fdump-rtl-fwprop1
4676 @opindex fdump-rtl-fwprop2
4677 @option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
4678 dumping after the two forward propagation passes.
4679
4680 @item -fdump-rtl-gcse1
4681 @itemx -fdump-rtl-gcse2
4682 @opindex fdump-rtl-gcse1
4683 @opindex fdump-rtl-gcse2
4684 @option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
4685 after global common subexpression elimination.
4686
4687 @item -fdump-rtl-init-regs
4688 @opindex fdump-rtl-init-regs
4689 Dump after the initialization of the registers.
4690
4691 @item -fdump-rtl-initvals
4692 @opindex fdump-rtl-initvals
4693 Dump after the computation of the initial value sets.
4694
4695 @itemx -fdump-rtl-into_cfglayout
4696 @opindex fdump-rtl-into_cfglayout
4697 Dump after converting to cfglayout mode.
4698
4699 @item -fdump-rtl-ira
4700 @opindex fdump-rtl-ira
4701 Dump after iterated register allocation.
4702
4703 @item -fdump-rtl-jump
4704 @opindex fdump-rtl-jump
4705 Dump after the second jump optimization.
4706
4707 @item -fdump-rtl-loop2
4708 @opindex fdump-rtl-loop2
4709 @option{-fdump-rtl-loop2} enables dumping after the rtl
4710 loop optimization passes.
4711
4712 @item -fdump-rtl-mach
4713 @opindex fdump-rtl-mach
4714 Dump after performing the machine dependent reorganization pass, if that
4715 pass exists.
4716
4717 @item -fdump-rtl-mode_sw
4718 @opindex fdump-rtl-mode_sw
4719 Dump after removing redundant mode switches.
4720
4721 @item -fdump-rtl-rnreg
4722 @opindex fdump-rtl-rnreg
4723 Dump after register renumbering.
4724
4725 @itemx -fdump-rtl-outof_cfglayout
4726 @opindex fdump-rtl-outof_cfglayout
4727 Dump after converting from cfglayout mode.
4728
4729 @item -fdump-rtl-peephole2
4730 @opindex fdump-rtl-peephole2
4731 Dump after the peephole pass.
4732
4733 @item -fdump-rtl-postreload
4734 @opindex fdump-rtl-postreload
4735 Dump after post-reload optimizations.
4736
4737 @itemx -fdump-rtl-pro_and_epilogue
4738 @opindex fdump-rtl-pro_and_epilogue
4739 Dump after generating the function pro and epilogues.
4740
4741 @item -fdump-rtl-regmove
4742 @opindex fdump-rtl-regmove
4743 Dump after the register move pass.
4744
4745 @item -fdump-rtl-sched1
4746 @itemx -fdump-rtl-sched2
4747 @opindex fdump-rtl-sched1
4748 @opindex fdump-rtl-sched2
4749 @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
4750 after the basic block scheduling passes.
4751
4752 @item -fdump-rtl-see
4753 @opindex fdump-rtl-see
4754 Dump after sign extension elimination.
4755
4756 @item -fdump-rtl-seqabstr
4757 @opindex fdump-rtl-seqabstr
4758 Dump after common sequence discovery. 
4759
4760 @item -fdump-rtl-shorten
4761 @opindex fdump-rtl-shorten
4762 Dump after shortening branches.
4763
4764 @item -fdump-rtl-sibling
4765 @opindex fdump-rtl-sibling
4766 Dump after sibling call optimizations.
4767
4768 @item -fdump-rtl-split1
4769 @itemx -fdump-rtl-split2
4770 @itemx -fdump-rtl-split3
4771 @itemx -fdump-rtl-split4
4772 @itemx -fdump-rtl-split5
4773 @opindex fdump-rtl-split1
4774 @opindex fdump-rtl-split2
4775 @opindex fdump-rtl-split3
4776 @opindex fdump-rtl-split4
4777 @opindex fdump-rtl-split5
4778 @option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
4779 @option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
4780 @option{-fdump-rtl-split5} enable dumping after five rounds of
4781 instruction splitting.
4782
4783 @item -fdump-rtl-sms
4784 @opindex fdump-rtl-sms
4785 Dump after modulo scheduling.  This pass is only run on some
4786 architectures.
4787
4788 @item -fdump-rtl-stack
4789 @opindex fdump-rtl-stack
4790 Dump after conversion from GCC's "flat register file" registers to the
4791 x87's stack-like registers.  This pass is only run on x86 variants.
4792
4793 @item -fdump-rtl-subreg1
4794 @itemx -fdump-rtl-subreg2
4795 @opindex fdump-rtl-subreg1
4796 @opindex fdump-rtl-subreg2
4797 @option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
4798 the two subreg expansion passes.
4799
4800 @item -fdump-rtl-unshare
4801 @opindex fdump-rtl-unshare
4802 Dump after all rtl has been unshared.
4803
4804 @item -fdump-rtl-vartrack
4805 @opindex fdump-rtl-vartrack
4806 Dump after variable tracking.
4807
4808 @item -fdump-rtl-vregs
4809 @opindex fdump-rtl-vregs
4810 Dump after converting virtual registers to hard registers.
4811
4812 @item -fdump-rtl-web
4813 @opindex fdump-rtl-web
4814 Dump after live range splitting.
4815
4816 @item -fdump-rtl-regclass
4817 @itemx -fdump-rtl-subregs_of_mode_init
4818 @itemx -fdump-rtl-subregs_of_mode_finish
4819 @itemx -fdump-rtl-dfinit
4820 @itemx -fdump-rtl-dfinish
4821 @opindex fdump-rtl-regclass
4822 @opindex fdump-rtl-subregs_of_mode_init
4823 @opindex fdump-rtl-subregs_of_mode_finish
4824 @opindex fdump-rtl-dfinit
4825 @opindex fdump-rtl-dfinish
4826 These dumps are defined but always produce empty files.
4827
4828 @item -fdump-rtl-all
4829 @opindex fdump-rtl-all
4830 Produce all the dumps listed above.
4831
4832 @item -dA
4833 @opindex dA
4834 Annotate the assembler output with miscellaneous debugging information.
4835
4836 @item -dD
4837 @opindex dD
4838 Dump all macro definitions, at the end of preprocessing, in addition to
4839 normal output.
4840
4841 @item -dH
4842 @opindex dH
4843 Produce a core dump whenever an error occurs.
4844
4845 @item -dm
4846 @opindex dm
4847 Print statistics on memory usage, at the end of the run, to
4848 standard error.
4849
4850 @item -dp
4851 @opindex dp
4852 Annotate the assembler output with a comment indicating which
4853 pattern and alternative was used.  The length of each instruction is
4854 also printed.
4855
4856 @item -dP
4857 @opindex dP
4858 Dump the RTL in the assembler output as a comment before each instruction.
4859 Also turns on @option{-dp} annotation.
4860
4861 @item -dv
4862 @opindex dv
4863 For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
4864 dump a representation of the control flow graph suitable for viewing with VCG
4865 to @file{@var{file}.@var{pass}.vcg}.
4866
4867 @item -dx
4868 @opindex dx
4869 Just generate RTL for a function instead of compiling it.  Usually used
4870 with @option{-fdump-rtl-expand}.
4871
4872 @item -dy
4873 @opindex dy
4874 Dump debugging information during parsing, to standard error.
4875 @end table
4876
4877 @item -fdump-noaddr
4878 @opindex fdump-noaddr
4879 When doing debugging dumps, suppress address output.  This makes it more
4880 feasible to use diff on debugging dumps for compiler invocations with
4881 different compiler binaries and/or different
4882 text / bss / data / heap / stack / dso start locations.
4883
4884 @item -fdump-unnumbered
4885 @opindex fdump-unnumbered
4886 When doing debugging dumps, suppress instruction numbers and address output.
4887 This makes it more feasible to use diff on debugging dumps for compiler
4888 invocations with different options, in particular with and without
4889 @option{-g}.
4890
4891 @item -fdump-translation-unit @r{(C++ only)}
4892 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
4893 @opindex fdump-translation-unit
4894 Dump a representation of the tree structure for the entire translation
4895 unit to a file.  The file name is made by appending @file{.tu} to the
4896 source file name.  If the @samp{-@var{options}} form is used, @var{options}
4897 controls the details of the dump as described for the
4898 @option{-fdump-tree} options.
4899
4900 @item -fdump-class-hierarchy @r{(C++ only)}
4901 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
4902 @opindex fdump-class-hierarchy
4903 Dump a representation of each class's hierarchy and virtual function
4904 table layout to a file.  The file name is made by appending @file{.class}
4905 to the source file name.  If the @samp{-@var{options}} form is used,
4906 @var{options} controls the details of the dump as described for the
4907 @option{-fdump-tree} options.
4908
4909 @item -fdump-ipa-@var{switch}
4910 @opindex fdump-ipa
4911 Control the dumping at various stages of inter-procedural analysis
4912 language tree to a file.  The file name is generated by appending a switch
4913 specific suffix to the source file name.  The following dumps are possible:
4914
4915 @table @samp
4916 @item all
4917 Enables all inter-procedural analysis dumps.
4918
4919 @item cgraph
4920 Dumps information about call-graph optimization, unused function removal,
4921 and inlining decisions.
4922
4923 @item inline
4924 Dump after function inlining.
4925
4926 @end table
4927
4928 @item -fdump-statistics-@var{option}
4929 @opindex -fdump-statistics
4930 Enable and control dumping of pass statistics in a separate file.  The
4931 file name is generated by appending a suffix ending in @samp{.statistics}
4932 to the source file name.  If the @samp{-@var{option}} form is used,
4933 @samp{-stats} will cause counters to be summed over the whole compilation unit
4934 while @samp{-details} will dump every event as the passes generate them.
4935 The default with no option is to sum counters for each function compiled.
4936
4937 @item -fdump-tree-@var{switch}
4938 @itemx -fdump-tree-@var{switch}-@var{options}
4939 @opindex fdump-tree
4940 Control the dumping at various stages of processing the intermediate
4941 language tree to a file.  The file name is generated by appending a switch
4942 specific suffix to the source file name.  If the @samp{-@var{options}}
4943 form is used, @var{options} is a list of @samp{-} separated options that
4944 control the details of the dump.  Not all options are applicable to all
4945 dumps, those which are not meaningful will be ignored.  The following
4946 options are available
4947
4948 @table @samp
4949 @item address
4950 Print the address of each node.  Usually this is not meaningful as it
4951 changes according to the environment and source file.  Its primary use
4952 is for tying up a dump file with a debug environment.
4953 @item slim
4954 Inhibit dumping of members of a scope or body of a function merely
4955 because that scope has been reached.  Only dump such items when they
4956 are directly reachable by some other path.  When dumping pretty-printed
4957 trees, this option inhibits dumping the bodies of control structures.
4958 @item raw
4959 Print a raw representation of the tree.  By default, trees are
4960 pretty-printed into a C-like representation.
4961 @item details
4962 Enable more detailed dumps (not honored by every dump option).
4963 @item stats
4964 Enable dumping various statistics about the pass (not honored by every dump
4965 option).
4966 @item blocks
4967 Enable showing basic block boundaries (disabled in raw dumps).
4968 @item vops
4969 Enable showing virtual operands for every statement.
4970 @item lineno
4971 Enable showing line numbers for statements.
4972 @item uid
4973 Enable showing the unique ID (@code{DECL_UID}) for each variable.
4974 @item verbose
4975 Enable showing the tree dump for each statement.
4976 @item all
4977 Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
4978 and @option{lineno}.
4979 @end table
4980
4981 The following tree dumps are possible:
4982 @table @samp
4983
4984 @item original
4985 Dump before any tree based optimization, to @file{@var{file}.original}.
4986
4987 @item optimized
4988 Dump after all tree based optimization, to @file{@var{file}.optimized}.
4989
4990 @item gimple
4991 @opindex fdump-tree-gimple
4992 Dump each function before and after the gimplification pass to a file.  The
4993 file name is made by appending @file{.gimple} to the source file name.
4994
4995 @item cfg
4996 @opindex fdump-tree-cfg
4997 Dump the control flow graph of each function to a file.  The file name is
4998 made by appending @file{.cfg} to the source file name.
4999
5000 @item vcg
5001 @opindex fdump-tree-vcg
5002 Dump the control flow graph of each function to a file in VCG format.  The
5003 file name is made by appending @file{.vcg} to the source file name.  Note
5004 that if the file contains more than one function, the generated file cannot
5005 be used directly by VCG@.  You will need to cut and paste each function's
5006 graph into its own separate file first.
5007
5008 @item ch
5009 @opindex fdump-tree-ch
5010 Dump each function after copying loop headers.  The file name is made by
5011 appending @file{.ch} to the source file name.
5012
5013 @item ssa
5014 @opindex fdump-tree-ssa
5015 Dump SSA related information to a file.  The file name is made by appending
5016 @file{.ssa} to the source file name.
5017
5018 @item alias
5019 @opindex fdump-tree-alias
5020 Dump aliasing information for each function.  The file name is made by
5021 appending @file{.alias} to the source file name.
5022
5023 @item ccp
5024 @opindex fdump-tree-ccp
5025 Dump each function after CCP@.  The file name is made by appending
5026 @file{.ccp} to the source file name.
5027
5028 @item storeccp
5029 @opindex fdump-tree-storeccp
5030 Dump each function after STORE-CCP@.  The file name is made by appending
5031 @file{.storeccp} to the source file name.
5032
5033 @item pre
5034 @opindex fdump-tree-pre
5035 Dump trees after partial redundancy elimination.  The file name is made
5036 by appending @file{.pre} to the source file name.
5037
5038 @item fre
5039 @opindex fdump-tree-fre
5040 Dump trees after full redundancy elimination.  The file name is made
5041 by appending @file{.fre} to the source file name.
5042
5043 @item copyprop
5044 @opindex fdump-tree-copyprop
5045 Dump trees after copy propagation.  The file name is made
5046 by appending @file{.copyprop} to the source file name.
5047
5048 @item store_copyprop
5049 @opindex fdump-tree-store_copyprop
5050 Dump trees after store copy-propagation.  The file name is made
5051 by appending @file{.store_copyprop} to the source file name.
5052
5053 @item dce
5054 @opindex fdump-tree-dce
5055 Dump each function after dead code elimination.  The file name is made by
5056 appending @file{.dce} to the source file name.
5057
5058 @item mudflap
5059 @opindex fdump-tree-mudflap
5060 Dump each function after adding mudflap instrumentation.  The file name is
5061 made by appending @file{.mudflap} to the source file name.
5062
5063 @item sra
5064 @opindex fdump-tree-sra
5065 Dump each function after performing scalar replacement of aggregates.  The
5066 file name is made by appending @file{.sra} to the source file name.
5067
5068 @item sink
5069 @opindex fdump-tree-sink
5070 Dump each function after performing code sinking.  The file name is made
5071 by appending @file{.sink} to the source file name.
5072
5073 @item dom
5074 @opindex fdump-tree-dom
5075 Dump each function after applying dominator tree optimizations.  The file
5076 name is made by appending @file{.dom} to the source file name.
5077
5078 @item dse
5079 @opindex fdump-tree-dse
5080 Dump each function after applying dead store elimination.  The file
5081 name is made by appending @file{.dse} to the source file name.
5082
5083 @item phiopt
5084 @opindex fdump-tree-phiopt
5085 Dump each function after optimizing PHI nodes into straightline code.  The file
5086 name is made by appending @file{.phiopt} to the source file name.
5087
5088 @item forwprop
5089 @opindex fdump-tree-forwprop
5090 Dump each function after forward propagating single use variables.  The file
5091 name is made by appending @file{.forwprop} to the source file name.
5092
5093 @item copyrename
5094 @opindex fdump-tree-copyrename
5095 Dump each function after applying the copy rename optimization.  The file
5096 name is made by appending @file{.copyrename} to the source file name.
5097
5098 @item nrv
5099 @opindex fdump-tree-nrv
5100 Dump each function after applying the named return value optimization on
5101 generic trees.  The file name is made by appending @file{.nrv} to the source
5102 file name.
5103
5104 @item vect
5105 @opindex fdump-tree-vect
5106 Dump each function after applying vectorization of loops.  The file name is
5107 made by appending @file{.vect} to the source file name.
5108
5109 @item vrp
5110 @opindex fdump-tree-vrp
5111 Dump each function after Value Range Propagation (VRP).  The file name
5112 is made by appending @file{.vrp} to the source file name.
5113
5114 @item all
5115 @opindex fdump-tree-all
5116 Enable all the available tree dumps with the flags provided in this option.
5117 @end table
5118
5119 @item -ftree-vectorizer-verbose=@var{n}
5120 @opindex ftree-vectorizer-verbose
5121 This option controls the amount of debugging output the vectorizer prints.
5122 This information is written to standard error, unless
5123 @option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified,
5124 in which case it is output to the usual dump listing file, @file{.vect}.
5125 For @var{n}=0 no diagnostic information is reported.
5126 If @var{n}=1 the vectorizer reports each loop that got vectorized,
5127 and the total number of loops that got vectorized.
5128 If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
5129 the first analysis phase (vect_analyze_loop_form) - i.e.@: countable,
5130 inner-most, single-bb, single-entry/exit loops.  This is the same verbosity
5131 level that @option{-fdump-tree-vect-stats} uses.
5132 Higher verbosity levels mean either more information dumped for each
5133 reported loop, or same amount of information reported for more loops:
5134 If @var{n}=3, alignment related information is added to the reports.
5135 If @var{n}=4, data-references related information (e.g.@: memory dependences,
5136 memory access-patterns) is added to the reports.
5137 If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops
5138 that did not pass the first analysis phase (i.e., may not be countable, or
5139 may have complicated control-flow).
5140 If @var{n}=6, the vectorizer reports also non-vectorized nested loops.
5141 For @var{n}=7, all the information the vectorizer generates during its
5142 analysis and transformation is reported.  This is the same verbosity level
5143 that @option{-fdump-tree-vect-details} uses.
5144
5145 @item -frandom-seed=@var{string}
5146 @opindex frandom-string
5147 This option provides a seed that GCC uses when it would otherwise use
5148 random numbers.  It is used to generate certain symbol names
5149 that have to be different in every compiled file.  It is also used to
5150 place unique stamps in coverage data files and the object files that
5151 produce them.  You can use the @option{-frandom-seed} option to produce
5152 reproducibly identical object files.
5153
5154 The @var{string} should be different for every file you compile.
5155
5156 @item -fsched-verbose=@var{n}
5157 @opindex fsched-verbose
5158 On targets that use instruction scheduling, this option controls the
5159 amount of debugging output the scheduler prints.  This information is
5160 written to standard error, unless @option{-fdump-rtl-sched1} or
5161 @option{-fdump-rtl-sched2} is specified, in which case it is output
5162 to the usual dump listing file, @file{.sched} or @file{.sched2}
5163 respectively.  However for @var{n} greater than nine, the output is
5164 always printed to standard error.
5165
5166 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
5167 same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
5168 For @var{n} greater than one, it also output basic block probabilities,
5169 detailed ready list information and unit/insn info.  For @var{n} greater
5170 than two, it includes RTL at abort point, control-flow and regions info.
5171 And for @var{n} over four, @option{-fsched-verbose} also includes
5172 dependence info.
5173
5174 @item -save-temps
5175 @opindex save-temps
5176 Store the usual ``temporary'' intermediate files permanently; place them
5177 in the current directory and name them based on the source file.  Thus,
5178 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
5179 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
5180 preprocessed @file{foo.i} output file even though the compiler now
5181 normally uses an integrated preprocessor.
5182
5183 When used in combination with the @option{-x} command line option,
5184 @option{-save-temps} is sensible enough to avoid over writing an
5185 input source file with the same extension as an intermediate file.
5186 The corresponding intermediate file may be obtained by renaming the
5187 source file before using @option{-save-temps}.
5188
5189 @item -time
5190 @opindex time
5191 Report the CPU time taken by each subprocess in the compilation
5192 sequence.  For C source files, this is the compiler proper and assembler
5193 (plus the linker if linking is done).  The output looks like this:
5194
5195 @smallexample
5196 # cc1 0.12 0.01
5197 # as 0.00 0.01
5198 @end smallexample
5199
5200 The first number on each line is the ``user time'', that is time spent
5201 executing the program itself.  The second number is ``system time'',
5202 time spent executing operating system routines on behalf of the program.
5203 Both numbers are in seconds.
5204
5205 @item -fvar-tracking
5206 @opindex fvar-tracking
5207 Run variable tracking pass.  It computes where variables are stored at each
5208 position in code.  Better debugging information is then generated
5209 (if the debugging information format supports this information).
5210
5211 It is enabled by default when compiling with optimization (@option{-Os},
5212 @option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
5213 the debug info format supports it.
5214
5215 @item -print-file-name=@var{library}
5216 @opindex print-file-name
5217 Print the full absolute name of the library file @var{library} that
5218 would be used when linking---and don't do anything else.  With this
5219 option, GCC does not compile or link anything; it just prints the
5220 file name.
5221
5222 @item -print-multi-directory
5223 @opindex print-multi-directory
5224 Print the directory name corresponding to the multilib selected by any
5225 other switches present in the command line.  This directory is supposed
5226 to exist in @env{GCC_EXEC_PREFIX}.
5227
5228 @item -print-multi-lib
5229 @opindex print-multi-lib
5230 Print the mapping from multilib directory names to compiler switches
5231 that enable them.  The directory name is separated from the switches by
5232 @samp{;}, and each switch starts with an @samp{@@} instead of the
5233 @samp{-}, without spaces between multiple switches.  This is supposed to
5234 ease shell-processing.
5235
5236 @item -print-prog-name=@var{program}
5237 @opindex print-prog-name
5238 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
5239
5240 @item -print-libgcc-file-name
5241 @opindex print-libgcc-file-name
5242 Same as @option{-print-file-name=libgcc.a}.
5243
5244 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
5245 but you do want to link with @file{libgcc.a}.  You can do
5246
5247 @smallexample
5248 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
5249 @end smallexample
5250
5251 @item -print-search-dirs
5252 @opindex print-search-dirs
5253 Print the name of the configured installation directory and a list of
5254 program and library directories @command{gcc} will search---and don't do anything else.
5255
5256 This is useful when @command{gcc} prints the error message
5257 @samp{installation problem, cannot exec cpp0: No such file or directory}.
5258 To resolve this you either need to put @file{cpp0} and the other compiler
5259 components where @command{gcc} expects to find them, or you can set the environment
5260 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
5261 Don't forget the trailing @samp{/}.
5262 @xref{Environment Variables}.
5263
5264 @item -print-sysroot
5265 @opindex print-sysroot
5266 Print the target sysroot directory that will be used during
5267 compilation.  This is the target sysroot specified either at configure
5268 time or using the @option{--sysroot} option, possibly with an extra
5269 suffix that depends on compilation options.  If no target sysroot is
5270 specified, the option prints nothing.
5271
5272 @item -print-sysroot-headers-suffix
5273 @opindex print-sysroot-headers-suffix
5274 Print the suffix added to the target sysroot when searching for
5275 headers, or give an error if the compiler is not configured with such
5276 a suffix---and don't do anything else.
5277
5278 @item -dumpmachine
5279 @opindex dumpmachine
5280 Print the compiler's target machine (for example,
5281 @samp{i686-pc-linux-gnu})---and don't do anything else.
5282
5283 @item -dumpversion
5284 @opindex dumpversion
5285 Print the compiler version (for example, @samp{3.0})---and don't do
5286 anything else.
5287
5288 @item -dumpspecs
5289 @opindex dumpspecs
5290 Print the compiler's built-in specs---and don't do anything else.  (This
5291 is used when GCC itself is being built.)  @xref{Spec Files}.
5292
5293 @item -feliminate-unused-debug-types
5294 @opindex feliminate-unused-debug-types
5295 Normally, when producing DWARF2 output, GCC will emit debugging
5296 information for all types declared in a compilation
5297 unit, regardless of whether or not they are actually used
5298 in that compilation unit.  Sometimes this is useful, such as
5299 if, in the debugger, you want to cast a value to a type that is
5300 not actually used in your program (but is declared).  More often,
5301 however, this results in a significant amount of wasted space.
5302 With this option, GCC will avoid producing debug symbol output
5303 for types that are nowhere used in the source file being compiled.
5304 @end table
5305
5306 @node Optimize Options
5307 @section Options That Control Optimization
5308 @cindex optimize options
5309 @cindex options, optimization
5310
5311 These options control various sorts of optimizations.
5312
5313 Without any optimization option, the compiler's goal is to reduce the
5314 cost of compilation and to make debugging produce the expected
5315 results.  Statements are independent: if you stop the program with a
5316 breakpoint between statements, you can then assign a new value to any
5317 variable or change the program counter to any other statement in the
5318 function and get exactly the results you would expect from the source
5319 code.
5320
5321 Turning on optimization flags makes the compiler attempt to improve
5322 the performance and/or code size at the expense of compilation time
5323 and possibly the ability to debug the program.
5324
5325 The compiler performs optimization based on the knowledge it has of the
5326 program.  Compiling multiple files at once to a single output file mode allows
5327 the compiler to use information gained from all of the files when compiling
5328 each of them.
5329
5330 Not all optimizations are controlled directly by a flag.  Only
5331 optimizations that have a flag are listed.
5332
5333 @table @gcctabopt
5334 @item -O
5335 @itemx -O1
5336 @opindex O
5337 @opindex O1
5338 Optimize.  Optimizing compilation takes somewhat more time, and a lot
5339 more memory for a large function.
5340
5341 With @option{-O}, the compiler tries to reduce code size and execution
5342 time, without performing any optimizations that take a great deal of
5343 compilation time.
5344
5345 @option{-O} turns on the following optimization flags:
5346 @gccoptlist{
5347 -fauto-inc-dec @gol
5348 -fcprop-registers @gol
5349 -fdce @gol
5350 -fdefer-pop @gol
5351 -fdelayed-branch @gol
5352 -fdse @gol
5353 -fguess-branch-probability @gol
5354 -fif-conversion2 @gol
5355 -fif-conversion @gol
5356 -finline-small-functions @gol
5357 -fipa-pure-const @gol
5358 -fipa-reference @gol
5359 -fmerge-constants
5360 -fsplit-wide-types @gol
5361 -ftree-builtin-call-dce @gol
5362 -ftree-ccp @gol
5363 -ftree-ch @gol
5364 -ftree-copyrename @gol
5365 -ftree-dce @gol
5366 -ftree-dominator-opts @gol
5367 -ftree-dse @gol
5368 -ftree-fre @gol
5369 -ftree-sra @gol
5370 -ftree-ter @gol
5371 -funit-at-a-time}
5372
5373 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
5374 where doing so does not interfere with debugging.
5375
5376 @item -O2
5377 @opindex O2
5378 Optimize even more.  GCC performs nearly all supported optimizations
5379 that do not involve a space-speed tradeoff.
5380 As compared to @option{-O}, this option increases both compilation time
5381 and the performance of the generated code.
5382
5383 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
5384 also turns on the following optimization flags:
5385 @gccoptlist{-fthread-jumps @gol
5386 -falign-functions  -falign-jumps @gol
5387 -falign-loops  -falign-labels @gol
5388 -fcaller-saves @gol
5389 -fcrossjumping @gol
5390 -fcse-follow-jumps  -fcse-skip-blocks @gol
5391 -fdelete-null-pointer-checks @gol
5392 -fexpensive-optimizations @gol
5393 -fgcse  -fgcse-lm  @gol
5394 -findirect-inlining @gol
5395 -foptimize-sibling-calls @gol
5396 -fpeephole2 @gol
5397 -fregmove @gol
5398 -freorder-blocks  -freorder-functions @gol
5399 -frerun-cse-after-loop  @gol
5400 -fsched-interblock  -fsched-spec @gol
5401 -fschedule-insns  -fschedule-insns2 @gol
5402 -fstrict-aliasing -fstrict-overflow @gol
5403 -ftree-switch-conversion @gol
5404 -ftree-pre @gol
5405 -ftree-vrp}
5406
5407 Please note the warning under @option{-fgcse} about
5408 invoking @option{-O2} on programs that use computed gotos.
5409
5410 @item -O3
5411 @opindex O3
5412 Optimize yet more.  @option{-O3} turns on all optimizations specified
5413 by @option{-O2} and also turns on the @option{-finline-functions},
5414 @option{-funswitch-loops}, @option{-fpredictive-commoning},
5415 @option{-fgcse-after-reload} and @option{-ftree-vectorize} options.
5416
5417 @item -O0
5418 @opindex O0
5419 Reduce compilation time and make debugging produce the expected
5420 results.  This is the default.
5421
5422 @item -Os
5423 @opindex Os
5424 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
5425 do not typically increase code size.  It also performs further
5426 optimizations designed to reduce code size.
5427
5428 @option{-Os} disables the following optimization flags:
5429 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
5430 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
5431 -fprefetch-loop-arrays  -ftree-vect-loop-version}
5432
5433 If you use multiple @option{-O} options, with or without level numbers,
5434 the last such option is the one that is effective.
5435 @end table
5436
5437 Options of the form @option{-f@var{flag}} specify machine-independent
5438 flags.  Most flags have both positive and negative forms; the negative
5439 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
5440 below, only one of the forms is listed---the one you typically will
5441 use.  You can figure out the other form by either removing @samp{no-}
5442 or adding it.
5443
5444 The following options control specific optimizations.  They are either
5445 activated by @option{-O} options or are related to ones that are.  You
5446 can use the following flags in the rare cases when ``fine-tuning'' of
5447 optimizations to be performed is desired.
5448
5449 @table @gcctabopt
5450 @item -fno-default-inline
5451 @opindex fno-default-inline
5452 Do not make member functions inline by default merely because they are
5453 defined inside the class scope (C++ only).  Otherwise, when you specify
5454 @w{@option{-O}}, member functions defined inside class scope are compiled
5455 inline by default; i.e., you don't need to add @samp{inline} in front of
5456 the member function name.
5457
5458 @item -fno-defer-pop
5459 @opindex fno-defer-pop
5460 Always pop the arguments to each function call as soon as that function
5461 returns.  For machines which must pop arguments after a function call,
5462 the compiler normally lets arguments accumulate on the stack for several
5463 function calls and pops them all at once.
5464
5465 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5466
5467 @item -fforward-propagate
5468 @opindex fforward-propagate
5469 Perform a forward propagation pass on RTL@.  The pass tries to combine two
5470 instructions and checks if the result can be simplified.  If loop unrolling
5471 is active, two passes are performed and the second is scheduled after
5472 loop unrolling.
5473
5474 This option is enabled by default at optimization levels @option{-O2},
5475 @option{-O3}, @option{-Os}.
5476
5477 @item -fomit-frame-pointer
5478 @opindex fomit-frame-pointer
5479 Don't keep the frame pointer in a register for functions that
5480 don't need one.  This avoids the instructions to save, set up and
5481 restore frame pointers; it also makes an extra register available
5482 in many functions.  @strong{It also makes debugging impossible on
5483 some machines.}
5484
5485 On some machines, such as the VAX, this flag has no effect, because
5486 the standard calling sequence automatically handles the frame pointer
5487 and nothing is saved by pretending it doesn't exist.  The
5488 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
5489 whether a target machine supports this flag.  @xref{Registers,,Register
5490 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
5491
5492 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5493
5494 @item -foptimize-sibling-calls
5495 @opindex foptimize-sibling-calls
5496 Optimize sibling and tail recursive calls.
5497
5498 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5499
5500 @item -fno-inline
5501 @opindex fno-inline
5502 Don't pay attention to the @code{inline} keyword.  Normally this option
5503 is used to keep the compiler from expanding any functions inline.
5504 Note that if you are not optimizing, no functions can be expanded inline.
5505
5506 @item -finline-small-functions
5507 @opindex finline-small-functions
5508 Integrate functions into their callers when their body is smaller than expected
5509 function call code (so overall size of program gets smaller).  The compiler
5510 heuristically decides which functions are simple enough to be worth integrating
5511 in this way.
5512
5513 Enabled at level @option{-O2}.
5514
5515 @item -findirect-inlining
5516 @opindex findirect-inlining
5517 Inline also indirect calls that are discovered to be known at compile
5518 time thanks to previous inlining.  This option has any effect only
5519 when inlining itself is turned on by the @option{-finline-functions}
5520 or @option{-finline-small-functions} options.
5521
5522 Enabled at level @option{-O2}.
5523
5524 @item -finline-functions
5525 @opindex finline-functions
5526 Integrate all simple functions into their callers.  The compiler
5527 heuristically decides which functions are simple enough to be worth
5528 integrating in this way.
5529
5530 If all calls to a given function are integrated, and the function is
5531 declared @code{static}, then the function is normally not output as
5532 assembler code in its own right.
5533
5534 Enabled at level @option{-O3}.
5535
5536 @item -finline-functions-called-once
5537 @opindex finline-functions-called-once
5538 Consider all @code{static} functions called once for inlining into their
5539 caller even if they are not marked @code{inline}.  If a call to a given
5540 function is integrated, then the function is not output as assembler code
5541 in its own right.
5542
5543 Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
5544
5545 @item -fearly-inlining
5546 @opindex fearly-inlining
5547 Inline functions marked by @code{always_inline} and functions whose body seems
5548 smaller than the function call overhead early before doing
5549 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
5550 makes profiling significantly cheaper and usually inlining faster on programs
5551 having large chains of nested wrapper functions.
5552
5553 Enabled by default.
5554
5555 @item -finline-limit=@var{n}
5556 @opindex finline-limit
5557 By default, GCC limits the size of functions that can be inlined.  This flag
5558 allows coarse control of this limit.  @var{n} is the size of functions that
5559 can be inlined in number of pseudo instructions.
5560
5561 Inlining is actually controlled by a number of parameters, which may be
5562 specified individually by using @option{--param @var{name}=@var{value}}.
5563 The @option{-finline-limit=@var{n}} option sets some of these parameters
5564 as follows:
5565
5566 @table @gcctabopt
5567 @item max-inline-insns-single
5568 is set to @var{n}/2.
5569 @item max-inline-insns-auto
5570 is set to @var{n}/2.
5571 @end table
5572
5573 See below for a documentation of the individual
5574 parameters controlling inlining and for the defaults of these parameters.
5575
5576 @emph{Note:} there may be no value to @option{-finline-limit} that results
5577 in default behavior.
5578
5579 @emph{Note:} pseudo instruction represents, in this particular context, an
5580 abstract measurement of function's size.  In no way does it represent a count
5581 of assembly instructions and as such its exact meaning might change from one
5582 release to an another.
5583
5584 @item -fkeep-inline-functions
5585 @opindex fkeep-inline-functions
5586 In C, emit @code{static} functions that are declared @code{inline}
5587 into the object file, even if the function has been inlined into all
5588 of its callers.  This switch does not affect functions using the
5589 @code{extern inline} extension in GNU C89@.  In C++, emit any and all
5590 inline functions into the object file.
5591
5592 @item -fkeep-static-consts
5593 @opindex fkeep-static-consts
5594 Emit variables declared @code{static const} when optimization isn't turned
5595 on, even if the variables aren't referenced.
5596
5597 GCC enables this option by default.  If you want to force the compiler to
5598 check if the variable was referenced, regardless of whether or not
5599 optimization is turned on, use the @option{-fno-keep-static-consts} option.
5600
5601 @item -fmerge-constants
5602 @opindex fmerge-constants
5603 Attempt to merge identical constants (string constants and floating point
5604 constants) across compilation units.
5605
5606 This option is the default for optimized compilation if the assembler and
5607 linker support it.  Use @option{-fno-merge-constants} to inhibit this
5608 behavior.
5609
5610 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5611
5612 @item -fmerge-all-constants
5613 @opindex fmerge-all-constants
5614 Attempt to merge identical constants and identical variables.
5615
5616 This option implies @option{-fmerge-constants}.  In addition to
5617 @option{-fmerge-constants} this considers e.g.@: even constant initialized
5618 arrays or initialized constant variables with integral or floating point
5619 types.  Languages like C or C++ require each variable, including multiple
5620 instances of the same variable in recursive calls, to have distinct locations,
5621 so using this option will result in non-conforming
5622 behavior.
5623
5624 @item -fmodulo-sched
5625 @opindex fmodulo-sched
5626 Perform swing modulo scheduling immediately before the first scheduling
5627 pass.  This pass looks at innermost loops and reorders their
5628 instructions by overlapping different iterations.
5629
5630 @item -fmodulo-sched-allow-regmoves
5631 @opindex fmodulo-sched-allow-regmoves
5632 Perform more aggressive SMS based modulo scheduling with register moves
5633 allowed.  By setting this flag certain anti-dependences edges will be
5634 deleted which will trigger the generation of reg-moves based on the
5635 life-range analysis.  This option is effective only with
5636 @option{-fmodulo-sched} enabled.
5637
5638 @item -fno-branch-count-reg
5639 @opindex fno-branch-count-reg
5640 Do not use ``decrement and branch'' instructions on a count register,
5641 but instead generate a sequence of instructions that decrement a
5642 register, compare it against zero, then branch based upon the result.
5643 This option is only meaningful on architectures that support such
5644 instructions, which include x86, PowerPC, IA-64 and S/390.
5645
5646 The default is @option{-fbranch-count-reg}.
5647
5648 @item -fno-function-cse
5649 @opindex fno-function-cse
5650 Do not put function addresses in registers; make each instruction that
5651 calls a constant function contain the function's address explicitly.
5652
5653 This option results in less efficient code, but some strange hacks
5654 that alter the assembler output may be confused by the optimizations
5655 performed when this option is not used.
5656
5657 The default is @option{-ffunction-cse}
5658
5659 @item -fno-zero-initialized-in-bss
5660 @opindex fno-zero-initialized-in-bss
5661 If the target supports a BSS section, GCC by default puts variables that
5662 are initialized to zero into BSS@.  This can save space in the resulting
5663 code.
5664
5665 This option turns off this behavior because some programs explicitly
5666 rely on variables going to the data section.  E.g., so that the
5667 resulting executable can find the beginning of that section and/or make
5668 assumptions based on that.
5669
5670 The default is @option{-fzero-initialized-in-bss}.
5671
5672 @item -fmudflap -fmudflapth -fmudflapir
5673 @opindex fmudflap
5674 @opindex fmudflapth
5675 @opindex fmudflapir
5676 @cindex bounds checking
5677 @cindex mudflap
5678 For front-ends that support it (C and C++), instrument all risky
5679 pointer/array dereferencing operations, some standard library
5680 string/heap functions, and some other associated constructs with
5681 range/validity tests.  Modules so instrumented should be immune to
5682 buffer overflows, invalid heap use, and some other classes of C/C++
5683 programming errors.  The instrumentation relies on a separate runtime
5684 library (@file{libmudflap}), which will be linked into a program if
5685 @option{-fmudflap} is given at link time.  Run-time behavior of the
5686 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
5687 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
5688 for its options.
5689
5690 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
5691 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
5692 addition to @option{-fmudflap} or @option{-fmudflapth}, if
5693 instrumentation should ignore pointer reads.  This produces less
5694 instrumentation (and therefore faster execution) and still provides
5695 some protection against outright memory corrupting writes, but allows
5696 erroneously read data to propagate within a program.
5697
5698 @item -fthread-jumps
5699 @opindex fthread-jumps
5700 Perform optimizations where we check to see if a jump branches to a
5701 location where another comparison subsumed by the first is found.  If
5702 so, the first branch is redirected to either the destination of the
5703 second branch or a point immediately following it, depending on whether
5704 the condition is known to be true or false.
5705
5706 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5707
5708 @item -fsplit-wide-types
5709 @opindex fsplit-wide-types
5710 When using a type that occupies multiple registers, such as @code{long
5711 long} on a 32-bit system, split the registers apart and allocate them
5712 independently.  This normally generates better code for those types,
5713 but may make debugging more difficult.
5714
5715 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
5716 @option{-Os}.
5717
5718 @item -fcse-follow-jumps
5719 @opindex fcse-follow-jumps
5720 In common subexpression elimination (CSE), scan through jump instructions
5721 when the target of the jump is not reached by any other path.  For
5722 example, when CSE encounters an @code{if} statement with an
5723 @code{else} clause, CSE will follow the jump when the condition
5724 tested is false.
5725
5726 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5727
5728 @item -fcse-skip-blocks
5729 @opindex fcse-skip-blocks
5730 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
5731 follow jumps which conditionally skip over blocks.  When CSE
5732 encounters a simple @code{if} statement with no else clause,
5733 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
5734 body of the @code{if}.
5735
5736 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5737
5738 @item -frerun-cse-after-loop
5739 @opindex frerun-cse-after-loop
5740 Re-run common subexpression elimination after loop optimizations has been
5741 performed.
5742
5743 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5744
5745 @item -fgcse
5746 @opindex fgcse
5747 Perform a global common subexpression elimination pass.
5748 This pass also performs global constant and copy propagation.
5749
5750 @emph{Note:} When compiling a program using computed gotos, a GCC
5751 extension, you may get better runtime performance if you disable
5752 the global common subexpression elimination pass by adding
5753 @option{-fno-gcse} to the command line.
5754
5755 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5756
5757 @item -fgcse-lm
5758 @opindex fgcse-lm
5759 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
5760 attempt to move loads which are only killed by stores into themselves.  This
5761 allows a loop containing a load/store sequence to be changed to a load outside
5762 the loop, and a copy/store within the loop.
5763
5764 Enabled by default when gcse is enabled.
5765
5766 @item -fgcse-sm
5767 @opindex fgcse-sm
5768 When @option{-fgcse-sm} is enabled, a store motion pass is run after
5769 global common subexpression elimination.  This pass will attempt to move
5770 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
5771 loops containing a load/store sequence can be changed to a load before
5772 the loop and a store after the loop.
5773
5774 Not enabled at any optimization level.
5775
5776 @item -fgcse-las
5777 @opindex fgcse-las
5778 When @option{-fgcse-las} is enabled, the global common subexpression
5779 elimination pass eliminates redundant loads that come after stores to the
5780 same memory location (both partial and full redundancies).
5781
5782 Not enabled at any optimization level.
5783
5784 @item -fgcse-after-reload
5785 @opindex fgcse-after-reload
5786 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
5787 pass is performed after reload.  The purpose of this pass is to cleanup
5788 redundant spilling.
5789
5790 @item -funsafe-loop-optimizations
5791 @opindex funsafe-loop-optimizations
5792 If given, the loop optimizer will assume that loop indices do not
5793 overflow, and that the loops with nontrivial exit condition are not
5794 infinite.  This enables a wider range of loop optimizations even if
5795 the loop optimizer itself cannot prove that these assumptions are valid.
5796 Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
5797 if it finds this kind of loop.
5798
5799 @item -fcrossjumping
5800 @opindex fcrossjumping
5801 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
5802 resulting code may or may not perform better than without cross-jumping.
5803
5804 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5805
5806 @item -fauto-inc-dec
5807 @opindex fauto-inc-dec
5808 Combine increments or decrements of addresses with memory accesses.
5809 This pass is always skipped on architectures that do not have
5810 instructions to support this.  Enabled by default at @option{-O} and
5811 higher on architectures that support this.
5812
5813 @item -fdce
5814 @opindex fdce
5815 Perform dead code elimination (DCE) on RTL@.
5816 Enabled by default at @option{-O} and higher.
5817
5818 @item -fdse
5819 @opindex fdse
5820 Perform dead store elimination (DSE) on RTL@.
5821 Enabled by default at @option{-O} and higher.
5822
5823 @item -fif-conversion
5824 @opindex fif-conversion
5825 Attempt to transform conditional jumps into branch-less equivalents.  This
5826 include use of conditional moves, min, max, set flags and abs instructions, and
5827 some tricks doable by standard arithmetics.  The use of conditional execution
5828 on chips where it is available is controlled by @code{if-conversion2}.
5829
5830 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5831
5832 @item -fif-conversion2
5833 @opindex fif-conversion2
5834 Use conditional execution (where available) to transform conditional jumps into
5835 branch-less equivalents.
5836
5837 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5838
5839 @item -fdelete-null-pointer-checks
5840 @opindex fdelete-null-pointer-checks
5841 Use global dataflow analysis to identify and eliminate useless checks
5842 for null pointers.  The compiler assumes that dereferencing a null
5843 pointer would have halted the program.  If a pointer is checked after
5844 it has already been dereferenced, it cannot be null.
5845
5846 In some environments, this assumption is not true, and programs can
5847 safely dereference null pointers.  Use
5848 @option{-fno-delete-null-pointer-checks} to disable this optimization
5849 for programs which depend on that behavior.
5850
5851 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5852
5853 @item -fexpensive-optimizations
5854 @opindex fexpensive-optimizations
5855 Perform a number of minor optimizations that are relatively expensive.
5856
5857 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5858
5859 @item -foptimize-register-move
5860 @itemx -fregmove
5861 @opindex foptimize-register-move
5862 @opindex fregmove
5863 Attempt to reassign register numbers in move instructions and as
5864 operands of other simple instructions in order to maximize the amount of
5865 register tying.  This is especially helpful on machines with two-operand
5866 instructions.
5867
5868 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
5869 optimization.
5870
5871 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5872
5873 @item -fira-algorithm=@var{algorithm}
5874 Use specified coloring algorithm for the integrated register
5875 allocator.  The @var{algorithm} argument should be @code{priority} or
5876 @code{CB}.  The first algorithm specifies Chow's priority coloring,
5877 the second one specifies Chaitin-Briggs coloring.  The second
5878 algorithm can be unimplemented for some architectures.  If it is
5879 implemented, it is the default because Chaitin-Briggs coloring as a
5880 rule generates a better code.
5881
5882 @item -fira-region=@var{region}
5883 Use specified regions for the integrated register allocator.  The
5884 @var{region} argument should be one of @code{all}, @code{mixed}, or
5885 @code{one}.  The first value means using all loops as register
5886 allocation regions, the second value which is the default means using
5887 all loops except for loops with small register pressure as the
5888 regions, and third one means using all function as a single region.
5889 The first value can give best result for machines with small size and
5890 irregular register set, the third one results in faster and generates
5891 decent code and the smallest size code, and the default value usually
5892 give the best results in most cases and for most architectures.
5893
5894 @item -fira-coalesce
5895 @opindex fira-coalesce
5896 Do optimistic register coalescing.  This option might be profitable for
5897 architectures with big regular register files.
5898
5899 @item -fno-ira-share-save-slots
5900 @opindex fno-ira-share-save-slots
5901 Switch off sharing stack slots used for saving call used hard
5902 registers living through a call.  Each hard register will get a
5903 separate stack slot and as a result function stack frame will be
5904 bigger.
5905
5906 @item -fno-ira-share-spill-slots
5907 @opindex fno-ira-share-spill-slots
5908 Switch off sharing stack slots allocated for pseudo-registers.  Each
5909 pseudo-register which did not get a hard register will get a separate
5910 stack slot and as a result function stack frame will be bigger.
5911
5912 @item -fira-verbose=@var{n}
5913 @opindex fira-verbose
5914 Set up how verbose dump file for the integrated register allocator
5915 will be.  Default value is 5.  If the value is greater or equal to 10,
5916 the dump file will be stderr as if the value were @var{n} minus 10.
5917
5918 @item -fdelayed-branch
5919 @opindex fdelayed-branch
5920 If supported for the target machine, attempt to reorder instructions
5921 to exploit instruction slots available after delayed branch
5922 instructions.
5923
5924 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5925
5926 @item -fschedule-insns
5927 @opindex fschedule-insns
5928 If supported for the target machine, attempt to reorder instructions to
5929 eliminate execution stalls due to required data being unavailable.  This
5930 helps machines that have slow floating point or memory load instructions
5931 by allowing other instructions to be issued until the result of the load
5932 or floating point instruction is required.
5933
5934 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5935
5936 @item -fschedule-insns2
5937 @opindex fschedule-insns2
5938 Similar to @option{-fschedule-insns}, but requests an additional pass of
5939 instruction scheduling after register allocation has been done.  This is
5940 especially useful on machines with a relatively small number of
5941 registers and where memory load instructions take more than one cycle.
5942
5943 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5944
5945 @item -fno-sched-interblock
5946 @opindex fno-sched-interblock
5947 Don't schedule instructions across basic blocks.  This is normally
5948 enabled by default when scheduling before register allocation, i.e.@:
5949 with @option{-fschedule-insns} or at @option{-O2} or higher.
5950
5951 @item -fno-sched-spec
5952 @opindex fno-sched-spec
5953 Don't allow speculative motion of non-load instructions.  This is normally
5954 enabled by default when scheduling before register allocation, i.e.@:
5955 with @option{-fschedule-insns} or at @option{-O2} or higher.
5956
5957 @item -fsched-spec-load
5958 @opindex fsched-spec-load
5959 Allow speculative motion of some load instructions.  This only makes
5960 sense when scheduling before register allocation, i.e.@: with
5961 @option{-fschedule-insns} or at @option{-O2} or higher.
5962
5963 @item -fsched-spec-load-dangerous
5964 @opindex fsched-spec-load-dangerous
5965 Allow speculative motion of more load instructions.  This only makes
5966 sense when scheduling before register allocation, i.e.@: with
5967 @option{-fschedule-insns} or at @option{-O2} or higher.
5968
5969 @item -fsched-stalled-insns
5970 @itemx -fsched-stalled-insns=@var{n}
5971 @opindex fsched-stalled-insns
5972 Define how many insns (if any) can be moved prematurely from the queue
5973 of stalled insns into the ready list, during the second scheduling pass.
5974 @option{-fno-sched-stalled-insns} means that no insns will be moved
5975 prematurely, @option{-fsched-stalled-insns=0} means there is no limit
5976 on how many queued insns can be moved prematurely.
5977 @option{-fsched-stalled-insns} without a value is equivalent to
5978 @option{-fsched-stalled-insns=1}.
5979
5980 @item -fsched-stalled-insns-dep
5981 @itemx -fsched-stalled-insns-dep=@var{n}
5982 @opindex fsched-stalled-insns-dep
5983 Define how many insn groups (cycles) will be examined for a dependency
5984 on a stalled insn that is candidate for premature removal from the queue
5985 of stalled insns.  This has an effect only during the second scheduling pass,
5986 and only if @option{-fsched-stalled-insns} is used.
5987 @option{-fno-sched-stalled-insns-dep} is equivalent to
5988 @option{-fsched-stalled-insns-dep=0}.
5989 @option{-fsched-stalled-insns-dep} without a value is equivalent to
5990 @option{-fsched-stalled-insns-dep=1}.
5991
5992 @item -fsched2-use-superblocks
5993 @opindex fsched2-use-superblocks
5994 When scheduling after register allocation, do use superblock scheduling
5995 algorithm.  Superblock scheduling allows motion across basic block boundaries
5996 resulting on faster schedules.  This option is experimental, as not all machine
5997 descriptions used by GCC model the CPU closely enough to avoid unreliable
5998 results from the algorithm.
5999
6000 This only makes sense when scheduling after register allocation, i.e.@: with
6001 @option{-fschedule-insns2} or at @option{-O2} or higher.
6002
6003 @item -fsched2-use-traces
6004 @opindex fsched2-use-traces
6005 Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
6006 allocation and additionally perform code duplication in order to increase the
6007 size of superblocks using tracer pass.  See @option{-ftracer} for details on
6008 trace formation.
6009
6010 This mode should produce faster but significantly longer programs.  Also
6011 without @option{-fbranch-probabilities} the traces constructed may not
6012 match the reality and hurt the performance.  This only makes
6013 sense when scheduling after register allocation, i.e.@: with
6014 @option{-fschedule-insns2} or at @option{-O2} or higher.
6015
6016 @item -fsee
6017 @opindex fsee
6018 Eliminate redundant sign extension instructions and move the non-redundant
6019 ones to optimal placement using lazy code motion (LCM).
6020
6021 @item -freschedule-modulo-scheduled-loops
6022 @opindex freschedule-modulo-scheduled-loops
6023 The modulo scheduling comes before the traditional scheduling, if a loop
6024 was modulo scheduled we may want to prevent the later scheduling passes
6025 from changing its schedule, we use this option to control that.
6026
6027 @item -fselective-scheduling
6028 @opindex fselective-scheduling
6029 Schedule instructions using selective scheduling algorithm.  Selective
6030 scheduling runs instead of the first scheduler pass.
6031
6032 @item -fselective-scheduling2
6033 @opindex fselective-scheduling2
6034 Schedule instructions using selective scheduling algorithm.  Selective
6035 scheduling runs instead of the second scheduler pass.
6036
6037 @item -fsel-sched-pipelining
6038 @opindex fsel-sched-pipelining
6039 Enable software pipelining of innermost loops during selective scheduling.  
6040 This option has no effect until one of @option{-fselective-scheduling} or 
6041 @option{-fselective-scheduling2} is turned on.
6042
6043 @item -fsel-sched-pipelining-outer-loops
6044 @opindex fsel-sched-pipelining-outer-loops
6045 When pipelining loops during selective scheduling, also pipeline outer loops.
6046 This option has no effect until @option{-fsel-sched-pipelining} is turned on.
6047
6048 @item -fcaller-saves
6049 @opindex fcaller-saves
6050 Enable values to be allocated in registers that will be clobbered by
6051 function calls, by emitting extra instructions to save and restore the
6052 registers around such calls.  Such allocation is done only when it
6053 seems to result in better code than would otherwise be produced.
6054
6055 This option is always enabled by default on certain machines, usually
6056 those which have no call-preserved registers to use instead.
6057
6058 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6059
6060 @item -fconserve-stack
6061 @opindex fconserve-stack
6062 Attempt to minimize stack usage.  The compiler will attempt to use less
6063 stack space, even if that makes the program slower.  This option
6064 implies setting the @option{large-stack-frame} parameter to 100
6065 and the @option{large-stack-frame-growth} parameter to 400.
6066
6067 @item -ftree-reassoc
6068 @opindex ftree-reassoc
6069 Perform reassociation on trees.  This flag is enabled by default
6070 at @option{-O} and higher.
6071
6072 @item -ftree-pre
6073 @opindex ftree-pre
6074 Perform partial redundancy elimination (PRE) on trees.  This flag is
6075 enabled by default at @option{-O2} and @option{-O3}.
6076
6077 @item -ftree-fre
6078 @opindex ftree-fre
6079 Perform full redundancy elimination (FRE) on trees.  The difference
6080 between FRE and PRE is that FRE only considers expressions
6081 that are computed on all paths leading to the redundant computation.
6082 This analysis is faster than PRE, though it exposes fewer redundancies.
6083 This flag is enabled by default at @option{-O} and higher.
6084
6085 @item -ftree-copy-prop
6086 @opindex ftree-copy-prop
6087 Perform copy propagation on trees.  This pass eliminates unnecessary
6088 copy operations.  This flag is enabled by default at @option{-O} and
6089 higher.
6090
6091 @item -fipa-pure-const
6092 @opindex fipa-pure-const
6093 Discover which functions are pure or constant.
6094 Enabled by default at @option{-O} and higher.
6095
6096 @item -fipa-reference
6097 @opindex fipa-reference
6098 Discover which static variables do not escape cannot escape the
6099 compilation unit.
6100 Enabled by default at @option{-O} and higher.
6101
6102 @item -fipa-struct-reorg
6103 @opindex fipa-struct-reorg
6104 Perform structure reorganization optimization, that change C-like structures 
6105 layout in order to better utilize spatial locality.  This transformation is 
6106 affective for programs containing arrays of structures.  Available in two 
6107 compilation modes: profile-based (enabled with @option{-fprofile-generate})
6108 or static (which uses built-in heuristics).  Require @option{-fipa-type-escape}
6109 to provide the safety of this transformation.  It works only in whole program
6110 mode, so it requires @option{-fwhole-program} and @option{-combine} to be
6111 enabled.  Structures considered @samp{cold} by this transformation are not
6112 affected (see @option{--param struct-reorg-cold-struct-ratio=@var{value}}).
6113
6114 With this flag, the program debug info reflects a new structure layout.
6115
6116 @item -fipa-pta
6117 @opindex fipa-pta
6118 Perform interprocedural pointer analysis.  This option is experimental
6119 and does not affect generated code.
6120
6121 @item -fipa-cp
6122 @opindex fipa-cp
6123 Perform interprocedural constant propagation.
6124 This optimization analyzes the program to determine when values passed
6125 to functions are constants and then optimizes accordingly.  
6126 This optimization can substantially increase performance
6127 if the application has constants passed to functions.
6128 This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
6129
6130 @item -fipa-cp-clone
6131 @opindex fipa-cp-clone
6132 Perform function cloning to make interprocedural constant propagation stronger.
6133 When enabled, interprocedural constant propagation will perform function cloning
6134 when externally visible function can be called with constant arguments.
6135 Because this optimization can create multiple copies of functions,
6136 it may significantly increase code size
6137 (see @option{--param ipcp-unit-growth=@var{value}}).
6138 This flag is enabled by default at @option{-O3}.
6139
6140 @item -fipa-matrix-reorg
6141 @opindex fipa-matrix-reorg
6142 Perform matrix flattening and transposing.
6143 Matrix flattening tries to replace a m-dimensional matrix 
6144 with its equivalent n-dimensional matrix, where n < m.
6145 This reduces the level of indirection needed for accessing the elements
6146 of the matrix. The second optimization is matrix transposing that
6147 attemps to change the order of the matrix's dimensions in order to 
6148 improve cache locality.
6149 Both optimizations need the @option{-fwhole-program} flag. 
6150 Transposing is enabled only if profiling information is available.
6151
6152
6153 @item -ftree-sink
6154 @opindex ftree-sink
6155 Perform forward store motion  on trees.  This flag is
6156 enabled by default at @option{-O} and higher.
6157
6158 @item -ftree-ccp
6159 @opindex ftree-ccp
6160 Perform sparse conditional constant propagation (CCP) on trees.  This
6161 pass only operates on local scalar variables and is enabled by default
6162 at @option{-O} and higher.
6163
6164 @item -ftree-switch-conversion
6165 Perform conversion of simple initializations in a switch to
6166 initializations from a scalar array.  This flag is enabled by default
6167 at @option{-O2} and higher.
6168
6169 @item -ftree-dce
6170 @opindex ftree-dce
6171 Perform dead code elimination (DCE) on trees.  This flag is enabled by
6172 default at @option{-O} and higher.
6173
6174 @item -ftree-builtin-call-dce
6175 @opindex ftree-builtin-call-dce
6176 Perform conditional dead code elimination (DCE) for calls to builtin functions 
6177 that may set @code{errno} but are otherwise side-effect free.  This flag is 
6178 enabled by default at @option{-O2} and higher if @option{-Os} is not also 
6179 specified.
6180
6181 @item -ftree-dominator-opts
6182 @opindex ftree-dominator-opts
6183 Perform a variety of simple scalar cleanups (constant/copy
6184 propagation, redundancy elimination, range propagation and expression
6185 simplification) based on a dominator tree traversal.  This also
6186 performs jump threading (to reduce jumps to jumps). This flag is
6187 enabled by default at @option{-O} and higher.
6188
6189 @item -ftree-dse
6190 @opindex ftree-dse
6191 Perform dead store elimination (DSE) on trees.  A dead store is a store into
6192 a memory location which will later be overwritten by another store without
6193 any intervening loads.  In this case the earlier store can be deleted.  This
6194 flag is enabled by default at @option{-O} and higher.
6195
6196 @item -ftree-ch
6197 @opindex ftree-ch
6198 Perform loop header copying on trees.  This is beneficial since it increases
6199 effectiveness of code motion optimizations.  It also saves one jump.  This flag
6200 is enabled by default at @option{-O} and higher.  It is not enabled
6201 for @option{-Os}, since it usually increases code size.
6202
6203 @item -ftree-loop-optimize
6204 @opindex ftree-loop-optimize
6205 Perform loop optimizations on trees.  This flag is enabled by default
6206 at @option{-O} and higher.
6207
6208 @item -ftree-loop-linear
6209 @opindex ftree-loop-linear
6210 Perform linear loop transformations on tree.  This flag can improve cache
6211 performance and allow further loop optimizations to take place.
6212
6213 @item -floop-interchange
6214 Perform loop interchange transformations on loops.  Interchanging two
6215 nested loops switches the inner and outer loops.  For example, given a
6216 loop like:
6217 @smallexample
6218 DO J = 1, M
6219   DO I = 1, N
6220     A(J, I) = A(J, I) * C
6221   ENDDO
6222 ENDDO
6223 @end smallexample
6224 loop interchange will transform the loop as if the user had written:
6225 @smallexample
6226 DO I = 1, N
6227   DO J = 1, M
6228     A(J, I) = A(J, I) * C
6229   ENDDO
6230 ENDDO
6231 @end smallexample
6232 which can be beneficial when @code{N} is larger than the caches,
6233 because in Fortran, the elements of an array are stored in memory
6234 contiguously by column, and the original loop iterates over rows,
6235 potentially creating at each access a cache miss.  This optimization
6236 applies to all the languages supported by GCC and is not limited to
6237 Fortran.
6238
6239 @item -floop-strip-mine
6240 Perform loop strip mining transformations on loops.  Strip mining
6241 splits a loop into two nested loops.  The outer loop has strides 
6242 equal to the strip size and the inner loop has strides of the 
6243 original loop within a strip.  For example, given a loop like:
6244 @smallexample
6245 DO I = 1, N
6246   A(I) = A(I) + C
6247 ENDDO
6248 @end smallexample
6249 loop strip mining will transform the loop as if the user had written:
6250 @smallexample
6251 DO II = 1, N, 4
6252   DO I = II, min (II + 3, N)
6253     A(I) = A(I) + C
6254   ENDDO
6255 ENDDO
6256 @end smallexample
6257 This optimization applies to all the languages supported by GCC and is
6258 not limited to Fortran.
6259
6260 @item -floop-block
6261 Perform loop blocking transformations on loops.  Blocking strip mines
6262 each loop in the loop nest such that the memory accesses of the
6263 element loops fit inside caches.  For example, given a loop like:
6264 @smallexample
6265 DO I = 1, N
6266   DO J = 1, M
6267     A(J, I) = B(I) + C(J)
6268   ENDDO
6269 ENDDO
6270 @end smallexample
6271 loop blocking will transform the loop as if the user had written:
6272 @smallexample
6273 DO II = 1, N, 64
6274   DO JJ = 1, M, 64
6275     DO I = II, min (II + 63, N)
6276       DO J = JJ, min (JJ + 63, M)
6277         A(J, I) = B(I) + C(J)
6278       ENDDO
6279     ENDDO
6280   ENDDO
6281 ENDDO
6282 @end smallexample
6283 which can be beneficial when @code{M} is larger than the caches,
6284 because the innermost loop will iterate over a smaller amount of data
6285 that can be kept in the caches.  This optimization applies to all the
6286 languages supported by GCC and is not limited to Fortran.
6287
6288 @item -fcheck-data-deps
6289 @opindex fcheck-data-deps
6290 Compare the results of several data dependence analyzers.  This option
6291 is used for debugging the data dependence analyzers.
6292
6293 @item -ftree-loop-distribution
6294 Perform loop distribution.  This flag can improve cache performance on
6295 big loop bodies and allow further loop optimizations, like
6296 parallelization or vectorization, to take place.  For example, the loop
6297 @smallexample
6298 DO I = 1, N
6299   A(I) = B(I) + C
6300   D(I) = E(I) * F
6301 ENDDO
6302 @end smallexample
6303 is transformed to
6304 @smallexample
6305 DO I = 1, N
6306    A(I) = B(I) + C
6307 ENDDO
6308 DO I = 1, N
6309    D(I) = E(I) * F
6310 ENDDO
6311 @end smallexample
6312
6313 @item -ftree-loop-im
6314 @opindex ftree-loop-im
6315 Perform loop invariant motion on trees.  This pass moves only invariants that
6316 would be hard to handle at RTL level (function calls, operations that expand to
6317 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
6318 operands of conditions that are invariant out of the loop, so that we can use
6319 just trivial invariantness analysis in loop unswitching.  The pass also includes
6320 store motion.
6321
6322 @item -ftree-loop-ivcanon
6323 @opindex ftree-loop-ivcanon
6324 Create a canonical counter for number of iterations in the loop for that
6325 determining number of iterations requires complicated analysis.  Later
6326 optimizations then may determine the number easily.  Useful especially
6327 in connection with unrolling.
6328
6329 @item -fivopts
6330 @opindex fivopts
6331 Perform induction variable optimizations (strength reduction, induction
6332 variable merging and induction variable elimination) on trees.
6333
6334 @item -ftree-parallelize-loops=n
6335 @opindex ftree-parallelize-loops
6336 Parallelize loops, i.e., split their iteration space to run in n threads.
6337 This is only possible for loops whose iterations are independent
6338 and can be arbitrarily reordered.  The optimization is only
6339 profitable on multiprocessor machines, for loops that are CPU-intensive,
6340 rather than constrained e.g.@: by memory bandwidth.  This option
6341 implies @option{-pthread}, and thus is only supported on targets
6342 that have support for @option{-pthread}.
6343
6344 @item -ftree-sra
6345 @opindex ftree-sra
6346 Perform scalar replacement of aggregates.  This pass replaces structure
6347 references with scalars to prevent committing structures to memory too
6348 early.  This flag is enabled by default at @option{-O} and higher.
6349
6350 @item -ftree-copyrename
6351 @opindex ftree-copyrename
6352 Perform copy renaming on trees.  This pass attempts to rename compiler
6353 temporaries to other variables at copy locations, usually resulting in
6354 variable names which more closely resemble the original variables.  This flag
6355 is enabled by default at @option{-O} and higher.
6356
6357 @item -ftree-ter
6358 @opindex ftree-ter
6359 Perform temporary expression replacement during the SSA->normal phase.  Single
6360 use/single def temporaries are replaced at their use location with their
6361 defining expression.  This results in non-GIMPLE code, but gives the expanders
6362 much more complex trees to work on resulting in better RTL generation.  This is
6363 enabled by default at @option{-O} and higher.
6364
6365 @item -ftree-vectorize
6366 @opindex ftree-vectorize
6367 Perform loop vectorization on trees. This flag is enabled by default at
6368 @option{-O3}.
6369
6370 @item -ftree-vect-loop-version
6371 @opindex ftree-vect-loop-version
6372 Perform loop versioning when doing loop vectorization on trees.  When a loop
6373 appears to be vectorizable except that data alignment or data dependence cannot
6374 be determined at compile time then vectorized and non-vectorized versions of
6375 the loop are generated along with runtime checks for alignment or dependence
6376 to control which version is executed.  This option is enabled by default
6377 except at level @option{-Os} where it is disabled.
6378
6379 @item -fvect-cost-model
6380 @opindex fvect-cost-model
6381 Enable cost model for vectorization.
6382
6383 @item -ftree-vrp
6384 @opindex ftree-vrp
6385 Perform Value Range Propagation on trees.  This is similar to the
6386 constant propagation pass, but instead of values, ranges of values are
6387 propagated.  This allows the optimizers to remove unnecessary range
6388 checks like array bound checks and null pointer checks.  This is
6389 enabled by default at @option{-O2} and higher.  Null pointer check
6390 elimination is only done if @option{-fdelete-null-pointer-checks} is
6391 enabled.
6392
6393 @item -ftracer
6394 @opindex ftracer
6395 Perform tail duplication to enlarge superblock size.  This transformation
6396 simplifies the control flow of the function allowing other optimizations to do
6397 better job.
6398
6399 @item -funroll-loops
6400 @opindex funroll-loops
6401 Unroll loops whose number of iterations can be determined at compile
6402 time or upon entry to the loop.  @option{-funroll-loops} implies
6403 @option{-frerun-cse-after-loop}.  This option makes code larger,
6404 and may or may not make it run faster.
6405
6406 @item -funroll-all-loops
6407 @opindex funroll-all-loops
6408 Unroll all loops, even if their number of iterations is uncertain when
6409 the loop is entered.  This usually makes programs run more slowly.
6410 @option{-funroll-all-loops} implies the same options as
6411 @option{-funroll-loops},
6412
6413 @item -fsplit-ivs-in-unroller
6414 @opindex fsplit-ivs-in-unroller
6415 Enables expressing of values of induction variables in later iterations
6416 of the unrolled loop using the value in the first iteration.  This breaks
6417 long dependency chains, thus improving efficiency of the scheduling passes.
6418
6419 Combination of @option{-fweb} and CSE is often sufficient to obtain the
6420 same effect.  However in cases the loop body is more complicated than
6421 a single basic block, this is not reliable.  It also does not work at all
6422 on some of the architectures due to restrictions in the CSE pass.
6423
6424 This optimization is enabled by default.
6425
6426 @item -fvariable-expansion-in-unroller
6427 @opindex fvariable-expansion-in-unroller
6428 With this option, the compiler will create multiple copies of some
6429 local variables when unrolling a loop which can result in superior code.
6430
6431 @item -fpredictive-commoning
6432 @opindex fpredictive-commoning
6433 Perform predictive commoning optimization, i.e., reusing computations
6434 (especially memory loads and stores) performed in previous
6435 iterations of loops.
6436
6437 This option is enabled at level @option{-O3}.
6438
6439 @item -fprefetch-loop-arrays
6440 @opindex fprefetch-loop-arrays
6441 If supported by the target machine, generate instructions to prefetch
6442 memory to improve the performance of loops that access large arrays.
6443
6444 This option may generate better or worse code; results are highly
6445 dependent on the structure of loops within the source code.
6446
6447 Disabled at level @option{-Os}.
6448
6449 @item -fno-peephole
6450 @itemx -fno-peephole2
6451 @opindex fno-peephole
6452 @opindex fno-peephole2
6453 Disable any machine-specific peephole optimizations.  The difference
6454 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
6455 are implemented in the compiler; some targets use one, some use the
6456 other, a few use both.
6457
6458 @option{-fpeephole} is enabled by default.
6459 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6460
6461 @item -fno-guess-branch-probability
6462 @opindex fno-guess-branch-probability
6463 Do not guess branch probabilities using heuristics.
6464
6465 GCC will use heuristics to guess branch probabilities if they are
6466 not provided by profiling feedback (@option{-fprofile-arcs}).  These
6467 heuristics are based on the control flow graph.  If some branch probabilities
6468 are specified by @samp{__builtin_expect}, then the heuristics will be
6469 used to guess branch probabilities for the rest of the control flow graph,
6470 taking the @samp{__builtin_expect} info into account.  The interactions
6471 between the heuristics and @samp{__builtin_expect} can be complex, and in
6472 some cases, it may be useful to disable the heuristics so that the effects
6473 of @samp{__builtin_expect} are easier to understand.
6474
6475 The default is @option{-fguess-branch-probability} at levels
6476 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6477
6478 @item -freorder-blocks
6479 @opindex freorder-blocks
6480 Reorder basic blocks in the compiled function in order to reduce number of
6481 taken branches and improve code locality.
6482
6483 Enabled at levels @option{-O2}, @option{-O3}.
6484
6485 @item -freorder-blocks-and-partition
6486 @opindex freorder-blocks-and-partition
6487 In addition to reordering basic blocks in the compiled function, in order
6488 to reduce number of taken branches, partitions hot and cold basic blocks
6489 into separate sections of the assembly and .o files, to improve
6490 paging and cache locality performance.
6491
6492 This optimization is automatically turned off in the presence of
6493 exception handling, for linkonce sections, for functions with a user-defined
6494 section attribute and on any architecture that does not support named
6495 sections.
6496
6497 @item -freorder-functions
6498 @opindex freorder-functions
6499 Reorder functions in the object file in order to
6500 improve code locality.  This is implemented by using special
6501 subsections @code{.text.hot} for most frequently executed functions and
6502 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
6503 the linker so object file format must support named sections and linker must
6504 place them in a reasonable way.
6505
6506 Also profile feedback must be available in to make this option effective.  See
6507 @option{-fprofile-arcs} for details.
6508
6509 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6510
6511 @item -fstrict-aliasing
6512 @opindex fstrict-aliasing
6513 Allows the compiler to assume the strictest aliasing rules applicable to
6514 the language being compiled.  For C (and C++), this activates
6515 optimizations based on the type of expressions.  In particular, an
6516 object of one type is assumed never to reside at the same address as an
6517 object of a different type, unless the types are almost the same.  For
6518 example, an @code{unsigned int} can alias an @code{int}, but not a
6519 @code{void*} or a @code{double}.  A character type may alias any other
6520 type.
6521
6522 @anchor{Type-punning}Pay special attention to code like this:
6523 @smallexample
6524 union a_union @{
6525   int i;
6526   double d;
6527 @};
6528
6529 int f() @{
6530   a_union t;
6531   t.d = 3.0;
6532   return t.i;
6533 @}
6534 @end smallexample
6535 The practice of reading from a different union member than the one most
6536 recently written to (called ``type-punning'') is common.  Even with
6537 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
6538 is accessed through the union type.  So, the code above will work as
6539 expected.  @xref{Structures unions enumerations and bit-fields
6540 implementation}.  However, this code might not:
6541 @smallexample
6542 int f() @{
6543   a_union t;
6544   int* ip;
6545   t.d = 3.0;
6546   ip = &t.i;
6547   return *ip;
6548 @}
6549 @end smallexample
6550
6551 Similarly, access by taking the address, casting the resulting pointer
6552 and dereferencing the result has undefined behavior, even if the cast
6553 uses a union type, e.g.:
6554 @smallexample
6555 int f() @{
6556   double d = 3.0;
6557   return ((union a_union *) &d)->i;
6558 @}
6559 @end smallexample
6560
6561 The @option{-fstrict-aliasing} option is enabled at levels
6562 @option{-O2}, @option{-O3}, @option{-Os}.
6563
6564 @item -fstrict-overflow
6565 @opindex fstrict-overflow
6566 Allow the compiler to assume strict signed overflow rules, depending
6567 on the language being compiled.  For C (and C++) this means that
6568 overflow when doing arithmetic with signed numbers is undefined, which
6569 means that the compiler may assume that it will not happen.  This
6570 permits various optimizations.  For example, the compiler will assume
6571 that an expression like @code{i + 10 > i} will always be true for
6572 signed @code{i}.  This assumption is only valid if signed overflow is
6573 undefined, as the expression is false if @code{i + 10} overflows when
6574 using twos complement arithmetic.  When this option is in effect any
6575 attempt to determine whether an operation on signed numbers will
6576 overflow must be written carefully to not actually involve overflow.
6577
6578 This option also allows the compiler to assume strict pointer
6579 semantics: given a pointer to an object, if adding an offset to that
6580 pointer does not produce a pointer to the same object, the addition is
6581 undefined.  This permits the compiler to conclude that @code{p + u >
6582 p} is always true for a pointer @code{p} and unsigned integer
6583 @code{u}.  This assumption is only valid because pointer wraparound is
6584 undefined, as the expression is false if @code{p + u} overflows using
6585 twos complement arithmetic.
6586
6587 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
6588 that integer signed overflow is fully defined: it wraps.  When
6589 @option{-fwrapv} is used, there is no difference between
6590 @option{-fstrict-overflow} and @option{-fno-strict-overflow} for
6591 integers.  With @option{-fwrapv} certain types of overflow are
6592 permitted.  For example, if the compiler gets an overflow when doing
6593 arithmetic on constants, the overflowed value can still be used with
6594 @option{-fwrapv}, but not otherwise.
6595
6596 The @option{-fstrict-overflow} option is enabled at levels
6597 @option{-O2}, @option{-O3}, @option{-Os}.
6598
6599 @item -falign-functions
6600 @itemx -falign-functions=@var{n}
6601 @opindex falign-functions
6602 Align the start of functions to the next power-of-two greater than
6603 @var{n}, skipping up to @var{n} bytes.  For instance,
6604 @option{-falign-functions=32} aligns functions to the next 32-byte
6605 boundary, but @option{-falign-functions=24} would align to the next
6606 32-byte boundary only if this can be done by skipping 23 bytes or less.
6607
6608 @option{-fno-align-functions} and @option{-falign-functions=1} are
6609 equivalent and mean that functions will not be aligned.
6610
6611 Some assemblers only support this flag when @var{n} is a power of two;
6612 in that case, it is rounded up.
6613
6614 If @var{n} is not specified or is zero, use a machine-dependent default.
6615
6616 Enabled at levels @option{-O2}, @option{-O3}.
6617
6618 @item -falign-labels
6619 @itemx -falign-labels=@var{n}
6620 @opindex falign-labels
6621 Align all branch targets to a power-of-two boundary, skipping up to
6622 @var{n} bytes like @option{-falign-functions}.  This option can easily
6623 make code slower, because it must insert dummy operations for when the
6624 branch target is reached in the usual flow of the code.
6625
6626 @option{-fno-align-labels} and @option{-falign-labels=1} are
6627 equivalent and mean that labels will not be aligned.
6628
6629 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
6630 are greater than this value, then their values are used instead.
6631
6632 If @var{n} is not specified or is zero, use a machine-dependent default
6633 which is very likely to be @samp{1}, meaning no alignment.
6634
6635 Enabled at levels @option{-O2}, @option{-O3}.
6636
6637 @item -falign-loops
6638 @itemx -falign-loops=@var{n}
6639 @opindex falign-loops
6640 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
6641 like @option{-falign-functions}.  The hope is that the loop will be
6642 executed many times, which will make up for any execution of the dummy
6643 operations.
6644
6645 @option{-fno-align-loops} and @option{-falign-loops=1} are
6646 equivalent and mean that loops will not be aligned.
6647
6648 If @var{n} is not specified or is zero, use a machine-dependent default.
6649
6650 Enabled at levels @option{-O2}, @option{-O3}.
6651
6652 @item -falign-jumps
6653 @itemx -falign-jumps=@var{n}
6654 @opindex falign-jumps
6655 Align branch targets to a power-of-two boundary, for branch targets
6656 where the targets can only be reached by jumping, skipping up to @var{n}
6657 bytes like @option{-falign-functions}.  In this case, no dummy operations
6658 need be executed.
6659
6660 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
6661 equivalent and mean that loops will not be aligned.
6662
6663 If @var{n} is not specified or is zero, use a machine-dependent default.
6664
6665 Enabled at levels @option{-O2}, @option{-O3}.
6666
6667 @item -funit-at-a-time
6668 @opindex funit-at-a-time
6669 This option is left for compatibility reasons. @option{-funit-at-a-time}
6670 has no effect, while @option{-fno-unit-at-a-time} implies
6671 @option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
6672
6673 Enabled by default.
6674
6675 @item -fno-toplevel-reorder
6676 @opindex fno-toplevel-reorder
6677 Do not reorder top-level functions, variables, and @code{asm}
6678 statements.  Output them in the same order that they appear in the
6679 input file.  When this option is used, unreferenced static variables
6680 will not be removed.  This option is intended to support existing code
6681 which relies on a particular ordering.  For new code, it is better to
6682 use attributes.
6683
6684 Enabled at level @option{-O0}.  When disabled explicitly, it also imply
6685 @option{-fno-section-anchors} that is otherwise enabled at @option{-O0} on some
6686 targets.
6687
6688 @item -fweb
6689 @opindex fweb
6690 Constructs webs as commonly used for register allocation purposes and assign
6691 each web individual pseudo register.  This allows the register allocation pass
6692 to operate on pseudos directly, but also strengthens several other optimization
6693 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
6694 however, make debugging impossible, since variables will no longer stay in a
6695 ``home register''.
6696
6697 Enabled by default with @option{-funroll-loops}.
6698
6699 @item -fwhole-program
6700 @opindex fwhole-program
6701 Assume that the current compilation unit represents whole program being
6702 compiled.  All public functions and variables with the exception of @code{main}
6703 and those merged by attribute @code{externally_visible} become static functions
6704 and in a affect gets more aggressively optimized by interprocedural optimizers.
6705 While this option is equivalent to proper use of @code{static} keyword for
6706 programs consisting of single file, in combination with option
6707 @option{--combine} this flag can be used to compile most of smaller scale C
6708 programs since the functions and variables become local for the whole combined
6709 compilation unit, not for the single source file itself.
6710
6711 This option is not supported for Fortran programs.
6712
6713 @item -fcprop-registers
6714 @opindex fcprop-registers
6715 After register allocation and post-register allocation instruction splitting,
6716 we perform a copy-propagation pass to try to reduce scheduling dependencies
6717 and occasionally eliminate the copy.
6718
6719 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6720
6721 @item -fprofile-correction
6722 @opindex fprofile-correction
6723 Profiles collected using an instrumented binary for multi-threaded programs may
6724 be inconsistent due to missed counter updates. When this option is specified,
6725 GCC will use heuristics to correct or smooth out such inconsistencies. By
6726 default, GCC will emit an error message when an inconsistent profile is detected.
6727
6728 @item -fprofile-dir=@var{path}
6729 @opindex fprofile-dir
6730
6731 Set the directory to search the profile data files in to @var{path}.
6732 This option affects only the profile data generated by
6733 @option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
6734 and used by @option{-fprofile-use} and @option{-fbranch-probabilities} 
6735 and its related options.
6736 By default, GCC will use the current directory as @var{path}
6737 thus the profile data file will appear in the same directory as the object file.
6738
6739 @item -fprofile-generate
6740 @itemx -fprofile-generate=@var{path}
6741 @opindex fprofile-generate
6742
6743 Enable options usually used for instrumenting application to produce
6744 profile useful for later recompilation with profile feedback based
6745 optimization.  You must use @option{-fprofile-generate} both when
6746 compiling and when linking your program.
6747
6748 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
6749
6750 If @var{path} is specified, GCC will look at the @var{path} to find
6751 the profile feedback data files. See @option{-fprofile-dir}.
6752
6753 @item -fprofile-use
6754 @itemx -fprofile-use=@var{path}
6755 @opindex fprofile-use
6756 Enable profile feedback directed optimizations, and optimizations
6757 generally profitable only with profile feedback available.
6758
6759 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
6760 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
6761
6762 By default, GCC emits an error message if the feedback profiles do not
6763 match the source code.  This error can be turned into a warning by using
6764 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
6765 code.
6766
6767 If @var{path} is specified, GCC will look at the @var{path} to find
6768 the profile feedback data files. See @option{-fprofile-dir}.
6769 @end table
6770
6771 The following options control compiler behavior regarding floating
6772 point arithmetic.  These options trade off between speed and
6773 correctness.  All must be specifically enabled.
6774
6775 @table @gcctabopt
6776 @item -ffloat-store
6777 @opindex ffloat-store
6778 Do not store floating point variables in registers, and inhibit other
6779 options that might change whether a floating point value is taken from a
6780 register or memory.
6781
6782 @cindex floating point precision
6783 This option prevents undesirable excess precision on machines such as
6784 the 68000 where the floating registers (of the 68881) keep more
6785 precision than a @code{double} is supposed to have.  Similarly for the
6786 x86 architecture.  For most programs, the excess precision does only
6787 good, but a few programs rely on the precise definition of IEEE floating
6788 point.  Use @option{-ffloat-store} for such programs, after modifying
6789 them to store all pertinent intermediate computations into variables.
6790
6791 @item -ffast-math
6792 @opindex ffast-math
6793 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
6794 @option{-ffinite-math-only}, @option{-fno-rounding-math},
6795 @option{-fno-signaling-nans} and @option{-fcx-limited-range}.
6796
6797 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
6798
6799 This option is not turned on by any @option{-O} option since
6800 it can result in incorrect output for programs which depend on
6801 an exact implementation of IEEE or ISO rules/specifications for
6802 math functions. It may, however, yield faster code for programs
6803 that do not require the guarantees of these specifications.
6804
6805 @item -fno-math-errno
6806 @opindex fno-math-errno
6807 Do not set ERRNO after calling math functions that are executed
6808 with a single instruction, e.g., sqrt.  A program that relies on
6809 IEEE exceptions for math error handling may want to use this flag
6810 for speed while maintaining IEEE arithmetic compatibility.
6811
6812 This option is not turned on by any @option{-O} option since
6813 it can result in incorrect output for programs which depend on
6814 an exact implementation of IEEE or ISO rules/specifications for
6815 math functions. It may, however, yield faster code for programs
6816 that do not require the guarantees of these specifications.
6817
6818 The default is @option{-fmath-errno}.
6819
6820 On Darwin systems, the math library never sets @code{errno}.  There is
6821 therefore no reason for the compiler to consider the possibility that
6822 it might, and @option{-fno-math-errno} is the default.
6823
6824 @item -funsafe-math-optimizations
6825 @opindex funsafe-math-optimizations
6826
6827 Allow optimizations for floating-point arithmetic that (a) assume
6828 that arguments and results are valid and (b) may violate IEEE or
6829 ANSI standards.  When used at link-time, it may include libraries
6830 or startup files that change the default FPU control word or other
6831 similar optimizations.
6832
6833 This option is not turned on by any @option{-O} option since
6834 it can result in incorrect output for programs which depend on
6835 an exact implementation of IEEE or ISO rules/specifications for
6836 math functions. It may, however, yield faster code for programs
6837 that do not require the guarantees of these specifications.
6838 Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
6839 @option{-fassociative-math} and @option{-freciprocal-math}.
6840
6841 The default is @option{-fno-unsafe-math-optimizations}.
6842
6843 @item -fassociative-math
6844 @opindex fassociative-math
6845
6846 Allow re-association of operands in series of floating-point operations.
6847 This violates the ISO C and C++ language standard by possibly changing
6848 computation result.  NOTE: re-ordering may change the sign of zero as
6849 well as ignore NaNs and inhibit or create underflow or overflow (and
6850 thus cannot be used on a code which relies on rounding behavior like
6851 @code{(x + 2**52) - 2**52)}.  May also reorder floating-point comparisons
6852 and thus may not be used when ordered comparisons are required.
6853 This option requires that both @option{-fno-signed-zeros} and
6854 @option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
6855 much sense with @option{-frounding-math}.
6856
6857 The default is @option{-fno-associative-math}.
6858
6859 @item -freciprocal-math
6860 @opindex freciprocal-math
6861
6862 Allow the reciprocal of a value to be used instead of dividing by
6863 the value if this enables optimizations.  For example @code{x / y}
6864 can be replaced with @code{x * (1/y)} which is useful if @code{(1/y)}
6865 is subject to common subexpression elimination.  Note that this loses
6866 precision and increases the number of flops operating on the value.
6867
6868 The default is @option{-fno-reciprocal-math}.
6869
6870 @item -ffinite-math-only
6871 @opindex ffinite-math-only
6872 Allow optimizations for floating-point arithmetic that assume
6873 that arguments and results are not NaNs or +-Infs.
6874
6875 This option is not turned on by any @option{-O} option since
6876 it can result in incorrect output for programs which depend on
6877 an exact implementation of IEEE or ISO rules/specifications for
6878 math functions. It may, however, yield faster code for programs
6879 that do not require the guarantees of these specifications.
6880
6881 The default is @option{-fno-finite-math-only}.
6882
6883 @item -fno-signed-zeros
6884 @opindex fno-signed-zeros
6885 Allow optimizations for floating point arithmetic that ignore the
6886 signedness of zero.  IEEE arithmetic specifies the behavior of
6887 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
6888 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
6889 This option implies that the sign of a zero result isn't significant.
6890
6891 The default is @option{-fsigned-zeros}.
6892
6893 @item -fno-trapping-math
6894 @opindex fno-trapping-math
6895 Compile code assuming that floating-point operations cannot generate
6896 user-visible traps.  These traps include division by zero, overflow,
6897 underflow, inexact result and invalid operation.  This option requires
6898 that @option{-fno-signaling-nans} be in effect.  Setting this option may
6899 allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
6900
6901 This option should never be turned on by any @option{-O} option since
6902 it can result in incorrect output for programs which depend on
6903 an exact implementation of IEEE or ISO rules/specifications for
6904 math functions.
6905
6906 The default is @option{-ftrapping-math}.
6907
6908 @item -frounding-math
6909 @opindex frounding-math
6910 Disable transformations and optimizations that assume default floating
6911 point rounding behavior.  This is round-to-zero for all floating point
6912 to integer conversions, and round-to-nearest for all other arithmetic
6913 truncations.  This option should be specified for programs that change
6914 the FP rounding mode dynamically, or that may be executed with a
6915 non-default rounding mode.  This option disables constant folding of
6916 floating point expressions at compile-time (which may be affected by
6917 rounding mode) and arithmetic transformations that are unsafe in the
6918 presence of sign-dependent rounding modes.
6919
6920 The default is @option{-fno-rounding-math}.
6921
6922 This option is experimental and does not currently guarantee to
6923 disable all GCC optimizations that are affected by rounding mode.
6924 Future versions of GCC may provide finer control of this setting
6925 using C99's @code{FENV_ACCESS} pragma.  This command line option
6926 will be used to specify the default state for @code{FENV_ACCESS}.
6927
6928 @item -frtl-abstract-sequences
6929 @opindex frtl-abstract-sequences
6930 It is a size optimization method. This option is to find identical
6931 sequences of code, which can be turned into pseudo-procedures  and
6932 then  replace  all  occurrences with  calls to  the  newly created
6933 subroutine. It is kind of an opposite of @option{-finline-functions}.
6934 This optimization runs at RTL level.
6935
6936 @item -fsignaling-nans
6937 @opindex fsignaling-nans
6938 Compile code assuming that IEEE signaling NaNs may generate user-visible
6939 traps during floating-point operations.  Setting this option disables
6940 optimizations that may change the number of exceptions visible with
6941 signaling NaNs.  This option implies @option{-ftrapping-math}.
6942
6943 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
6944 be defined.
6945
6946 The default is @option{-fno-signaling-nans}.
6947
6948 This option is experimental and does not currently guarantee to
6949 disable all GCC optimizations that affect signaling NaN behavior.
6950
6951 @item -fsingle-precision-constant
6952 @opindex fsingle-precision-constant
6953 Treat floating point constant as single precision constant instead of
6954 implicitly converting it to double precision constant.
6955
6956 @item -fcx-limited-range
6957 @opindex fcx-limited-range
6958 When enabled, this option states that a range reduction step is not
6959 needed when performing complex division.  Also, there is no checking
6960 whether the result of a complex multiplication or division is @code{NaN
6961 + I*NaN}, with an attempt to rescue the situation in that case.  The
6962 default is @option{-fno-cx-limited-range}, but is enabled by
6963 @option{-ffast-math}.
6964
6965 This option controls the default setting of the ISO C99
6966 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
6967 all languages.
6968
6969 @item -fcx-fortran-rules
6970 @opindex fcx-fortran-rules
6971 Complex multiplication and division follow Fortran rules.  Range
6972 reduction is done as part of complex division, but there is no checking
6973 whether the result of a complex multiplication or division is @code{NaN
6974 + I*NaN}, with an attempt to rescue the situation in that case.
6975
6976 The default is @option{-fno-cx-fortran-rules}.
6977
6978 @end table
6979
6980 The following options control optimizations that may improve
6981 performance, but are not enabled by any @option{-O} options.  This
6982 section includes experimental options that may produce broken code.
6983
6984 @table @gcctabopt
6985 @item -fbranch-probabilities
6986 @opindex fbranch-probabilities
6987 After running a program compiled with @option{-fprofile-arcs}
6988 (@pxref{Debugging Options,, Options for Debugging Your Program or
6989 @command{gcc}}), you can compile it a second time using
6990 @option{-fbranch-probabilities}, to improve optimizations based on
6991 the number of times each branch was taken.  When the program
6992 compiled with @option{-fprofile-arcs} exits it saves arc execution
6993 counts to a file called @file{@var{sourcename}.gcda} for each source
6994 file.  The information in this data file is very dependent on the
6995 structure of the generated code, so you must use the same source code
6996 and the same optimization options for both compilations.
6997
6998 With @option{-fbranch-probabilities}, GCC puts a
6999 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
7000 These can be used to improve optimization.  Currently, they are only
7001 used in one place: in @file{reorg.c}, instead of guessing which path a
7002 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
7003 exactly determine which path is taken more often.
7004
7005 @item -fprofile-values
7006 @opindex fprofile-values
7007 If combined with @option{-fprofile-arcs}, it adds code so that some
7008 data about values of expressions in the program is gathered.
7009
7010 With @option{-fbranch-probabilities}, it reads back the data gathered
7011 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
7012 notes to instructions for their later usage in optimizations.
7013
7014 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
7015
7016 @item -fvpt
7017 @opindex fvpt
7018 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
7019 a code to gather information about values of expressions.
7020
7021 With @option{-fbranch-probabilities}, it reads back the data gathered
7022 and actually performs the optimizations based on them.
7023 Currently the optimizations include specialization of division operation
7024 using the knowledge about the value of the denominator.
7025
7026 @item -frename-registers
7027 @opindex frename-registers
7028 Attempt to avoid false dependencies in scheduled code by making use
7029 of registers left over after register allocation.  This optimization
7030 will most benefit processors with lots of registers.  Depending on the
7031 debug information format adopted by the target, however, it can
7032 make debugging impossible, since variables will no longer stay in
7033 a ``home register''.
7034
7035 Enabled by default with @option{-funroll-loops}.
7036
7037 @item -ftracer
7038 @opindex ftracer
7039 Perform tail duplication to enlarge superblock size.  This transformation
7040 simplifies the control flow of the function allowing other optimizations to do
7041 better job.
7042
7043 Enabled with @option{-fprofile-use}.
7044
7045 @item -funroll-loops
7046 @opindex funroll-loops
7047 Unroll loops whose number of iterations can be determined at compile time or
7048 upon entry to the loop.  @option{-funroll-loops} implies
7049 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
7050 It also turns on complete loop peeling (i.e.@: complete removal of loops with
7051 small constant number of iterations).  This option makes code larger, and may
7052 or may not make it run faster.
7053
7054 Enabled with @option{-fprofile-use}.
7055
7056 @item -funroll-all-loops
7057 @opindex funroll-all-loops
7058 Unroll all loops, even if their number of iterations is uncertain when
7059 the loop is entered.  This usually makes programs run more slowly.
7060 @option{-funroll-all-loops} implies the same options as
7061 @option{-funroll-loops}.
7062
7063 @item -fpeel-loops
7064 @opindex fpeel-loops
7065 Peels the loops for that there is enough information that they do not
7066 roll much (from profile feedback).  It also turns on complete loop peeling
7067 (i.e.@: complete removal of loops with small constant number of iterations).
7068
7069 Enabled with @option{-fprofile-use}.
7070
7071 @item -fmove-loop-invariants
7072 @opindex fmove-loop-invariants
7073 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
7074 at level @option{-O1}
7075
7076 @item -funswitch-loops
7077 @opindex funswitch-loops
7078 Move branches with loop invariant conditions out of the loop, with duplicates
7079 of the loop on both branches (modified according to result of the condition).
7080
7081 @item -ffunction-sections
7082 @itemx -fdata-sections
7083 @opindex ffunction-sections
7084 @opindex fdata-sections
7085 Place each function or data item into its own section in the output
7086 file if the target supports arbitrary sections.  The name of the
7087 function or the name of the data item determines the section's name
7088 in the output file.
7089
7090 Use these options on systems where the linker can perform optimizations
7091 to improve locality of reference in the instruction space.  Most systems
7092 using the ELF object format and SPARC processors running Solaris 2 have
7093 linkers with such optimizations.  AIX may have these optimizations in
7094 the future.
7095
7096 Only use these options when there are significant benefits from doing
7097 so.  When you specify these options, the assembler and linker will
7098 create larger object and executable files and will also be slower.
7099 You will not be able to use @code{gprof} on all systems if you
7100 specify this option and you may have problems with debugging if
7101 you specify both this option and @option{-g}.
7102
7103 @item -fbranch-target-load-optimize
7104 @opindex fbranch-target-load-optimize
7105 Perform branch target register load optimization before prologue / epilogue
7106 threading.
7107 The use of target registers can typically be exposed only during reload,
7108 thus hoisting loads out of loops and doing inter-block scheduling needs
7109 a separate optimization pass.
7110
7111 @item -fbranch-target-load-optimize2
7112 @opindex fbranch-target-load-optimize2
7113 Perform branch target register load optimization after prologue / epilogue
7114 threading.
7115
7116 @item -fbtr-bb-exclusive
7117 @opindex fbtr-bb-exclusive
7118 When performing branch target register load optimization, don't reuse
7119 branch target registers in within any basic block.
7120
7121 @item -fstack-protector
7122 @opindex fstack-protector
7123 Emit extra code to check for buffer overflows, such as stack smashing
7124 attacks.  This is done by adding a guard variable to functions with
7125 vulnerable objects.  This includes functions that call alloca, and
7126 functions with buffers larger than 8 bytes.  The guards are initialized
7127 when a function is entered and then checked when the function exits.
7128 If a guard check fails, an error message is printed and the program exits.
7129
7130 @item -fstack-protector-all
7131 @opindex fstack-protector-all
7132 Like @option{-fstack-protector} except that all functions are protected.
7133
7134 @item -fsection-anchors
7135 @opindex fsection-anchors
7136 Try to reduce the number of symbolic address calculations by using
7137 shared ``anchor'' symbols to address nearby objects.  This transformation
7138 can help to reduce the number of GOT entries and GOT accesses on some
7139 targets.
7140
7141 For example, the implementation of the following function @code{foo}:
7142
7143 @smallexample
7144 static int a, b, c;
7145 int foo (void) @{ return a + b + c; @}
7146 @end smallexample
7147
7148 would usually calculate the addresses of all three variables, but if you
7149 compile it with @option{-fsection-anchors}, it will access the variables
7150 from a common anchor point instead.  The effect is similar to the
7151 following pseudocode (which isn't valid C):
7152
7153 @smallexample
7154 int foo (void)
7155 @{
7156   register int *xr = &x;
7157   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7158 @}
7159 @end smallexample
7160
7161 Not all targets support this option.
7162
7163 @item --param @var{name}=@var{value}
7164 @opindex param
7165 In some places, GCC uses various constants to control the amount of
7166 optimization that is done.  For example, GCC will not inline functions
7167 that contain more that a certain number of instructions.  You can
7168 control some of these constants on the command-line using the
7169 @option{--param} option.
7170
7171 The names of specific parameters, and the meaning of the values, are
7172 tied to the internals of the compiler, and are subject to change
7173 without notice in future releases.
7174
7175 In each case, the @var{value} is an integer.  The allowable choices for
7176 @var{name} are given in the following table:
7177
7178 @table @gcctabopt
7179 @item sra-max-structure-size
7180 The maximum structure size, in bytes, at which the scalar replacement
7181 of aggregates (SRA) optimization will perform block copies.  The
7182 default value, 0, implies that GCC will select the most appropriate
7183 size itself.
7184
7185 @item sra-field-structure-ratio
7186 The threshold ratio (as a percentage) between instantiated fields and
7187 the complete structure size.  We say that if the ratio of the number
7188 of bytes in instantiated fields to the number of bytes in the complete
7189 structure exceeds this parameter, then block copies are not used.  The
7190 default is 75.
7191
7192 @item struct-reorg-cold-struct-ratio
7193 The threshold ratio (as a percentage) between a structure frequency
7194 and the frequency of the hottest structure in the program.  This parameter
7195 is used by struct-reorg optimization enabled by @option{-fipa-struct-reorg}.
7196 We say that if the ratio of a structure frequency, calculated by profiling, 
7197 to the hottest structure frequency in the program is less than this 
7198 parameter, then structure reorganization is not applied to this structure.
7199 The default is 10.
7200
7201 @item predictable-branch-cost-outcome
7202 When branch is predicted to be taken with probability lower than this threshold
7203 (in percent), then it is considered well predictable. The default is 10.
7204
7205 @item max-crossjump-edges
7206 The maximum number of incoming edges to consider for crossjumping.
7207 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
7208 the number of edges incoming to each block.  Increasing values mean
7209 more aggressive optimization, making the compile time increase with
7210 probably small improvement in executable size.
7211
7212 @item min-crossjump-insns
7213 The minimum number of instructions which must be matched at the end
7214 of two blocks before crossjumping will be performed on them.  This
7215 value is ignored in the case where all instructions in the block being
7216 crossjumped from are matched.  The default value is 5.
7217
7218 @item max-grow-copy-bb-insns
7219 The maximum code size expansion factor when copying basic blocks
7220 instead of jumping.  The expansion is relative to a jump instruction.
7221 The default value is 8.
7222
7223 @item max-goto-duplication-insns
7224 The maximum number of instructions to duplicate to a block that jumps
7225 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
7226 passes, GCC factors computed gotos early in the compilation process,
7227 and unfactors them as late as possible.  Only computed jumps at the
7228 end of a basic blocks with no more than max-goto-duplication-insns are
7229 unfactored.  The default value is 8.
7230
7231 @item max-delay-slot-insn-search
7232 The maximum number of instructions to consider when looking for an
7233 instruction to fill a delay slot.  If more than this arbitrary number of
7234 instructions is searched, the time savings from filling the delay slot
7235 will be minimal so stop searching.  Increasing values mean more
7236 aggressive optimization, making the compile time increase with probably
7237 small improvement in executable run time.
7238
7239 @item max-delay-slot-live-search
7240 When trying to fill delay slots, the maximum number of instructions to
7241 consider when searching for a block with valid live register
7242 information.  Increasing this arbitrarily chosen value means more
7243 aggressive optimization, increasing the compile time.  This parameter
7244 should be removed when the delay slot code is rewritten to maintain the
7245 control-flow graph.
7246
7247 @item max-gcse-memory
7248 The approximate maximum amount of memory that will be allocated in
7249 order to perform the global common subexpression elimination
7250 optimization.  If more memory than specified is required, the
7251 optimization will not be done.
7252
7253 @item max-gcse-passes
7254 The maximum number of passes of GCSE to run.  The default is 1.
7255
7256 @item max-pending-list-length
7257 The maximum number of pending dependencies scheduling will allow
7258 before flushing the current state and starting over.  Large functions
7259 with few branches or calls can create excessively large lists which
7260 needlessly consume memory and resources.
7261
7262 @item max-inline-insns-single
7263 Several parameters control the tree inliner used in gcc.
7264 This number sets the maximum number of instructions (counted in GCC's
7265 internal representation) in a single function that the tree inliner
7266 will consider for inlining.  This only affects functions declared
7267 inline and methods implemented in a class declaration (C++).
7268 The default value is 450.
7269
7270 @item max-inline-insns-auto
7271 When you use @option{-finline-functions} (included in @option{-O3}),
7272 a lot of functions that would otherwise not be considered for inlining
7273 by the compiler will be investigated.  To those functions, a different
7274 (more restrictive) limit compared to functions declared inline can
7275 be applied.
7276 The default value is 90.
7277
7278 @item large-function-insns
7279 The limit specifying really large functions.  For functions larger than this
7280 limit after inlining, inlining is constrained by
7281 @option{--param large-function-growth}.  This parameter is useful primarily
7282 to avoid extreme compilation time caused by non-linear algorithms used by the
7283 backend.
7284 The default value is 2700.
7285
7286 @item large-function-growth
7287 Specifies maximal growth of large function caused by inlining in percents.
7288 The default value is 100 which limits large function growth to 2.0 times
7289 the original size.
7290
7291 @item large-unit-insns
7292 The limit specifying large translation unit.  Growth caused by inlining of
7293 units larger than this limit is limited by @option{--param inline-unit-growth}.
7294 For small units this might be too tight (consider unit consisting of function A
7295 that is inline and B that just calls A three time.  If B is small relative to
7296 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
7297 large units consisting of small inlineable functions however the overall unit
7298 growth limit is needed to avoid exponential explosion of code size.  Thus for
7299 smaller units, the size is increased to @option{--param large-unit-insns}
7300 before applying @option{--param inline-unit-growth}.  The default is 10000
7301
7302 @item inline-unit-growth
7303 Specifies maximal overall growth of the compilation unit caused by inlining.
7304 The default value is 30 which limits unit growth to 1.3 times the original
7305 size.
7306
7307 @item ipcp-unit-growth
7308 Specifies maximal overall growth of the compilation unit caused by
7309 interprocedural constant propagation.  The default value is 10 which limits
7310 unit growth to 1.1 times the original size.
7311
7312 @item large-stack-frame
7313 The limit specifying large stack frames.  While inlining the algorithm is trying
7314 to not grow past this limit too much.  Default value is 256 bytes.
7315
7316 @item large-stack-frame-growth
7317 Specifies maximal growth of large stack frames caused by inlining in percents.
7318 The default value is 1000 which limits large stack frame growth to 11 times
7319 the original size.
7320
7321 @item max-inline-insns-recursive
7322 @itemx max-inline-insns-recursive-auto
7323 Specifies maximum number of instructions out-of-line copy of self recursive inline
7324 function can grow into by performing recursive inlining.
7325
7326 For functions declared inline @option{--param max-inline-insns-recursive} is
7327 taken into account.  For function not declared inline, recursive inlining
7328 happens only when @option{-finline-functions} (included in @option{-O3}) is
7329 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
7330 default value is 450.
7331
7332 @item max-inline-recursive-depth
7333 @itemx max-inline-recursive-depth-auto
7334 Specifies maximum recursion depth used by the recursive inlining.
7335
7336 For functions declared inline @option{--param max-inline-recursive-depth} is
7337 taken into account.  For function not declared inline, recursive inlining
7338 happens only when @option{-finline-functions} (included in @option{-O3}) is
7339 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
7340 default value is 8.
7341
7342 @item min-inline-recursive-probability
7343 Recursive inlining is profitable only for function having deep recursion
7344 in average and can hurt for function having little recursion depth by
7345 increasing the prologue size or complexity of function body to other
7346 optimizers.
7347
7348 When profile feedback is available (see @option{-fprofile-generate}) the actual
7349 recursion depth can be guessed from probability that function will recurse via
7350 given call expression.  This parameter limits inlining only to call expression
7351 whose probability exceeds given threshold (in percents).  The default value is
7352 10.
7353
7354 @item inline-call-cost
7355 Specify cost of call instruction relative to simple arithmetics operations
7356 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
7357 functions and at the same time increases size of leaf function that is believed to
7358 reduce function size by being inlined.  In effect it increases amount of
7359 inlining for code having large abstraction penalty (many functions that just
7360 pass the arguments to other functions) and decrease inlining for code with low
7361 abstraction penalty.  The default value is 12.
7362
7363 @item min-vect-loop-bound
7364 The minimum number of iterations under which a loop will not get vectorized
7365 when @option{-ftree-vectorize} is used.  The number of iterations after
7366 vectorization needs to be greater than the value specified by this option
7367 to allow vectorization.  The default value is 0.
7368
7369 @item max-unrolled-insns
7370 The maximum number of instructions that a loop should have if that loop
7371 is unrolled, and if the loop is unrolled, it determines how many times
7372 the loop code is unrolled.
7373
7374 @item max-average-unrolled-insns
7375 The maximum number of instructions biased by probabilities of their execution
7376 that a loop should have if that loop is unrolled, and if the loop is unrolled,
7377 it determines how many times the loop code is unrolled.
7378
7379 @item max-unroll-times
7380 The maximum number of unrollings of a single loop.
7381
7382 @item max-peeled-insns
7383 The maximum number of instructions that a loop should have if that loop
7384 is peeled, and if the loop is peeled, it determines how many times
7385 the loop code is peeled.
7386
7387 @item max-peel-times
7388 The maximum number of peelings of a single loop.
7389
7390 @item max-completely-peeled-insns
7391 The maximum number of insns of a completely peeled loop.
7392
7393 @item max-completely-peel-times
7394 The maximum number of iterations of a loop to be suitable for complete peeling.
7395
7396 @item max-unswitch-insns
7397 The maximum number of insns of an unswitched loop.
7398
7399 @item max-unswitch-level
7400 The maximum number of branches unswitched in a single loop.
7401
7402 @item lim-expensive
7403 The minimum cost of an expensive expression in the loop invariant motion.
7404
7405 @item iv-consider-all-candidates-bound
7406 Bound on number of candidates for induction variables below that
7407 all candidates are considered for each use in induction variable
7408 optimizations.  Only the most relevant candidates are considered
7409 if there are more candidates, to avoid quadratic time complexity.
7410
7411 @item iv-max-considered-uses
7412 The induction variable optimizations give up on loops that contain more
7413 induction variable uses.
7414
7415 @item iv-always-prune-cand-set-bound
7416 If number of candidates in the set is smaller than this value,
7417 we always try to remove unnecessary ivs from the set during its
7418 optimization when a new iv is added to the set.
7419
7420 @item scev-max-expr-size
7421 Bound on size of expressions used in the scalar evolutions analyzer.
7422 Large expressions slow the analyzer.
7423
7424 @item omega-max-vars
7425 The maximum number of variables in an Omega constraint system.
7426 The default value is 128.
7427
7428 @item omega-max-geqs
7429 The maximum number of inequalities in an Omega constraint system.
7430 The default value is 256.
7431
7432 @item omega-max-eqs
7433 The maximum number of equalities in an Omega constraint system.
7434 The default value is 128.
7435
7436 @item omega-max-wild-cards
7437 The maximum number of wildcard variables that the Omega solver will
7438 be able to insert.  The default value is 18.
7439
7440 @item omega-hash-table-size
7441 The size of the hash table in the Omega solver.  The default value is
7442 550.
7443
7444 @item omega-max-keys
7445 The maximal number of keys used by the Omega solver.  The default
7446 value is 500.
7447
7448 @item omega-eliminate-redundant-constraints
7449 When set to 1, use expensive methods to eliminate all redundant
7450 constraints.  The default value is 0.
7451
7452 @item vect-max-version-for-alignment-checks
7453 The maximum number of runtime checks that can be performed when
7454 doing loop versioning for alignment in the vectorizer.  See option
7455 ftree-vect-loop-version for more information.
7456
7457 @item vect-max-version-for-alias-checks
7458 The maximum number of runtime checks that can be performed when
7459 doing loop versioning for alias in the vectorizer.  See option
7460 ftree-vect-loop-version for more information.
7461
7462 @item max-iterations-to-track
7463
7464 The maximum number of iterations of a loop the brute force algorithm
7465 for analysis of # of iterations of the loop tries to evaluate.
7466
7467 @item hot-bb-count-fraction
7468 Select fraction of the maximal count of repetitions of basic block in program
7469 given basic block needs to have to be considered hot.
7470
7471 @item hot-bb-frequency-fraction
7472 Select fraction of the maximal frequency of executions of basic block in
7473 function given basic block needs to have to be considered hot
7474
7475 @item max-predicted-iterations
7476 The maximum number of loop iterations we predict statically.  This is useful
7477 in cases where function contain single loop with known bound and other loop
7478 with unknown.  We predict the known number of iterations correctly, while
7479 the unknown number of iterations average to roughly 10.  This means that the
7480 loop without bounds would appear artificially cold relative to the other one.
7481
7482 @item align-threshold
7483
7484 Select fraction of the maximal frequency of executions of basic block in
7485 function given basic block will get aligned.
7486
7487 @item align-loop-iterations
7488
7489 A loop expected to iterate at lest the selected number of iterations will get
7490 aligned.
7491
7492 @item tracer-dynamic-coverage
7493 @itemx tracer-dynamic-coverage-feedback
7494
7495 This value is used to limit superblock formation once the given percentage of
7496 executed instructions is covered.  This limits unnecessary code size
7497 expansion.
7498
7499 The @option{tracer-dynamic-coverage-feedback} is used only when profile
7500 feedback is available.  The real profiles (as opposed to statically estimated
7501 ones) are much less balanced allowing the threshold to be larger value.
7502
7503 @item tracer-max-code-growth
7504 Stop tail duplication once code growth has reached given percentage.  This is
7505 rather hokey argument, as most of the duplicates will be eliminated later in
7506 cross jumping, so it may be set to much higher values than is the desired code
7507 growth.
7508
7509 @item tracer-min-branch-ratio
7510
7511 Stop reverse growth when the reverse probability of best edge is less than this
7512 threshold (in percent).
7513
7514 @item tracer-min-branch-ratio
7515 @itemx tracer-min-branch-ratio-feedback
7516
7517 Stop forward growth if the best edge do have probability lower than this
7518 threshold.
7519
7520 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
7521 compilation for profile feedback and one for compilation without.  The value
7522 for compilation with profile feedback needs to be more conservative (higher) in
7523 order to make tracer effective.
7524
7525 @item max-cse-path-length
7526
7527 Maximum number of basic blocks on path that cse considers.  The default is 10.
7528
7529 @item max-cse-insns
7530 The maximum instructions CSE process before flushing. The default is 1000.
7531
7532 @item max-aliased-vops
7533
7534 Maximum number of virtual operands per function allowed to represent
7535 aliases before triggering the alias partitioning heuristic.  Alias
7536 partitioning reduces compile times and memory consumption needed for
7537 aliasing at the expense of precision loss in alias information.  The
7538 default value for this parameter is 100 for -O1, 500 for -O2 and 1000
7539 for -O3.
7540
7541 Notice that if a function contains more memory statements than the
7542 value of this parameter, it is not really possible to achieve this
7543 reduction.  In this case, the compiler will use the number of memory
7544 statements as the value for @option{max-aliased-vops}.
7545
7546 @item avg-aliased-vops
7547
7548 Average number of virtual operands per statement allowed to represent
7549 aliases before triggering the alias partitioning heuristic.  This
7550 works in conjunction with @option{max-aliased-vops}.  If a function
7551 contains more than @option{max-aliased-vops} virtual operators, then
7552 memory symbols will be grouped into memory partitions until either the
7553 total number of virtual operators is below @option{max-aliased-vops}
7554 or the average number of virtual operators per memory statement is
7555 below @option{avg-aliased-vops}.  The default value for this parameter
7556 is 1 for -O1 and -O2, and 3 for -O3.
7557
7558 @item ggc-min-expand
7559
7560 GCC uses a garbage collector to manage its own memory allocation.  This
7561 parameter specifies the minimum percentage by which the garbage
7562 collector's heap should be allowed to expand between collections.
7563 Tuning this may improve compilation speed; it has no effect on code
7564 generation.
7565
7566 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
7567 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
7568 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
7569 GCC is not able to calculate RAM on a particular platform, the lower
7570 bound of 30% is used.  Setting this parameter and
7571 @option{ggc-min-heapsize} to zero causes a full collection to occur at
7572 every opportunity.  This is extremely slow, but can be useful for
7573 debugging.
7574
7575 @item ggc-min-heapsize
7576
7577 Minimum size of the garbage collector's heap before it begins bothering
7578 to collect garbage.  The first collection occurs after the heap expands
7579 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
7580 tuning this may improve compilation speed, and has no effect on code
7581 generation.
7582
7583 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
7584 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
7585 with a lower bound of 4096 (four megabytes) and an upper bound of
7586 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
7587 particular platform, the lower bound is used.  Setting this parameter
7588 very large effectively disables garbage collection.  Setting this
7589 parameter and @option{ggc-min-expand} to zero causes a full collection
7590 to occur at every opportunity.
7591
7592 @item max-reload-search-insns
7593 The maximum number of instruction reload should look backward for equivalent
7594 register.  Increasing values mean more aggressive optimization, making the
7595 compile time increase with probably slightly better performance.  The default
7596 value is 100.
7597
7598 @item max-cselib-memory-locations
7599 The maximum number of memory locations cselib should take into account.
7600 Increasing values mean more aggressive optimization, making the compile time
7601 increase with probably slightly better performance.  The default value is 500.
7602
7603 @item reorder-blocks-duplicate
7604 @itemx reorder-blocks-duplicate-feedback
7605
7606 Used by basic block reordering pass to decide whether to use unconditional
7607 branch or duplicate the code on its destination.  Code is duplicated when its
7608 estimated size is smaller than this value multiplied by the estimated size of
7609 unconditional jump in the hot spots of the program.
7610
7611 The @option{reorder-block-duplicate-feedback} is used only when profile
7612 feedback is available and may be set to higher values than
7613 @option{reorder-block-duplicate} since information about the hot spots is more
7614 accurate.
7615
7616 @item max-sched-ready-insns
7617 The maximum number of instructions ready to be issued the scheduler should
7618 consider at any given time during the first scheduling pass.  Increasing
7619 values mean more thorough searches, making the compilation time increase
7620 with probably little benefit.  The default value is 100.
7621
7622 @item max-sched-region-blocks
7623 The maximum number of blocks in a region to be considered for
7624 interblock scheduling.  The default value is 10.
7625
7626 @item max-pipeline-region-blocks
7627 The maximum number of blocks in a region to be considered for
7628 pipelining in the selective scheduler.  The default value is 15.
7629
7630 @item max-sched-region-insns
7631 The maximum number of insns in a region to be considered for
7632 interblock scheduling.  The default value is 100.
7633
7634 @item max-pipeline-region-insns
7635 The maximum number of insns in a region to be considered for
7636 pipelining in the selective scheduler.  The default value is 200.
7637
7638 @item min-spec-prob
7639 The minimum probability (in percents) of reaching a source block
7640 for interblock speculative scheduling.  The default value is 40.
7641
7642 @item max-sched-extend-regions-iters
7643 The maximum number of iterations through CFG to extend regions.
7644 0 - disable region extension,
7645 N - do at most N iterations.
7646 The default value is 0.
7647
7648 @item max-sched-insn-conflict-delay
7649 The maximum conflict delay for an insn to be considered for speculative motion.
7650 The default value is 3.
7651
7652 @item sched-spec-prob-cutoff
7653 The minimal probability of speculation success (in percents), so that
7654 speculative insn will be scheduled.
7655 The default value is 40.
7656
7657 @item sched-mem-true-dep-cost
7658 Minimal distance (in CPU cycles) between store and load targeting same
7659 memory locations.  The default value is 1.
7660
7661 @item selsched-max-lookahead
7662 The maximum size of the lookahead window of selective scheduling.  It is a
7663 depth of search for available instructions.
7664 The default value is 50.
7665
7666 @item selsched-max-sched-times
7667 The maximum number of times that an instruction will be scheduled during 
7668 selective scheduling.  This is the limit on the number of iterations 
7669 through which the instruction may be pipelined.  The default value is 2.
7670
7671 @item selsched-max-insns-to-rename
7672 The maximum number of best instructions in the ready list that are considered
7673 for renaming in the selective scheduler.  The default value is 2.
7674
7675 @item max-last-value-rtl
7676 The maximum size measured as number of RTLs that can be recorded in an expression
7677 in combiner for a pseudo register as last known value of that register.  The default
7678 is 10000.
7679
7680 @item integer-share-limit
7681 Small integer constants can use a shared data structure, reducing the
7682 compiler's memory usage and increasing its speed.  This sets the maximum
7683 value of a shared integer constant.  The default value is 256.
7684
7685 @item min-virtual-mappings
7686 Specifies the minimum number of virtual mappings in the incremental
7687 SSA updater that should be registered to trigger the virtual mappings
7688 heuristic defined by virtual-mappings-ratio.  The default value is
7689 100.
7690
7691 @item virtual-mappings-ratio
7692 If the number of virtual mappings is virtual-mappings-ratio bigger
7693 than the number of virtual symbols to be updated, then the incremental
7694 SSA updater switches to a full update for those symbols.  The default
7695 ratio is 3.
7696
7697 @item ssp-buffer-size
7698 The minimum size of buffers (i.e.@: arrays) that will receive stack smashing
7699 protection when @option{-fstack-protection} is used.
7700
7701 @item max-jump-thread-duplication-stmts
7702 Maximum number of statements allowed in a block that needs to be
7703 duplicated when threading jumps.
7704
7705 @item max-fields-for-field-sensitive
7706 Maximum number of fields in a structure we will treat in
7707 a field sensitive manner during pointer analysis.  The default is zero
7708 for -O0, and -O1 and 100 for -Os, -O2, and -O3.
7709
7710 @item prefetch-latency
7711 Estimate on average number of instructions that are executed before
7712 prefetch finishes.  The distance we prefetch ahead is proportional
7713 to this constant.  Increasing this number may also lead to less
7714 streams being prefetched (see @option{simultaneous-prefetches}).
7715
7716 @item simultaneous-prefetches
7717 Maximum number of prefetches that can run at the same time.
7718
7719 @item l1-cache-line-size
7720 The size of cache line in L1 cache, in bytes.
7721
7722 @item l1-cache-size
7723 The size of L1 cache, in kilobytes.
7724
7725 @item l2-cache-size
7726 The size of L2 cache, in kilobytes.
7727
7728 @item use-canonical-types
7729 Whether the compiler should use the ``canonical'' type system.  By
7730 default, this should always be 1, which uses a more efficient internal
7731 mechanism for comparing types in C++ and Objective-C++.  However, if
7732 bugs in the canonical type system are causing compilation failures,
7733 set this value to 0 to disable canonical types.
7734
7735 @item switch-conversion-max-branch-ratio
7736 Switch initialization conversion will refuse to create arrays that are
7737 bigger than @option{switch-conversion-max-branch-ratio} times the number of
7738 branches in the switch.
7739
7740 @item max-partial-antic-length
7741 Maximum length of the partial antic set computed during the tree
7742 partial redundancy elimination optimization (@option{-ftree-pre}) when
7743 optimizing at @option{-O3} and above.  For some sorts of source code
7744 the enhanced partial redundancy elimination optimization can run away,
7745 consuming all of the memory available on the host machine.  This
7746 parameter sets a limit on the length of the sets that are computed,
7747 which prevents the runaway behavior.  Setting a value of 0 for
7748 this parameter will allow an unlimited set length.
7749
7750 @item sccvn-max-scc-size
7751 Maximum size of a strongly connected component (SCC) during SCCVN
7752 processing.  If this limit is hit, SCCVN processing for the whole
7753 function will not be done and optimizations depending on it will
7754 be disabled.  The default maximum SCC size is 10000.
7755
7756 @item ira-max-loops-num
7757 IRA uses a regional register allocation by default.  If a function
7758 contains loops more than number given by the parameter, only at most
7759 given number of the most frequently executed loops will form regions
7760 for the regional register allocation.  The default value of the
7761 parameter is 100.
7762
7763 @item ira-max-conflict-table-size
7764 Although IRA uses a sophisticated algorithm of compression conflict
7765 table, the table can be still big for huge functions.  If the conflict
7766 table for a function could be more than size in MB given by the
7767 parameter, the conflict table is not built and faster, simpler, and
7768 lower quality register allocation algorithm will be used.  The
7769 algorithm do not use pseudo-register conflicts.  The default value of
7770 the parameter is 2000.
7771
7772 @item loop-invariant-max-bbs-in-loop
7773 Loop invariant motion can be very expensive, both in compile time and
7774 in amount of needed compile time memory, with very large loops.  Loops
7775 with more basic blocks than this parameter won't have loop invariant
7776 motion optimization performed on them.  The default value of the
7777 parameter is 1000 for -O1 and 10000 for -O2 and above.
7778
7779 @end table
7780 @end table
7781
7782 @node Preprocessor Options
7783 @section Options Controlling the Preprocessor
7784 @cindex preprocessor options
7785 @cindex options, preprocessor
7786
7787 These options control the C preprocessor, which is run on each C source
7788 file before actual compilation.
7789
7790 If you use the @option{-E} option, nothing is done except preprocessing.
7791 Some of these options make sense only together with @option{-E} because
7792 they cause the preprocessor output to be unsuitable for actual
7793 compilation.
7794
7795 @table @gcctabopt
7796 @opindex Wp
7797 You can use @option{-Wp,@var{option}} to bypass the compiler driver
7798 and pass @var{option} directly through to the preprocessor.  If
7799 @var{option} contains commas, it is split into multiple options at the
7800 commas.  However, many options are modified, translated or interpreted
7801 by the compiler driver before being passed to the preprocessor, and
7802 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
7803 interface is undocumented and subject to change, so whenever possible
7804 you should avoid using @option{-Wp} and let the driver handle the
7805 options instead.
7806
7807 @item -Xpreprocessor @var{option}
7808 @opindex preprocessor
7809 Pass @var{option} as an option to the preprocessor.  You can use this to
7810 supply system-specific preprocessor options which GCC does not know how to
7811 recognize.
7812
7813 If you want to pass an option that takes an argument, you must use
7814 @option{-Xpreprocessor} twice, once for the option and once for the argument.
7815 @end table
7816
7817 @include cppopts.texi
7818
7819 @node Assembler Options
7820 @section Passing Options to the Assembler
7821
7822 @c prevent bad page break with this line
7823 You can pass options to the assembler.
7824
7825 @table @gcctabopt
7826 @item -Wa,@var{option}
7827 @opindex Wa
7828 Pass @var{option} as an option to the assembler.  If @var{option}
7829 contains commas, it is split into multiple options at the commas.
7830
7831 @item -Xassembler @var{option}
7832 @opindex Xassembler
7833 Pass @var{option} as an option to the assembler.  You can use this to
7834 supply system-specific assembler options which GCC does not know how to
7835 recognize.
7836
7837 If you want to pass an option that takes an argument, you must use
7838 @option{-Xassembler} twice, once for the option and once for the argument.
7839
7840 @end table
7841
7842 @node Link Options
7843 @section Options for Linking
7844 @cindex link options
7845 @cindex options, linking
7846
7847 These options come into play when the compiler links object files into
7848 an executable output file.  They are meaningless if the compiler is
7849 not doing a link step.
7850
7851 @table @gcctabopt
7852 @cindex file names
7853 @item @var{object-file-name}
7854 A file name that does not end in a special recognized suffix is
7855 considered to name an object file or library.  (Object files are
7856 distinguished from libraries by the linker according to the file
7857 contents.)  If linking is done, these object files are used as input
7858 to the linker.
7859
7860 @item -c
7861 @itemx -S
7862 @itemx -E
7863 @opindex c
7864 @opindex S
7865 @opindex E
7866 If any of these options is used, then the linker is not run, and
7867 object file names should not be used as arguments.  @xref{Overall
7868 Options}.
7869
7870 @cindex Libraries
7871 @item -l@var{library}
7872 @itemx -l @var{library}
7873 @opindex l
7874 Search the library named @var{library} when linking.  (The second
7875 alternative with the library as a separate argument is only for
7876 POSIX compliance and is not recommended.)
7877
7878 It makes a difference where in the command you write this option; the
7879 linker searches and processes libraries and object files in the order they
7880 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
7881 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
7882 to functions in @samp{z}, those functions may not be loaded.
7883
7884 The linker searches a standard list of directories for the library,
7885 which is actually a file named @file{lib@var{library}.a}.  The linker
7886 then uses this file as if it had been specified precisely by name.
7887
7888 The directories searched include several standard system directories
7889 plus any that you specify with @option{-L}.
7890
7891 Normally the files found this way are library files---archive files
7892 whose members are object files.  The linker handles an archive file by
7893 scanning through it for members which define symbols that have so far
7894 been referenced but not defined.  But if the file that is found is an
7895 ordinary object file, it is linked in the usual fashion.  The only
7896 difference between using an @option{-l} option and specifying a file name
7897 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
7898 and searches several directories.
7899
7900 @item -lobjc
7901 @opindex lobjc
7902 You need this special case of the @option{-l} option in order to
7903 link an Objective-C or Objective-C++ program.
7904
7905 @item -nostartfiles
7906 @opindex nostartfiles
7907 Do not use the standard system startup files when linking.
7908 The standard system libraries are used normally, unless @option{-nostdlib}
7909 or @option{-nodefaultlibs} is used.
7910
7911 @item -nodefaultlibs
7912 @opindex nodefaultlibs
7913 Do not use the standard system libraries when linking.
7914 Only the libraries you specify will be passed to the linker.
7915 The standard startup files are used normally, unless @option{-nostartfiles}
7916 is used.  The compiler may generate calls to @code{memcmp},
7917 @code{memset}, @code{memcpy} and @code{memmove}.
7918 These entries are usually resolved by entries in
7919 libc.  These entry points should be supplied through some other
7920 mechanism when this option is specified.
7921
7922 @item -nostdlib
7923 @opindex nostdlib
7924 Do not use the standard system startup files or libraries when linking.
7925 No startup files and only the libraries you specify will be passed to
7926 the linker.  The compiler may generate calls to @code{memcmp}, @code{memset},
7927 @code{memcpy} and @code{memmove}.
7928 These entries are usually resolved by entries in
7929 libc.  These entry points should be supplied through some other
7930 mechanism when this option is specified.
7931
7932 @cindex @option{-lgcc}, use with @option{-nostdlib}
7933 @cindex @option{-nostdlib} and unresolved references
7934 @cindex unresolved references and @option{-nostdlib}
7935 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
7936 @cindex @option{-nodefaultlibs} and unresolved references
7937 @cindex unresolved references and @option{-nodefaultlibs}
7938 One of the standard libraries bypassed by @option{-nostdlib} and
7939 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
7940 that GCC uses to overcome shortcomings of particular machines, or special
7941 needs for some languages.
7942 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
7943 Collection (GCC) Internals},
7944 for more discussion of @file{libgcc.a}.)
7945 In most cases, you need @file{libgcc.a} even when you want to avoid
7946 other standard libraries.  In other words, when you specify @option{-nostdlib}
7947 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
7948 This ensures that you have no unresolved references to internal GCC
7949 library subroutines.  (For example, @samp{__main}, used to ensure C++
7950 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
7951 GNU Compiler Collection (GCC) Internals}.)
7952
7953 @item -pie
7954 @opindex pie
7955 Produce a position independent executable on targets which support it.
7956 For predictable results, you must also specify the same set of options
7957 that were used to generate code (@option{-fpie}, @option{-fPIE},
7958 or model suboptions) when you specify this option.
7959
7960 @item -rdynamic
7961 @opindex rdynamic
7962 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
7963 that support it. This instructs the linker to add all symbols, not
7964 only used ones, to the dynamic symbol table. This option is needed
7965 for some uses of @code{dlopen} or to allow obtaining backtraces
7966 from within a program.
7967
7968 @item -s
7969 @opindex s
7970 Remove all symbol table and relocation information from the executable.
7971
7972 @item -static
7973 @opindex static
7974 On systems that support dynamic linking, this prevents linking with the shared
7975 libraries.  On other systems, this option has no effect.
7976
7977 @item -shared
7978 @opindex shared
7979 Produce a shared object which can then be linked with other objects to
7980 form an executable.  Not all systems support this option.  For predictable
7981 results, you must also specify the same set of options that were used to
7982 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
7983 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
7984 needs to build supplementary stub code for constructors to work.  On
7985 multi-libbed systems, @samp{gcc -shared} must select the correct support
7986 libraries to link against.  Failing to supply the correct flags may lead
7987 to subtle defects.  Supplying them in cases where they are not necessary
7988 is innocuous.}
7989
7990 @item -shared-libgcc
7991 @itemx -static-libgcc
7992 @opindex shared-libgcc
7993 @opindex static-libgcc
7994 On systems that provide @file{libgcc} as a shared library, these options
7995 force the use of either the shared or static version respectively.
7996 If no shared version of @file{libgcc} was built when the compiler was
7997 configured, these options have no effect.
7998
7999 There are several situations in which an application should use the
8000 shared @file{libgcc} instead of the static version.  The most common
8001 of these is when the application wishes to throw and catch exceptions
8002 across different shared libraries.  In that case, each of the libraries
8003 as well as the application itself should use the shared @file{libgcc}.
8004
8005 Therefore, the G++ and GCJ drivers automatically add
8006 @option{-shared-libgcc} whenever you build a shared library or a main
8007 executable, because C++ and Java programs typically use exceptions, so
8008 this is the right thing to do.
8009
8010 If, instead, you use the GCC driver to create shared libraries, you may
8011 find that they will not always be linked with the shared @file{libgcc}.
8012 If GCC finds, at its configuration time, that you have a non-GNU linker
8013 or a GNU linker that does not support option @option{--eh-frame-hdr},
8014 it will link the shared version of @file{libgcc} into shared libraries
8015 by default.  Otherwise, it will take advantage of the linker and optimize
8016 away the linking with the shared version of @file{libgcc}, linking with
8017 the static version of libgcc by default.  This allows exceptions to
8018 propagate through such shared libraries, without incurring relocation
8019 costs at library load time.
8020
8021 However, if a library or main executable is supposed to throw or catch
8022 exceptions, you must link it using the G++ or GCJ driver, as appropriate
8023 for the languages used in the program, or using the option
8024 @option{-shared-libgcc}, such that it is linked with the shared
8025 @file{libgcc}.
8026
8027 @item -symbolic
8028 @opindex symbolic
8029 Bind references to global symbols when building a shared object.  Warn
8030 about any unresolved references (unless overridden by the link editor
8031 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
8032 this option.
8033
8034 @item -T @var{script}
8035 @opindex T
8036 @cindex linker script
8037 Use @var{script} as the linker script.  This option is supported by most
8038 systems using the GNU linker.  On some targets, such as bare-board
8039 targets without an operating system, the @option{-T} option may be required 
8040 when linking to avoid references to undefined symbols.
8041
8042 @item -Xlinker @var{option}
8043 @opindex Xlinker
8044 Pass @var{option} as an option to the linker.  You can use this to
8045 supply system-specific linker options which GCC does not know how to
8046 recognize.
8047
8048 If you want to pass an option that takes a separate argument, you must use
8049 @option{-Xlinker} twice, once for the option and once for the argument.
8050 For example, to pass @option{-assert definitions}, you must write
8051 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
8052 @option{-Xlinker "-assert definitions"}, because this passes the entire
8053 string as a single argument, which is not what the linker expects.
8054
8055 When using the GNU linker, it is usually more convenient to pass 
8056 arguments to linker options using the @option{@var{option}=@var{value}}
8057 syntax than as separate arguments.  For example, you can specify
8058 @samp{-Xlinker -Map=output.map} rather than
8059 @samp{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
8060 this syntax for command-line options.
8061
8062 @item -Wl,@var{option}
8063 @opindex Wl
8064 Pass @var{option} as an option to the linker.  If @var{option} contains
8065 commas, it is split into multiple options at the commas.  You can use this
8066 syntax to pass an argument to the option.  
8067 For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the
8068 linker.  When using the GNU linker, you can also get the same effect with
8069 @samp{-Wl,-Map=output.map}.
8070
8071 @item -u @var{symbol}
8072 @opindex u
8073 Pretend the symbol @var{symbol} is undefined, to force linking of
8074 library modules to define it.  You can use @option{-u} multiple times with
8075 different symbols to force loading of additional library modules.
8076 @end table
8077
8078 @node Directory Options
8079 @section Options for Directory Search
8080 @cindex directory options
8081 @cindex options, directory search
8082 @cindex search path
8083
8084 These options specify directories to search for header files, for
8085 libraries and for parts of the compiler:
8086
8087 @table @gcctabopt
8088 @item -I@var{dir}
8089 @opindex I
8090 Add the directory @var{dir} to the head of the list of directories to be
8091 searched for header files.  This can be used to override a system header
8092 file, substituting your own version, since these directories are
8093 searched before the system header file directories.  However, you should
8094 not use this option to add directories that contain vendor-supplied
8095 system header files (use @option{-isystem} for that).  If you use more than
8096 one @option{-I} option, the directories are scanned in left-to-right
8097 order; the standard system directories come after.
8098
8099 If a standard system include directory, or a directory specified with
8100 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
8101 option will be ignored.  The directory will still be searched but as a
8102 system directory at its normal position in the system include chain.
8103 This is to ensure that GCC's procedure to fix buggy system headers and
8104 the ordering for the include_next directive are not inadvertently changed.
8105 If you really need to change the search order for system directories,
8106 use the @option{-nostdinc} and/or @option{-isystem} options.
8107
8108 @item -iquote@var{dir}
8109 @opindex iquote
8110 Add the directory @var{dir} to the head of the list of directories to
8111 be searched for header files only for the case of @samp{#include
8112 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
8113 otherwise just like @option{-I}.
8114
8115 @item -L@var{dir}
8116 @opindex L
8117 Add directory @var{dir} to the list of directories to be searched
8118 for @option{-l}.
8119
8120 @item -B@var{prefix}
8121 @opindex B
8122 This option specifies where to find the executables, libraries,
8123 include files, and data files of the compiler itself.
8124
8125 The compiler driver program runs one or more of the subprograms
8126 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
8127 @var{prefix} as a prefix for each program it tries to run, both with and
8128 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
8129
8130 For each subprogram to be run, the compiler driver first tries the
8131 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
8132 was not specified, the driver tries two standard prefixes, which are
8133 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
8134 those results in a file name that is found, the unmodified program
8135 name is searched for using the directories specified in your
8136 @env{PATH} environment variable.
8137
8138 The compiler will check to see if the path provided by the @option{-B}
8139 refers to a directory, and if necessary it will add a directory
8140 separator character at the end of the path.
8141
8142 @option{-B} prefixes that effectively specify directory names also apply
8143 to libraries in the linker, because the compiler translates these
8144 options into @option{-L} options for the linker.  They also apply to
8145 includes files in the preprocessor, because the compiler translates these
8146 options into @option{-isystem} options for the preprocessor.  In this case,
8147 the compiler appends @samp{include} to the prefix.
8148
8149 The run-time support file @file{libgcc.a} can also be searched for using
8150 the @option{-B} prefix, if needed.  If it is not found there, the two
8151 standard prefixes above are tried, and that is all.  The file is left
8152 out of the link if it is not found by those means.
8153
8154 Another way to specify a prefix much like the @option{-B} prefix is to use
8155 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
8156 Variables}.
8157
8158 As a special kludge, if the path provided by @option{-B} is
8159 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
8160 9, then it will be replaced by @file{[dir/]include}.  This is to help
8161 with boot-strapping the compiler.
8162
8163 @item -specs=@var{file}
8164 @opindex specs
8165 Process @var{file} after the compiler reads in the standard @file{specs}
8166 file, in order to override the defaults that the @file{gcc} driver
8167 program uses when determining what switches to pass to @file{cc1},
8168 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
8169 @option{-specs=@var{file}} can be specified on the command line, and they
8170 are processed in order, from left to right.
8171
8172 @item --sysroot=@var{dir}
8173 @opindex sysroot
8174 Use @var{dir} as the logical root directory for headers and libraries.
8175 For example, if the compiler would normally search for headers in
8176 @file{/usr/include} and libraries in @file{/usr/lib}, it will instead
8177 search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
8178
8179 If you use both this option and the @option{-isysroot} option, then
8180 the @option{--sysroot} option will apply to libraries, but the
8181 @option{-isysroot} option will apply to header files.
8182
8183 The GNU linker (beginning with version 2.16) has the necessary support
8184 for this option.  If your linker does not support this option, the
8185 header file aspect of @option{--sysroot} will still work, but the
8186 library aspect will not.
8187
8188 @item -I-
8189 @opindex I-
8190 This option has been deprecated.  Please use @option{-iquote} instead for
8191 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
8192 Any directories you specify with @option{-I} options before the @option{-I-}
8193 option are searched only for the case of @samp{#include "@var{file}"};
8194 they are not searched for @samp{#include <@var{file}>}.
8195
8196 If additional directories are specified with @option{-I} options after
8197 the @option{-I-}, these directories are searched for all @samp{#include}
8198 directives.  (Ordinarily @emph{all} @option{-I} directories are used
8199 this way.)
8200
8201 In addition, the @option{-I-} option inhibits the use of the current
8202 directory (where the current input file came from) as the first search
8203 directory for @samp{#include "@var{file}"}.  There is no way to
8204 override this effect of @option{-I-}.  With @option{-I.} you can specify
8205 searching the directory which was current when the compiler was
8206 invoked.  That is not exactly the same as what the preprocessor does
8207 by default, but it is often satisfactory.
8208
8209 @option{-I-} does not inhibit the use of the standard system directories
8210 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
8211 independent.
8212 @end table
8213
8214 @c man end
8215
8216 @node Spec Files
8217 @section Specifying subprocesses and the switches to pass to them
8218 @cindex Spec Files
8219
8220 @command{gcc} is a driver program.  It performs its job by invoking a
8221 sequence of other programs to do the work of compiling, assembling and
8222 linking.  GCC interprets its command-line parameters and uses these to
8223 deduce which programs it should invoke, and which command-line options
8224 it ought to place on their command lines.  This behavior is controlled
8225 by @dfn{spec strings}.  In most cases there is one spec string for each
8226 program that GCC can invoke, but a few programs have multiple spec
8227 strings to control their behavior.  The spec strings built into GCC can
8228 be overridden by using the @option{-specs=} command-line switch to specify
8229 a spec file.
8230
8231 @dfn{Spec files} are plaintext files that are used to construct spec
8232 strings.  They consist of a sequence of directives separated by blank
8233 lines.  The type of directive is determined by the first non-whitespace
8234 character on the line and it can be one of the following:
8235
8236 @table @code
8237 @item %@var{command}
8238 Issues a @var{command} to the spec file processor.  The commands that can
8239 appear here are:
8240
8241 @table @code
8242 @item %include <@var{file}>
8243 @cindex %include
8244 Search for @var{file} and insert its text at the current point in the
8245 specs file.
8246
8247 @item %include_noerr <@var{file}>
8248 @cindex %include_noerr
8249 Just like @samp{%include}, but do not generate an error message if the include
8250 file cannot be found.
8251
8252 @item %rename @var{old_name} @var{new_name}
8253 @cindex %rename
8254 Rename the spec string @var{old_name} to @var{new_name}.
8255
8256 @end table
8257
8258 @item *[@var{spec_name}]:
8259 This tells the compiler to create, override or delete the named spec
8260 string.  All lines after this directive up to the next directive or
8261 blank line are considered to be the text for the spec string.  If this
8262 results in an empty string then the spec will be deleted.  (Or, if the
8263 spec did not exist, then nothing will happened.)  Otherwise, if the spec
8264 does not currently exist a new spec will be created.  If the spec does
8265 exist then its contents will be overridden by the text of this
8266 directive, unless the first character of that text is the @samp{+}
8267 character, in which case the text will be appended to the spec.
8268
8269 @item [@var{suffix}]:
8270 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
8271 and up to the next directive or blank line are considered to make up the
8272 spec string for the indicated suffix.  When the compiler encounters an
8273 input file with the named suffix, it will processes the spec string in
8274 order to work out how to compile that file.  For example:
8275
8276 @smallexample
8277 .ZZ:
8278 z-compile -input %i
8279 @end smallexample
8280
8281 This says that any input file whose name ends in @samp{.ZZ} should be
8282 passed to the program @samp{z-compile}, which should be invoked with the
8283 command-line switch @option{-input} and with the result of performing the
8284 @samp{%i} substitution.  (See below.)
8285
8286 As an alternative to providing a spec string, the text that follows a
8287 suffix directive can be one of the following:
8288
8289 @table @code
8290 @item @@@var{language}
8291 This says that the suffix is an alias for a known @var{language}.  This is
8292 similar to using the @option{-x} command-line switch to GCC to specify a
8293 language explicitly.  For example:
8294
8295 @smallexample
8296 .ZZ:
8297 @@c++
8298 @end smallexample
8299
8300 Says that .ZZ files are, in fact, C++ source files.
8301
8302 @item #@var{name}
8303 This causes an error messages saying:
8304
8305 @smallexample
8306 @var{name} compiler not installed on this system.
8307 @end smallexample
8308 @end table
8309
8310 GCC already has an extensive list of suffixes built into it.
8311 This directive will add an entry to the end of the list of suffixes, but
8312 since the list is searched from the end backwards, it is effectively
8313 possible to override earlier entries using this technique.
8314
8315 @end table
8316
8317 GCC has the following spec strings built into it.  Spec files can
8318 override these strings or create their own.  Note that individual
8319 targets can also add their own spec strings to this list.
8320
8321 @smallexample
8322 asm          Options to pass to the assembler
8323 asm_final    Options to pass to the assembler post-processor
8324 cpp          Options to pass to the C preprocessor
8325 cc1          Options to pass to the C compiler
8326 cc1plus      Options to pass to the C++ compiler
8327 endfile      Object files to include at the end of the link
8328 link         Options to pass to the linker
8329 lib          Libraries to include on the command line to the linker
8330 libgcc       Decides which GCC support library to pass to the linker
8331 linker       Sets the name of the linker
8332 predefines   Defines to be passed to the C preprocessor
8333 signed_char  Defines to pass to CPP to say whether @code{char} is signed
8334              by default
8335 startfile    Object files to include at the start of the link
8336 @end smallexample
8337
8338 Here is a small example of a spec file:
8339
8340 @smallexample
8341 %rename lib                 old_lib
8342
8343 *lib:
8344 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
8345 @end smallexample
8346
8347 This example renames the spec called @samp{lib} to @samp{old_lib} and
8348 then overrides the previous definition of @samp{lib} with a new one.
8349 The new definition adds in some extra command-line options before
8350 including the text of the old definition.
8351
8352 @dfn{Spec strings} are a list of command-line options to be passed to their
8353 corresponding program.  In addition, the spec strings can contain
8354 @samp{%}-prefixed sequences to substitute variable text or to
8355 conditionally insert text into the command line.  Using these constructs
8356 it is possible to generate quite complex command lines.
8357
8358 Here is a table of all defined @samp{%}-sequences for spec
8359 strings.  Note that spaces are not generated automatically around the
8360 results of expanding these sequences.  Therefore you can concatenate them
8361 together or combine them with constant text in a single argument.
8362
8363 @table @code
8364 @item %%
8365 Substitute one @samp{%} into the program name or argument.
8366
8367 @item %i
8368 Substitute the name of the input file being processed.
8369
8370 @item %b
8371 Substitute the basename of the input file being processed.
8372 This is the substring up to (and not including) the last period
8373 and not including the directory.
8374
8375 @item %B
8376 This is the same as @samp{%b}, but include the file suffix (text after
8377 the last period).
8378
8379 @item %d
8380 Marks the argument containing or following the @samp{%d} as a
8381 temporary file name, so that that file will be deleted if GCC exits
8382 successfully.  Unlike @samp{%g}, this contributes no text to the
8383 argument.
8384
8385 @item %g@var{suffix}
8386 Substitute a file name that has suffix @var{suffix} and is chosen
8387 once per compilation, and mark the argument in the same way as
8388 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
8389 name is now chosen in a way that is hard to predict even when previously
8390 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
8391 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
8392 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
8393 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
8394 was simply substituted with a file name chosen once per compilation,
8395 without regard to any appended suffix (which was therefore treated
8396 just like ordinary text), making such attacks more likely to succeed.
8397
8398 @item %u@var{suffix}
8399 Like @samp{%g}, but generates a new temporary file name even if
8400 @samp{%u@var{suffix}} was already seen.
8401
8402 @item %U@var{suffix}
8403 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
8404 new one if there is no such last file name.  In the absence of any
8405 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
8406 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
8407 would involve the generation of two distinct file names, one
8408 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
8409 simply substituted with a file name chosen for the previous @samp{%u},
8410 without regard to any appended suffix.
8411
8412 @item %j@var{suffix}
8413 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
8414 writable, and if save-temps is off; otherwise, substitute the name
8415 of a temporary file, just like @samp{%u}.  This temporary file is not
8416 meant for communication between processes, but rather as a junk
8417 disposal mechanism.
8418
8419 @item %|@var{suffix}
8420 @itemx %m@var{suffix}
8421 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
8422 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
8423 all.  These are the two most common ways to instruct a program that it
8424 should read from standard input or write to standard output.  If you
8425 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
8426 construct: see for example @file{f/lang-specs.h}.
8427
8428 @item %.@var{SUFFIX}
8429 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
8430 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
8431 terminated by the next space or %.
8432
8433 @item %w
8434 Marks the argument containing or following the @samp{%w} as the
8435 designated output file of this compilation.  This puts the argument
8436 into the sequence of arguments that @samp{%o} will substitute later.
8437
8438 @item %o
8439 Substitutes the names of all the output files, with spaces
8440 automatically placed around them.  You should write spaces
8441 around the @samp{%o} as well or the results are undefined.
8442 @samp{%o} is for use in the specs for running the linker.
8443 Input files whose names have no recognized suffix are not compiled
8444 at all, but they are included among the output files, so they will
8445 be linked.
8446
8447 @item %O
8448 Substitutes the suffix for object files.  Note that this is
8449 handled specially when it immediately follows @samp{%g, %u, or %U},
8450 because of the need for those to form complete file names.  The
8451 handling is such that @samp{%O} is treated exactly as if it had already
8452 been substituted, except that @samp{%g, %u, and %U} do not currently
8453 support additional @var{suffix} characters following @samp{%O} as they would
8454 following, for example, @samp{.o}.
8455
8456 @item %p
8457 Substitutes the standard macro predefinitions for the
8458 current target machine.  Use this when running @code{cpp}.
8459
8460 @item %P
8461 Like @samp{%p}, but puts @samp{__} before and after the name of each
8462 predefined macro, except for macros that start with @samp{__} or with
8463 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
8464 C@.
8465
8466 @item %I
8467 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
8468 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
8469 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
8470 and @option{-imultilib} as necessary.
8471
8472 @item %s
8473 Current argument is the name of a library or startup file of some sort.
8474 Search for that file in a standard list of directories and substitute
8475 the full name found.
8476
8477 @item %e@var{str}
8478 Print @var{str} as an error message.  @var{str} is terminated by a newline.
8479 Use this when inconsistent options are detected.
8480
8481 @item %(@var{name})
8482 Substitute the contents of spec string @var{name} at this point.
8483
8484 @item %[@var{name}]
8485 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
8486
8487 @item %x@{@var{option}@}
8488 Accumulate an option for @samp{%X}.
8489
8490 @item %X
8491 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
8492 spec string.
8493
8494 @item %Y
8495 Output the accumulated assembler options specified by @option{-Wa}.
8496
8497 @item %Z
8498 Output the accumulated preprocessor options specified by @option{-Wp}.
8499
8500 @item %a
8501 Process the @code{asm} spec.  This is used to compute the
8502 switches to be passed to the assembler.
8503
8504 @item %A
8505 Process the @code{asm_final} spec.  This is a spec string for
8506 passing switches to an assembler post-processor, if such a program is
8507 needed.
8508
8509 @item %l
8510 Process the @code{link} spec.  This is the spec for computing the
8511 command line passed to the linker.  Typically it will make use of the
8512 @samp{%L %G %S %D and %E} sequences.
8513
8514 @item %D
8515 Dump out a @option{-L} option for each directory that GCC believes might
8516 contain startup files.  If the target supports multilibs then the
8517 current multilib directory will be prepended to each of these paths.
8518
8519 @item %L
8520 Process the @code{lib} spec.  This is a spec string for deciding which
8521 libraries should be included on the command line to the linker.
8522
8523 @item %G
8524 Process the @code{libgcc} spec.  This is a spec string for deciding
8525 which GCC support library should be included on the command line to the linker.
8526
8527 @item %S
8528 Process the @code{startfile} spec.  This is a spec for deciding which
8529 object files should be the first ones passed to the linker.  Typically
8530 this might be a file named @file{crt0.o}.
8531
8532 @item %E
8533 Process the @code{endfile} spec.  This is a spec string that specifies
8534 the last object files that will be passed to the linker.
8535
8536 @item %C
8537 Process the @code{cpp} spec.  This is used to construct the arguments
8538 to be passed to the C preprocessor.
8539
8540 @item %1
8541 Process the @code{cc1} spec.  This is used to construct the options to be
8542 passed to the actual C compiler (@samp{cc1}).
8543
8544 @item %2
8545 Process the @code{cc1plus} spec.  This is used to construct the options to be
8546 passed to the actual C++ compiler (@samp{cc1plus}).
8547
8548 @item %*
8549 Substitute the variable part of a matched option.  See below.
8550 Note that each comma in the substituted string is replaced by
8551 a single space.
8552
8553 @item %<@code{S}
8554 Remove all occurrences of @code{-S} from the command line.  Note---this
8555 command is position dependent.  @samp{%} commands in the spec string
8556 before this one will see @code{-S}, @samp{%} commands in the spec string
8557 after this one will not.
8558
8559 @item %:@var{function}(@var{args})
8560 Call the named function @var{function}, passing it @var{args}.
8561 @var{args} is first processed as a nested spec string, then split
8562 into an argument vector in the usual fashion.  The function returns
8563 a string which is processed as if it had appeared literally as part
8564 of the current spec.
8565
8566 The following built-in spec functions are provided:
8567
8568 @table @code
8569 @item @code{getenv}
8570 The @code{getenv} spec function takes two arguments: an environment
8571 variable name and a string.  If the environment variable is not
8572 defined, a fatal error is issued.  Otherwise, the return value is the
8573 value of the environment variable concatenated with the string.  For
8574 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
8575
8576 @smallexample
8577 %:getenv(TOPDIR /include)
8578 @end smallexample
8579
8580 expands to @file{/path/to/top/include}.
8581
8582 @item @code{if-exists}
8583 The @code{if-exists} spec function takes one argument, an absolute
8584 pathname to a file.  If the file exists, @code{if-exists} returns the
8585 pathname.  Here is a small example of its usage:
8586
8587 @smallexample
8588 *startfile:
8589 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
8590 @end smallexample
8591
8592 @item @code{if-exists-else}
8593 The @code{if-exists-else} spec function is similar to the @code{if-exists}
8594 spec function, except that it takes two arguments.  The first argument is
8595 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
8596 returns the pathname.  If it does not exist, it returns the second argument.
8597 This way, @code{if-exists-else} can be used to select one file or another,
8598 based on the existence of the first.  Here is a small example of its usage:
8599
8600 @smallexample
8601 *startfile:
8602 crt0%O%s %:if-exists(crti%O%s) \
8603 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
8604 @end smallexample
8605
8606 @item @code{replace-outfile}
8607 The @code{replace-outfile} spec function takes two arguments.  It looks for the
8608 first argument in the outfiles array and replaces it with the second argument.  Here
8609 is a small example of its usage:
8610
8611 @smallexample
8612 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
8613 @end smallexample
8614
8615 @item @code{print-asm-header}
8616 The @code{print-asm-header} function takes no arguments and simply
8617 prints a banner like:
8618
8619 @smallexample
8620 Assembler options
8621 =================
8622
8623 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
8624 @end smallexample
8625
8626 It is used to separate compiler options from assembler options
8627 in the @option{--target-help} output.
8628 @end table
8629
8630 @item %@{@code{S}@}
8631 Substitutes the @code{-S} switch, if that switch was given to GCC@.
8632 If that switch was not specified, this substitutes nothing.  Note that
8633 the leading dash is omitted when specifying this option, and it is
8634 automatically inserted if the substitution is performed.  Thus the spec
8635 string @samp{%@{foo@}} would match the command-line option @option{-foo}
8636 and would output the command line option @option{-foo}.
8637
8638 @item %W@{@code{S}@}
8639 Like %@{@code{S}@} but mark last argument supplied within as a file to be
8640 deleted on failure.
8641
8642 @item %@{@code{S}*@}
8643 Substitutes all the switches specified to GCC whose names start
8644 with @code{-S}, but which also take an argument.  This is used for
8645 switches like @option{-o}, @option{-D}, @option{-I}, etc.
8646 GCC considers @option{-o foo} as being
8647 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
8648 text, including the space.  Thus two arguments would be generated.
8649
8650 @item %@{@code{S}*&@code{T}*@}
8651 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
8652 (the order of @code{S} and @code{T} in the spec is not significant).
8653 There can be any number of ampersand-separated variables; for each the
8654 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
8655
8656 @item %@{@code{S}:@code{X}@}
8657 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
8658
8659 @item %@{!@code{S}:@code{X}@}
8660 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
8661
8662 @item %@{@code{S}*:@code{X}@}
8663 Substitutes @code{X} if one or more switches whose names start with
8664 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
8665 once, no matter how many such switches appeared.  However, if @code{%*}
8666 appears somewhere in @code{X}, then @code{X} will be substituted once
8667 for each matching switch, with the @code{%*} replaced by the part of
8668 that switch that matched the @code{*}.
8669
8670 @item %@{.@code{S}:@code{X}@}
8671 Substitutes @code{X}, if processing a file with suffix @code{S}.
8672
8673 @item %@{!.@code{S}:@code{X}@}
8674 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
8675
8676 @item %@{,@code{S}:@code{X}@}
8677 Substitutes @code{X}, if processing a file for language @code{S}.
8678
8679 @item %@{!,@code{S}:@code{X}@}
8680 Substitutes @code{X}, if not processing a file for language @code{S}.
8681
8682 @item %@{@code{S}|@code{P}:@code{X}@}
8683 Substitutes @code{X} if either @code{-S} or @code{-P} was given to
8684 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
8685 @code{*} sequences as well, although they have a stronger binding than
8686 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
8687 alternatives must be starred, and only the first matching alternative
8688 is substituted.
8689
8690 For example, a spec string like this:
8691
8692 @smallexample
8693 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
8694 @end smallexample
8695
8696 will output the following command-line options from the following input
8697 command-line options:
8698
8699 @smallexample
8700 fred.c        -foo -baz
8701 jim.d         -bar -boggle
8702 -d fred.c     -foo -baz -boggle
8703 -d jim.d      -bar -baz -boggle
8704 @end smallexample
8705
8706 @item %@{S:X; T:Y; :D@}
8707
8708 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
8709 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
8710 be as many clauses as you need.  This may be combined with @code{.},
8711 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
8712
8713
8714 @end table
8715
8716 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
8717 construct may contain other nested @samp{%} constructs or spaces, or
8718 even newlines.  They are processed as usual, as described above.
8719 Trailing white space in @code{X} is ignored.  White space may also
8720 appear anywhere on the left side of the colon in these constructs,
8721 except between @code{.} or @code{*} and the corresponding word.
8722
8723 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
8724 handled specifically in these constructs.  If another value of
8725 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
8726 @option{-W} switch is found later in the command line, the earlier
8727 switch value is ignored, except with @{@code{S}*@} where @code{S} is
8728 just one letter, which passes all matching options.
8729
8730 The character @samp{|} at the beginning of the predicate text is used to
8731 indicate that a command should be piped to the following command, but
8732 only if @option{-pipe} is specified.
8733
8734 It is built into GCC which switches take arguments and which do not.
8735 (You might think it would be useful to generalize this to allow each
8736 compiler's spec to say which switches take arguments.  But this cannot
8737 be done in a consistent fashion.  GCC cannot even decide which input
8738 files have been specified without knowing which switches take arguments,
8739 and it must know which input files to compile in order to tell which
8740 compilers to run).
8741
8742 GCC also knows implicitly that arguments starting in @option{-l} are to be
8743 treated as compiler output files, and passed to the linker in their
8744 proper position among the other output files.
8745
8746 @c man begin OPTIONS
8747
8748 @node Target Options
8749 @section Specifying Target Machine and Compiler Version
8750 @cindex target options
8751 @cindex cross compiling
8752 @cindex specifying machine version
8753 @cindex specifying compiler version and target machine
8754 @cindex compiler version, specifying
8755 @cindex target machine, specifying
8756
8757 The usual way to run GCC is to run the executable called @file{gcc}, or
8758 @file{<machine>-gcc} when cross-compiling, or
8759 @file{<machine>-gcc-<version>} to run a version other than the one that
8760 was installed last.  Sometimes this is inconvenient, so GCC provides
8761 options that will switch to another cross-compiler or version.
8762
8763 @table @gcctabopt
8764 @item -b @var{machine}
8765 @opindex b
8766 The argument @var{machine} specifies the target machine for compilation.
8767
8768 The value to use for @var{machine} is the same as was specified as the
8769 machine type when configuring GCC as a cross-compiler.  For
8770 example, if a cross-compiler was configured with @samp{configure
8771 arm-elf}, meaning to compile for an arm processor with elf binaries,
8772 then you would specify @option{-b arm-elf} to run that cross compiler.
8773 Because there are other options beginning with @option{-b}, the
8774 configuration must contain a hyphen, or @option{-b} alone should be one
8775 argument followed by the configuration in the next argument.
8776
8777 @item -V @var{version}
8778 @opindex V
8779 The argument @var{version} specifies which version of GCC to run.
8780 This is useful when multiple versions are installed.  For example,
8781 @var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
8782 @end table
8783
8784 The @option{-V} and @option{-b} options work by running the
8785 @file{<machine>-gcc-<version>} executable, so there's no real reason to
8786 use them if you can just run that directly.
8787
8788 @node Submodel Options
8789 @section Hardware Models and Configurations
8790 @cindex submodel options
8791 @cindex specifying hardware config
8792 @cindex hardware models and configurations, specifying
8793 @cindex machine dependent options
8794
8795 Earlier we discussed the standard option @option{-b} which chooses among
8796 different installed compilers for completely different target
8797 machines, such as VAX vs.@: 68000 vs.@: 80386.
8798
8799 In addition, each of these target machine types can have its own
8800 special options, starting with @samp{-m}, to choose among various
8801 hardware models or configurations---for example, 68010 vs 68020,
8802 floating coprocessor or none.  A single installed version of the
8803 compiler can compile for any model or configuration, according to the
8804 options specified.
8805
8806 Some configurations of the compiler also support additional special
8807 options, usually for compatibility with other compilers on the same
8808 platform.
8809
8810 @c This list is ordered alphanumerically by subsection name.
8811 @c It should be the same order and spelling as these options are listed
8812 @c in Machine Dependent Options
8813
8814 @menu
8815 * ARC Options::
8816 * ARM Options::
8817 * AVR Options::
8818 * Blackfin Options::
8819 * CRIS Options::
8820 * CRX Options::
8821 * Darwin Options::
8822 * DEC Alpha Options::
8823 * DEC Alpha/VMS Options::
8824 * FR30 Options::
8825 * FRV Options::
8826 * GNU/Linux Options::
8827 * H8/300 Options::
8828 * HPPA Options::
8829 * i386 and x86-64 Options::
8830 * IA-64 Options::
8831 * M32C Options::
8832 * M32R/D Options::
8833 * M680x0 Options::
8834 * M68hc1x Options::
8835 * MCore Options::
8836 * MIPS Options::
8837 * MMIX Options::
8838 * MN10300 Options::
8839 * PDP-11 Options::
8840 * picoChip Options::
8841 * PowerPC Options::
8842 * RS/6000 and PowerPC Options::
8843 * S/390 and zSeries Options::
8844 * Score Options::
8845 * SH Options::
8846 * SPARC Options::
8847 * SPU Options::
8848 * System V Options::
8849 * V850 Options::
8850 * VAX Options::
8851 * VxWorks Options::
8852 * x86-64 Options::
8853 * Xstormy16 Options::
8854 * Xtensa Options::
8855 * zSeries Options::
8856 @end menu
8857
8858 @node ARC Options
8859 @subsection ARC Options
8860 @cindex ARC Options
8861
8862 These options are defined for ARC implementations:
8863
8864 @table @gcctabopt
8865 @item -EL
8866 @opindex EL
8867 Compile code for little endian mode.  This is the default.
8868
8869 @item -EB
8870 @opindex EB
8871 Compile code for big endian mode.
8872
8873 @item -mmangle-cpu
8874 @opindex mmangle-cpu
8875 Prepend the name of the cpu to all public symbol names.
8876 In multiple-processor systems, there are many ARC variants with different
8877 instruction and register set characteristics.  This flag prevents code
8878 compiled for one cpu to be linked with code compiled for another.
8879 No facility exists for handling variants that are ``almost identical''.
8880 This is an all or nothing option.
8881
8882 @item -mcpu=@var{cpu}
8883 @opindex mcpu
8884 Compile code for ARC variant @var{cpu}.
8885 Which variants are supported depend on the configuration.
8886 All variants support @option{-mcpu=base}, this is the default.
8887
8888 @item -mtext=@var{text-section}
8889 @itemx -mdata=@var{data-section}
8890 @itemx -mrodata=@var{readonly-data-section}
8891 @opindex mtext
8892 @opindex mdata
8893 @opindex mrodata
8894 Put functions, data, and readonly data in @var{text-section},
8895 @var{data-section}, and @var{readonly-data-section} respectively
8896 by default.  This can be overridden with the @code{section} attribute.
8897 @xref{Variable Attributes}.
8898
8899 @item -mfix-cortex-m3-ldrd
8900 @opindex mfix-cortex-m3-ldrd
8901 Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
8902 with overlapping destination and base registers are used.  This option avoids
8903 generating these instructions.  This option is enabled by default when
8904 @option{-mcpu=cortex-m3} is specified.
8905
8906 @end table
8907
8908 @node ARM Options
8909 @subsection ARM Options
8910 @cindex ARM options
8911
8912 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
8913 architectures:
8914
8915 @table @gcctabopt
8916 @item -mabi=@var{name}
8917 @opindex mabi
8918 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
8919 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
8920
8921 @item -mapcs-frame
8922 @opindex mapcs-frame
8923 Generate a stack frame that is compliant with the ARM Procedure Call
8924 Standard for all functions, even if this is not strictly necessary for
8925 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
8926 with this option will cause the stack frames not to be generated for
8927 leaf functions.  The default is @option{-mno-apcs-frame}.
8928
8929 @item -mapcs
8930 @opindex mapcs
8931 This is a synonym for @option{-mapcs-frame}.
8932
8933 @ignore
8934 @c not currently implemented
8935 @item -mapcs-stack-check
8936 @opindex mapcs-stack-check
8937 Generate code to check the amount of stack space available upon entry to
8938 every function (that actually uses some stack space).  If there is
8939 insufficient space available then either the function
8940 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
8941 called, depending upon the amount of stack space required.  The run time
8942 system is required to provide these functions.  The default is
8943 @option{-mno-apcs-stack-check}, since this produces smaller code.
8944
8945 @c not currently implemented
8946 @item -mapcs-float
8947 @opindex mapcs-float
8948 Pass floating point arguments using the float point registers.  This is
8949 one of the variants of the APCS@.  This option is recommended if the
8950 target hardware has a floating point unit or if a lot of floating point
8951 arithmetic is going to be performed by the code.  The default is
8952 @option{-mno-apcs-float}, since integer only code is slightly increased in
8953 size if @option{-mapcs-float} is used.
8954
8955 @c not currently implemented
8956 @item -mapcs-reentrant
8957 @opindex mapcs-reentrant
8958 Generate reentrant, position independent code.  The default is
8959 @option{-mno-apcs-reentrant}.
8960 @end ignore
8961
8962 @item -mthumb-interwork
8963 @opindex mthumb-interwork
8964 Generate code which supports calling between the ARM and Thumb
8965 instruction sets.  Without this option the two instruction sets cannot
8966 be reliably used inside one program.  The default is
8967 @option{-mno-thumb-interwork}, since slightly larger code is generated
8968 when @option{-mthumb-interwork} is specified.
8969
8970 @item -mno-sched-prolog
8971 @opindex mno-sched-prolog
8972 Prevent the reordering of instructions in the function prolog, or the
8973 merging of those instruction with the instructions in the function's
8974 body.  This means that all functions will start with a recognizable set
8975 of instructions (or in fact one of a choice from a small set of
8976 different function prologues), and this information can be used to
8977 locate the start if functions inside an executable piece of code.  The
8978 default is @option{-msched-prolog}.
8979
8980 @item -mfloat-abi=@var{name}
8981 @opindex mfloat-abi
8982 Specifies which floating-point ABI to use.  Permissible values
8983 are: @samp{soft}, @samp{softfp} and @samp{hard}.
8984
8985 Specifying @samp{soft} causes GCC to generate output containing 
8986 library calls for floating-point operations.
8987 @samp{softfp} allows the generation of code using hardware floating-point 
8988 instructions, but still uses the soft-float calling conventions.  
8989 @samp{hard} allows generation of floating-point instructions 
8990 and uses FPU-specific calling conventions.
8991
8992 Using @option{-mfloat-abi=hard} with VFP coprocessors is not supported.
8993 Use @option{-mfloat-abi=softfp} with the appropriate @option{-mfpu} option
8994 to allow the compiler to generate code that makes use of the hardware
8995 floating-point capabilities for these CPUs.
8996
8997 The default depends on the specific target configuration.  Note that
8998 the hard-float and soft-float ABIs are not link-compatible; you must
8999 compile your entire program with the same ABI, and link with a
9000 compatible set of libraries.
9001
9002 @item -mhard-float
9003 @opindex mhard-float
9004 Equivalent to @option{-mfloat-abi=hard}.
9005
9006 @item -msoft-float
9007 @opindex msoft-float
9008 Equivalent to @option{-mfloat-abi=soft}.
9009
9010 @item -mlittle-endian
9011 @opindex mlittle-endian
9012 Generate code for a processor running in little-endian mode.  This is
9013 the default for all standard configurations.
9014
9015 @item -mbig-endian
9016 @opindex mbig-endian
9017 Generate code for a processor running in big-endian mode; the default is
9018 to compile code for a little-endian processor.
9019
9020 @item -mwords-little-endian
9021 @opindex mwords-little-endian
9022 This option only applies when generating code for big-endian processors.
9023 Generate code for a little-endian word order but a big-endian byte
9024 order.  That is, a byte order of the form @samp{32107654}.  Note: this
9025 option should only be used if you require compatibility with code for
9026 big-endian ARM processors generated by versions of the compiler prior to
9027 2.8.
9028
9029 @item -mcpu=@var{name}
9030 @opindex mcpu
9031 This specifies the name of the target ARM processor.  GCC uses this name
9032 to determine what kind of instructions it can emit when generating
9033 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
9034 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
9035 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
9036 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
9037 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
9038 @samp{arm720},
9039 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
9040 @samp{arm710t}, @samp{arm720t}, @samp{arm740t},
9041 @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
9042 @samp{strongarm1110},
9043 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
9044 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
9045 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
9046 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
9047 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
9048 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
9049 @samp{arm1156t2-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
9050 @samp{cortex-a8}, @samp{cortex-a9},
9051 @samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m3},
9052 @samp{cortex-m1},
9053 @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9054
9055 @item -mtune=@var{name}
9056 @opindex mtune
9057 This option is very similar to the @option{-mcpu=} option, except that
9058 instead of specifying the actual target processor type, and hence
9059 restricting which instructions can be used, it specifies that GCC should
9060 tune the performance of the code as if the target were of the type
9061 specified in this option, but still choosing the instructions that it
9062 will generate based on the cpu specified by a @option{-mcpu=} option.
9063 For some ARM implementations better performance can be obtained by using
9064 this option.
9065
9066 @item -march=@var{name}
9067 @opindex march
9068 This specifies the name of the target ARM architecture.  GCC uses this
9069 name to determine what kind of instructions it can emit when generating
9070 assembly code.  This option can be used in conjunction with or instead
9071 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
9072 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
9073 @samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
9074 @samp{armv6}, @samp{armv6j},
9075 @samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
9076 @samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
9077 @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9078
9079 @item -mfpu=@var{name}
9080 @itemx -mfpe=@var{number}
9081 @itemx -mfp=@var{number}
9082 @opindex mfpu
9083 @opindex mfpe
9084 @opindex mfp
9085 This specifies what floating point hardware (or hardware emulation) is
9086 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
9087 @samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-d16} and
9088 @samp{neon}.  @option{-mfp} and @option{-mfpe}
9089 are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
9090 with older versions of GCC@.
9091
9092 If @option{-msoft-float} is specified this specifies the format of
9093 floating point values.
9094
9095 @item -mstructure-size-boundary=@var{n}
9096 @opindex mstructure-size-boundary
9097 The size of all structures and unions will be rounded up to a multiple
9098 of the number of bits set by this option.  Permissible values are 8, 32
9099 and 64.  The default value varies for different toolchains.  For the COFF
9100 targeted toolchain the default value is 8.  A value of 64 is only allowed
9101 if the underlying ABI supports it.
9102
9103 Specifying the larger number can produce faster, more efficient code, but
9104 can also increase the size of the program.  Different values are potentially
9105 incompatible.  Code compiled with one value cannot necessarily expect to
9106 work with code or libraries compiled with another value, if they exchange
9107 information using structures or unions.
9108
9109 @item -mabort-on-noreturn
9110 @opindex mabort-on-noreturn
9111 Generate a call to the function @code{abort} at the end of a
9112 @code{noreturn} function.  It will be executed if the function tries to
9113 return.
9114
9115 @item -mlong-calls
9116 @itemx -mno-long-calls
9117 @opindex mlong-calls
9118 @opindex mno-long-calls
9119 Tells the compiler to perform function calls by first loading the
9120 address of the function into a register and then performing a subroutine
9121 call on this register.  This switch is needed if the target function
9122 will lie outside of the 64 megabyte addressing range of the offset based
9123 version of subroutine call instruction.
9124
9125 Even if this switch is enabled, not all function calls will be turned
9126 into long calls.  The heuristic is that static functions, functions
9127 which have the @samp{short-call} attribute, functions that are inside
9128 the scope of a @samp{#pragma no_long_calls} directive and functions whose
9129 definitions have already been compiled within the current compilation
9130 unit, will not be turned into long calls.  The exception to this rule is
9131 that weak function definitions, functions with the @samp{long-call}
9132 attribute or the @samp{section} attribute, and functions that are within
9133 the scope of a @samp{#pragma long_calls} directive, will always be
9134 turned into long calls.
9135
9136 This feature is not enabled by default.  Specifying
9137 @option{-mno-long-calls} will restore the default behavior, as will
9138 placing the function calls within the scope of a @samp{#pragma
9139 long_calls_off} directive.  Note these switches have no effect on how
9140 the compiler generates code to handle function calls via function
9141 pointers.
9142
9143 @item -mnop-fun-dllimport
9144 @opindex mnop-fun-dllimport
9145 Disable support for the @code{dllimport} attribute.
9146
9147 @item -msingle-pic-base
9148 @opindex msingle-pic-base
9149 Treat the register used for PIC addressing as read-only, rather than
9150 loading it in the prologue for each function.  The run-time system is
9151 responsible for initializing this register with an appropriate value
9152 before execution begins.
9153
9154 @item -mpic-register=@var{reg}
9155 @opindex mpic-register
9156 Specify the register to be used for PIC addressing.  The default is R10
9157 unless stack-checking is enabled, when R9 is used.
9158
9159 @item -mcirrus-fix-invalid-insns
9160 @opindex mcirrus-fix-invalid-insns
9161 @opindex mno-cirrus-fix-invalid-insns
9162 Insert NOPs into the instruction stream to in order to work around
9163 problems with invalid Maverick instruction combinations.  This option
9164 is only valid if the @option{-mcpu=ep9312} option has been used to
9165 enable generation of instructions for the Cirrus Maverick floating
9166 point co-processor.  This option is not enabled by default, since the
9167 problem is only present in older Maverick implementations.  The default
9168 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
9169 switch.
9170
9171 @item -mpoke-function-name
9172 @opindex mpoke-function-name
9173 Write the name of each function into the text section, directly
9174 preceding the function prologue.  The generated code is similar to this:
9175
9176 @smallexample
9177      t0
9178          .ascii "arm_poke_function_name", 0
9179          .align
9180      t1
9181          .word 0xff000000 + (t1 - t0)
9182      arm_poke_function_name
9183          mov     ip, sp
9184          stmfd   sp!, @{fp, ip, lr, pc@}
9185          sub     fp, ip, #4
9186 @end smallexample
9187
9188 When performing a stack backtrace, code can inspect the value of
9189 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
9190 location @code{pc - 12} and the top 8 bits are set, then we know that
9191 there is a function name embedded immediately preceding this location
9192 and has length @code{((pc[-3]) & 0xff000000)}.
9193
9194 @item -mthumb
9195 @opindex mthumb
9196 Generate code for the Thumb instruction set.  The default is to
9197 use the 32-bit ARM instruction set.
9198 This option automatically enables either 16-bit Thumb-1 or
9199 mixed 16/32-bit Thumb-2 instructions based on the @option{-mcpu=@var{name}}
9200 and @option{-march=@var{name}} options.
9201
9202 @item -mtpcs-frame
9203 @opindex mtpcs-frame
9204 Generate a stack frame that is compliant with the Thumb Procedure Call
9205 Standard for all non-leaf functions.  (A leaf function is one that does
9206 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
9207
9208 @item -mtpcs-leaf-frame
9209 @opindex mtpcs-leaf-frame
9210 Generate a stack frame that is compliant with the Thumb Procedure Call
9211 Standard for all leaf functions.  (A leaf function is one that does
9212 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
9213
9214 @item -mcallee-super-interworking
9215 @opindex mcallee-super-interworking
9216 Gives all externally visible functions in the file being compiled an ARM
9217 instruction set header which switches to Thumb mode before executing the
9218 rest of the function.  This allows these functions to be called from
9219 non-interworking code.
9220
9221 @item -mcaller-super-interworking
9222 @opindex mcaller-super-interworking
9223 Allows calls via function pointers (including virtual functions) to
9224 execute correctly regardless of whether the target code has been
9225 compiled for interworking or not.  There is a small overhead in the cost
9226 of executing a function pointer if this option is enabled.
9227
9228 @item -mtp=@var{name}
9229 @opindex mtp
9230 Specify the access model for the thread local storage pointer.  The valid
9231 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
9232 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
9233 (supported in the arm6k architecture), and @option{auto}, which uses the
9234 best available method for the selected processor.  The default setting is
9235 @option{auto}.
9236
9237 @item -mword-relocations
9238 @opindex mword-relocations
9239 Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
9240 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
9241 loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
9242 is specified.
9243
9244 @end table
9245
9246 @node AVR Options
9247 @subsection AVR Options
9248 @cindex AVR Options
9249
9250 These options are defined for AVR implementations:
9251
9252 @table @gcctabopt
9253 @item -mmcu=@var{mcu}
9254 @opindex mmcu
9255 Specify ATMEL AVR instruction set or MCU type.
9256
9257 Instruction set avr1 is for the minimal AVR core, not supported by the C
9258 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
9259 attiny11, attiny12, attiny15, attiny28).
9260
9261 Instruction set avr2 (default) is for the classic AVR core with up to
9262 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
9263 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
9264 at90c8534, at90s8535).
9265
9266 Instruction set avr3 is for the classic AVR core with up to 128K program
9267 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
9268
9269 Instruction set avr4 is for the enhanced AVR core with up to 8K program
9270 memory space (MCU types: atmega8, atmega83, atmega85).
9271
9272 Instruction set avr5 is for the enhanced AVR core with up to 128K program
9273 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
9274 atmega64, atmega128, at43usb355, at94k).
9275
9276 @item -msize
9277 @opindex msize
9278 Output instruction sizes to the asm file.
9279
9280 @item -minit-stack=@var{N}
9281 @opindex minit-stack
9282 Specify the initial stack address, which may be a symbol or numeric value,
9283 @samp{__stack} is the default.
9284
9285 @item -mno-interrupts
9286 @opindex mno-interrupts
9287 Generated code is not compatible with hardware interrupts.
9288 Code size will be smaller.
9289
9290 @item -mcall-prologues
9291 @opindex mcall-prologues
9292 Functions prologues/epilogues expanded as call to appropriate
9293 subroutines.  Code size will be smaller.
9294
9295 @item -mno-tablejump
9296 @opindex mno-tablejump
9297 Do not generate tablejump insns which sometimes increase code size.
9298
9299 @item -mtiny-stack
9300 @opindex mtiny-stack
9301 Change only the low 8 bits of the stack pointer.
9302
9303 @item -mint8
9304 @opindex mint8
9305 Assume int to be 8 bit integer.  This affects the sizes of all types: A
9306 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
9307 and long long will be 4 bytes.  Please note that this option does not
9308 comply to the C standards, but it will provide you with smaller code
9309 size.
9310 @end table
9311
9312 @node Blackfin Options
9313 @subsection Blackfin Options
9314 @cindex Blackfin Options
9315
9316 @table @gcctabopt
9317 @item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
9318 @opindex mcpu=
9319 Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
9320 can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
9321 @samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
9322 @samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
9323 @samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
9324 @samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
9325 @samp{bf561}.
9326 The optional @var{sirevision} specifies the silicon revision of the target
9327 Blackfin processor.  Any workarounds available for the targeted silicon revision
9328 will be enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
9329 If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
9330 will be enabled.  The @code{__SILICON_REVISION__} macro is defined to two
9331 hexadecimal digits representing the major and minor numbers in the silicon
9332 revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
9333 is not defined.  If @var{sirevision} is @samp{any}, the
9334 @code{__SILICON_REVISION__} is defined to be @code{0xffff}.
9335 If this optional @var{sirevision} is not used, GCC assumes the latest known
9336 silicon revision of the targeted Blackfin processor.
9337
9338 Support for @samp{bf561} is incomplete.  For @samp{bf561},
9339 Only the processor macro is defined.
9340 Without this option, @samp{bf532} is used as the processor by default.
9341 The corresponding predefined processor macros for @var{cpu} is to
9342 be defined.  And for @samp{bfin-elf} toolchain, this causes the hardware BSP
9343 provided by libgloss to be linked in if @option{-msim} is not given.
9344
9345 @item -msim
9346 @opindex msim
9347 Specifies that the program will be run on the simulator.  This causes
9348 the simulator BSP provided by libgloss to be linked in.  This option
9349 has effect only for @samp{bfin-elf} toolchain.
9350 Certain other options, such as @option{-mid-shared-library} and
9351 @option{-mfdpic}, imply @option{-msim}.
9352
9353 @item -momit-leaf-frame-pointer
9354 @opindex momit-leaf-frame-pointer
9355 Don't keep the frame pointer in a register for leaf functions.  This
9356 avoids the instructions to save, set up and restore frame pointers and
9357 makes an extra register available in leaf functions.  The option
9358 @option{-fomit-frame-pointer} removes the frame pointer for all functions
9359 which might make debugging harder.
9360
9361 @item -mspecld-anomaly
9362 @opindex mspecld-anomaly
9363 When enabled, the compiler will ensure that the generated code does not
9364 contain speculative loads after jump instructions. If this option is used,
9365 @code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
9366
9367 @item -mno-specld-anomaly
9368 @opindex mno-specld-anomaly
9369 Don't generate extra code to prevent speculative loads from occurring.
9370
9371 @item -mcsync-anomaly
9372 @opindex mcsync-anomaly
9373 When enabled, the compiler will ensure that the generated code does not
9374 contain CSYNC or SSYNC instructions too soon after conditional branches.
9375 If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
9376
9377 @item -mno-csync-anomaly
9378 @opindex mno-csync-anomaly
9379 Don't generate extra code to prevent CSYNC or SSYNC instructions from
9380 occurring too soon after a conditional branch.
9381
9382 @item -mlow-64k
9383 @opindex mlow-64k
9384 When enabled, the compiler is free to take advantage of the knowledge that
9385 the entire program fits into the low 64k of memory.
9386
9387 @item -mno-low-64k
9388 @opindex mno-low-64k
9389 Assume that the program is arbitrarily large.  This is the default.
9390
9391 @item -mstack-check-l1
9392 @opindex mstack-check-l1
9393 Do stack checking using information placed into L1 scratchpad memory by the
9394 uClinux kernel.
9395
9396 @item -mid-shared-library
9397 @opindex mid-shared-library
9398 Generate code that supports shared libraries via the library ID method.
9399 This allows for execute in place and shared libraries in an environment
9400 without virtual memory management.  This option implies @option{-fPIC}.
9401 With a @samp{bfin-elf} target, this option implies @option{-msim}.
9402
9403 @item -mno-id-shared-library
9404 @opindex mno-id-shared-library
9405 Generate code that doesn't assume ID based shared libraries are being used.
9406 This is the default.
9407
9408 @item -mleaf-id-shared-library
9409 @opindex mleaf-id-shared-library
9410 Generate code that supports shared libraries via the library ID method,
9411 but assumes that this library or executable won't link against any other
9412 ID shared libraries.  That allows the compiler to use faster code for jumps
9413 and calls.
9414
9415 @item -mno-leaf-id-shared-library
9416 @opindex mno-leaf-id-shared-library
9417 Do not assume that the code being compiled won't link against any ID shared
9418 libraries.  Slower code will be generated for jump and call insns.
9419
9420 @item -mshared-library-id=n
9421 @opindex mshared-library-id
9422 Specified the identification number of the ID based shared library being
9423 compiled.  Specifying a value of 0 will generate more compact code, specifying
9424 other values will force the allocation of that number to the current
9425 library but is no more space or time efficient than omitting this option.
9426
9427 @item -msep-data
9428 @opindex msep-data
9429 Generate code that allows the data segment to be located in a different
9430 area of memory from the text segment.  This allows for execute in place in
9431 an environment without virtual memory management by eliminating relocations
9432 against the text section.
9433
9434 @item -mno-sep-data
9435 @opindex mno-sep-data
9436 Generate code that assumes that the data segment follows the text segment.
9437 This is the default.
9438
9439 @item -mlong-calls
9440 @itemx -mno-long-calls
9441 @opindex mlong-calls
9442 @opindex mno-long-calls
9443 Tells the compiler to perform function calls by first loading the
9444 address of the function into a register and then performing a subroutine
9445 call on this register.  This switch is needed if the target function
9446 will lie outside of the 24 bit addressing range of the offset based
9447 version of subroutine call instruction.
9448
9449 This feature is not enabled by default.  Specifying
9450 @option{-mno-long-calls} will restore the default behavior.  Note these
9451 switches have no effect on how the compiler generates code to handle
9452 function calls via function pointers.
9453
9454 @item -mfast-fp
9455 @opindex mfast-fp
9456 Link with the fast floating-point library. This library relaxes some of
9457 the IEEE floating-point standard's rules for checking inputs against
9458 Not-a-Number (NAN), in the interest of performance.
9459
9460 @item -minline-plt
9461 @opindex minline-plt
9462 Enable inlining of PLT entries in function calls to functions that are
9463 not known to bind locally.  It has no effect without @option{-mfdpic}.
9464
9465 @item -mmulticore
9466 @opindex mmulticore
9467 Build standalone application for multicore Blackfin processor. Proper
9468 start files and link scripts will be used to support multicore.
9469 This option defines @code{__BFIN_MULTICORE}. It can only be used with
9470 @option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with
9471 @option{-mcorea} or @option{-mcoreb}. If it's used without
9472 @option{-mcorea} or @option{-mcoreb}, single application/dual core
9473 programming model is used. In this model, the main function of Core B
9474 should be named as coreb_main. If it's used with @option{-mcorea} or
9475 @option{-mcoreb}, one application per core programming model is used.
9476 If this option is not used, single core application programming
9477 model is used.
9478
9479 @item -mcorea
9480 @opindex mcorea
9481 Build standalone application for Core A of BF561 when using
9482 one application per core programming model. Proper start files
9483 and link scripts will be used to support Core A. This option
9484 defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}.
9485
9486 @item -mcoreb
9487 @opindex mcoreb
9488 Build standalone application for Core B of BF561 when using
9489 one application per core programming model. Proper start files
9490 and link scripts will be used to support Core B. This option
9491 defines @code{__BFIN_COREB}. When this option is used, coreb_main
9492 should be used instead of main. It must be used with
9493 @option{-mmulticore}. 
9494
9495 @item -msdram
9496 @opindex msdram
9497 Build standalone application for SDRAM. Proper start files and
9498 link scripts will be used to put the application into SDRAM.
9499 Loader should initialize SDRAM before loading the application
9500 into SDRAM. This option defines @code{__BFIN_SDRAM}.
9501
9502 @item -micplb
9503 @opindex micplb
9504 Assume that ICPLBs are enabled at runtime.  This has an effect on certain
9505 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
9506 are enabled; for standalone applications the default is off.
9507 @end table
9508
9509 @node CRIS Options
9510 @subsection CRIS Options
9511 @cindex CRIS Options
9512
9513 These options are defined specifically for the CRIS ports.
9514
9515 @table @gcctabopt
9516 @item -march=@var{architecture-type}
9517 @itemx -mcpu=@var{architecture-type}
9518 @opindex march
9519 @opindex mcpu
9520 Generate code for the specified architecture.  The choices for
9521 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
9522 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
9523 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
9524 @samp{v10}.
9525
9526 @item -mtune=@var{architecture-type}
9527 @opindex mtune
9528 Tune to @var{architecture-type} everything applicable about the generated
9529 code, except for the ABI and the set of available instructions.  The
9530 choices for @var{architecture-type} are the same as for
9531 @option{-march=@var{architecture-type}}.
9532
9533 @item -mmax-stack-frame=@var{n}
9534 @opindex mmax-stack-frame
9535 Warn when the stack frame of a function exceeds @var{n} bytes.
9536
9537 @item -metrax4
9538 @itemx -metrax100
9539 @opindex metrax4
9540 @opindex metrax100
9541 The options @option{-metrax4} and @option{-metrax100} are synonyms for
9542 @option{-march=v3} and @option{-march=v8} respectively.
9543
9544 @item -mmul-bug-workaround
9545 @itemx -mno-mul-bug-workaround
9546 @opindex mmul-bug-workaround
9547 @opindex mno-mul-bug-workaround
9548 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
9549 models where it applies.  This option is active by default.
9550
9551 @item -mpdebug
9552 @opindex mpdebug
9553 Enable CRIS-specific verbose debug-related information in the assembly
9554 code.  This option also has the effect to turn off the @samp{#NO_APP}
9555 formatted-code indicator to the assembler at the beginning of the
9556 assembly file.
9557
9558 @item -mcc-init
9559 @opindex mcc-init
9560 Do not use condition-code results from previous instruction; always emit
9561 compare and test instructions before use of condition codes.
9562
9563 @item -mno-side-effects
9564 @opindex mno-side-effects
9565 Do not emit instructions with side-effects in addressing modes other than
9566 post-increment.
9567
9568 @item -mstack-align
9569 @itemx -mno-stack-align
9570 @itemx -mdata-align
9571 @itemx -mno-data-align
9572 @itemx -mconst-align
9573 @itemx -mno-const-align
9574 @opindex mstack-align
9575 @opindex mno-stack-align
9576 @opindex mdata-align
9577 @opindex mno-data-align
9578 @opindex mconst-align
9579 @opindex mno-const-align
9580 These options (no-options) arranges (eliminate arrangements) for the
9581 stack-frame, individual data and constants to be aligned for the maximum
9582 single data access size for the chosen CPU model.  The default is to
9583 arrange for 32-bit alignment.  ABI details such as structure layout are
9584 not affected by these options.
9585
9586 @item -m32-bit
9587 @itemx -m16-bit
9588 @itemx -m8-bit
9589 @opindex m32-bit
9590 @opindex m16-bit
9591 @opindex m8-bit
9592 Similar to the stack- data- and const-align options above, these options
9593 arrange for stack-frame, writable data and constants to all be 32-bit,
9594 16-bit or 8-bit aligned.  The default is 32-bit alignment.
9595
9596 @item -mno-prologue-epilogue
9597 @itemx -mprologue-epilogue
9598 @opindex mno-prologue-epilogue
9599 @opindex mprologue-epilogue
9600 With @option{-mno-prologue-epilogue}, the normal function prologue and
9601 epilogue that sets up the stack-frame are omitted and no return
9602 instructions or return sequences are generated in the code.  Use this
9603 option only together with visual inspection of the compiled code: no
9604 warnings or errors are generated when call-saved registers must be saved,
9605 or storage for local variable needs to be allocated.
9606
9607 @item -mno-gotplt
9608 @itemx -mgotplt
9609 @opindex mno-gotplt
9610 @opindex mgotplt
9611 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
9612 instruction sequences that load addresses for functions from the PLT part
9613 of the GOT rather than (traditional on other architectures) calls to the
9614 PLT@.  The default is @option{-mgotplt}.
9615
9616 @item -melf
9617 @opindex melf
9618 Legacy no-op option only recognized with the cris-axis-elf and
9619 cris-axis-linux-gnu targets.
9620
9621 @item -mlinux
9622 @opindex mlinux
9623 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
9624
9625 @item -sim
9626 @opindex sim
9627 This option, recognized for the cris-axis-elf arranges
9628 to link with input-output functions from a simulator library.  Code,
9629 initialized data and zero-initialized data are allocated consecutively.
9630
9631 @item -sim2
9632 @opindex sim2
9633 Like @option{-sim}, but pass linker options to locate initialized data at
9634 0x40000000 and zero-initialized data at 0x80000000.
9635 @end table
9636
9637 @node CRX Options
9638 @subsection CRX Options
9639 @cindex CRX Options
9640
9641 These options are defined specifically for the CRX ports.
9642
9643 @table @gcctabopt
9644
9645 @item -mmac
9646 @opindex mmac
9647 Enable the use of multiply-accumulate instructions. Disabled by default.
9648
9649 @item -mpush-args
9650 @opindex mpush-args
9651 Push instructions will be used to pass outgoing arguments when functions
9652 are called. Enabled by default.
9653 @end table
9654
9655 @node Darwin Options
9656 @subsection Darwin Options
9657 @cindex Darwin options
9658
9659 These options are defined for all architectures running the Darwin operating
9660 system.
9661
9662 FSF GCC on Darwin does not create ``fat'' object files; it will create
9663 an object file for the single architecture that it was built to
9664 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
9665 @option{-arch} options are used; it does so by running the compiler or
9666 linker multiple times and joining the results together with
9667 @file{lipo}.
9668
9669 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
9670 @samp{i686}) is determined by the flags that specify the ISA
9671 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
9672 @option{-force_cpusubtype_ALL} option can be used to override this.
9673
9674 The Darwin tools vary in their behavior when presented with an ISA
9675 mismatch.  The assembler, @file{as}, will only permit instructions to
9676 be used that are valid for the subtype of the file it is generating,
9677 so you cannot put 64-bit instructions in an @samp{ppc750} object file.
9678 The linker for shared libraries, @file{/usr/bin/libtool}, will fail
9679 and print an error if asked to create a shared library with a less
9680 restrictive subtype than its input files (for instance, trying to put
9681 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
9682 for executables, @file{ld}, will quietly give the executable the most
9683 restrictive subtype of any of its input files.
9684
9685 @table @gcctabopt
9686 @item -F@var{dir}
9687 @opindex F
9688 Add the framework directory @var{dir} to the head of the list of
9689 directories to be searched for header files.  These directories are
9690 interleaved with those specified by @option{-I} options and are
9691 scanned in a left-to-right order.
9692
9693 A framework directory is a directory with frameworks in it.  A
9694 framework is a directory with a @samp{"Headers"} and/or
9695 @samp{"PrivateHeaders"} directory contained directly in it that ends
9696 in @samp{".framework"}.  The name of a framework is the name of this
9697 directory excluding the @samp{".framework"}.  Headers associated with
9698 the framework are found in one of those two directories, with
9699 @samp{"Headers"} being searched first.  A subframework is a framework
9700 directory that is in a framework's @samp{"Frameworks"} directory.
9701 Includes of subframework headers can only appear in a header of a
9702 framework that contains the subframework, or in a sibling subframework
9703 header.  Two subframeworks are siblings if they occur in the same
9704 framework.  A subframework should not have the same name as a
9705 framework, a warning will be issued if this is violated.  Currently a
9706 subframework cannot have subframeworks, in the future, the mechanism
9707 may be extended to support this.  The standard frameworks can be found
9708 in @samp{"/System/Library/Frameworks"} and
9709 @samp{"/Library/Frameworks"}.  An example include looks like
9710 @code{#include <Framework/header.h>}, where @samp{Framework} denotes
9711 the name of the framework and header.h is found in the
9712 @samp{"PrivateHeaders"} or @samp{"Headers"} directory.
9713
9714 @item -iframework@var{dir}
9715 @opindex iframework
9716 Like @option{-F} except the directory is a treated as a system
9717 directory.  The main difference between this @option{-iframework} and
9718 @option{-F} is that with @option{-iframework} the compiler does not
9719 warn about constructs contained within header files found via
9720 @var{dir}.  This option is valid only for the C family of languages.
9721
9722 @item -gused
9723 @opindex gused
9724 Emit debugging information for symbols that are used.  For STABS
9725 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
9726 This is by default ON@.
9727
9728 @item -gfull
9729 @opindex gfull
9730 Emit debugging information for all symbols and types.
9731
9732 @item -mmacosx-version-min=@var{version}
9733 The earliest version of MacOS X that this executable will run on
9734 is @var{version}.  Typical values of @var{version} include @code{10.1},
9735 @code{10.2}, and @code{10.3.9}.
9736
9737 If the compiler was built to use the system's headers by default,
9738 then the default for this option is the system version on which the
9739 compiler is running, otherwise the default is to make choices which
9740 are compatible with as many systems and code bases as possible.
9741
9742 @item -mkernel
9743 @opindex mkernel
9744 Enable kernel development mode.  The @option{-mkernel} option sets
9745 @option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
9746 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
9747 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
9748 applicable.  This mode also sets @option{-mno-altivec},
9749 @option{-msoft-float}, @option{-fno-builtin} and
9750 @option{-mlong-branch} for PowerPC targets.
9751
9752 @item -mone-byte-bool
9753 @opindex mone-byte-bool
9754 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
9755 By default @samp{sizeof(bool)} is @samp{4} when compiling for
9756 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
9757 option has no effect on x86.
9758
9759 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
9760 to generate code that is not binary compatible with code generated
9761 without that switch.  Using this switch may require recompiling all
9762 other modules in a program, including system libraries.  Use this
9763 switch to conform to a non-default data model.
9764
9765 @item -mfix-and-continue
9766 @itemx -ffix-and-continue
9767 @itemx -findirect-data
9768 @opindex mfix-and-continue
9769 @opindex ffix-and-continue
9770 @opindex findirect-data
9771 Generate code suitable for fast turn around development.  Needed to
9772 enable gdb to dynamically load @code{.o} files into already running
9773 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
9774 are provided for backwards compatibility.
9775
9776 @item -all_load
9777 @opindex all_load
9778 Loads all members of static archive libraries.
9779 See man ld(1) for more information.
9780
9781 @item -arch_errors_fatal
9782 @opindex arch_errors_fatal
9783 Cause the errors having to do with files that have the wrong architecture
9784 to be fatal.
9785
9786 @item -bind_at_load
9787 @opindex bind_at_load
9788 Causes the output file to be marked such that the dynamic linker will
9789 bind all undefined references when the file is loaded or launched.
9790
9791 @item -bundle
9792 @opindex bundle
9793 Produce a Mach-o bundle format file.
9794 See man ld(1) for more information.
9795
9796 @item -bundle_loader @var{executable}
9797 @opindex bundle_loader
9798 This option specifies the @var{executable} that will be loading the build
9799 output file being linked.  See man ld(1) for more information.
9800
9801 @item -dynamiclib
9802 @opindex dynamiclib
9803 When passed this option, GCC will produce a dynamic library instead of
9804 an executable when linking, using the Darwin @file{libtool} command.
9805
9806 @item -force_cpusubtype_ALL
9807 @opindex force_cpusubtype_ALL
9808 This causes GCC's output file to have the @var{ALL} subtype, instead of
9809 one controlled by the @option{-mcpu} or @option{-march} option.
9810
9811 @item -allowable_client  @var{client_name}
9812 @itemx -client_name
9813 @itemx -compatibility_version
9814 @itemx -current_version
9815 @itemx -dead_strip
9816 @itemx -dependency-file
9817 @itemx -dylib_file
9818 @itemx -dylinker_install_name
9819 @itemx -dynamic
9820 @itemx -exported_symbols_list
9821 @itemx -filelist
9822 @itemx -flat_namespace
9823 @itemx -force_flat_namespace
9824 @itemx -headerpad_max_install_names
9825 @itemx -image_base
9826 @itemx -init
9827 @itemx -install_name
9828 @itemx -keep_private_externs
9829 @itemx -multi_module
9830 @itemx -multiply_defined
9831 @itemx -multiply_defined_unused
9832 @itemx -noall_load
9833 @itemx -no_dead_strip_inits_and_terms
9834 @itemx -nofixprebinding
9835 @itemx -nomultidefs
9836 @itemx -noprebind
9837 @itemx -noseglinkedit
9838 @itemx -pagezero_size
9839 @itemx -prebind
9840 @itemx -prebind_all_twolevel_modules
9841 @itemx -private_bundle
9842 @itemx -read_only_relocs
9843 @itemx -sectalign
9844 @itemx -sectobjectsymbols
9845 @itemx -whyload
9846 @itemx -seg1addr
9847 @itemx -sectcreate
9848 @itemx -sectobjectsymbols
9849 @itemx -sectorder
9850 @itemx -segaddr
9851 @itemx -segs_read_only_addr
9852 @itemx -segs_read_write_addr
9853 @itemx -seg_addr_table
9854 @itemx -seg_addr_table_filename
9855 @itemx -seglinkedit
9856 @itemx -segprot
9857 @itemx -segs_read_only_addr
9858 @itemx -segs_read_write_addr
9859 @itemx -single_module
9860 @itemx -static
9861 @itemx -sub_library
9862 @itemx -sub_umbrella
9863 @itemx -twolevel_namespace
9864 @itemx -umbrella
9865 @itemx -undefined
9866 @itemx -unexported_symbols_list
9867 @itemx -weak_reference_mismatches
9868 @itemx -whatsloaded
9869 @opindex allowable_client
9870 @opindex client_name
9871 @opindex compatibility_version
9872 @opindex current_version
9873 @opindex dead_strip
9874 @opindex dependency-file
9875 @opindex dylib_file
9876 @opindex dylinker_install_name
9877 @opindex dynamic
9878 @opindex exported_symbols_list
9879 @opindex filelist
9880 @opindex flat_namespace
9881 @opindex force_flat_namespace
9882 @opindex headerpad_max_install_names
9883 @opindex image_base
9884 @opindex init
9885 @opindex install_name
9886 @opindex keep_private_externs
9887 @opindex multi_module
9888 @opindex multiply_defined
9889 @opindex multiply_defined_unused
9890 @opindex noall_load
9891 @opindex no_dead_strip_inits_and_terms
9892 @opindex nofixprebinding
9893 @opindex nomultidefs
9894 @opindex noprebind
9895 @opindex noseglinkedit
9896 @opindex pagezero_size
9897 @opindex prebind
9898 @opindex prebind_all_twolevel_modules
9899 @opindex private_bundle
9900 @opindex read_only_relocs
9901 @opindex sectalign
9902 @opindex sectobjectsymbols
9903 @opindex whyload
9904 @opindex seg1addr
9905 @opindex sectcreate
9906 @opindex sectobjectsymbols
9907 @opindex sectorder
9908 @opindex segaddr
9909 @opindex segs_read_only_addr
9910 @opindex segs_read_write_addr
9911 @opindex seg_addr_table
9912 @opindex seg_addr_table_filename
9913 @opindex seglinkedit
9914 @opindex segprot
9915 @opindex segs_read_only_addr
9916 @opindex segs_read_write_addr
9917 @opindex single_module
9918 @opindex static
9919 @opindex sub_library
9920 @opindex sub_umbrella
9921 @opindex twolevel_namespace
9922 @opindex umbrella
9923 @opindex undefined
9924 @opindex unexported_symbols_list
9925 @opindex weak_reference_mismatches
9926 @opindex whatsloaded
9927 These options are passed to the Darwin linker.  The Darwin linker man page
9928 describes them in detail.
9929 @end table
9930
9931 @node DEC Alpha Options
9932 @subsection DEC Alpha Options
9933
9934 These @samp{-m} options are defined for the DEC Alpha implementations:
9935
9936 @table @gcctabopt
9937 @item -mno-soft-float
9938 @itemx -msoft-float
9939 @opindex mno-soft-float
9940 @opindex msoft-float
9941 Use (do not use) the hardware floating-point instructions for
9942 floating-point operations.  When @option{-msoft-float} is specified,
9943 functions in @file{libgcc.a} will be used to perform floating-point
9944 operations.  Unless they are replaced by routines that emulate the
9945 floating-point operations, or compiled in such a way as to call such
9946 emulations routines, these routines will issue floating-point
9947 operations.   If you are compiling for an Alpha without floating-point
9948 operations, you must ensure that the library is built so as not to call
9949 them.
9950
9951 Note that Alpha implementations without floating-point operations are
9952 required to have floating-point registers.
9953
9954 @item -mfp-reg
9955 @itemx -mno-fp-regs
9956 @opindex mfp-reg
9957 @opindex mno-fp-regs
9958 Generate code that uses (does not use) the floating-point register set.
9959 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
9960 register set is not used, floating point operands are passed in integer
9961 registers as if they were integers and floating-point results are passed
9962 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
9963 so any function with a floating-point argument or return value called by code
9964 compiled with @option{-mno-fp-regs} must also be compiled with that
9965 option.
9966
9967 A typical use of this option is building a kernel that does not use,
9968 and hence need not save and restore, any floating-point registers.
9969
9970 @item -mieee
9971 @opindex mieee
9972 The Alpha architecture implements floating-point hardware optimized for
9973 maximum performance.  It is mostly compliant with the IEEE floating
9974 point standard.  However, for full compliance, software assistance is
9975 required.  This option generates code fully IEEE compliant code
9976 @emph{except} that the @var{inexact-flag} is not maintained (see below).
9977 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
9978 defined during compilation.  The resulting code is less efficient but is
9979 able to correctly support denormalized numbers and exceptional IEEE
9980 values such as not-a-number and plus/minus infinity.  Other Alpha
9981 compilers call this option @option{-ieee_with_no_inexact}.
9982
9983 @item -mieee-with-inexact
9984 @opindex mieee-with-inexact
9985 This is like @option{-mieee} except the generated code also maintains
9986 the IEEE @var{inexact-flag}.  Turning on this option causes the
9987 generated code to implement fully-compliant IEEE math.  In addition to
9988 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
9989 macro.  On some Alpha implementations the resulting code may execute
9990 significantly slower than the code generated by default.  Since there is
9991 very little code that depends on the @var{inexact-flag}, you should
9992 normally not specify this option.  Other Alpha compilers call this
9993 option @option{-ieee_with_inexact}.
9994
9995 @item -mfp-trap-mode=@var{trap-mode}
9996 @opindex mfp-trap-mode
9997 This option controls what floating-point related traps are enabled.
9998 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
9999 The trap mode can be set to one of four values:
10000
10001 @table @samp
10002 @item n
10003 This is the default (normal) setting.  The only traps that are enabled
10004 are the ones that cannot be disabled in software (e.g., division by zero
10005 trap).
10006
10007 @item u
10008 In addition to the traps enabled by @samp{n}, underflow traps are enabled
10009 as well.
10010
10011 @item su
10012 Like @samp{u}, but the instructions are marked to be safe for software
10013 completion (see Alpha architecture manual for details).
10014
10015 @item sui
10016 Like @samp{su}, but inexact traps are enabled as well.
10017 @end table
10018
10019 @item -mfp-rounding-mode=@var{rounding-mode}
10020 @opindex mfp-rounding-mode
10021 Selects the IEEE rounding mode.  Other Alpha compilers call this option
10022 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
10023 of:
10024
10025 @table @samp
10026 @item n
10027 Normal IEEE rounding mode.  Floating point numbers are rounded towards
10028 the nearest machine number or towards the even machine number in case
10029 of a tie.
10030
10031 @item m
10032 Round towards minus infinity.
10033
10034 @item c
10035 Chopped rounding mode.  Floating point numbers are rounded towards zero.
10036
10037 @item d
10038 Dynamic rounding mode.  A field in the floating point control register
10039 (@var{fpcr}, see Alpha architecture reference manual) controls the
10040 rounding mode in effect.  The C library initializes this register for
10041 rounding towards plus infinity.  Thus, unless your program modifies the
10042 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
10043 @end table
10044
10045 @item -mtrap-precision=@var{trap-precision}
10046 @opindex mtrap-precision
10047 In the Alpha architecture, floating point traps are imprecise.  This
10048 means without software assistance it is impossible to recover from a
10049 floating trap and program execution normally needs to be terminated.
10050 GCC can generate code that can assist operating system trap handlers
10051 in determining the exact location that caused a floating point trap.
10052 Depending on the requirements of an application, different levels of
10053 precisions can be selected:
10054
10055 @table @samp
10056 @item p
10057 Program precision.  This option is the default and means a trap handler
10058 can only identify which program caused a floating point exception.
10059
10060 @item f
10061 Function precision.  The trap handler can determine the function that
10062 caused a floating point exception.
10063
10064 @item i
10065 Instruction precision.  The trap handler can determine the exact
10066 instruction that caused a floating point exception.
10067 @end table
10068
10069 Other Alpha compilers provide the equivalent options called
10070 @option{-scope_safe} and @option{-resumption_safe}.
10071
10072 @item -mieee-conformant
10073 @opindex mieee-conformant
10074 This option marks the generated code as IEEE conformant.  You must not
10075 use this option unless you also specify @option{-mtrap-precision=i} and either
10076 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
10077 is to emit the line @samp{.eflag 48} in the function prologue of the
10078 generated assembly file.  Under DEC Unix, this has the effect that
10079 IEEE-conformant math library routines will be linked in.
10080
10081 @item -mbuild-constants
10082 @opindex mbuild-constants
10083 Normally GCC examines a 32- or 64-bit integer constant to
10084 see if it can construct it from smaller constants in two or three
10085 instructions.  If it cannot, it will output the constant as a literal and
10086 generate code to load it from the data segment at runtime.
10087
10088 Use this option to require GCC to construct @emph{all} integer constants
10089 using code, even if it takes more instructions (the maximum is six).
10090
10091 You would typically use this option to build a shared library dynamic
10092 loader.  Itself a shared library, it must relocate itself in memory
10093 before it can find the variables and constants in its own data segment.
10094
10095 @item -malpha-as
10096 @itemx -mgas
10097 @opindex malpha-as
10098 @opindex mgas
10099 Select whether to generate code to be assembled by the vendor-supplied
10100 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
10101
10102 @item -mbwx
10103 @itemx -mno-bwx
10104 @itemx -mcix
10105 @itemx -mno-cix
10106 @itemx -mfix
10107 @itemx -mno-fix
10108 @itemx -mmax
10109 @itemx -mno-max
10110 @opindex mbwx
10111 @opindex mno-bwx
10112 @opindex mcix
10113 @opindex mno-cix
10114 @opindex mfix
10115 @opindex mno-fix
10116 @opindex mmax
10117 @opindex mno-max
10118 Indicate whether GCC should generate code to use the optional BWX,
10119 CIX, FIX and MAX instruction sets.  The default is to use the instruction
10120 sets supported by the CPU type specified via @option{-mcpu=} option or that
10121 of the CPU on which GCC was built if none was specified.
10122
10123 @item -mfloat-vax
10124 @itemx -mfloat-ieee
10125 @opindex mfloat-vax
10126 @opindex mfloat-ieee
10127 Generate code that uses (does not use) VAX F and G floating point
10128 arithmetic instead of IEEE single and double precision.
10129
10130 @item -mexplicit-relocs
10131 @itemx -mno-explicit-relocs
10132 @opindex mexplicit-relocs
10133 @opindex mno-explicit-relocs
10134 Older Alpha assemblers provided no way to generate symbol relocations
10135 except via assembler macros.  Use of these macros does not allow
10136 optimal instruction scheduling.  GNU binutils as of version 2.12
10137 supports a new syntax that allows the compiler to explicitly mark
10138 which relocations should apply to which instructions.  This option
10139 is mostly useful for debugging, as GCC detects the capabilities of
10140 the assembler when it is built and sets the default accordingly.
10141
10142 @item -msmall-data
10143 @itemx -mlarge-data
10144 @opindex msmall-data
10145 @opindex mlarge-data
10146 When @option{-mexplicit-relocs} is in effect, static data is
10147 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
10148 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
10149 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
10150 16-bit relocations off of the @code{$gp} register.  This limits the
10151 size of the small data area to 64KB, but allows the variables to be
10152 directly accessed via a single instruction.
10153
10154 The default is @option{-mlarge-data}.  With this option the data area
10155 is limited to just below 2GB@.  Programs that require more than 2GB of
10156 data must use @code{malloc} or @code{mmap} to allocate the data in the
10157 heap instead of in the program's data segment.
10158
10159 When generating code for shared libraries, @option{-fpic} implies
10160 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
10161
10162 @item -msmall-text
10163 @itemx -mlarge-text
10164 @opindex msmall-text
10165 @opindex mlarge-text
10166 When @option{-msmall-text} is used, the compiler assumes that the
10167 code of the entire program (or shared library) fits in 4MB, and is
10168 thus reachable with a branch instruction.  When @option{-msmall-data}
10169 is used, the compiler can assume that all local symbols share the
10170 same @code{$gp} value, and thus reduce the number of instructions
10171 required for a function call from 4 to 1.
10172
10173 The default is @option{-mlarge-text}.
10174
10175 @item -mcpu=@var{cpu_type}
10176 @opindex mcpu
10177 Set the instruction set and instruction scheduling parameters for
10178 machine type @var{cpu_type}.  You can specify either the @samp{EV}
10179 style name or the corresponding chip number.  GCC supports scheduling
10180 parameters for the EV4, EV5 and EV6 family of processors and will
10181 choose the default values for the instruction set from the processor
10182 you specify.  If you do not specify a processor type, GCC will default
10183 to the processor on which the compiler was built.
10184
10185 Supported values for @var{cpu_type} are
10186
10187 @table @samp
10188 @item ev4
10189 @itemx ev45
10190 @itemx 21064
10191 Schedules as an EV4 and has no instruction set extensions.
10192
10193 @item ev5
10194 @itemx 21164
10195 Schedules as an EV5 and has no instruction set extensions.
10196
10197 @item ev56
10198 @itemx 21164a
10199 Schedules as an EV5 and supports the BWX extension.
10200
10201 @item pca56
10202 @itemx 21164pc
10203 @itemx 21164PC
10204 Schedules as an EV5 and supports the BWX and MAX extensions.
10205
10206 @item ev6
10207 @itemx 21264
10208 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
10209
10210 @item ev67
10211 @itemx 21264a
10212 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
10213 @end table
10214
10215 @item -mtune=@var{cpu_type}
10216 @opindex mtune
10217 Set only the instruction scheduling parameters for machine type
10218 @var{cpu_type}.  The instruction set is not changed.
10219
10220 @item -mmemory-latency=@var{time}
10221 @opindex mmemory-latency
10222 Sets the latency the scheduler should assume for typical memory
10223 references as seen by the application.  This number is highly
10224 dependent on the memory access patterns used by the application
10225 and the size of the external cache on the machine.
10226
10227 Valid options for @var{time} are
10228
10229 @table @samp
10230 @item @var{number}
10231 A decimal number representing clock cycles.
10232
10233 @item L1
10234 @itemx L2
10235 @itemx L3
10236 @itemx main
10237 The compiler contains estimates of the number of clock cycles for
10238 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
10239 (also called Dcache, Scache, and Bcache), as well as to main memory.
10240 Note that L3 is only valid for EV5.
10241
10242 @end table
10243 @end table
10244
10245 @node DEC Alpha/VMS Options
10246 @subsection DEC Alpha/VMS Options
10247
10248 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
10249
10250 @table @gcctabopt
10251 @item -mvms-return-codes
10252 @opindex mvms-return-codes
10253 Return VMS condition codes from main.  The default is to return POSIX
10254 style condition (e.g.@: error) codes.
10255 @end table
10256
10257 @node FR30 Options
10258 @subsection FR30 Options
10259 @cindex FR30 Options
10260
10261 These options are defined specifically for the FR30 port.
10262
10263 @table @gcctabopt
10264
10265 @item -msmall-model
10266 @opindex msmall-model
10267 Use the small address space model.  This can produce smaller code, but
10268 it does assume that all symbolic values and addresses will fit into a
10269 20-bit range.
10270
10271 @item -mno-lsim
10272 @opindex mno-lsim
10273 Assume that run-time support has been provided and so there is no need
10274 to include the simulator library (@file{libsim.a}) on the linker
10275 command line.
10276
10277 @end table
10278
10279 @node FRV Options
10280 @subsection FRV Options
10281 @cindex FRV Options
10282
10283 @table @gcctabopt
10284 @item -mgpr-32
10285 @opindex mgpr-32
10286
10287 Only use the first 32 general purpose registers.
10288
10289 @item -mgpr-64
10290 @opindex mgpr-64
10291
10292 Use all 64 general purpose registers.
10293
10294 @item -mfpr-32
10295 @opindex mfpr-32
10296
10297 Use only the first 32 floating point registers.
10298
10299 @item -mfpr-64
10300 @opindex mfpr-64
10301
10302 Use all 64 floating point registers
10303
10304 @item -mhard-float
10305 @opindex mhard-float
10306
10307 Use hardware instructions for floating point operations.
10308
10309 @item -msoft-float
10310 @opindex msoft-float
10311
10312 Use library routines for floating point operations.
10313
10314 @item -malloc-cc
10315 @opindex malloc-cc
10316
10317 Dynamically allocate condition code registers.
10318
10319 @item -mfixed-cc
10320 @opindex mfixed-cc
10321
10322 Do not try to dynamically allocate condition code registers, only
10323 use @code{icc0} and @code{fcc0}.
10324
10325 @item -mdword
10326 @opindex mdword
10327
10328 Change ABI to use double word insns.
10329
10330 @item -mno-dword
10331 @opindex mno-dword
10332
10333 Do not use double word instructions.
10334
10335 @item -mdouble
10336 @opindex mdouble
10337
10338 Use floating point double instructions.
10339
10340 @item -mno-double
10341 @opindex mno-double
10342
10343 Do not use floating point double instructions.
10344
10345 @item -mmedia
10346 @opindex mmedia
10347
10348 Use media instructions.
10349
10350 @item -mno-media
10351 @opindex mno-media
10352
10353 Do not use media instructions.
10354
10355 @item -mmuladd
10356 @opindex mmuladd
10357
10358 Use multiply and add/subtract instructions.
10359
10360 @item -mno-muladd
10361 @opindex mno-muladd
10362
10363 Do not use multiply and add/subtract instructions.
10364
10365 @item -mfdpic
10366 @opindex mfdpic
10367
10368 Select the FDPIC ABI, that uses function descriptors to represent
10369 pointers to functions.  Without any PIC/PIE-related options, it
10370 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
10371 assumes GOT entries and small data are within a 12-bit range from the
10372 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
10373 are computed with 32 bits.
10374 With a @samp{bfin-elf} target, this option implies @option{-msim}.
10375
10376 @item -minline-plt
10377 @opindex minline-plt
10378
10379 Enable inlining of PLT entries in function calls to functions that are
10380 not known to bind locally.  It has no effect without @option{-mfdpic}.
10381 It's enabled by default if optimizing for speed and compiling for
10382 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
10383 optimization option such as @option{-O3} or above is present in the
10384 command line.
10385
10386 @item -mTLS
10387 @opindex TLS
10388
10389 Assume a large TLS segment when generating thread-local code.
10390
10391 @item -mtls
10392 @opindex tls
10393
10394 Do not assume a large TLS segment when generating thread-local code.
10395
10396 @item -mgprel-ro
10397 @opindex mgprel-ro
10398
10399 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
10400 that is known to be in read-only sections.  It's enabled by default,
10401 except for @option{-fpic} or @option{-fpie}: even though it may help
10402 make the global offset table smaller, it trades 1 instruction for 4.
10403 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
10404 one of which may be shared by multiple symbols, and it avoids the need
10405 for a GOT entry for the referenced symbol, so it's more likely to be a
10406 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
10407
10408 @item -multilib-library-pic
10409 @opindex multilib-library-pic
10410
10411 Link with the (library, not FD) pic libraries.  It's implied by
10412 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
10413 @option{-fpic} without @option{-mfdpic}.  You should never have to use
10414 it explicitly.
10415
10416 @item -mlinked-fp
10417 @opindex mlinked-fp
10418
10419 Follow the EABI requirement of always creating a frame pointer whenever
10420 a stack frame is allocated.  This option is enabled by default and can
10421 be disabled with @option{-mno-linked-fp}.
10422
10423 @item -mlong-calls
10424 @opindex mlong-calls
10425
10426 Use indirect addressing to call functions outside the current
10427 compilation unit.  This allows the functions to be placed anywhere
10428 within the 32-bit address space.
10429
10430 @item -malign-labels
10431 @opindex malign-labels
10432
10433 Try to align labels to an 8-byte boundary by inserting nops into the
10434 previous packet.  This option only has an effect when VLIW packing
10435 is enabled.  It doesn't create new packets; it merely adds nops to
10436 existing ones.
10437
10438 @item -mlibrary-pic
10439 @opindex mlibrary-pic
10440
10441 Generate position-independent EABI code.
10442
10443 @item -macc-4
10444 @opindex macc-4
10445
10446 Use only the first four media accumulator registers.
10447
10448 @item -macc-8
10449 @opindex macc-8
10450
10451 Use all eight media accumulator registers.
10452
10453 @item -mpack
10454 @opindex mpack
10455
10456 Pack VLIW instructions.
10457
10458 @item -mno-pack
10459 @opindex mno-pack
10460
10461 Do not pack VLIW instructions.
10462
10463 @item -mno-eflags
10464 @opindex mno-eflags
10465
10466 Do not mark ABI switches in e_flags.
10467
10468 @item -mcond-move
10469 @opindex mcond-move
10470
10471 Enable the use of conditional-move instructions (default).
10472
10473 This switch is mainly for debugging the compiler and will likely be removed
10474 in a future version.
10475
10476 @item -mno-cond-move
10477 @opindex mno-cond-move
10478
10479 Disable the use of conditional-move instructions.
10480
10481 This switch is mainly for debugging the compiler and will likely be removed
10482 in a future version.
10483
10484 @item -mscc
10485 @opindex mscc
10486
10487 Enable the use of conditional set instructions (default).
10488
10489 This switch is mainly for debugging the compiler and will likely be removed
10490 in a future version.
10491
10492 @item -mno-scc
10493 @opindex mno-scc
10494
10495 Disable the use of conditional set instructions.
10496
10497 This switch is mainly for debugging the compiler and will likely be removed
10498 in a future version.
10499
10500 @item -mcond-exec
10501 @opindex mcond-exec
10502
10503 Enable the use of conditional execution (default).
10504
10505 This switch is mainly for debugging the compiler and will likely be removed
10506 in a future version.
10507
10508 @item -mno-cond-exec
10509 @opindex mno-cond-exec
10510
10511 Disable the use of conditional execution.
10512
10513 This switch is mainly for debugging the compiler and will likely be removed
10514 in a future version.
10515
10516 @item -mvliw-branch
10517 @opindex mvliw-branch
10518
10519 Run a pass to pack branches into VLIW instructions (default).
10520
10521 This switch is mainly for debugging the compiler and will likely be removed
10522 in a future version.
10523
10524 @item -mno-vliw-branch
10525 @opindex mno-vliw-branch
10526
10527 Do not run a pass to pack branches into VLIW instructions.
10528
10529 This switch is mainly for debugging the compiler and will likely be removed
10530 in a future version.
10531
10532 @item -mmulti-cond-exec
10533 @opindex mmulti-cond-exec
10534
10535 Enable optimization of @code{&&} and @code{||} in conditional execution
10536 (default).
10537
10538 This switch is mainly for debugging the compiler and will likely be removed
10539 in a future version.
10540
10541 @item -mno-multi-cond-exec
10542 @opindex mno-multi-cond-exec
10543
10544 Disable optimization of @code{&&} and @code{||} in conditional execution.
10545
10546 This switch is mainly for debugging the compiler and will likely be removed
10547 in a future version.
10548
10549 @item -mnested-cond-exec
10550 @opindex mnested-cond-exec
10551
10552 Enable nested conditional execution optimizations (default).
10553
10554 This switch is mainly for debugging the compiler and will likely be removed
10555 in a future version.
10556
10557 @item -mno-nested-cond-exec
10558 @opindex mno-nested-cond-exec
10559
10560 Disable nested conditional execution optimizations.
10561
10562 This switch is mainly for debugging the compiler and will likely be removed
10563 in a future version.
10564
10565 @item -moptimize-membar
10566 @opindex moptimize-membar
10567
10568 This switch removes redundant @code{membar} instructions from the
10569 compiler generated code.  It is enabled by default.
10570
10571 @item -mno-optimize-membar
10572 @opindex mno-optimize-membar
10573
10574 This switch disables the automatic removal of redundant @code{membar}
10575 instructions from the generated code.
10576
10577 @item -mtomcat-stats
10578 @opindex mtomcat-stats
10579
10580 Cause gas to print out tomcat statistics.
10581
10582 @item -mcpu=@var{cpu}
10583 @opindex mcpu
10584
10585 Select the processor type for which to generate code.  Possible values are
10586 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
10587 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
10588
10589 @end table
10590
10591 @node GNU/Linux Options
10592 @subsection GNU/Linux Options
10593
10594 These @samp{-m} options are defined for GNU/Linux targets:
10595
10596 @table @gcctabopt
10597 @item -mglibc
10598 @opindex mglibc
10599 Use the GNU C library instead of uClibc.  This is the default except
10600 on @samp{*-*-linux-*uclibc*} targets.
10601
10602 @item -muclibc
10603 @opindex muclibc
10604 Use uClibc instead of the GNU C library.  This is the default on
10605 @samp{*-*-linux-*uclibc*} targets.
10606 @end table
10607
10608 @node H8/300 Options
10609 @subsection H8/300 Options
10610
10611 These @samp{-m} options are defined for the H8/300 implementations:
10612
10613 @table @gcctabopt
10614 @item -mrelax
10615 @opindex mrelax
10616 Shorten some address references at link time, when possible; uses the
10617 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
10618 ld, Using ld}, for a fuller description.
10619
10620 @item -mh
10621 @opindex mh
10622 Generate code for the H8/300H@.
10623
10624 @item -ms
10625 @opindex ms
10626 Generate code for the H8S@.
10627
10628 @item -mn
10629 @opindex mn
10630 Generate code for the H8S and H8/300H in the normal mode.  This switch
10631 must be used either with @option{-mh} or @option{-ms}.
10632
10633 @item -ms2600
10634 @opindex ms2600
10635 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
10636
10637 @item -mint32
10638 @opindex mint32
10639 Make @code{int} data 32 bits by default.
10640
10641 @item -malign-300
10642 @opindex malign-300
10643 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
10644 The default for the H8/300H and H8S is to align longs and floats on 4
10645 byte boundaries.
10646 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
10647 This option has no effect on the H8/300.
10648 @end table
10649
10650 @node HPPA Options
10651 @subsection HPPA Options
10652 @cindex HPPA Options
10653
10654 These @samp{-m} options are defined for the HPPA family of computers:
10655
10656 @table @gcctabopt
10657 @item -march=@var{architecture-type}
10658 @opindex march
10659 Generate code for the specified architecture.  The choices for
10660 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
10661 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
10662 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
10663 architecture option for your machine.  Code compiled for lower numbered
10664 architectures will run on higher numbered architectures, but not the
10665 other way around.
10666
10667 @item -mpa-risc-1-0
10668 @itemx -mpa-risc-1-1
10669 @itemx -mpa-risc-2-0
10670 @opindex mpa-risc-1-0
10671 @opindex mpa-risc-1-1
10672 @opindex mpa-risc-2-0
10673 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
10674
10675 @item -mbig-switch
10676 @opindex mbig-switch
10677 Generate code suitable for big switch tables.  Use this option only if
10678 the assembler/linker complain about out of range branches within a switch
10679 table.
10680
10681 @item -mjump-in-delay
10682 @opindex mjump-in-delay
10683 Fill delay slots of function calls with unconditional jump instructions
10684 by modifying the return pointer for the function call to be the target
10685 of the conditional jump.
10686
10687 @item -mdisable-fpregs
10688 @opindex mdisable-fpregs
10689 Prevent floating point registers from being used in any manner.  This is
10690 necessary for compiling kernels which perform lazy context switching of
10691 floating point registers.  If you use this option and attempt to perform
10692 floating point operations, the compiler will abort.
10693
10694 @item -mdisable-indexing
10695 @opindex mdisable-indexing
10696 Prevent the compiler from using indexing address modes.  This avoids some
10697 rather obscure problems when compiling MIG generated code under MACH@.
10698
10699 @item -mno-space-regs
10700 @opindex mno-space-regs
10701 Generate code that assumes the target has no space registers.  This allows
10702 GCC to generate faster indirect calls and use unscaled index address modes.
10703
10704 Such code is suitable for level 0 PA systems and kernels.
10705
10706 @item -mfast-indirect-calls
10707 @opindex mfast-indirect-calls
10708 Generate code that assumes calls never cross space boundaries.  This
10709 allows GCC to emit code which performs faster indirect calls.
10710
10711 This option will not work in the presence of shared libraries or nested
10712 functions.
10713
10714 @item -mfixed-range=@var{register-range}
10715 @opindex mfixed-range
10716 Generate code treating the given register range as fixed registers.
10717 A fixed register is one that the register allocator can not use.  This is
10718 useful when compiling kernel code.  A register range is specified as
10719 two registers separated by a dash.  Multiple register ranges can be
10720 specified separated by a comma.
10721
10722 @item -mlong-load-store
10723 @opindex mlong-load-store
10724 Generate 3-instruction load and store sequences as sometimes required by
10725 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
10726 the HP compilers.
10727
10728 @item -mportable-runtime
10729 @opindex mportable-runtime
10730 Use the portable calling conventions proposed by HP for ELF systems.
10731
10732 @item -mgas
10733 @opindex mgas
10734 Enable the use of assembler directives only GAS understands.
10735
10736 @item -mschedule=@var{cpu-type}
10737 @opindex mschedule
10738 Schedule code according to the constraints for the machine type
10739 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
10740 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
10741 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
10742 proper scheduling option for your machine.  The default scheduling is
10743 @samp{8000}.
10744
10745 @item -mlinker-opt
10746 @opindex mlinker-opt
10747 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
10748 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
10749 linkers in which they give bogus error messages when linking some programs.
10750
10751 @item -msoft-float
10752 @opindex msoft-float
10753 Generate output containing library calls for floating point.
10754 @strong{Warning:} the requisite libraries are not available for all HPPA
10755 targets.  Normally the facilities of the machine's usual C compiler are
10756 used, but this cannot be done directly in cross-compilation.  You must make
10757 your own arrangements to provide suitable library functions for
10758 cross-compilation.
10759
10760 @option{-msoft-float} changes the calling convention in the output file;
10761 therefore, it is only useful if you compile @emph{all} of a program with
10762 this option.  In particular, you need to compile @file{libgcc.a}, the
10763 library that comes with GCC, with @option{-msoft-float} in order for
10764 this to work.
10765
10766 @item -msio
10767 @opindex msio
10768 Generate the predefine, @code{_SIO}, for server IO@.  The default is
10769 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
10770 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
10771 options are available under HP-UX and HI-UX@.
10772
10773 @item -mgnu-ld
10774 @opindex gnu-ld
10775 Use GNU ld specific options.  This passes @option{-shared} to ld when
10776 building a shared library.  It is the default when GCC is configured,
10777 explicitly or implicitly, with the GNU linker.  This option does not
10778 have any affect on which ld is called, it only changes what parameters
10779 are passed to that ld.  The ld that is called is determined by the
10780 @option{--with-ld} configure option, GCC's program search path, and
10781 finally by the user's @env{PATH}.  The linker used by GCC can be printed
10782 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
10783 on the 64 bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
10784
10785 @item -mhp-ld
10786 @opindex hp-ld
10787 Use HP ld specific options.  This passes @option{-b} to ld when building
10788 a shared library and passes @option{+Accept TypeMismatch} to ld on all
10789 links.  It is the default when GCC is configured, explicitly or
10790 implicitly, with the HP linker.  This option does not have any affect on
10791 which ld is called, it only changes what parameters are passed to that
10792 ld.  The ld that is called is determined by the @option{--with-ld}
10793 configure option, GCC's program search path, and finally by the user's
10794 @env{PATH}.  The linker used by GCC can be printed using @samp{which
10795 `gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
10796 HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
10797
10798 @item -mlong-calls
10799 @opindex mno-long-calls
10800 Generate code that uses long call sequences.  This ensures that a call
10801 is always able to reach linker generated stubs.  The default is to generate
10802 long calls only when the distance from the call site to the beginning
10803 of the function or translation unit, as the case may be, exceeds a
10804 predefined limit set by the branch type being used.  The limits for
10805 normal calls are 7,600,000 and 240,000 bytes, respectively for the
10806 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
10807 240,000 bytes.
10808
10809 Distances are measured from the beginning of functions when using the
10810 @option{-ffunction-sections} option, or when using the @option{-mgas}
10811 and @option{-mno-portable-runtime} options together under HP-UX with
10812 the SOM linker.
10813
10814 It is normally not desirable to use this option as it will degrade
10815 performance.  However, it may be useful in large applications,
10816 particularly when partial linking is used to build the application.
10817
10818 The types of long calls used depends on the capabilities of the
10819 assembler and linker, and the type of code being generated.  The
10820 impact on systems that support long absolute calls, and long pic
10821 symbol-difference or pc-relative calls should be relatively small.
10822 However, an indirect call is used on 32-bit ELF systems in pic code
10823 and it is quite long.
10824
10825 @item -munix=@var{unix-std}
10826 @opindex march
10827 Generate compiler predefines and select a startfile for the specified
10828 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
10829 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
10830 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
10831 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
10832 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
10833 and later.
10834
10835 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
10836 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
10837 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
10838 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
10839 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
10840 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
10841
10842 It is @emph{important} to note that this option changes the interfaces
10843 for various library routines.  It also affects the operational behavior
10844 of the C library.  Thus, @emph{extreme} care is needed in using this
10845 option.
10846
10847 Library code that is intended to operate with more than one UNIX
10848 standard must test, set and restore the variable @var{__xpg4_extended_mask}
10849 as appropriate.  Most GNU software doesn't provide this capability.
10850
10851 @item -nolibdld
10852 @opindex nolibdld
10853 Suppress the generation of link options to search libdld.sl when the
10854 @option{-static} option is specified on HP-UX 10 and later.
10855
10856 @item -static
10857 @opindex static
10858 The HP-UX implementation of setlocale in libc has a dependency on
10859 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
10860 when the @option{-static} option is specified, special link options
10861 are needed to resolve this dependency.
10862
10863 On HP-UX 10 and later, the GCC driver adds the necessary options to
10864 link with libdld.sl when the @option{-static} option is specified.
10865 This causes the resulting binary to be dynamic.  On the 64-bit port,
10866 the linkers generate dynamic binaries by default in any case.  The
10867 @option{-nolibdld} option can be used to prevent the GCC driver from
10868 adding these link options.
10869
10870 @item -threads
10871 @opindex threads
10872 Add support for multithreading with the @dfn{dce thread} library
10873 under HP-UX@.  This option sets flags for both the preprocessor and
10874 linker.
10875 @end table
10876
10877 @node i386 and x86-64 Options
10878 @subsection Intel 386 and AMD x86-64 Options
10879 @cindex i386 Options
10880 @cindex x86-64 Options
10881 @cindex Intel 386 Options
10882 @cindex AMD x86-64 Options
10883
10884 These @samp{-m} options are defined for the i386 and x86-64 family of
10885 computers:
10886
10887 @table @gcctabopt
10888 @item -mtune=@var{cpu-type}
10889 @opindex mtune
10890 Tune to @var{cpu-type} everything applicable about the generated code, except
10891 for the ABI and the set of available instructions.  The choices for
10892 @var{cpu-type} are:
10893 @table @emph
10894 @item generic
10895 Produce code optimized for the most common IA32/AMD64/EM64T processors.
10896 If you know the CPU on which your code will run, then you should use
10897 the corresponding @option{-mtune} option instead of
10898 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
10899 of your application will have, then you should use this option.
10900
10901 As new processors are deployed in the marketplace, the behavior of this
10902 option will change.  Therefore, if you upgrade to a newer version of
10903 GCC, the code generated option will change to reflect the processors
10904 that were most common when that version of GCC was released.
10905
10906 There is no @option{-march=generic} option because @option{-march}
10907 indicates the instruction set the compiler can use, and there is no
10908 generic instruction set applicable to all processors.  In contrast,
10909 @option{-mtune} indicates the processor (or, in this case, collection of
10910 processors) for which the code is optimized.
10911 @item native
10912 This selects the CPU to tune for at compilation time by determining
10913 the processor type of the compiling machine.  Using @option{-mtune=native}
10914 will produce code optimized for the local machine under the constraints
10915 of the selected instruction set.  Using @option{-march=native} will
10916 enable all instruction subsets supported by the local machine (hence
10917 the result might not run on different machines).
10918 @item i386
10919 Original Intel's i386 CPU@.
10920 @item i486
10921 Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
10922 @item i586, pentium
10923 Intel Pentium CPU with no MMX support.
10924 @item pentium-mmx
10925 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
10926 @item pentiumpro
10927 Intel PentiumPro CPU@.
10928 @item i686
10929 Same as @code{generic}, but when used as @code{march} option, PentiumPro
10930 instruction set will be used, so the code will run on all i686 family chips.
10931 @item pentium2
10932 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
10933 @item pentium3, pentium3m
10934 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
10935 support.
10936 @item pentium-m
10937 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
10938 support.  Used by Centrino notebooks.
10939 @item pentium4, pentium4m
10940 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
10941 @item prescott
10942 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
10943 set support.
10944 @item nocona
10945 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
10946 SSE2 and SSE3 instruction set support.
10947 @item core2
10948 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
10949 instruction set support.
10950 @item k6
10951 AMD K6 CPU with MMX instruction set support.
10952 @item k6-2, k6-3
10953 Improved versions of AMD K6 CPU with MMX and 3dNOW!@: instruction set support.
10954 @item athlon, athlon-tbird
10955 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW!@: and SSE prefetch instructions
10956 support.
10957 @item athlon-4, athlon-xp, athlon-mp
10958 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW!@: and full SSE
10959 instruction set support.
10960 @item k8, opteron, athlon64, athlon-fx
10961 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
10962 MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW!@: and 64-bit instruction set extensions.)
10963 @item k8-sse3, opteron-sse3, athlon64-sse3
10964 Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
10965 @item amdfam10, barcelona
10966 AMD Family 10h core based CPUs with x86-64 instruction set support.  (This
10967 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!, enhanced 3dNOW!, ABM and 64-bit
10968 instruction set extensions.)
10969 @item winchip-c6
10970 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
10971 set support.
10972 @item winchip2
10973 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!@:
10974 instruction set support.
10975 @item c3
10976 Via C3 CPU with MMX and 3dNOW!@: instruction set support.  (No scheduling is
10977 implemented for this chip.)
10978 @item c3-2
10979 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
10980 implemented for this chip.)
10981 @item geode
10982 Embedded AMD CPU with MMX and 3dNOW! instruction set support.
10983 @end table
10984
10985 While picking a specific @var{cpu-type} will schedule things appropriately
10986 for that particular chip, the compiler will not generate any code that
10987 does not run on the i386 without the @option{-march=@var{cpu-type}} option
10988 being used.
10989
10990 @item -march=@var{cpu-type}
10991 @opindex march
10992 Generate instructions for the machine type @var{cpu-type}.  The choices
10993 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
10994 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
10995
10996 @item -mcpu=@var{cpu-type}
10997 @opindex mcpu
10998 A deprecated synonym for @option{-mtune}.
10999
11000 @item -mfpmath=@var{unit}
11001 @opindex march
11002 Generate floating point arithmetics for selected unit @var{unit}.  The choices
11003 for @var{unit} are:
11004
11005 @table @samp
11006 @item 387
11007 Use the standard 387 floating point coprocessor present majority of chips and
11008 emulated otherwise.  Code compiled with this option will run almost everywhere.
11009 The temporary results are computed in 80bit precision instead of precision
11010 specified by the type resulting in slightly different results compared to most
11011 of other chips.  See @option{-ffloat-store} for more detailed description.
11012
11013 This is the default choice for i386 compiler.
11014
11015 @item sse
11016 Use scalar floating point instructions present in the SSE instruction set.
11017 This instruction set is supported by Pentium3 and newer chips, in the AMD line
11018 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
11019 instruction set supports only single precision arithmetics, thus the double and
11020 extended precision arithmetics is still done using 387.  Later version, present
11021 only in Pentium4 and the future AMD x86-64 chips supports double precision
11022 arithmetics too.
11023
11024 For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
11025 or @option{-msse2} switches to enable SSE extensions and make this option
11026 effective.  For the x86-64 compiler, these extensions are enabled by default.
11027
11028 The resulting code should be considerably faster in the majority of cases and avoid
11029 the numerical instability problems of 387 code, but may break some existing
11030 code that expects temporaries to be 80bit.
11031
11032 This is the default choice for the x86-64 compiler.
11033
11034 @item sse,387
11035 @itemx sse+387
11036 @itemx both
11037 Attempt to utilize both instruction sets at once.  This effectively double the
11038 amount of available registers and on chips with separate execution units for
11039 387 and SSE the execution resources too.  Use this option with care, as it is
11040 still experimental, because the GCC register allocator does not model separate
11041 functional units well resulting in instable performance.
11042 @end table
11043
11044 @item -masm=@var{dialect}
11045 @opindex masm=@var{dialect}
11046 Output asm instructions using selected @var{dialect}.  Supported
11047 choices are @samp{intel} or @samp{att} (the default one).  Darwin does
11048 not support @samp{intel}.
11049
11050 @item -mieee-fp
11051 @itemx -mno-ieee-fp
11052 @opindex mieee-fp
11053 @opindex mno-ieee-fp
11054 Control whether or not the compiler uses IEEE floating point
11055 comparisons.  These handle correctly the case where the result of a
11056 comparison is unordered.
11057
11058 @item -msoft-float
11059 @opindex msoft-float
11060 Generate output containing library calls for floating point.
11061 @strong{Warning:} the requisite libraries are not part of GCC@.
11062 Normally the facilities of the machine's usual C compiler are used, but
11063 this can't be done directly in cross-compilation.  You must make your
11064 own arrangements to provide suitable library functions for
11065 cross-compilation.
11066
11067 On machines where a function returns floating point results in the 80387
11068 register stack, some floating point opcodes may be emitted even if
11069 @option{-msoft-float} is used.
11070
11071 @item -mno-fp-ret-in-387
11072 @opindex mno-fp-ret-in-387
11073 Do not use the FPU registers for return values of functions.
11074
11075 The usual calling convention has functions return values of types
11076 @code{float} and @code{double} in an FPU register, even if there
11077 is no FPU@.  The idea is that the operating system should emulate
11078 an FPU@.
11079
11080 The option @option{-mno-fp-ret-in-387} causes such values to be returned
11081 in ordinary CPU registers instead.
11082
11083 @item -mno-fancy-math-387
11084 @opindex mno-fancy-math-387
11085 Some 387 emulators do not support the @code{sin}, @code{cos} and
11086 @code{sqrt} instructions for the 387.  Specify this option to avoid
11087 generating those instructions.  This option is the default on FreeBSD,
11088 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
11089 indicates that the target cpu will always have an FPU and so the
11090 instruction will not need emulation.  As of revision 2.6.1, these
11091 instructions are not generated unless you also use the
11092 @option{-funsafe-math-optimizations} switch.
11093
11094 @item -malign-double
11095 @itemx -mno-align-double
11096 @opindex malign-double
11097 @opindex mno-align-double
11098 Control whether GCC aligns @code{double}, @code{long double}, and
11099 @code{long long} variables on a two word boundary or a one word
11100 boundary.  Aligning @code{double} variables on a two word boundary will
11101 produce code that runs somewhat faster on a @samp{Pentium} at the
11102 expense of more memory.
11103
11104 On x86-64, @option{-malign-double} is enabled by default.
11105
11106 @strong{Warning:} if you use the @option{-malign-double} switch,
11107 structures containing the above types will be aligned differently than
11108 the published application binary interface specifications for the 386
11109 and will not be binary compatible with structures in code compiled
11110 without that switch.
11111
11112 @item -m96bit-long-double
11113 @itemx -m128bit-long-double
11114 @opindex m96bit-long-double
11115 @opindex m128bit-long-double
11116 These switches control the size of @code{long double} type.  The i386
11117 application binary interface specifies the size to be 96 bits,
11118 so @option{-m96bit-long-double} is the default in 32 bit mode.
11119
11120 Modern architectures (Pentium and newer) would prefer @code{long double}
11121 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
11122 conforming to the ABI, this would not be possible.  So specifying a
11123 @option{-m128bit-long-double} will align @code{long double}
11124 to a 16 byte boundary by padding the @code{long double} with an additional
11125 32 bit zero.
11126
11127 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
11128 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
11129
11130 Notice that neither of these options enable any extra precision over the x87
11131 standard of 80 bits for a @code{long double}.
11132
11133 @strong{Warning:} if you override the default value for your target ABI, the
11134 structures and arrays containing @code{long double} variables will change
11135 their size as well as function calling convention for function taking
11136 @code{long double} will be modified.  Hence they will not be binary
11137 compatible with arrays or structures in code compiled without that switch.
11138
11139 @item -mlarge-data-threshold=@var{number}
11140 @opindex mlarge-data-threshold=@var{number}
11141 When @option{-mcmodel=medium} is specified, the data greater than
11142 @var{threshold} are placed in large data section.  This value must be the
11143 same across all object linked into the binary and defaults to 65535.
11144
11145 @item -mrtd
11146 @opindex mrtd
11147 Use a different function-calling convention, in which functions that
11148 take a fixed number of arguments return with the @code{ret} @var{num}
11149 instruction, which pops their arguments while returning.  This saves one
11150 instruction in the caller since there is no need to pop the arguments
11151 there.
11152
11153 You can specify that an individual function is called with this calling
11154 sequence with the function attribute @samp{stdcall}.  You can also
11155 override the @option{-mrtd} option by using the function attribute
11156 @samp{cdecl}.  @xref{Function Attributes}.
11157
11158 @strong{Warning:} this calling convention is incompatible with the one
11159 normally used on Unix, so you cannot use it if you need to call
11160 libraries compiled with the Unix compiler.
11161
11162 Also, you must provide function prototypes for all functions that
11163 take variable numbers of arguments (including @code{printf});
11164 otherwise incorrect code will be generated for calls to those
11165 functions.
11166
11167 In addition, seriously incorrect code will result if you call a
11168 function with too many arguments.  (Normally, extra arguments are
11169 harmlessly ignored.)
11170
11171 @item -mregparm=@var{num}
11172 @opindex mregparm
11173 Control how many registers are used to pass integer arguments.  By
11174 default, no registers are used to pass arguments, and at most 3
11175 registers can be used.  You can control this behavior for a specific
11176 function by using the function attribute @samp{regparm}.
11177 @xref{Function Attributes}.
11178
11179 @strong{Warning:} if you use this switch, and
11180 @var{num} is nonzero, then you must build all modules with the same
11181 value, including any libraries.  This includes the system libraries and
11182 startup modules.
11183
11184 @item -msseregparm
11185 @opindex msseregparm
11186 Use SSE register passing conventions for float and double arguments
11187 and return values.  You can control this behavior for a specific
11188 function by using the function attribute @samp{sseregparm}.
11189 @xref{Function Attributes}.
11190
11191 @strong{Warning:} if you use this switch then you must build all
11192 modules with the same value, including any libraries.  This includes
11193 the system libraries and startup modules.
11194
11195 @item -mpc32
11196 @itemx -mpc64
11197 @itemx -mpc80
11198 @opindex mpc32
11199 @opindex mpc64
11200 @opindex mpc80
11201
11202 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
11203 is specified, the significands of results of floating-point operations are
11204 rounded to 24 bits (single precision); @option{-mpc64} rounds the
11205 significands of results of floating-point operations to 53 bits (double
11206 precision) and @option{-mpc80} rounds the significands of results of
11207 floating-point operations to 64 bits (extended double precision), which is
11208 the default.  When this option is used, floating-point operations in higher
11209 precisions are not available to the programmer without setting the FPU
11210 control word explicitly.
11211
11212 Setting the rounding of floating-point operations to less than the default
11213 80 bits can speed some programs by 2% or more.  Note that some mathematical
11214 libraries assume that extended precision (80 bit) floating-point operations
11215 are enabled by default; routines in such libraries could suffer significant
11216 loss of accuracy, typically through so-called "catastrophic cancellation",
11217 when this option is used to set the precision to less than extended precision. 
11218
11219 @item -mstackrealign
11220 @opindex mstackrealign
11221 Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
11222 option will generate an alternate prologue and epilogue that realigns the
11223 runtime stack if necessary.  This supports mixing legacy codes that keep
11224 a 4-byte aligned stack with modern codes that keep a 16-byte stack for
11225 SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
11226 applicable to individual functions.
11227
11228 @item -mpreferred-stack-boundary=@var{num}
11229 @opindex mpreferred-stack-boundary
11230 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
11231 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
11232 the default is 4 (16 bytes or 128 bits).
11233
11234 @item -mincoming-stack-boundary=@var{num}
11235 @opindex mincoming-stack-boundary
11236 Assume the incoming stack is aligned to a 2 raised to @var{num} byte
11237 boundary.  If @option{-mincoming-stack-boundary} is not specified,
11238 the one specified by @option{-mpreferred-stack-boundary} will be used.
11239
11240 On Pentium and PentiumPro, @code{double} and @code{long double} values
11241 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
11242 suffer significant run time performance penalties.  On Pentium III, the
11243 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
11244 properly if it is not 16 byte aligned.
11245
11246 To ensure proper alignment of this values on the stack, the stack boundary
11247 must be as aligned as that required by any value stored on the stack.
11248 Further, every function must be generated such that it keeps the stack
11249 aligned.  Thus calling a function compiled with a higher preferred
11250 stack boundary from a function compiled with a lower preferred stack
11251 boundary will most likely misalign the stack.  It is recommended that
11252 libraries that use callbacks always use the default setting.
11253
11254 This extra alignment does consume extra stack space, and generally
11255 increases code size.  Code that is sensitive to stack space usage, such
11256 as embedded systems and operating system kernels, may want to reduce the
11257 preferred alignment to @option{-mpreferred-stack-boundary=2}.
11258
11259 @item -mmmx
11260 @itemx -mno-mmx
11261 @itemx -msse
11262 @itemx -mno-sse
11263 @itemx -msse2
11264 @itemx -mno-sse2
11265 @itemx -msse3
11266 @itemx -mno-sse3
11267 @itemx -mssse3
11268 @itemx -mno-ssse3
11269 @itemx -msse4.1
11270 @itemx -mno-sse4.1
11271 @itemx -msse4.2
11272 @itemx -mno-sse4.2
11273 @itemx -msse4
11274 @itemx -mno-sse4
11275 @itemx -mavx
11276 @itemx -mno-avx
11277 @itemx -maes
11278 @itemx -mno-aes
11279 @itemx -mpclmul
11280 @itemx -mno-pclmul
11281 @itemx -msse4a
11282 @itemx -mno-sse4a
11283 @itemx -msse5
11284 @itemx -mno-sse5
11285 @itemx -m3dnow
11286 @itemx -mno-3dnow
11287 @itemx -mpopcnt
11288 @itemx -mno-popcnt
11289 @itemx -mabm
11290 @itemx -mno-abm
11291 @opindex mmmx
11292 @opindex mno-mmx
11293 @opindex msse
11294 @opindex mno-sse
11295 @opindex m3dnow
11296 @opindex mno-3dnow
11297 These switches enable or disable the use of instructions in the MMX,
11298 SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, SSE5, ABM or
11299 3DNow!@: extended instruction sets.
11300 These extensions are also available as built-in functions: see
11301 @ref{X86 Built-in Functions}, for details of the functions enabled and
11302 disabled by these switches.
11303
11304 To have SSE/SSE2 instructions generated automatically from floating-point
11305 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
11306
11307 GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
11308 generates new AVX instructions or AVX equivalence for all SSEx instructions
11309 when needed.
11310
11311 These options will enable GCC to use these extended instructions in
11312 generated code, even without @option{-mfpmath=sse}.  Applications which
11313 perform runtime CPU detection must compile separate files for each
11314 supported architecture, using the appropriate flags.  In particular,
11315 the file containing the CPU detection code should be compiled without
11316 these options.
11317
11318 @item -mcld
11319 @opindex mcld
11320 This option instructs GCC to emit a @code{cld} instruction in the prologue
11321 of functions that use string instructions.  String instructions depend on
11322 the DF flag to select between autoincrement or autodecrement mode.  While the
11323 ABI specifies the DF flag to be cleared on function entry, some operating
11324 systems violate this specification by not clearing the DF flag in their
11325 exception dispatchers.  The exception handler can be invoked with the DF flag
11326 set which leads to wrong direction mode, when string instructions are used.
11327 This option can be enabled by default on 32-bit x86 targets by configuring
11328 GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
11329 instructions can be suppressed with the @option{-mno-cld} compiler option
11330 in this case.
11331
11332 @item -mcx16
11333 @opindex mcx16
11334 This option will enable GCC to use CMPXCHG16B instruction in generated code.
11335 CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword)
11336 data types.  This is useful for high resolution counters that could be updated
11337 by multiple processors (or cores).  This instruction is generated as part of
11338 atomic built-in functions: see @ref{Atomic Builtins} for details.
11339
11340 @item -msahf
11341 @opindex msahf
11342 This option will enable GCC to use SAHF instruction in generated 64-bit code.
11343 Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported
11344 by AMD64 until introduction of Pentium 4 G1 step in December 2005.  LAHF and
11345 SAHF are load and store instructions, respectively, for certain status flags.
11346 In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
11347 or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
11348
11349 @item -mrecip
11350 @opindex mrecip
11351 This option will enable GCC to use RCPSS and RSQRTSS instructions (and their
11352 vectorized variants RCPPS and RSQRTPS) with an additional Newton-Rhapson step
11353 to increase precision instead of DIVSS and SQRTSS (and their vectorized
11354 variants) for single precision floating point arguments.  These instructions
11355 are generated only when @option{-funsafe-math-optimizations} is enabled
11356 together with @option{-finite-math-only} and @option{-fno-trapping-math}.
11357 Note that while the throughput of the sequence is higher than the throughput
11358 of the non-reciprocal instruction, the precision of the sequence can be
11359 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
11360
11361 @item -mveclibabi=@var{type}
11362 @opindex mveclibabi
11363 Specifies the ABI type to use for vectorizing intrinsics using an
11364 external library.  Supported types are @code{svml} for the Intel short
11365 vector math library and @code{acml} for the AMD math core library style
11366 of interfacing.  GCC will currently emit calls to @code{vmldExp2},
11367 @code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
11368 @code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
11369 @code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
11370 @code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
11371 @code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
11372 @code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
11373 @code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
11374 @code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
11375 @code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
11376 function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin},
11377 @code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
11378 @code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
11379 @code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
11380 @code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type
11381 when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and
11382 @option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI
11383 compatible library will have to be specified at link time.
11384
11385 @item -mpush-args
11386 @itemx -mno-push-args
11387 @opindex mpush-args
11388 @opindex mno-push-args
11389 Use PUSH operations to store outgoing parameters.  This method is shorter
11390 and usually equally fast as method using SUB/MOV operations and is enabled
11391 by default.  In some cases disabling it may improve performance because of
11392 improved scheduling and reduced dependencies.
11393
11394 @item -maccumulate-outgoing-args
11395 @opindex maccumulate-outgoing-args
11396 If enabled, the maximum amount of space required for outgoing arguments will be
11397 computed in the function prologue.  This is faster on most modern CPUs
11398 because of reduced dependencies, improved scheduling and reduced stack usage
11399 when preferred stack boundary is not equal to 2.  The drawback is a notable
11400 increase in code size.  This switch implies @option{-mno-push-args}.
11401
11402 @item -mthreads
11403 @opindex mthreads
11404 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
11405 on thread-safe exception handling must compile and link all code with the
11406 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
11407 @option{-D_MT}; when linking, it links in a special thread helper library
11408 @option{-lmingwthrd} which cleans up per thread exception handling data.
11409
11410 @item -mno-align-stringops
11411 @opindex mno-align-stringops
11412 Do not align destination of inlined string operations.  This switch reduces
11413 code size and improves performance in case the destination is already aligned,
11414 but GCC doesn't know about it.
11415
11416 @item -minline-all-stringops
11417 @opindex minline-all-stringops
11418 By default GCC inlines string operations only when destination is known to be
11419 aligned at least to 4 byte boundary.  This enables more inlining, increase code
11420 size, but may improve performance of code that depends on fast memcpy, strlen
11421 and memset for short lengths.
11422
11423 @item -minline-stringops-dynamically
11424 @opindex minline-stringops-dynamically
11425 For string operation of unknown size, inline runtime checks so for small
11426 blocks inline code is used, while for large blocks library call is used.
11427
11428 @item -mstringop-strategy=@var{alg}
11429 @opindex mstringop-strategy=@var{alg}
11430 Overwrite internal decision heuristic about particular algorithm to inline
11431 string operation with.  The allowed values are @code{rep_byte},
11432 @code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix
11433 of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for
11434 expanding inline loop, @code{libcall} for always expanding library call.
11435
11436 @item -momit-leaf-frame-pointer
11437 @opindex momit-leaf-frame-pointer
11438 Don't keep the frame pointer in a register for leaf functions.  This
11439 avoids the instructions to save, set up and restore frame pointers and
11440 makes an extra register available in leaf functions.  The option
11441 @option{-fomit-frame-pointer} removes the frame pointer for all functions
11442 which might make debugging harder.
11443
11444 @item -mtls-direct-seg-refs
11445 @itemx -mno-tls-direct-seg-refs
11446 @opindex mtls-direct-seg-refs
11447 Controls whether TLS variables may be accessed with offsets from the
11448 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
11449 or whether the thread base pointer must be added.  Whether or not this
11450 is legal depends on the operating system, and whether it maps the
11451 segment to cover the entire TLS area.
11452
11453 For systems that use GNU libc, the default is on.
11454
11455 @item -mfused-madd
11456 @itemx -mno-fused-madd
11457 @opindex mfused-madd
11458 Enable automatic generation of fused floating point multiply-add instructions
11459 if the ISA supports such instructions.  The -mfused-madd option is on by
11460 default.  The fused multiply-add instructions have a different
11461 rounding behavior compared to executing a multiply followed by an add.
11462
11463 @item -msse2avx
11464 @itemx -mno-sse2avx
11465 @opindex msse2avx
11466 Specify that the assembler should encode SSE instructions with VEX
11467 prefix.  The option @option{-mavx} turns this on by default.
11468 @end table
11469
11470 These @samp{-m} switches are supported in addition to the above
11471 on AMD x86-64 processors in 64-bit environments.
11472
11473 @table @gcctabopt
11474 @item -m32
11475 @itemx -m64
11476 @opindex m32
11477 @opindex m64
11478 Generate code for a 32-bit or 64-bit environment.
11479 The 32-bit environment sets int, long and pointer to 32 bits and
11480 generates code that runs on any i386 system.
11481 The 64-bit environment sets int to 32 bits and long and pointer
11482 to 64 bits and generates code for AMD's x86-64 architecture. For
11483 darwin only the -m64 option turns off the @option{-fno-pic} and
11484 @option{-mdynamic-no-pic} options.
11485
11486 @item -mno-red-zone
11487 @opindex no-red-zone
11488 Do not use a so called red zone for x86-64 code.  The red zone is mandated
11489 by the x86-64 ABI, it is a 128-byte area beyond the location of the
11490 stack pointer that will not be modified by signal or interrupt handlers
11491 and therefore can be used for temporary data without adjusting the stack
11492 pointer.  The flag @option{-mno-red-zone} disables this red zone.
11493
11494 @item -mcmodel=small
11495 @opindex mcmodel=small
11496 Generate code for the small code model: the program and its symbols must
11497 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
11498 Programs can be statically or dynamically linked.  This is the default
11499 code model.
11500
11501 @item -mcmodel=kernel
11502 @opindex mcmodel=kernel
11503 Generate code for the kernel code model.  The kernel runs in the
11504 negative 2 GB of the address space.
11505 This model has to be used for Linux kernel code.
11506
11507 @item -mcmodel=medium
11508 @opindex mcmodel=medium
11509 Generate code for the medium model: The program is linked in the lower 2
11510 GB of the address space.  Small symbols are also placed there.  Symbols
11511 with sizes larger than @option{-mlarge-data-threshold} are put into
11512 large data or bss sections and can be located above 2GB.  Programs can
11513 be statically or dynamically linked.
11514
11515 @item -mcmodel=large
11516 @opindex mcmodel=large
11517 Generate code for the large model: This model makes no assumptions
11518 about addresses and sizes of sections.
11519 @end table
11520
11521 @node IA-64 Options
11522 @subsection IA-64 Options
11523 @cindex IA-64 Options
11524
11525 These are the @samp{-m} options defined for the Intel IA-64 architecture.
11526
11527 @table @gcctabopt
11528 @item -mbig-endian
11529 @opindex mbig-endian
11530 Generate code for a big endian target.  This is the default for HP-UX@.
11531
11532 @item -mlittle-endian
11533 @opindex mlittle-endian
11534 Generate code for a little endian target.  This is the default for AIX5
11535 and GNU/Linux.
11536
11537 @item -mgnu-as
11538 @itemx -mno-gnu-as
11539 @opindex mgnu-as
11540 @opindex mno-gnu-as
11541 Generate (or don't) code for the GNU assembler.  This is the default.
11542 @c Also, this is the default if the configure option @option{--with-gnu-as}
11543 @c is used.
11544
11545 @item -mgnu-ld
11546 @itemx -mno-gnu-ld
11547 @opindex mgnu-ld
11548 @opindex mno-gnu-ld
11549 Generate (or don't) code for the GNU linker.  This is the default.
11550 @c Also, this is the default if the configure option @option{--with-gnu-ld}
11551 @c is used.
11552
11553 @item -mno-pic
11554 @opindex mno-pic
11555 Generate code that does not use a global pointer register.  The result
11556 is not position independent code, and violates the IA-64 ABI@.
11557
11558 @item -mvolatile-asm-stop
11559 @itemx -mno-volatile-asm-stop
11560 @opindex mvolatile-asm-stop
11561 @opindex mno-volatile-asm-stop
11562 Generate (or don't) a stop bit immediately before and after volatile asm
11563 statements.
11564
11565 @item -mregister-names
11566 @itemx -mno-register-names
11567 @opindex mregister-names
11568 @opindex mno-register-names
11569 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
11570 the stacked registers.  This may make assembler output more readable.
11571
11572 @item -mno-sdata
11573 @itemx -msdata
11574 @opindex mno-sdata
11575 @opindex msdata
11576 Disable (or enable) optimizations that use the small data section.  This may
11577 be useful for working around optimizer bugs.
11578
11579 @item -mconstant-gp
11580 @opindex mconstant-gp
11581 Generate code that uses a single constant global pointer value.  This is
11582 useful when compiling kernel code.
11583
11584 @item -mauto-pic
11585 @opindex mauto-pic
11586 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
11587 This is useful when compiling firmware code.
11588
11589 @item -minline-float-divide-min-latency
11590 @opindex minline-float-divide-min-latency
11591 Generate code for inline divides of floating point values
11592 using the minimum latency algorithm.
11593
11594 @item -minline-float-divide-max-throughput
11595 @opindex minline-float-divide-max-throughput
11596 Generate code for inline divides of floating point values
11597 using the maximum throughput algorithm.
11598
11599 @item -minline-int-divide-min-latency
11600 @opindex minline-int-divide-min-latency
11601 Generate code for inline divides of integer values
11602 using the minimum latency algorithm.
11603
11604 @item -minline-int-divide-max-throughput
11605 @opindex minline-int-divide-max-throughput
11606 Generate code for inline divides of integer values
11607 using the maximum throughput algorithm.
11608
11609 @item -minline-sqrt-min-latency
11610 @opindex minline-sqrt-min-latency
11611 Generate code for inline square roots
11612 using the minimum latency algorithm.
11613
11614 @item -minline-sqrt-max-throughput
11615 @opindex minline-sqrt-max-throughput
11616 Generate code for inline square roots
11617 using the maximum throughput algorithm.
11618
11619 @item -mno-dwarf2-asm
11620 @itemx -mdwarf2-asm
11621 @opindex mno-dwarf2-asm
11622 @opindex mdwarf2-asm
11623 Don't (or do) generate assembler code for the DWARF2 line number debugging
11624 info.  This may be useful when not using the GNU assembler.
11625
11626 @item -mearly-stop-bits
11627 @itemx -mno-early-stop-bits
11628 @opindex mearly-stop-bits
11629 @opindex mno-early-stop-bits
11630 Allow stop bits to be placed earlier than immediately preceding the
11631 instruction that triggered the stop bit.  This can improve instruction
11632 scheduling, but does not always do so.
11633
11634 @item -mfixed-range=@var{register-range}
11635 @opindex mfixed-range
11636 Generate code treating the given register range as fixed registers.
11637 A fixed register is one that the register allocator can not use.  This is
11638 useful when compiling kernel code.  A register range is specified as
11639 two registers separated by a dash.  Multiple register ranges can be
11640 specified separated by a comma.
11641
11642 @item -mtls-size=@var{tls-size}
11643 @opindex mtls-size
11644 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
11645 64.
11646
11647 @item -mtune=@var{cpu-type}
11648 @opindex mtune
11649 Tune the instruction scheduling for a particular CPU, Valid values are
11650 itanium, itanium1, merced, itanium2, and mckinley.
11651
11652 @item -mt
11653 @itemx -pthread
11654 @opindex mt
11655 @opindex pthread
11656 Add support for multithreading using the POSIX threads library.  This
11657 option sets flags for both the preprocessor and linker.  It does
11658 not affect the thread safety of object code produced by the compiler or
11659 that of libraries supplied with it.  These are HP-UX specific flags.
11660
11661 @item -milp32
11662 @itemx -mlp64
11663 @opindex milp32
11664 @opindex mlp64
11665 Generate code for a 32-bit or 64-bit environment.
11666 The 32-bit environment sets int, long and pointer to 32 bits.
11667 The 64-bit environment sets int to 32 bits and long and pointer
11668 to 64 bits.  These are HP-UX specific flags.
11669
11670 @item -mno-sched-br-data-spec
11671 @itemx -msched-br-data-spec
11672 @opindex mno-sched-br-data-spec
11673 @opindex msched-br-data-spec
11674 (Dis/En)able data speculative scheduling before reload.
11675 This will result in generation of the ld.a instructions and
11676 the corresponding check instructions (ld.c / chk.a).
11677 The default is 'disable'.
11678
11679 @item -msched-ar-data-spec
11680 @itemx -mno-sched-ar-data-spec
11681 @opindex msched-ar-data-spec
11682 @opindex mno-sched-ar-data-spec
11683 (En/Dis)able data speculative scheduling after reload.
11684 This will result in generation of the ld.a instructions and
11685 the corresponding check instructions (ld.c / chk.a).
11686 The default is 'enable'.
11687
11688 @item -mno-sched-control-spec
11689 @itemx -msched-control-spec
11690 @opindex mno-sched-control-spec
11691 @opindex msched-control-spec
11692 (Dis/En)able control speculative scheduling.  This feature is
11693 available only during region scheduling (i.e.@: before reload).
11694 This will result in generation of the ld.s instructions and
11695 the corresponding check instructions chk.s .
11696 The default is 'disable'.
11697
11698 @item -msched-br-in-data-spec
11699 @itemx -mno-sched-br-in-data-spec
11700 @opindex msched-br-in-data-spec
11701 @opindex mno-sched-br-in-data-spec
11702 (En/Dis)able speculative scheduling of the instructions that
11703 are dependent on the data speculative loads before reload.
11704 This is effective only with @option{-msched-br-data-spec} enabled.
11705 The default is 'enable'.
11706
11707 @item -msched-ar-in-data-spec
11708 @itemx -mno-sched-ar-in-data-spec
11709 @opindex msched-ar-in-data-spec
11710 @opindex mno-sched-ar-in-data-spec
11711 (En/Dis)able speculative scheduling of the instructions that
11712 are dependent on the data speculative loads after reload.
11713 This is effective only with @option{-msched-ar-data-spec} enabled.
11714 The default is 'enable'.
11715
11716 @item -msched-in-control-spec
11717 @itemx -mno-sched-in-control-spec
11718 @opindex msched-in-control-spec
11719 @opindex mno-sched-in-control-spec
11720 (En/Dis)able speculative scheduling of the instructions that
11721 are dependent on the control speculative loads.
11722 This is effective only with @option{-msched-control-spec} enabled.
11723 The default is 'enable'.
11724
11725 @item -msched-ldc
11726 @itemx -mno-sched-ldc
11727 @opindex msched-ldc
11728 @opindex mno-sched-ldc
11729 (En/Dis)able use of simple data speculation checks ld.c .
11730 If disabled, only chk.a instructions will be emitted to check
11731 data speculative loads.
11732 The default is 'enable'.
11733
11734 @item -mno-sched-control-ldc
11735 @itemx -msched-control-ldc
11736 @opindex mno-sched-control-ldc
11737 @opindex msched-control-ldc
11738 (Dis/En)able use of ld.c instructions to check control speculative loads.
11739 If enabled, in case of control speculative load with no speculatively
11740 scheduled dependent instructions this load will be emitted as ld.sa and
11741 ld.c will be used to check it.
11742 The default is 'disable'.
11743
11744 @item -mno-sched-spec-verbose
11745 @itemx -msched-spec-verbose
11746 @opindex mno-sched-spec-verbose
11747 @opindex msched-spec-verbose
11748 (Dis/En)able printing of the information about speculative motions.
11749
11750 @item -mno-sched-prefer-non-data-spec-insns
11751 @itemx -msched-prefer-non-data-spec-insns
11752 @opindex mno-sched-prefer-non-data-spec-insns
11753 @opindex msched-prefer-non-data-spec-insns
11754 If enabled, data speculative instructions will be chosen for schedule
11755 only if there are no other choices at the moment.  This will make
11756 the use of the data speculation much more conservative.
11757 The default is 'disable'.
11758
11759 @item -mno-sched-prefer-non-control-spec-insns
11760 @itemx -msched-prefer-non-control-spec-insns
11761 @opindex mno-sched-prefer-non-control-spec-insns
11762 @opindex msched-prefer-non-control-spec-insns
11763 If enabled, control speculative instructions will be chosen for schedule
11764 only if there are no other choices at the moment.  This will make
11765 the use of the control speculation much more conservative.
11766 The default is 'disable'.
11767
11768 @item -mno-sched-count-spec-in-critical-path
11769 @itemx -msched-count-spec-in-critical-path
11770 @opindex mno-sched-count-spec-in-critical-path
11771 @opindex msched-count-spec-in-critical-path
11772 If enabled, speculative dependencies will be considered during
11773 computation of the instructions priorities.  This will make the use of the
11774 speculation a bit more conservative.
11775 The default is 'disable'.
11776
11777 @end table
11778
11779 @node M32C Options
11780 @subsection M32C Options
11781 @cindex M32C options
11782
11783 @table @gcctabopt
11784 @item -mcpu=@var{name}
11785 @opindex mcpu=
11786 Select the CPU for which code is generated.  @var{name} may be one of
11787 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
11788 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
11789 the M32C/80 series.
11790
11791 @item -msim
11792 @opindex msim
11793 Specifies that the program will be run on the simulator.  This causes
11794 an alternate runtime library to be linked in which supports, for
11795 example, file I/O@.  You must not use this option when generating
11796 programs that will run on real hardware; you must provide your own
11797 runtime library for whatever I/O functions are needed.
11798
11799 @item -memregs=@var{number}
11800 @opindex memregs=
11801 Specifies the number of memory-based pseudo-registers GCC will use
11802 during code generation.  These pseudo-registers will be used like real
11803 registers, so there is a tradeoff between GCC's ability to fit the
11804 code into available registers, and the performance penalty of using
11805 memory instead of registers.  Note that all modules in a program must
11806 be compiled with the same value for this option.  Because of that, you
11807 must not use this option with the default runtime libraries gcc
11808 builds.
11809
11810 @end table
11811
11812 @node M32R/D Options
11813 @subsection M32R/D Options
11814 @cindex M32R/D options
11815
11816 These @option{-m} options are defined for Renesas M32R/D architectures:
11817
11818 @table @gcctabopt
11819 @item -m32r2
11820 @opindex m32r2
11821 Generate code for the M32R/2@.
11822
11823 @item -m32rx
11824 @opindex m32rx
11825 Generate code for the M32R/X@.
11826
11827 @item -m32r
11828 @opindex m32r
11829 Generate code for the M32R@.  This is the default.
11830
11831 @item -mmodel=small
11832 @opindex mmodel=small
11833 Assume all objects live in the lower 16MB of memory (so that their addresses
11834 can be loaded with the @code{ld24} instruction), and assume all subroutines
11835 are reachable with the @code{bl} instruction.
11836 This is the default.
11837
11838 The addressability of a particular object can be set with the
11839 @code{model} attribute.
11840
11841 @item -mmodel=medium
11842 @opindex mmodel=medium
11843 Assume objects may be anywhere in the 32-bit address space (the compiler
11844 will generate @code{seth/add3} instructions to load their addresses), and
11845 assume all subroutines are reachable with the @code{bl} instruction.
11846
11847 @item -mmodel=large
11848 @opindex mmodel=large
11849 Assume objects may be anywhere in the 32-bit address space (the compiler
11850 will generate @code{seth/add3} instructions to load their addresses), and
11851 assume subroutines may not be reachable with the @code{bl} instruction
11852 (the compiler will generate the much slower @code{seth/add3/jl}
11853 instruction sequence).
11854
11855 @item -msdata=none
11856 @opindex msdata=none
11857 Disable use of the small data area.  Variables will be put into
11858 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
11859 @code{section} attribute has been specified).
11860 This is the default.
11861
11862 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
11863 Objects may be explicitly put in the small data area with the
11864 @code{section} attribute using one of these sections.
11865
11866 @item -msdata=sdata
11867 @opindex msdata=sdata
11868 Put small global and static data in the small data area, but do not
11869 generate special code to reference them.
11870
11871 @item -msdata=use
11872 @opindex msdata=use
11873 Put small global and static data in the small data area, and generate
11874 special instructions to reference them.
11875
11876 @item -G @var{num}
11877 @opindex G
11878 @cindex smaller data references
11879 Put global and static objects less than or equal to @var{num} bytes
11880 into the small data or bss sections instead of the normal data or bss
11881 sections.  The default value of @var{num} is 8.
11882 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
11883 for this option to have any effect.
11884
11885 All modules should be compiled with the same @option{-G @var{num}} value.
11886 Compiling with different values of @var{num} may or may not work; if it
11887 doesn't the linker will give an error message---incorrect code will not be
11888 generated.
11889
11890 @item -mdebug
11891 @opindex mdebug
11892 Makes the M32R specific code in the compiler display some statistics
11893 that might help in debugging programs.
11894
11895 @item -malign-loops
11896 @opindex malign-loops
11897 Align all loops to a 32-byte boundary.
11898
11899 @item -mno-align-loops
11900 @opindex mno-align-loops
11901 Do not enforce a 32-byte alignment for loops.  This is the default.
11902
11903 @item -missue-rate=@var{number}
11904 @opindex missue-rate=@var{number}
11905 Issue @var{number} instructions per cycle.  @var{number} can only be 1
11906 or 2.
11907
11908 @item -mbranch-cost=@var{number}
11909 @opindex mbranch-cost=@var{number}
11910 @var{number} can only be 1 or 2.  If it is 1 then branches will be
11911 preferred over conditional code, if it is 2, then the opposite will
11912 apply.
11913
11914 @item -mflush-trap=@var{number}
11915 @opindex mflush-trap=@var{number}
11916 Specifies the trap number to use to flush the cache.  The default is
11917 12.  Valid numbers are between 0 and 15 inclusive.
11918
11919 @item -mno-flush-trap
11920 @opindex mno-flush-trap
11921 Specifies that the cache cannot be flushed by using a trap.
11922
11923 @item -mflush-func=@var{name}
11924 @opindex mflush-func=@var{name}
11925 Specifies the name of the operating system function to call to flush
11926 the cache.  The default is @emph{_flush_cache}, but a function call
11927 will only be used if a trap is not available.
11928
11929 @item -mno-flush-func
11930 @opindex mno-flush-func
11931 Indicates that there is no OS function for flushing the cache.
11932
11933 @end table
11934
11935 @node M680x0 Options
11936 @subsection M680x0 Options
11937 @cindex M680x0 options
11938
11939 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
11940 The default settings depend on which architecture was selected when
11941 the compiler was configured; the defaults for the most common choices
11942 are given below.
11943
11944 @table @gcctabopt
11945 @item -march=@var{arch}
11946 @opindex march
11947 Generate code for a specific M680x0 or ColdFire instruction set
11948 architecture.  Permissible values of @var{arch} for M680x0
11949 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
11950 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
11951 architectures are selected according to Freescale's ISA classification
11952 and the permissible values are: @samp{isaa}, @samp{isaaplus},
11953 @samp{isab} and @samp{isac}.
11954
11955 gcc defines a macro @samp{__mcf@var{arch}__} whenever it is generating
11956 code for a ColdFire target.  The @var{arch} in this macro is one of the
11957 @option{-march} arguments given above.
11958
11959 When used together, @option{-march} and @option{-mtune} select code
11960 that runs on a family of similar processors but that is optimized
11961 for a particular microarchitecture.
11962
11963 @item -mcpu=@var{cpu}
11964 @opindex mcpu
11965 Generate code for a specific M680x0 or ColdFire processor.
11966 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
11967 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
11968 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
11969 below, which also classifies the CPUs into families:
11970
11971 @multitable @columnfractions 0.20 0.80
11972 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
11973 @item @samp{51qe} @tab @samp{51qe}
11974 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
11975 @item @samp{5206e} @tab @samp{5206e}
11976 @item @samp{5208} @tab @samp{5207} @samp{5208}
11977 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
11978 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
11979 @item @samp{5216} @tab @samp{5214} @samp{5216}
11980 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
11981 @item @samp{5225} @tab @samp{5224} @samp{5225}
11982 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
11983 @item @samp{5249} @tab @samp{5249}
11984 @item @samp{5250} @tab @samp{5250}
11985 @item @samp{5271} @tab @samp{5270} @samp{5271}
11986 @item @samp{5272} @tab @samp{5272}
11987 @item @samp{5275} @tab @samp{5274} @samp{5275}
11988 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
11989 @item @samp{5307} @tab @samp{5307}
11990 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
11991 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
11992 @item @samp{5407} @tab @samp{5407}
11993 @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}
11994 @end multitable
11995
11996 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
11997 @var{arch} is compatible with @var{cpu}.  Other combinations of
11998 @option{-mcpu} and @option{-march} are rejected.
11999
12000 gcc defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
12001 @var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
12002 where the value of @var{family} is given by the table above.
12003
12004 @item -mtune=@var{tune}
12005 @opindex mtune
12006 Tune the code for a particular microarchitecture, within the
12007 constraints set by @option{-march} and @option{-mcpu}.
12008 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
12009 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
12010 and @samp{cpu32}.  The ColdFire microarchitectures
12011 are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
12012
12013 You can also use @option{-mtune=68020-40} for code that needs
12014 to run relatively well on 68020, 68030 and 68040 targets.
12015 @option{-mtune=68020-60} is similar but includes 68060 targets
12016 as well.  These two options select the same tuning decisions as
12017 @option{-m68020-40} and @option{-m68020-60} respectively.
12018
12019 gcc defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
12020 when tuning for 680x0 architecture @var{arch}.  It also defines
12021 @samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
12022 option is used.  If gcc is tuning for a range of architectures,
12023 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
12024 it defines the macros for every architecture in the range.
12025
12026 gcc also defines the macro @samp{__m@var{uarch}__} when tuning for
12027 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
12028 of the arguments given above.
12029
12030 @item -m68000
12031 @itemx -mc68000
12032 @opindex m68000
12033 @opindex mc68000
12034 Generate output for a 68000.  This is the default
12035 when the compiler is configured for 68000-based systems.
12036 It is equivalent to @option{-march=68000}.
12037
12038 Use this option for microcontrollers with a 68000 or EC000 core,
12039 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12040
12041 @item -m68010
12042 @opindex m68010
12043 Generate output for a 68010.  This is the default
12044 when the compiler is configured for 68010-based systems.
12045 It is equivalent to @option{-march=68010}.
12046
12047 @item -m68020
12048 @itemx -mc68020
12049 @opindex m68020
12050 @opindex mc68020
12051 Generate output for a 68020.  This is the default
12052 when the compiler is configured for 68020-based systems.
12053 It is equivalent to @option{-march=68020}.
12054
12055 @item -m68030
12056 @opindex m68030
12057 Generate output for a 68030.  This is the default when the compiler is
12058 configured for 68030-based systems.  It is equivalent to
12059 @option{-march=68030}.
12060
12061 @item -m68040
12062 @opindex m68040
12063 Generate output for a 68040.  This is the default when the compiler is
12064 configured for 68040-based systems.  It is equivalent to
12065 @option{-march=68040}.
12066
12067 This option inhibits the use of 68881/68882 instructions that have to be
12068 emulated by software on the 68040.  Use this option if your 68040 does not
12069 have code to emulate those instructions.
12070
12071 @item -m68060
12072 @opindex m68060
12073 Generate output for a 68060.  This is the default when the compiler is
12074 configured for 68060-based systems.  It is equivalent to
12075 @option{-march=68060}.
12076
12077 This option inhibits the use of 68020 and 68881/68882 instructions that
12078 have to be emulated by software on the 68060.  Use this option if your 68060
12079 does not have code to emulate those instructions.
12080
12081 @item -mcpu32
12082 @opindex mcpu32
12083 Generate output for a CPU32.  This is the default
12084 when the compiler is configured for CPU32-based systems.
12085 It is equivalent to @option{-march=cpu32}.
12086
12087 Use this option for microcontrollers with a
12088 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
12089 68336, 68340, 68341, 68349 and 68360.
12090
12091 @item -m5200
12092 @opindex m5200
12093 Generate output for a 520X ColdFire CPU@.  This is the default
12094 when the compiler is configured for 520X-based systems.
12095 It is equivalent to @option{-mcpu=5206}, and is now deprecated
12096 in favor of that option.
12097
12098 Use this option for microcontroller with a 5200 core, including
12099 the MCF5202, MCF5203, MCF5204 and MCF5206.
12100
12101 @item -m5206e
12102 @opindex m5206e
12103 Generate output for a 5206e ColdFire CPU@.  The option is now
12104 deprecated in favor of the equivalent @option{-mcpu=5206e}.
12105
12106 @item -m528x
12107 @opindex m528x
12108 Generate output for a member of the ColdFire 528X family.
12109 The option is now deprecated in favor of the equivalent
12110 @option{-mcpu=528x}.
12111
12112 @item -m5307
12113 @opindex m5307
12114 Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
12115 in favor of the equivalent @option{-mcpu=5307}.
12116
12117 @item -m5407
12118 @opindex m5407
12119 Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
12120 in favor of the equivalent @option{-mcpu=5407}.
12121
12122 @item -mcfv4e
12123 @opindex mcfv4e
12124 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
12125 This includes use of hardware floating point instructions.
12126 The option is equivalent to @option{-mcpu=547x}, and is now
12127 deprecated in favor of that option.
12128
12129 @item -m68020-40
12130 @opindex m68020-40
12131 Generate output for a 68040, without using any of the new instructions.
12132 This results in code which can run relatively efficiently on either a
12133 68020/68881 or a 68030 or a 68040.  The generated code does use the
12134 68881 instructions that are emulated on the 68040.
12135
12136 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
12137
12138 @item -m68020-60
12139 @opindex m68020-60
12140 Generate output for a 68060, without using any of the new instructions.
12141 This results in code which can run relatively efficiently on either a
12142 68020/68881 or a 68030 or a 68040.  The generated code does use the
12143 68881 instructions that are emulated on the 68060.
12144
12145 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
12146
12147 @item -mhard-float
12148 @itemx -m68881
12149 @opindex mhard-float
12150 @opindex m68881
12151 Generate floating-point instructions.  This is the default for 68020
12152 and above, and for ColdFire devices that have an FPU@.  It defines the
12153 macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
12154 on ColdFire targets.
12155
12156 @item -msoft-float
12157 @opindex msoft-float
12158 Do not generate floating-point instructions; use library calls instead.
12159 This is the default for 68000, 68010, and 68832 targets.  It is also
12160 the default for ColdFire devices that have no FPU.
12161
12162 @item -mdiv
12163 @itemx -mno-div
12164 @opindex mdiv
12165 @opindex mno-div
12166 Generate (do not generate) ColdFire hardware divide and remainder
12167 instructions.  If @option{-march} is used without @option{-mcpu},
12168 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
12169 architectures.  Otherwise, the default is taken from the target CPU
12170 (either the default CPU, or the one specified by @option{-mcpu}).  For
12171 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
12172 @option{-mcpu=5206e}.
12173
12174 gcc defines the macro @samp{__mcfhwdiv__} when this option is enabled.
12175
12176 @item -mshort
12177 @opindex mshort
12178 Consider type @code{int} to be 16 bits wide, like @code{short int}.
12179 Additionally, parameters passed on the stack are also aligned to a
12180 16-bit boundary even on targets whose API mandates promotion to 32-bit.
12181
12182 @item -mno-short
12183 @opindex mno-short
12184 Do not consider type @code{int} to be 16 bits wide.  This is the default.
12185
12186 @item -mnobitfield
12187 @itemx -mno-bitfield
12188 @opindex mnobitfield
12189 @opindex mno-bitfield
12190 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
12191 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
12192
12193 @item -mbitfield
12194 @opindex mbitfield
12195 Do use the bit-field instructions.  The @option{-m68020} option implies
12196 @option{-mbitfield}.  This is the default if you use a configuration
12197 designed for a 68020.
12198
12199 @item -mrtd
12200 @opindex mrtd
12201 Use a different function-calling convention, in which functions
12202 that take a fixed number of arguments return with the @code{rtd}
12203 instruction, which pops their arguments while returning.  This
12204 saves one instruction in the caller since there is no need to pop
12205 the arguments there.
12206
12207 This calling convention is incompatible with the one normally
12208 used on Unix, so you cannot use it if you need to call libraries
12209 compiled with the Unix compiler.
12210
12211 Also, you must provide function prototypes for all functions that
12212 take variable numbers of arguments (including @code{printf});
12213 otherwise incorrect code will be generated for calls to those
12214 functions.
12215
12216 In addition, seriously incorrect code will result if you call a
12217 function with too many arguments.  (Normally, extra arguments are
12218 harmlessly ignored.)
12219
12220 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
12221 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
12222
12223 @item -mno-rtd
12224 @opindex mno-rtd
12225 Do not use the calling conventions selected by @option{-mrtd}.
12226 This is the default.
12227
12228 @item -malign-int
12229 @itemx -mno-align-int
12230 @opindex malign-int
12231 @opindex mno-align-int
12232 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
12233 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
12234 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
12235 Aligning variables on 32-bit boundaries produces code that runs somewhat
12236 faster on processors with 32-bit busses at the expense of more memory.
12237
12238 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
12239 align structures containing the above types  differently than
12240 most published application binary interface specifications for the m68k.
12241
12242 @item -mpcrel
12243 @opindex mpcrel
12244 Use the pc-relative addressing mode of the 68000 directly, instead of
12245 using a global offset table.  At present, this option implies @option{-fpic},
12246 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
12247 not presently supported with @option{-mpcrel}, though this could be supported for
12248 68020 and higher processors.
12249
12250 @item -mno-strict-align
12251 @itemx -mstrict-align
12252 @opindex mno-strict-align
12253 @opindex mstrict-align
12254 Do not (do) assume that unaligned memory references will be handled by
12255 the system.
12256
12257 @item -msep-data
12258 Generate code that allows the data segment to be located in a different
12259 area of memory from the text segment.  This allows for execute in place in
12260 an environment without virtual memory management.  This option implies
12261 @option{-fPIC}.
12262
12263 @item -mno-sep-data
12264 Generate code that assumes that the data segment follows the text segment.
12265 This is the default.
12266
12267 @item -mid-shared-library
12268 Generate code that supports shared libraries via the library ID method.
12269 This allows for execute in place and shared libraries in an environment
12270 without virtual memory management.  This option implies @option{-fPIC}.
12271
12272 @item -mno-id-shared-library
12273 Generate code that doesn't assume ID based shared libraries are being used.
12274 This is the default.
12275
12276 @item -mshared-library-id=n
12277 Specified the identification number of the ID based shared library being
12278 compiled.  Specifying a value of 0 will generate more compact code, specifying
12279 other values will force the allocation of that number to the current
12280 library but is no more space or time efficient than omitting this option.
12281
12282 @item -mxgot
12283 @itemx -mno-xgot
12284 @opindex mxgot
12285 @opindex mno-xgot
12286 When generating position-independent code for ColdFire, generate code
12287 that works if the GOT has more than 8192 entries.  This code is
12288 larger and slower than code generated without this option.  On M680x0
12289 processors, this option is not needed; @option{-fPIC} suffices.
12290
12291 GCC normally uses a single instruction to load values from the GOT@.
12292 While this is relatively efficient, it only works if the GOT
12293 is smaller than about 64k.  Anything larger causes the linker
12294 to report an error such as:
12295
12296 @cindex relocation truncated to fit (ColdFire)
12297 @smallexample
12298 relocation truncated to fit: R_68K_GOT16O foobar
12299 @end smallexample
12300
12301 If this happens, you should recompile your code with @option{-mxgot}.
12302 It should then work with very large GOTs.  However, code generated with
12303 @option{-mxgot} is less efficient, since it takes 4 instructions to fetch
12304 the value of a global symbol.
12305
12306 Note that some linkers, including newer versions of the GNU linker,
12307 can create multiple GOTs and sort GOT entries.  If you have such a linker,
12308 you should only need to use @option{-mxgot} when compiling a single
12309 object file that accesses more than 8192 GOT entries.  Very few do.
12310
12311 These options have no effect unless GCC is generating
12312 position-independent code.
12313
12314 @end table
12315
12316 @node M68hc1x Options
12317 @subsection M68hc1x Options
12318 @cindex M68hc1x options
12319
12320 These are the @samp{-m} options defined for the 68hc11 and 68hc12
12321 microcontrollers.  The default values for these options depends on
12322 which style of microcontroller was selected when the compiler was configured;
12323 the defaults for the most common choices are given below.
12324
12325 @table @gcctabopt
12326 @item -m6811
12327 @itemx -m68hc11
12328 @opindex m6811
12329 @opindex m68hc11
12330 Generate output for a 68HC11.  This is the default
12331 when the compiler is configured for 68HC11-based systems.
12332
12333 @item -m6812
12334 @itemx -m68hc12
12335 @opindex m6812
12336 @opindex m68hc12
12337 Generate output for a 68HC12.  This is the default
12338 when the compiler is configured for 68HC12-based systems.
12339
12340 @item -m68S12
12341 @itemx -m68hcs12
12342 @opindex m68S12
12343 @opindex m68hcs12
12344 Generate output for a 68HCS12.
12345
12346 @item -mauto-incdec
12347 @opindex mauto-incdec
12348 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
12349 addressing modes.
12350
12351 @item -minmax
12352 @itemx -nominmax
12353 @opindex minmax
12354 @opindex mnominmax
12355 Enable the use of 68HC12 min and max instructions.
12356
12357 @item -mlong-calls
12358 @itemx -mno-long-calls
12359 @opindex mlong-calls
12360 @opindex mno-long-calls
12361 Treat all calls as being far away (near).  If calls are assumed to be
12362 far away, the compiler will use the @code{call} instruction to
12363 call a function and the @code{rtc} instruction for returning.
12364
12365 @item -mshort
12366 @opindex mshort
12367 Consider type @code{int} to be 16 bits wide, like @code{short int}.
12368
12369 @item -msoft-reg-count=@var{count}
12370 @opindex msoft-reg-count
12371 Specify the number of pseudo-soft registers which are used for the
12372 code generation.  The maximum number is 32.  Using more pseudo-soft
12373 register may or may not result in better code depending on the program.
12374 The default is 4 for 68HC11 and 2 for 68HC12.
12375
12376 @end table
12377
12378 @node MCore Options
12379 @subsection MCore Options
12380 @cindex MCore options
12381
12382 These are the @samp{-m} options defined for the Motorola M*Core
12383 processors.
12384
12385 @table @gcctabopt
12386
12387 @item -mhardlit
12388 @itemx -mno-hardlit
12389 @opindex mhardlit
12390 @opindex mno-hardlit
12391 Inline constants into the code stream if it can be done in two
12392 instructions or less.
12393
12394 @item -mdiv
12395 @itemx -mno-div
12396 @opindex mdiv
12397 @opindex mno-div
12398 Use the divide instruction.  (Enabled by default).
12399
12400 @item -mrelax-immediate
12401 @itemx -mno-relax-immediate
12402 @opindex mrelax-immediate
12403 @opindex mno-relax-immediate
12404 Allow arbitrary sized immediates in bit operations.
12405
12406 @item -mwide-bitfields
12407 @itemx -mno-wide-bitfields
12408 @opindex mwide-bitfields
12409 @opindex mno-wide-bitfields
12410 Always treat bit-fields as int-sized.
12411
12412 @item -m4byte-functions
12413 @itemx -mno-4byte-functions
12414 @opindex m4byte-functions
12415 @opindex mno-4byte-functions
12416 Force all functions to be aligned to a four byte boundary.
12417
12418 @item -mcallgraph-data
12419 @itemx -mno-callgraph-data
12420 @opindex mcallgraph-data
12421 @opindex mno-callgraph-data
12422 Emit callgraph information.
12423
12424 @item -mslow-bytes
12425 @itemx -mno-slow-bytes
12426 @opindex mslow-bytes
12427 @opindex mno-slow-bytes
12428 Prefer word access when reading byte quantities.
12429
12430 @item -mlittle-endian
12431 @itemx -mbig-endian
12432 @opindex mlittle-endian
12433 @opindex mbig-endian
12434 Generate code for a little endian target.
12435
12436 @item -m210
12437 @itemx -m340
12438 @opindex m210
12439 @opindex m340
12440 Generate code for the 210 processor.
12441
12442 @item -mno-lsim
12443 @opindex no-lsim
12444 Assume that run-time support has been provided and so omit the
12445 simulator library (@file{libsim.a)} from the linker command line.
12446
12447 @item -mstack-increment=@var{size}
12448 @opindex mstack-increment
12449 Set the maximum amount for a single stack increment operation.  Large
12450 values can increase the speed of progrqams which contain functions
12451 that need a large amount of stack space, but they can also trigger a
12452 segmentation fault if the stack is extended too much.  The default
12453 value is 0x1000.
12454
12455 @end table
12456
12457 @node MIPS Options
12458 @subsection MIPS Options
12459 @cindex MIPS options
12460
12461 @table @gcctabopt
12462
12463 @item -EB
12464 @opindex EB
12465 Generate big-endian code.
12466
12467 @item -EL
12468 @opindex EL
12469 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
12470 configurations.
12471
12472 @item -march=@var{arch}
12473 @opindex march
12474 Generate code that will run on @var{arch}, which can be the name of a
12475 generic MIPS ISA, or the name of a particular processor.
12476 The ISA names are:
12477 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
12478 @samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}.
12479 The processor names are:
12480 @samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
12481 @samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
12482 @samp{5kc}, @samp{5kf},
12483 @samp{20kc},
12484 @samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
12485 @samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
12486 @samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
12487 @samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
12488 @samp{loongson2e}, @samp{loongson2f},
12489 @samp{m4k},
12490 @samp{octeon},
12491 @samp{orion},
12492 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
12493 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
12494 @samp{rm7000}, @samp{rm9000},
12495 @samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
12496 @samp{sb1},
12497 @samp{sr71000},
12498 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
12499 @samp{vr5000}, @samp{vr5400}, @samp{vr5500}
12500 and @samp{xlr}.
12501 The special value @samp{from-abi} selects the
12502 most compatible architecture for the selected ABI (that is,
12503 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
12504
12505 Native Linux/GNU toolchains also support the value @samp{native},
12506 which selects the best architecture option for the host processor.
12507 @option{-march=native} has no effect if GCC does not recognize
12508 the processor.
12509
12510 In processor names, a final @samp{000} can be abbreviated as @samp{k}
12511 (for example, @samp{-march=r2k}).  Prefixes are optional, and
12512 @samp{vr} may be written @samp{r}.
12513
12514 Names of the form @samp{@var{n}f2_1} refer to processors with
12515 FPUs clocked at half the rate of the core, names of the form
12516 @samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
12517 rate as the core, and names of the form @samp{@var{n}f3_2} refer to
12518 processors with FPUs clocked a ratio of 3:2 with respect to the core.
12519 For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
12520 for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
12521 accepted as synonyms for @samp{@var{n}f1_1}.
12522
12523 GCC defines two macros based on the value of this option.  The first
12524 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
12525 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
12526 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
12527 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
12528 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
12529
12530 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
12531 above.  In other words, it will have the full prefix and will not
12532 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
12533 the macro names the resolved architecture (either @samp{"mips1"} or
12534 @samp{"mips3"}).  It names the default architecture when no
12535 @option{-march} option is given.
12536
12537 @item -mtune=@var{arch}
12538 @opindex mtune
12539 Optimize for @var{arch}.  Among other things, this option controls
12540 the way instructions are scheduled, and the perceived cost of arithmetic
12541 operations.  The list of @var{arch} values is the same as for
12542 @option{-march}.
12543
12544 When this option is not used, GCC will optimize for the processor
12545 specified by @option{-march}.  By using @option{-march} and
12546 @option{-mtune} together, it is possible to generate code that will
12547 run on a family of processors, but optimize the code for one
12548 particular member of that family.
12549
12550 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
12551 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
12552 @samp{-march} ones described above.
12553
12554 @item -mips1
12555 @opindex mips1
12556 Equivalent to @samp{-march=mips1}.
12557
12558 @item -mips2
12559 @opindex mips2
12560 Equivalent to @samp{-march=mips2}.
12561
12562 @item -mips3
12563 @opindex mips3
12564 Equivalent to @samp{-march=mips3}.
12565
12566 @item -mips4
12567 @opindex mips4
12568 Equivalent to @samp{-march=mips4}.
12569
12570 @item -mips32
12571 @opindex mips32
12572 Equivalent to @samp{-march=mips32}.
12573
12574 @item -mips32r2
12575 @opindex mips32r2
12576 Equivalent to @samp{-march=mips32r2}.
12577
12578 @item -mips64
12579 @opindex mips64
12580 Equivalent to @samp{-march=mips64}.
12581
12582 @item -mips64r2
12583 @opindex mips64r2
12584 Equivalent to @samp{-march=mips64r2}.
12585
12586 @item -mips16
12587 @itemx -mno-mips16
12588 @opindex mips16
12589 @opindex mno-mips16
12590 Generate (do not generate) MIPS16 code.  If GCC is targetting a
12591 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
12592
12593 MIPS16 code generation can also be controlled on a per-function basis
12594 by means of @code{mips16} and @code{nomips16} attributes.  
12595 @xref{Function Attributes}, for more information.
12596
12597 @item -mflip-mips16
12598 @opindex mflip-mips16
12599 Generate MIPS16 code on alternating functions.  This option is provided
12600 for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
12601 not intended for ordinary use in compiling user code.
12602
12603 @item -minterlink-mips16
12604 @itemx -mno-interlink-mips16
12605 @opindex minterlink-mips16
12606 @opindex mno-interlink-mips16
12607 Require (do not require) that non-MIPS16 code be link-compatible with
12608 MIPS16 code.
12609
12610 For example, non-MIPS16 code cannot jump directly to MIPS16 code;
12611 it must either use a call or an indirect jump.  @option{-minterlink-mips16}
12612 therefore disables direct jumps unless GCC knows that the target of the
12613 jump is not MIPS16.
12614
12615 @item -mabi=32
12616 @itemx -mabi=o64
12617 @itemx -mabi=n32
12618 @itemx -mabi=64
12619 @itemx -mabi=eabi
12620 @opindex mabi=32
12621 @opindex mabi=o64
12622 @opindex mabi=n32
12623 @opindex mabi=64
12624 @opindex mabi=eabi
12625 Generate code for the given ABI@.
12626
12627 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
12628 generates 64-bit code when you select a 64-bit architecture, but you
12629 can use @option{-mgp32} to get 32-bit code instead.
12630
12631 For information about the O64 ABI, see
12632 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
12633
12634 GCC supports a variant of the o32 ABI in which floating-point registers
12635 are 64 rather than 32 bits wide.  You can select this combination with
12636 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @samp{mthc1}
12637 and @samp{mfhc1} instructions and is therefore only supported for
12638 MIPS32R2 processors.
12639
12640 The register assignments for arguments and return values remain the
12641 same, but each scalar value is passed in a single 64-bit register
12642 rather than a pair of 32-bit registers.  For example, scalar
12643 floating-point values are returned in @samp{$f0} only, not a
12644 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
12645 remains the same, but all 64 bits are saved.
12646
12647 @item -mabicalls
12648 @itemx -mno-abicalls
12649 @opindex mabicalls
12650 @opindex mno-abicalls
12651 Generate (do not generate) code that is suitable for SVR4-style
12652 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
12653 systems.
12654
12655 @item -mshared
12656 @itemx -mno-shared
12657 Generate (do not generate) code that is fully position-independent,
12658 and that can therefore be linked into shared libraries.  This option
12659 only affects @option{-mabicalls}.
12660
12661 All @option{-mabicalls} code has traditionally been position-independent,
12662 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
12663 as an extension, the GNU toolchain allows executables to use absolute
12664 accesses for locally-binding symbols.  It can also use shorter GP
12665 initialization sequences and generate direct calls to locally-defined
12666 functions.  This mode is selected by @option{-mno-shared}.
12667
12668 @option{-mno-shared} depends on binutils 2.16 or higher and generates
12669 objects that can only be linked by the GNU linker.  However, the option
12670 does not affect the ABI of the final executable; it only affects the ABI
12671 of relocatable objects.  Using @option{-mno-shared} will generally make
12672 executables both smaller and quicker.
12673
12674 @option{-mshared} is the default.
12675
12676 @item -mplt
12677 @itemx -mno-plt
12678 @opindex mplt
12679 @opindex mno-plt
12680 Assume (do not assume) that the static and dynamic linkers
12681 support PLTs and copy relocations.  This option only affects
12682 @samp{-mno-shared -mabicalls}.  For the n64 ABI, this option
12683 has no effect without @samp{-msym32}.
12684
12685 You can make @option{-mplt} the default by configuring
12686 GCC with @option{--with-mips-plt}.  The default is
12687 @option{-mno-plt} otherwise.
12688
12689 @item -mxgot
12690 @itemx -mno-xgot
12691 @opindex mxgot
12692 @opindex mno-xgot
12693 Lift (do not lift) the usual restrictions on the size of the global
12694 offset table.
12695
12696 GCC normally uses a single instruction to load values from the GOT@.
12697 While this is relatively efficient, it will only work if the GOT
12698 is smaller than about 64k.  Anything larger will cause the linker
12699 to report an error such as:
12700
12701 @cindex relocation truncated to fit (MIPS)
12702 @smallexample
12703 relocation truncated to fit: R_MIPS_GOT16 foobar
12704 @end smallexample
12705
12706 If this happens, you should recompile your code with @option{-mxgot}.
12707 It should then work with very large GOTs, although it will also be
12708 less efficient, since it will take three instructions to fetch the
12709 value of a global symbol.
12710
12711 Note that some linkers can create multiple GOTs.  If you have such a
12712 linker, you should only need to use @option{-mxgot} when a single object
12713 file accesses more than 64k's worth of GOT entries.  Very few do.
12714
12715 These options have no effect unless GCC is generating position
12716 independent code.
12717
12718 @item -mgp32
12719 @opindex mgp32
12720 Assume that general-purpose registers are 32 bits wide.
12721
12722 @item -mgp64
12723 @opindex mgp64
12724 Assume that general-purpose registers are 64 bits wide.
12725
12726 @item -mfp32
12727 @opindex mfp32
12728 Assume that floating-point registers are 32 bits wide.
12729
12730 @item -mfp64
12731 @opindex mfp64
12732 Assume that floating-point registers are 64 bits wide.
12733
12734 @item -mhard-float
12735 @opindex mhard-float
12736 Use floating-point coprocessor instructions.
12737
12738 @item -msoft-float
12739 @opindex msoft-float
12740 Do not use floating-point coprocessor instructions.  Implement
12741 floating-point calculations using library calls instead.
12742
12743 @item -msingle-float
12744 @opindex msingle-float
12745 Assume that the floating-point coprocessor only supports single-precision
12746 operations.
12747
12748 @item -mdouble-float
12749 @opindex mdouble-float
12750 Assume that the floating-point coprocessor supports double-precision
12751 operations.  This is the default.
12752
12753 @item -mllsc
12754 @itemx -mno-llsc
12755 @opindex mllsc
12756 @opindex mno-llsc
12757 Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
12758 implement atomic memory built-in functions.  When neither option is
12759 specified, GCC will use the instructions if the target architecture
12760 supports them.
12761
12762 @option{-mllsc} is useful if the runtime environment can emulate the
12763 instructions and @option{-mno-llsc} can be useful when compiling for
12764 nonstandard ISAs.  You can make either option the default by
12765 configuring GCC with @option{--with-llsc} and @option{--without-llsc}
12766 respectively.  @option{--with-llsc} is the default for some
12767 configurations; see the installation documentation for details.
12768
12769 @item -mdsp
12770 @itemx -mno-dsp
12771 @opindex mdsp
12772 @opindex mno-dsp
12773 Use (do not use) revision 1 of the MIPS DSP ASE@.
12774 @xref{MIPS DSP Built-in Functions}.  This option defines the
12775 preprocessor macro @samp{__mips_dsp}.  It also defines
12776 @samp{__mips_dsp_rev} to 1.
12777
12778 @item -mdspr2
12779 @itemx -mno-dspr2
12780 @opindex mdspr2
12781 @opindex mno-dspr2
12782 Use (do not use) revision 2 of the MIPS DSP ASE@.
12783 @xref{MIPS DSP Built-in Functions}.  This option defines the
12784 preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
12785 It also defines @samp{__mips_dsp_rev} to 2.
12786
12787 @item -msmartmips
12788 @itemx -mno-smartmips
12789 @opindex msmartmips
12790 @opindex mno-smartmips
12791 Use (do not use) the MIPS SmartMIPS ASE.
12792
12793 @item -mpaired-single
12794 @itemx -mno-paired-single
12795 @opindex mpaired-single
12796 @opindex mno-paired-single
12797 Use (do not use) paired-single floating-point instructions.
12798 @xref{MIPS Paired-Single Support}.  This option requires
12799 hardware floating-point support to be enabled.
12800
12801 @item -mdmx
12802 @itemx -mno-mdmx
12803 @opindex mdmx
12804 @opindex mno-mdmx
12805 Use (do not use) MIPS Digital Media Extension instructions.
12806 This option can only be used when generating 64-bit code and requires
12807 hardware floating-point support to be enabled.
12808
12809 @item -mips3d
12810 @itemx -mno-mips3d
12811 @opindex mips3d
12812 @opindex mno-mips3d
12813 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
12814 The option @option{-mips3d} implies @option{-mpaired-single}.
12815
12816 @item -mmt
12817 @itemx -mno-mt
12818 @opindex mmt
12819 @opindex mno-mt
12820 Use (do not use) MT Multithreading instructions.
12821
12822 @item -mlong64
12823 @opindex mlong64
12824 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
12825 an explanation of the default and the way that the pointer size is
12826 determined.
12827
12828 @item -mlong32
12829 @opindex mlong32
12830 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
12831
12832 The default size of @code{int}s, @code{long}s and pointers depends on
12833 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
12834 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
12835 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
12836 or the same size as integer registers, whichever is smaller.
12837
12838 @item -msym32
12839 @itemx -mno-sym32
12840 @opindex msym32
12841 @opindex mno-sym32
12842 Assume (do not assume) that all symbols have 32-bit values, regardless
12843 of the selected ABI@.  This option is useful in combination with
12844 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
12845 to generate shorter and faster references to symbolic addresses.
12846
12847 @item -G @var{num}
12848 @opindex G
12849 Put definitions of externally-visible data in a small data section
12850 if that data is no bigger than @var{num} bytes.  GCC can then access
12851 the data more efficiently; see @option{-mgpopt} for details.
12852
12853 The default @option{-G} option depends on the configuration.
12854
12855 @item -mlocal-sdata
12856 @itemx -mno-local-sdata
12857 @opindex mlocal-sdata
12858 @opindex mno-local-sdata
12859 Extend (do not extend) the @option{-G} behavior to local data too,
12860 such as to static variables in C@.  @option{-mlocal-sdata} is the
12861 default for all configurations.
12862
12863 If the linker complains that an application is using too much small data,
12864 you might want to try rebuilding the less performance-critical parts with
12865 @option{-mno-local-sdata}.  You might also want to build large
12866 libraries with @option{-mno-local-sdata}, so that the libraries leave
12867 more room for the main program.
12868
12869 @item -mextern-sdata
12870 @itemx -mno-extern-sdata
12871 @opindex mextern-sdata
12872 @opindex mno-extern-sdata
12873 Assume (do not assume) that externally-defined data will be in
12874 a small data section if that data is within the @option{-G} limit.
12875 @option{-mextern-sdata} is the default for all configurations.
12876
12877 If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
12878 @var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
12879 that is no bigger than @var{num} bytes, you must make sure that @var{Var}
12880 is placed in a small data section.  If @var{Var} is defined by another
12881 module, you must either compile that module with a high-enough
12882 @option{-G} setting or attach a @code{section} attribute to @var{Var}'s
12883 definition.  If @var{Var} is common, you must link the application
12884 with a high-enough @option{-G} setting.
12885
12886 The easiest way of satisfying these restrictions is to compile
12887 and link every module with the same @option{-G} option.  However,
12888 you may wish to build a library that supports several different
12889 small data limits.  You can do this by compiling the library with
12890 the highest supported @option{-G} setting and additionally using
12891 @option{-mno-extern-sdata} to stop the library from making assumptions
12892 about externally-defined data.
12893
12894 @item -mgpopt
12895 @itemx -mno-gpopt
12896 @opindex mgpopt
12897 @opindex mno-gpopt
12898 Use (do not use) GP-relative accesses for symbols that are known to be
12899 in a small data section; see @option{-G}, @option{-mlocal-sdata} and
12900 @option{-mextern-sdata}.  @option{-mgpopt} is the default for all
12901 configurations.
12902
12903 @option{-mno-gpopt} is useful for cases where the @code{$gp} register
12904 might not hold the value of @code{_gp}.  For example, if the code is
12905 part of a library that might be used in a boot monitor, programs that
12906 call boot monitor routines will pass an unknown value in @code{$gp}.
12907 (In such situations, the boot monitor itself would usually be compiled
12908 with @option{-G0}.)
12909
12910 @option{-mno-gpopt} implies @option{-mno-local-sdata} and
12911 @option{-mno-extern-sdata}.
12912
12913 @item -membedded-data
12914 @itemx -mno-embedded-data
12915 @opindex membedded-data
12916 @opindex mno-embedded-data
12917 Allocate variables to the read-only data section first if possible, then
12918 next in the small data section if possible, otherwise in data.  This gives
12919 slightly slower code than the default, but reduces the amount of RAM required
12920 when executing, and thus may be preferred for some embedded systems.
12921
12922 @item -muninit-const-in-rodata
12923 @itemx -mno-uninit-const-in-rodata
12924 @opindex muninit-const-in-rodata
12925 @opindex mno-uninit-const-in-rodata
12926 Put uninitialized @code{const} variables in the read-only data section.
12927 This option is only meaningful in conjunction with @option{-membedded-data}.
12928
12929 @item -mcode-readable=@var{setting}
12930 @opindex mcode-readable
12931 Specify whether GCC may generate code that reads from executable sections.
12932 There are three possible settings:
12933
12934 @table @gcctabopt
12935 @item -mcode-readable=yes
12936 Instructions may freely access executable sections.  This is the
12937 default setting.
12938
12939 @item -mcode-readable=pcrel
12940 MIPS16 PC-relative load instructions can access executable sections,
12941 but other instructions must not do so.  This option is useful on 4KSc
12942 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
12943 It is also useful on processors that can be configured to have a dual
12944 instruction/data SRAM interface and that, like the M4K, automatically
12945 redirect PC-relative loads to the instruction RAM.
12946
12947 @item -mcode-readable=no
12948 Instructions must not access executable sections.  This option can be
12949 useful on targets that are configured to have a dual instruction/data
12950 SRAM interface but that (unlike the M4K) do not automatically redirect
12951 PC-relative loads to the instruction RAM.
12952 @end table
12953
12954 @item -msplit-addresses
12955 @itemx -mno-split-addresses
12956 @opindex msplit-addresses
12957 @opindex mno-split-addresses
12958 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
12959 relocation operators.  This option has been superseded by
12960 @option{-mexplicit-relocs} but is retained for backwards compatibility.
12961
12962 @item -mexplicit-relocs
12963 @itemx -mno-explicit-relocs
12964 @opindex mexplicit-relocs
12965 @opindex mno-explicit-relocs
12966 Use (do not use) assembler relocation operators when dealing with symbolic
12967 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
12968 is to use assembler macros instead.
12969
12970 @option{-mexplicit-relocs} is the default if GCC was configured
12971 to use an assembler that supports relocation operators.
12972
12973 @item -mcheck-zero-division
12974 @itemx -mno-check-zero-division
12975 @opindex mcheck-zero-division
12976 @opindex mno-check-zero-division
12977 Trap (do not trap) on integer division by zero.
12978
12979 The default is @option{-mcheck-zero-division}.
12980
12981 @item -mdivide-traps
12982 @itemx -mdivide-breaks
12983 @opindex mdivide-traps
12984 @opindex mdivide-breaks
12985 MIPS systems check for division by zero by generating either a
12986 conditional trap or a break instruction.  Using traps results in
12987 smaller code, but is only supported on MIPS II and later.  Also, some
12988 versions of the Linux kernel have a bug that prevents trap from
12989 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
12990 allow conditional traps on architectures that support them and
12991 @option{-mdivide-breaks} to force the use of breaks.
12992
12993 The default is usually @option{-mdivide-traps}, but this can be
12994 overridden at configure time using @option{--with-divide=breaks}.
12995 Divide-by-zero checks can be completely disabled using
12996 @option{-mno-check-zero-division}.
12997
12998 @item -mmemcpy
12999 @itemx -mno-memcpy
13000 @opindex mmemcpy
13001 @opindex mno-memcpy
13002 Force (do not force) the use of @code{memcpy()} for non-trivial block
13003 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
13004 most constant-sized copies.
13005
13006 @item -mlong-calls
13007 @itemx -mno-long-calls
13008 @opindex mlong-calls
13009 @opindex mno-long-calls
13010 Disable (do not disable) use of the @code{jal} instruction.  Calling
13011 functions using @code{jal} is more efficient but requires the caller
13012 and callee to be in the same 256 megabyte segment.
13013
13014 This option has no effect on abicalls code.  The default is
13015 @option{-mno-long-calls}.
13016
13017 @item -mmad
13018 @itemx -mno-mad
13019 @opindex mmad
13020 @opindex mno-mad
13021 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
13022 instructions, as provided by the R4650 ISA@.
13023
13024 @item -mfused-madd
13025 @itemx -mno-fused-madd
13026 @opindex mfused-madd
13027 @opindex mno-fused-madd
13028 Enable (disable) use of the floating point multiply-accumulate
13029 instructions, when they are available.  The default is
13030 @option{-mfused-madd}.
13031
13032 When multiply-accumulate instructions are used, the intermediate
13033 product is calculated to infinite precision and is not subject to
13034 the FCSR Flush to Zero bit.  This may be undesirable in some
13035 circumstances.
13036
13037 @item -nocpp
13038 @opindex nocpp
13039 Tell the MIPS assembler to not run its preprocessor over user
13040 assembler files (with a @samp{.s} suffix) when assembling them.
13041
13042 @item -mfix-r4000
13043 @itemx -mno-fix-r4000
13044 @opindex mfix-r4000
13045 @opindex mno-fix-r4000
13046 Work around certain R4000 CPU errata:
13047 @itemize @minus
13048 @item
13049 A double-word or a variable shift may give an incorrect result if executed
13050 immediately after starting an integer division.
13051 @item
13052 A double-word or a variable shift may give an incorrect result if executed
13053 while an integer multiplication is in progress.
13054 @item
13055 An integer division may give an incorrect result if started in a delay slot
13056 of a taken branch or a jump.
13057 @end itemize
13058
13059 @item -mfix-r4400
13060 @itemx -mno-fix-r4400
13061 @opindex mfix-r4400
13062 @opindex mno-fix-r4400
13063 Work around certain R4400 CPU errata:
13064 @itemize @minus
13065 @item
13066 A double-word or a variable shift may give an incorrect result if executed
13067 immediately after starting an integer division.
13068 @end itemize
13069
13070 @item -mfix-r10000
13071 @itemx -mno-fix-r10000
13072 @opindex mfix-r10000
13073 @opindex mno-fix-r10000
13074 Work around certain R10000 errata:
13075 @itemize @minus
13076 @item
13077 @code{ll}/@code{sc} sequences may not behave atomically on revisions
13078 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
13079 @end itemize
13080
13081 This option can only be used if the target architecture supports
13082 branch-likely instructions.  @option{-mfix-r10000} is the default when
13083 @option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
13084 otherwise.
13085
13086 @item -mfix-vr4120
13087 @itemx -mno-fix-vr4120
13088 @opindex mfix-vr4120
13089 Work around certain VR4120 errata:
13090 @itemize @minus
13091 @item
13092 @code{dmultu} does not always produce the correct result.
13093 @item
13094 @code{div} and @code{ddiv} do not always produce the correct result if one
13095 of the operands is negative.
13096 @end itemize
13097 The workarounds for the division errata rely on special functions in
13098 @file{libgcc.a}.  At present, these functions are only provided by
13099 the @code{mips64vr*-elf} configurations.
13100
13101 Other VR4120 errata require a nop to be inserted between certain pairs of
13102 instructions.  These errata are handled by the assembler, not by GCC itself.
13103
13104 @item -mfix-vr4130
13105 @opindex mfix-vr4130
13106 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
13107 workarounds are implemented by the assembler rather than by GCC,
13108 although GCC will avoid using @code{mflo} and @code{mfhi} if the
13109 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
13110 instructions are available instead.
13111
13112 @item -mfix-sb1
13113 @itemx -mno-fix-sb1
13114 @opindex mfix-sb1
13115 Work around certain SB-1 CPU core errata.
13116 (This flag currently works around the SB-1 revision 2
13117 ``F1'' and ``F2'' floating point errata.)
13118
13119 @item -mr10k-cache-barrier=@var{setting}
13120 @opindex mr10k-cache-barrier
13121 Specify whether GCC should insert cache barriers to avoid the
13122 side-effects of speculation on R10K processors.
13123
13124 In common with many processors, the R10K tries to predict the outcome
13125 of a conditional branch and speculatively executes instructions from
13126 the ``taken'' branch.  It later aborts these instructions if the
13127 predicted outcome was wrong.  However, on the R10K, even aborted
13128 instructions can have side effects.
13129
13130 This problem only affects kernel stores and, depending on the system,
13131 kernel loads.  As an example, a speculatively-executed store may load
13132 the target memory into cache and mark the cache line as dirty, even if
13133 the store itself is later aborted.  If a DMA operation writes to the
13134 same area of memory before the ``dirty'' line is flushed, the cached
13135 data will overwrite the DMA-ed data.  See the R10K processor manual
13136 for a full description, including other potential problems.
13137
13138 One workaround is to insert cache barrier instructions before every memory
13139 access that might be speculatively executed and that might have side
13140 effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
13141 controls GCC's implementation of this workaround.  It assumes that
13142 aborted accesses to any byte in the following regions will not have
13143 side effects:
13144
13145 @enumerate
13146 @item
13147 the memory occupied by the current function's stack frame;
13148
13149 @item
13150 the memory occupied by an incoming stack argument;
13151
13152 @item
13153 the memory occupied by an object with a link-time-constant address.
13154 @end enumerate
13155
13156 It is the kernel's responsibility to ensure that speculative
13157 accesses to these regions are indeed safe.
13158
13159 If the input program contains a function declaration such as:
13160
13161 @smallexample
13162 void foo (void);
13163 @end smallexample
13164
13165 then the implementation of @code{foo} must allow @code{j foo} and
13166 @code{jal foo} to be executed speculatively.  GCC honors this
13167 restriction for functions it compiles itself.  It expects non-GCC
13168 functions (such as hand-written assembly code) to do the same.
13169
13170 The option has three forms:
13171
13172 @table @gcctabopt
13173 @item -mr10k-cache-barrier=load-store
13174 Insert a cache barrier before a load or store that might be
13175 speculatively executed and that might have side effects even
13176 if aborted.
13177
13178 @item -mr10k-cache-barrier=store
13179 Insert a cache barrier before a store that might be speculatively
13180 executed and that might have side effects even if aborted.
13181
13182 @item -mr10k-cache-barrier=none
13183 Disable the insertion of cache barriers.  This is the default setting.
13184 @end table
13185
13186 @item -mflush-func=@var{func}
13187 @itemx -mno-flush-func
13188 @opindex mflush-func
13189 Specifies the function to call to flush the I and D caches, or to not
13190 call any such function.  If called, the function must take the same
13191 arguments as the common @code{_flush_func()}, that is, the address of the
13192 memory range for which the cache is being flushed, the size of the
13193 memory range, and the number 3 (to flush both caches).  The default
13194 depends on the target GCC was configured for, but commonly is either
13195 @samp{_flush_func} or @samp{__cpu_flush}.
13196
13197 @item mbranch-cost=@var{num}
13198 @opindex mbranch-cost
13199 Set the cost of branches to roughly @var{num} ``simple'' instructions.
13200 This cost is only a heuristic and is not guaranteed to produce
13201 consistent results across releases.  A zero cost redundantly selects
13202 the default, which is based on the @option{-mtune} setting.
13203
13204 @item -mbranch-likely
13205 @itemx -mno-branch-likely
13206 @opindex mbranch-likely
13207 @opindex mno-branch-likely
13208 Enable or disable use of Branch Likely instructions, regardless of the
13209 default for the selected architecture.  By default, Branch Likely
13210 instructions may be generated if they are supported by the selected
13211 architecture.  An exception is for the MIPS32 and MIPS64 architectures
13212 and processors which implement those architectures; for those, Branch
13213 Likely instructions will not be generated by default because the MIPS32
13214 and MIPS64 architectures specifically deprecate their use.
13215
13216 @item -mfp-exceptions
13217 @itemx -mno-fp-exceptions
13218 @opindex mfp-exceptions
13219 Specifies whether FP exceptions are enabled.  This affects how we schedule
13220 FP instructions for some processors.  The default is that FP exceptions are
13221 enabled.
13222
13223 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
13224 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
13225 FP pipe.
13226
13227 @item -mvr4130-align
13228 @itemx -mno-vr4130-align
13229 @opindex mvr4130-align
13230 The VR4130 pipeline is two-way superscalar, but can only issue two
13231 instructions together if the first one is 8-byte aligned.  When this
13232 option is enabled, GCC will align pairs of instructions that it
13233 thinks should execute in parallel.
13234
13235 This option only has an effect when optimizing for the VR4130.
13236 It normally makes code faster, but at the expense of making it bigger.
13237 It is enabled by default at optimization level @option{-O3}.
13238 @end table
13239
13240 @node MMIX Options
13241 @subsection MMIX Options
13242 @cindex MMIX Options
13243
13244 These options are defined for the MMIX:
13245
13246 @table @gcctabopt
13247 @item -mlibfuncs
13248 @itemx -mno-libfuncs
13249 @opindex mlibfuncs
13250 @opindex mno-libfuncs
13251 Specify that intrinsic library functions are being compiled, passing all
13252 values in registers, no matter the size.
13253
13254 @item -mepsilon
13255 @itemx -mno-epsilon
13256 @opindex mepsilon
13257 @opindex mno-epsilon
13258 Generate floating-point comparison instructions that compare with respect
13259 to the @code{rE} epsilon register.
13260
13261 @item -mabi=mmixware
13262 @itemx -mabi=gnu
13263 @opindex mabi-mmixware
13264 @opindex mabi=gnu
13265 Generate code that passes function parameters and return values that (in
13266 the called function) are seen as registers @code{$0} and up, as opposed to
13267 the GNU ABI which uses global registers @code{$231} and up.
13268
13269 @item -mzero-extend
13270 @itemx -mno-zero-extend
13271 @opindex mzero-extend
13272 @opindex mno-zero-extend
13273 When reading data from memory in sizes shorter than 64 bits, use (do not
13274 use) zero-extending load instructions by default, rather than
13275 sign-extending ones.
13276
13277 @item -mknuthdiv
13278 @itemx -mno-knuthdiv
13279 @opindex mknuthdiv
13280 @opindex mno-knuthdiv
13281 Make the result of a division yielding a remainder have the same sign as
13282 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
13283 remainder follows the sign of the dividend.  Both methods are
13284 arithmetically valid, the latter being almost exclusively used.
13285
13286 @item -mtoplevel-symbols
13287 @itemx -mno-toplevel-symbols
13288 @opindex mtoplevel-symbols
13289 @opindex mno-toplevel-symbols
13290 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
13291 code can be used with the @code{PREFIX} assembly directive.
13292
13293 @item -melf
13294 @opindex melf
13295 Generate an executable in the ELF format, rather than the default
13296 @samp{mmo} format used by the @command{mmix} simulator.
13297
13298 @item -mbranch-predict
13299 @itemx -mno-branch-predict
13300 @opindex mbranch-predict
13301 @opindex mno-branch-predict
13302 Use (do not use) the probable-branch instructions, when static branch
13303 prediction indicates a probable branch.
13304
13305 @item -mbase-addresses
13306 @itemx -mno-base-addresses
13307 @opindex mbase-addresses
13308 @opindex mno-base-addresses
13309 Generate (do not generate) code that uses @emph{base addresses}.  Using a
13310 base address automatically generates a request (handled by the assembler
13311 and the linker) for a constant to be set up in a global register.  The
13312 register is used for one or more base address requests within the range 0
13313 to 255 from the value held in the register.  The generally leads to short
13314 and fast code, but the number of different data items that can be
13315 addressed is limited.  This means that a program that uses lots of static
13316 data may require @option{-mno-base-addresses}.
13317
13318 @item -msingle-exit
13319 @itemx -mno-single-exit
13320 @opindex msingle-exit
13321 @opindex mno-single-exit
13322 Force (do not force) generated code to have a single exit point in each
13323 function.
13324 @end table
13325
13326 @node MN10300 Options
13327 @subsection MN10300 Options
13328 @cindex MN10300 options
13329
13330 These @option{-m} options are defined for Matsushita MN10300 architectures:
13331
13332 @table @gcctabopt
13333 @item -mmult-bug
13334 @opindex mmult-bug
13335 Generate code to avoid bugs in the multiply instructions for the MN10300
13336 processors.  This is the default.
13337
13338 @item -mno-mult-bug
13339 @opindex mno-mult-bug
13340 Do not generate code to avoid bugs in the multiply instructions for the
13341 MN10300 processors.
13342
13343 @item -mam33
13344 @opindex mam33
13345 Generate code which uses features specific to the AM33 processor.
13346
13347 @item -mno-am33
13348 @opindex mno-am33
13349 Do not generate code which uses features specific to the AM33 processor.  This
13350 is the default.
13351
13352 @item -mreturn-pointer-on-d0
13353 @opindex mreturn-pointer-on-d0
13354 When generating a function which returns a pointer, return the pointer
13355 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
13356 only in a0, and attempts to call such functions without a prototype
13357 would result in errors.  Note that this option is on by default; use
13358 @option{-mno-return-pointer-on-d0} to disable it.
13359
13360 @item -mno-crt0
13361 @opindex mno-crt0
13362 Do not link in the C run-time initialization object file.
13363
13364 @item -mrelax
13365 @opindex mrelax
13366 Indicate to the linker that it should perform a relaxation optimization pass
13367 to shorten branches, calls and absolute memory addresses.  This option only
13368 has an effect when used on the command line for the final link step.
13369
13370 This option makes symbolic debugging impossible.
13371 @end table
13372
13373 @node PDP-11 Options
13374 @subsection PDP-11 Options
13375 @cindex PDP-11 Options
13376
13377 These options are defined for the PDP-11:
13378
13379 @table @gcctabopt
13380 @item -mfpu
13381 @opindex mfpu
13382 Use hardware FPP floating point.  This is the default.  (FIS floating
13383 point on the PDP-11/40 is not supported.)
13384
13385 @item -msoft-float
13386 @opindex msoft-float
13387 Do not use hardware floating point.
13388
13389 @item -mac0
13390 @opindex mac0
13391 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
13392
13393 @item -mno-ac0
13394 @opindex mno-ac0
13395 Return floating-point results in memory.  This is the default.
13396
13397 @item -m40
13398 @opindex m40
13399 Generate code for a PDP-11/40.
13400
13401 @item -m45
13402 @opindex m45
13403 Generate code for a PDP-11/45.  This is the default.
13404
13405 @item -m10
13406 @opindex m10
13407 Generate code for a PDP-11/10.
13408
13409 @item -mbcopy-builtin
13410 @opindex bcopy-builtin
13411 Use inline @code{movmemhi} patterns for copying memory.  This is the
13412 default.
13413
13414 @item -mbcopy
13415 @opindex mbcopy
13416 Do not use inline @code{movmemhi} patterns for copying memory.
13417
13418 @item -mint16
13419 @itemx -mno-int32
13420 @opindex mint16
13421 @opindex mno-int32
13422 Use 16-bit @code{int}.  This is the default.
13423
13424 @item -mint32
13425 @itemx -mno-int16
13426 @opindex mint32
13427 @opindex mno-int16
13428 Use 32-bit @code{int}.
13429
13430 @item -mfloat64
13431 @itemx -mno-float32
13432 @opindex mfloat64
13433 @opindex mno-float32
13434 Use 64-bit @code{float}.  This is the default.
13435
13436 @item -mfloat32
13437 @itemx -mno-float64
13438 @opindex mfloat32
13439 @opindex mno-float64
13440 Use 32-bit @code{float}.
13441
13442 @item -mabshi
13443 @opindex mabshi
13444 Use @code{abshi2} pattern.  This is the default.
13445
13446 @item -mno-abshi
13447 @opindex mno-abshi
13448 Do not use @code{abshi2} pattern.
13449
13450 @item -mbranch-expensive
13451 @opindex mbranch-expensive
13452 Pretend that branches are expensive.  This is for experimenting with
13453 code generation only.
13454
13455 @item -mbranch-cheap
13456 @opindex mbranch-cheap
13457 Do not pretend that branches are expensive.  This is the default.
13458
13459 @item -msplit
13460 @opindex msplit
13461 Generate code for a system with split I&D@.
13462
13463 @item -mno-split
13464 @opindex mno-split
13465 Generate code for a system without split I&D@.  This is the default.
13466
13467 @item -munix-asm
13468 @opindex munix-asm
13469 Use Unix assembler syntax.  This is the default when configured for
13470 @samp{pdp11-*-bsd}.
13471
13472 @item -mdec-asm
13473 @opindex mdec-asm
13474 Use DEC assembler syntax.  This is the default when configured for any
13475 PDP-11 target other than @samp{pdp11-*-bsd}.
13476 @end table
13477
13478 @node picoChip Options
13479 @subsection picoChip Options
13480 @cindex picoChip options
13481
13482 These @samp{-m} options are defined for picoChip implementations:
13483
13484 @table @gcctabopt
13485
13486 @item -mae=@var{ae_type}
13487 @opindex mcpu
13488 Set the instruction set, register set, and instruction scheduling
13489 parameters for array element type @var{ae_type}.  Supported values
13490 for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
13491
13492 @option{-mae=ANY} selects a completely generic AE type.  Code
13493 generated with this option will run on any of the other AE types.  The
13494 code will not be as efficient as it would be if compiled for a specific
13495 AE type, and some types of operation (e.g., multiplication) will not
13496 work properly on all types of AE.
13497
13498 @option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
13499 for compiled code, and is the default.
13500
13501 @option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
13502 option may suffer from poor performance of byte (char) manipulation,
13503 since the DSP AE does not provide hardware support for byte load/stores.
13504
13505 @item -msymbol-as-address
13506 Enable the compiler to directly use a symbol name as an address in a
13507 load/store instruction, without first loading it into a
13508 register.  Typically, the use of this option will generate larger
13509 programs, which run faster than when the option isn't used.  However, the
13510 results vary from program to program, so it is left as a user option,
13511 rather than being permanently enabled.
13512
13513 @item -mno-inefficient-warnings
13514 Disables warnings about the generation of inefficient code.  These
13515 warnings can be generated, for example, when compiling code which
13516 performs byte-level memory operations on the MAC AE type.  The MAC AE has
13517 no hardware support for byte-level memory operations, so all byte
13518 load/stores must be synthesized from word load/store operations.  This is
13519 inefficient and a warning will be generated indicating to the programmer
13520 that they should rewrite the code to avoid byte operations, or to target
13521 an AE type which has the necessary hardware support.  This option enables
13522 the warning to be turned off.
13523
13524 @end table
13525
13526 @node PowerPC Options
13527 @subsection PowerPC Options
13528 @cindex PowerPC options
13529
13530 These are listed under @xref{RS/6000 and PowerPC Options}.
13531
13532 @node RS/6000 and PowerPC Options
13533 @subsection IBM RS/6000 and PowerPC Options
13534 @cindex RS/6000 and PowerPC Options
13535 @cindex IBM RS/6000 and PowerPC Options
13536
13537 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
13538 @table @gcctabopt
13539 @item -mpower
13540 @itemx -mno-power
13541 @itemx -mpower2
13542 @itemx -mno-power2
13543 @itemx -mpowerpc
13544 @itemx -mno-powerpc
13545 @itemx -mpowerpc-gpopt
13546 @itemx -mno-powerpc-gpopt
13547 @itemx -mpowerpc-gfxopt
13548 @itemx -mno-powerpc-gfxopt
13549 @itemx -mpowerpc64
13550 @itemx -mno-powerpc64
13551 @itemx -mmfcrf
13552 @itemx -mno-mfcrf
13553 @itemx -mpopcntb
13554 @itemx -mno-popcntb
13555 @itemx -mfprnd
13556 @itemx -mno-fprnd
13557 @itemx -mcmpb
13558 @itemx -mno-cmpb
13559 @itemx -mmfpgpr
13560 @itemx -mno-mfpgpr
13561 @itemx -mhard-dfp
13562 @itemx -mno-hard-dfp
13563 @opindex mpower
13564 @opindex mno-power
13565 @opindex mpower2
13566 @opindex mno-power2
13567 @opindex mpowerpc
13568 @opindex mno-powerpc
13569 @opindex mpowerpc-gpopt
13570 @opindex mno-powerpc-gpopt
13571 @opindex mpowerpc-gfxopt
13572 @opindex mno-powerpc-gfxopt
13573 @opindex mpowerpc64
13574 @opindex mno-powerpc64
13575 @opindex mmfcrf
13576 @opindex mno-mfcrf
13577 @opindex mpopcntb
13578 @opindex mno-popcntb
13579 @opindex mfprnd
13580 @opindex mno-fprnd
13581 @opindex mcmpb
13582 @opindex mno-cmpb
13583 @opindex mmfpgpr
13584 @opindex mno-mfpgpr
13585 @opindex mhard-dfp
13586 @opindex mno-hard-dfp
13587 GCC supports two related instruction set architectures for the
13588 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
13589 instructions supported by the @samp{rios} chip set used in the original
13590 RS/6000 systems and the @dfn{PowerPC} instruction set is the
13591 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
13592 the IBM 4xx, 6xx, and follow-on microprocessors.
13593
13594 Neither architecture is a subset of the other.  However there is a
13595 large common subset of instructions supported by both.  An MQ
13596 register is included in processors supporting the POWER architecture.
13597
13598 You use these options to specify which instructions are available on the
13599 processor you are using.  The default value of these options is
13600 determined when configuring GCC@.  Specifying the
13601 @option{-mcpu=@var{cpu_type}} overrides the specification of these
13602 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
13603 rather than the options listed above.
13604
13605 The @option{-mpower} option allows GCC to generate instructions that
13606 are found only in the POWER architecture and to use the MQ register.
13607 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
13608 to generate instructions that are present in the POWER2 architecture but
13609 not the original POWER architecture.
13610
13611 The @option{-mpowerpc} option allows GCC to generate instructions that
13612 are found only in the 32-bit subset of the PowerPC architecture.
13613 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
13614 GCC to use the optional PowerPC architecture instructions in the
13615 General Purpose group, including floating-point square root.  Specifying
13616 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
13617 use the optional PowerPC architecture instructions in the Graphics
13618 group, including floating-point select.
13619
13620 The @option{-mmfcrf} option allows GCC to generate the move from
13621 condition register field instruction implemented on the POWER4
13622 processor and other processors that support the PowerPC V2.01
13623 architecture.
13624 The @option{-mpopcntb} option allows GCC to generate the popcount and
13625 double precision FP reciprocal estimate instruction implemented on the
13626 POWER5 processor and other processors that support the PowerPC V2.02
13627 architecture.
13628 The @option{-mfprnd} option allows GCC to generate the FP round to
13629 integer instructions implemented on the POWER5+ processor and other
13630 processors that support the PowerPC V2.03 architecture.
13631 The @option{-mcmpb} option allows GCC to generate the compare bytes
13632 instruction implemented on the POWER6 processor and other processors
13633 that support the PowerPC V2.05 architecture.
13634 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
13635 general purpose register instructions implemented on the POWER6X
13636 processor and other processors that support the extended PowerPC V2.05
13637 architecture.
13638 The @option{-mhard-dfp} option allows GCC to generate the decimal floating
13639 point instructions implemented on some POWER processors.
13640
13641 The @option{-mpowerpc64} option allows GCC to generate the additional
13642 64-bit instructions that are found in the full PowerPC64 architecture
13643 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
13644 @option{-mno-powerpc64}.
13645
13646 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
13647 will use only the instructions in the common subset of both
13648 architectures plus some special AIX common-mode calls, and will not use
13649 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
13650 permits GCC to use any instruction from either architecture and to
13651 allow use of the MQ register; specify this for the Motorola MPC601.
13652
13653 @item -mnew-mnemonics
13654 @itemx -mold-mnemonics
13655 @opindex mnew-mnemonics
13656 @opindex mold-mnemonics
13657 Select which mnemonics to use in the generated assembler code.  With
13658 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
13659 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
13660 assembler mnemonics defined for the POWER architecture.  Instructions
13661 defined in only one architecture have only one mnemonic; GCC uses that
13662 mnemonic irrespective of which of these options is specified.
13663
13664 GCC defaults to the mnemonics appropriate for the architecture in
13665 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
13666 value of these option.  Unless you are building a cross-compiler, you
13667 should normally not specify either @option{-mnew-mnemonics} or
13668 @option{-mold-mnemonics}, but should instead accept the default.
13669
13670 @item -mcpu=@var{cpu_type}
13671 @opindex mcpu
13672 Set architecture type, register usage, choice of mnemonics, and
13673 instruction scheduling parameters for machine type @var{cpu_type}.
13674 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
13675 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
13676 @samp{505}, @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
13677 @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
13678 @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
13679 @samp{860}, @samp{970}, @samp{8540}, @samp{e300c2}, @samp{e300c3},
13680 @samp{e500mc}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5},
13681 @samp{power}, @samp{power2}, @samp{power3}, @samp{power4},
13682 @samp{power5}, @samp{power5+}, @samp{power6}, @samp{power6x}, @samp{power7}
13683 @samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios},
13684 @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
13685
13686 @option{-mcpu=common} selects a completely generic processor.  Code
13687 generated under this option will run on any POWER or PowerPC processor.
13688 GCC will use only the instructions in the common subset of both
13689 architectures, and will not use the MQ register.  GCC assumes a generic
13690 processor model for scheduling purposes.
13691
13692 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
13693 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
13694 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
13695 types, with an appropriate, generic processor model assumed for
13696 scheduling purposes.
13697
13698 The other options specify a specific processor.  Code generated under
13699 those options will run best on that processor, and may not run at all on
13700 others.
13701
13702 The @option{-mcpu} options automatically enable or disable the
13703 following options:
13704
13705 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
13706 -mnew-mnemonics  -mpopcntb  -mpower  -mpower2  -mpowerpc64 @gol
13707 -mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
13708 -msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr}
13709
13710 The particular options set for any particular CPU will vary between
13711 compiler versions, depending on what setting seems to produce optimal
13712 code for that CPU; it doesn't necessarily reflect the actual hardware's
13713 capabilities.  If you wish to set an individual option to a particular
13714 value, you may specify it after the @option{-mcpu} option, like
13715 @samp{-mcpu=970 -mno-altivec}.
13716
13717 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
13718 not enabled or disabled by the @option{-mcpu} option at present because
13719 AIX does not have full support for these options.  You may still
13720 enable or disable them individually if you're sure it'll work in your
13721 environment.
13722
13723 @item -mtune=@var{cpu_type}
13724 @opindex mtune
13725 Set the instruction scheduling parameters for machine type
13726 @var{cpu_type}, but do not set the architecture type, register usage, or
13727 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
13728 values for @var{cpu_type} are used for @option{-mtune} as for
13729 @option{-mcpu}.  If both are specified, the code generated will use the
13730 architecture, registers, and mnemonics set by @option{-mcpu}, but the
13731 scheduling parameters set by @option{-mtune}.
13732
13733 @item -mswdiv
13734 @itemx -mno-swdiv
13735 @opindex mswdiv
13736 @opindex mno-swdiv
13737 Generate code to compute division as reciprocal estimate and iterative
13738 refinement, creating opportunities for increased throughput.  This
13739 feature requires: optional PowerPC Graphics instruction set for single
13740 precision and FRE instruction for double precision, assuming divides
13741 cannot generate user-visible traps, and the domain values not include
13742 Infinities, denormals or zero denominator.
13743
13744 @item -maltivec
13745 @itemx -mno-altivec
13746 @opindex maltivec
13747 @opindex mno-altivec
13748 Generate code that uses (does not use) AltiVec instructions, and also
13749 enable the use of built-in functions that allow more direct access to
13750 the AltiVec instruction set.  You may also need to set
13751 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
13752 enhancements.
13753
13754 @item -mvrsave
13755 @itemx -mno-vrsave
13756 @opindex mvrsave
13757 @opindex mno-vrsave
13758 Generate VRSAVE instructions when generating AltiVec code.
13759
13760 @item -mgen-cell-microcode
13761 @opindex mgen-cell-microcode
13762 Generate Cell microcode instructions
13763
13764 @item -mwarn-cell-microcode
13765 @opindex mwarn-cell-microcode
13766 Warning when a Cell microcode instruction is going to emitted.  An example
13767 of a Cell microcode instruction is a variable shift.
13768
13769 @item -msecure-plt
13770 @opindex msecure-plt
13771 Generate code that allows ld and ld.so to build executables and shared
13772 libraries with non-exec .plt and .got sections.  This is a PowerPC
13773 32-bit SYSV ABI option.
13774
13775 @item -mbss-plt
13776 @opindex mbss-plt
13777 Generate code that uses a BSS .plt section that ld.so fills in, and
13778 requires .plt and .got sections that are both writable and executable.
13779 This is a PowerPC 32-bit SYSV ABI option.
13780
13781 @item -misel
13782 @itemx -mno-isel
13783 @opindex misel
13784 @opindex mno-isel
13785 This switch enables or disables the generation of ISEL instructions.
13786
13787 @item -misel=@var{yes/no}
13788 This switch has been deprecated.  Use @option{-misel} and
13789 @option{-mno-isel} instead.
13790
13791 @item -mspe
13792 @itemx -mno-spe
13793 @opindex mspe
13794 @opindex mno-spe
13795 This switch enables or disables the generation of SPE simd
13796 instructions.
13797
13798 @item -mpaired
13799 @itemx -mno-paired
13800 @opindex mpaired
13801 @opindex mno-paired
13802 This switch enables or disables the generation of PAIRED simd
13803 instructions.
13804
13805 @item -mspe=@var{yes/no}
13806 This option has been deprecated.  Use @option{-mspe} and
13807 @option{-mno-spe} instead.
13808
13809 @item -mfloat-gprs=@var{yes/single/double/no}
13810 @itemx -mfloat-gprs
13811 @opindex mfloat-gprs
13812 This switch enables or disables the generation of floating point
13813 operations on the general purpose registers for architectures that
13814 support it.
13815
13816 The argument @var{yes} or @var{single} enables the use of
13817 single-precision floating point operations.
13818
13819 The argument @var{double} enables the use of single and
13820 double-precision floating point operations.
13821
13822 The argument @var{no} disables floating point operations on the
13823 general purpose registers.
13824
13825 This option is currently only available on the MPC854x.
13826
13827 @item -m32
13828 @itemx -m64
13829 @opindex m32
13830 @opindex m64
13831 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
13832 targets (including GNU/Linux).  The 32-bit environment sets int, long
13833 and pointer to 32 bits and generates code that runs on any PowerPC
13834 variant.  The 64-bit environment sets int to 32 bits and long and
13835 pointer to 64 bits, and generates code for PowerPC64, as for
13836 @option{-mpowerpc64}.
13837
13838 @item -mfull-toc
13839 @itemx -mno-fp-in-toc
13840 @itemx -mno-sum-in-toc
13841 @itemx -mminimal-toc
13842 @opindex mfull-toc
13843 @opindex mno-fp-in-toc
13844 @opindex mno-sum-in-toc
13845 @opindex mminimal-toc
13846 Modify generation of the TOC (Table Of Contents), which is created for
13847 every executable file.  The @option{-mfull-toc} option is selected by
13848 default.  In that case, GCC will allocate at least one TOC entry for
13849 each unique non-automatic variable reference in your program.  GCC
13850 will also place floating-point constants in the TOC@.  However, only
13851 16,384 entries are available in the TOC@.
13852
13853 If you receive a linker error message that saying you have overflowed
13854 the available TOC space, you can reduce the amount of TOC space used
13855 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
13856 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
13857 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
13858 generate code to calculate the sum of an address and a constant at
13859 run-time instead of putting that sum into the TOC@.  You may specify one
13860 or both of these options.  Each causes GCC to produce very slightly
13861 slower and larger code at the expense of conserving TOC space.
13862
13863 If you still run out of space in the TOC even when you specify both of
13864 these options, specify @option{-mminimal-toc} instead.  This option causes
13865 GCC to make only one TOC entry for every file.  When you specify this
13866 option, GCC will produce code that is slower and larger but which
13867 uses extremely little TOC space.  You may wish to use this option
13868 only on files that contain less frequently executed code.
13869
13870 @item -maix64
13871 @itemx -maix32
13872 @opindex maix64
13873 @opindex maix32
13874 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
13875 @code{long} type, and the infrastructure needed to support them.
13876 Specifying @option{-maix64} implies @option{-mpowerpc64} and
13877 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
13878 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
13879
13880 @item -mxl-compat
13881 @itemx -mno-xl-compat
13882 @opindex mxl-compat
13883 @opindex mno-xl-compat
13884 Produce code that conforms more closely to IBM XL compiler semantics
13885 when using AIX-compatible ABI@.  Pass floating-point arguments to
13886 prototyped functions beyond the register save area (RSA) on the stack
13887 in addition to argument FPRs.  Do not assume that most significant
13888 double in 128-bit long double value is properly rounded when comparing
13889 values and converting to double.  Use XL symbol names for long double
13890 support routines.
13891
13892 The AIX calling convention was extended but not initially documented to
13893 handle an obscure K&R C case of calling a function that takes the
13894 address of its arguments with fewer arguments than declared.  IBM XL
13895 compilers access floating point arguments which do not fit in the
13896 RSA from the stack when a subroutine is compiled without
13897 optimization.  Because always storing floating-point arguments on the
13898 stack is inefficient and rarely needed, this option is not enabled by
13899 default and only is necessary when calling subroutines compiled by IBM
13900 XL compilers without optimization.
13901
13902 @item -mpe
13903 @opindex mpe
13904 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
13905 application written to use message passing with special startup code to
13906 enable the application to run.  The system must have PE installed in the
13907 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
13908 must be overridden with the @option{-specs=} option to specify the
13909 appropriate directory location.  The Parallel Environment does not
13910 support threads, so the @option{-mpe} option and the @option{-pthread}
13911 option are incompatible.
13912
13913 @item -malign-natural
13914 @itemx -malign-power
13915 @opindex malign-natural
13916 @opindex malign-power
13917 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
13918 @option{-malign-natural} overrides the ABI-defined alignment of larger
13919 types, such as floating-point doubles, on their natural size-based boundary.
13920 The option @option{-malign-power} instructs GCC to follow the ABI-specified
13921 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
13922
13923 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
13924 is not supported.
13925
13926 @item -msoft-float
13927 @itemx -mhard-float
13928 @opindex msoft-float
13929 @opindex mhard-float
13930 Generate code that does not use (uses) the floating-point register set.
13931 Software floating point emulation is provided if you use the
13932 @option{-msoft-float} option, and pass the option to GCC when linking.
13933
13934 @item -msingle-float
13935 @itemx -mdouble-float
13936 @opindex msingle-float
13937 @opindex mdouble-float
13938 Generate code for single or double-precision floating point operations. 
13939 @option{-mdouble-float} implies @option{-msingle-float}. 
13940
13941 @item -msimple-fpu
13942 @opindex msimple-fpu
13943 Do not generate sqrt and div instructions for hardware floating point unit.
13944
13945 @item -mfpu
13946 @opindex mfpu
13947 Specify type of floating point unit.  Valid values are @var{sp_lite} 
13948 (equivalent to -msingle-float -msimple-fpu), @var{dp_lite} (equivalent
13949 to -mdouble-float -msimple-fpu), @var{sp_full} (equivalent to -msingle-float),
13950 and @var{dp_full} (equivalent to -mdouble-float).
13951
13952 @item -mxilinx-fpu
13953 @opindex mxilinx-fpu
13954 Perform optimizations for floating point unit on Xilinx PPC 405/440.
13955
13956 @item -mmultiple
13957 @itemx -mno-multiple
13958 @opindex mmultiple
13959 @opindex mno-multiple
13960 Generate code that uses (does not use) the load multiple word
13961 instructions and the store multiple word instructions.  These
13962 instructions are generated by default on POWER systems, and not
13963 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
13964 endian PowerPC systems, since those instructions do not work when the
13965 processor is in little endian mode.  The exceptions are PPC740 and
13966 PPC750 which permit the instructions usage in little endian mode.
13967
13968 @item -mstring
13969 @itemx -mno-string
13970 @opindex mstring
13971 @opindex mno-string
13972 Generate code that uses (does not use) the load string instructions
13973 and the store string word instructions to save multiple registers and
13974 do small block moves.  These instructions are generated by default on
13975 POWER systems, and not generated on PowerPC systems.  Do not use
13976 @option{-mstring} on little endian PowerPC systems, since those
13977 instructions do not work when the processor is in little endian mode.
13978 The exceptions are PPC740 and PPC750 which permit the instructions
13979 usage in little endian mode.
13980
13981 @item -mupdate
13982 @itemx -mno-update
13983 @opindex mupdate
13984 @opindex mno-update
13985 Generate code that uses (does not use) the load or store instructions
13986 that update the base register to the address of the calculated memory
13987 location.  These instructions are generated by default.  If you use
13988 @option{-mno-update}, there is a small window between the time that the
13989 stack pointer is updated and the address of the previous frame is
13990 stored, which means code that walks the stack frame across interrupts or
13991 signals may get corrupted data.
13992
13993 @item -mavoid-indexed-addresses
13994 @item -mno-avoid-indexed-addresses
13995 @opindex mavoid-indexed-addresses
13996 @opindex mno-avoid-indexed-addresses
13997 Generate code that tries to avoid (not avoid) the use of indexed load
13998 or store instructions. These instructions can incur a performance
13999 penalty on Power6 processors in certain situations, such as when
14000 stepping through large arrays that cross a 16M boundary.  This option
14001 is enabled by default when targetting Power6 and disabled otherwise.
14002
14003 @item -mfused-madd
14004 @itemx -mno-fused-madd
14005 @opindex mfused-madd
14006 @opindex mno-fused-madd
14007 Generate code that uses (does not use) the floating point multiply and
14008 accumulate instructions.  These instructions are generated by default if
14009 hardware floating is used.
14010
14011 @item -mmulhw
14012 @itemx -mno-mulhw
14013 @opindex mmulhw
14014 @opindex mno-mulhw
14015 Generate code that uses (does not use) the half-word multiply and
14016 multiply-accumulate instructions on the IBM 405, 440 and 464 processors.
14017 These instructions are generated by default when targetting those
14018 processors.
14019
14020 @item -mdlmzb
14021 @itemx -mno-dlmzb
14022 @opindex mdlmzb
14023 @opindex mno-dlmzb
14024 Generate code that uses (does not use) the string-search @samp{dlmzb}
14025 instruction on the IBM 405, 440 and 464 processors.  This instruction is
14026 generated by default when targetting those processors.
14027
14028 @item -mno-bit-align
14029 @itemx -mbit-align
14030 @opindex mno-bit-align
14031 @opindex mbit-align
14032 On System V.4 and embedded PowerPC systems do not (do) force structures
14033 and unions that contain bit-fields to be aligned to the base type of the
14034 bit-field.
14035
14036 For example, by default a structure containing nothing but 8
14037 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
14038 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
14039 the structure would be aligned to a 1 byte boundary and be one byte in
14040 size.
14041
14042 @item -mno-strict-align
14043 @itemx -mstrict-align
14044 @opindex mno-strict-align
14045 @opindex mstrict-align
14046 On System V.4 and embedded PowerPC systems do not (do) assume that
14047 unaligned memory references will be handled by the system.
14048
14049 @item -mrelocatable
14050 @itemx -mno-relocatable
14051 @opindex mrelocatable
14052 @opindex mno-relocatable
14053 On embedded PowerPC systems generate code that allows (does not allow)
14054 the program to be relocated to a different address at runtime.  If you
14055 use @option{-mrelocatable} on any module, all objects linked together must
14056 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
14057
14058 @item -mrelocatable-lib
14059 @itemx -mno-relocatable-lib
14060 @opindex mrelocatable-lib
14061 @opindex mno-relocatable-lib
14062 On embedded PowerPC systems generate code that allows (does not allow)
14063 the program to be relocated to a different address at runtime.  Modules
14064 compiled with @option{-mrelocatable-lib} can be linked with either modules
14065 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
14066 with modules compiled with the @option{-mrelocatable} options.
14067
14068 @item -mno-toc
14069 @itemx -mtoc
14070 @opindex mno-toc
14071 @opindex mtoc
14072 On System V.4 and embedded PowerPC systems do not (do) assume that
14073 register 2 contains a pointer to a global area pointing to the addresses
14074 used in the program.
14075
14076 @item -mlittle
14077 @itemx -mlittle-endian
14078 @opindex mlittle
14079 @opindex mlittle-endian
14080 On System V.4 and embedded PowerPC systems compile code for the
14081 processor in little endian mode.  The @option{-mlittle-endian} option is
14082 the same as @option{-mlittle}.
14083
14084 @item -mbig
14085 @itemx -mbig-endian
14086 @opindex mbig
14087 @opindex mbig-endian
14088 On System V.4 and embedded PowerPC systems compile code for the
14089 processor in big endian mode.  The @option{-mbig-endian} option is
14090 the same as @option{-mbig}.
14091
14092 @item -mdynamic-no-pic
14093 @opindex mdynamic-no-pic
14094 On Darwin and Mac OS X systems, compile code so that it is not
14095 relocatable, but that its external references are relocatable.  The
14096 resulting code is suitable for applications, but not shared
14097 libraries.
14098
14099 @item -mprioritize-restricted-insns=@var{priority}
14100 @opindex mprioritize-restricted-insns
14101 This option controls the priority that is assigned to
14102 dispatch-slot restricted instructions during the second scheduling
14103 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
14104 @var{no/highest/second-highest} priority to dispatch slot restricted
14105 instructions.
14106
14107 @item -msched-costly-dep=@var{dependence_type}
14108 @opindex msched-costly-dep
14109 This option controls which dependences are considered costly
14110 by the target during instruction scheduling.  The argument
14111 @var{dependence_type} takes one of the following values:
14112 @var{no}: no dependence is costly,
14113 @var{all}: all dependences are costly,
14114 @var{true_store_to_load}: a true dependence from store to load is costly,
14115 @var{store_to_load}: any dependence from store to load is costly,
14116 @var{number}: any dependence which latency >= @var{number} is costly.
14117
14118 @item -minsert-sched-nops=@var{scheme}
14119 @opindex minsert-sched-nops
14120 This option controls which nop insertion scheme will be used during
14121 the second scheduling pass.  The argument @var{scheme} takes one of the
14122 following values:
14123 @var{no}: Don't insert nops.
14124 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
14125 according to the scheduler's grouping.
14126 @var{regroup_exact}: Insert nops to force costly dependent insns into
14127 separate groups.  Insert exactly as many nops as needed to force an insn
14128 to a new group, according to the estimated processor grouping.
14129 @var{number}: Insert nops to force costly dependent insns into
14130 separate groups.  Insert @var{number} nops to force an insn to a new group.
14131
14132 @item -mcall-sysv
14133 @opindex mcall-sysv
14134 On System V.4 and embedded PowerPC systems compile code using calling
14135 conventions that adheres to the March 1995 draft of the System V
14136 Application Binary Interface, PowerPC processor supplement.  This is the
14137 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
14138
14139 @item -mcall-sysv-eabi
14140 @opindex mcall-sysv-eabi
14141 Specify both @option{-mcall-sysv} and @option{-meabi} options.
14142
14143 @item -mcall-sysv-noeabi
14144 @opindex mcall-sysv-noeabi
14145 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
14146
14147 @item -mcall-solaris
14148 @opindex mcall-solaris
14149 On System V.4 and embedded PowerPC systems compile code for the Solaris
14150 operating system.
14151
14152 @item -mcall-linux
14153 @opindex mcall-linux
14154 On System V.4 and embedded PowerPC systems compile code for the
14155 Linux-based GNU system.
14156
14157 @item -mcall-gnu
14158 @opindex mcall-gnu
14159 On System V.4 and embedded PowerPC systems compile code for the
14160 Hurd-based GNU system.
14161
14162 @item -mcall-netbsd
14163 @opindex mcall-netbsd
14164 On System V.4 and embedded PowerPC systems compile code for the
14165 NetBSD operating system.
14166
14167 @item -maix-struct-return
14168 @opindex maix-struct-return
14169 Return all structures in memory (as specified by the AIX ABI)@.
14170
14171 @item -msvr4-struct-return
14172 @opindex msvr4-struct-return
14173 Return structures smaller than 8 bytes in registers (as specified by the
14174 SVR4 ABI)@.
14175
14176 @item -mabi=@var{abi-type}
14177 @opindex mabi
14178 Extend the current ABI with a particular extension, or remove such extension.
14179 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
14180 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
14181
14182 @item -mabi=spe
14183 @opindex mabi=spe
14184 Extend the current ABI with SPE ABI extensions.  This does not change
14185 the default ABI, instead it adds the SPE ABI extensions to the current
14186 ABI@.
14187
14188 @item -mabi=no-spe
14189 @opindex mabi=no-spe
14190 Disable Booke SPE ABI extensions for the current ABI@.
14191
14192 @item -mabi=ibmlongdouble
14193 @opindex mabi=ibmlongdouble
14194 Change the current ABI to use IBM extended precision long double.
14195 This is a PowerPC 32-bit SYSV ABI option.
14196
14197 @item -mabi=ieeelongdouble
14198 @opindex mabi=ieeelongdouble
14199 Change the current ABI to use IEEE extended precision long double.
14200 This is a PowerPC 32-bit Linux ABI option.
14201
14202 @item -mprototype
14203 @itemx -mno-prototype
14204 @opindex mprototype
14205 @opindex mno-prototype
14206 On System V.4 and embedded PowerPC systems assume that all calls to
14207 variable argument functions are properly prototyped.  Otherwise, the
14208 compiler must insert an instruction before every non prototyped call to
14209 set or clear bit 6 of the condition code register (@var{CR}) to
14210 indicate whether floating point values were passed in the floating point
14211 registers in case the function takes a variable arguments.  With
14212 @option{-mprototype}, only calls to prototyped variable argument functions
14213 will set or clear the bit.
14214
14215 @item -msim
14216 @opindex msim
14217 On embedded PowerPC systems, assume that the startup module is called
14218 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
14219 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
14220 configurations.
14221
14222 @item -mmvme
14223 @opindex mmvme
14224 On embedded PowerPC systems, assume that the startup module is called
14225 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
14226 @file{libc.a}.
14227
14228 @item -mads
14229 @opindex mads
14230 On embedded PowerPC systems, assume that the startup module is called
14231 @file{crt0.o} and the standard C libraries are @file{libads.a} and
14232 @file{libc.a}.
14233
14234 @item -myellowknife
14235 @opindex myellowknife
14236 On embedded PowerPC systems, assume that the startup module is called
14237 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
14238 @file{libc.a}.
14239
14240 @item -mvxworks
14241 @opindex mvxworks
14242 On System V.4 and embedded PowerPC systems, specify that you are
14243 compiling for a VxWorks system.
14244
14245 @item -memb
14246 @opindex memb
14247 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
14248 header to indicate that @samp{eabi} extended relocations are used.
14249
14250 @item -meabi
14251 @itemx -mno-eabi
14252 @opindex meabi
14253 @opindex mno-eabi
14254 On System V.4 and embedded PowerPC systems do (do not) adhere to the
14255 Embedded Applications Binary Interface (eabi) which is a set of
14256 modifications to the System V.4 specifications.  Selecting @option{-meabi}
14257 means that the stack is aligned to an 8 byte boundary, a function
14258 @code{__eabi} is called to from @code{main} to set up the eabi
14259 environment, and the @option{-msdata} option can use both @code{r2} and
14260 @code{r13} to point to two separate small data areas.  Selecting
14261 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
14262 do not call an initialization function from @code{main}, and the
14263 @option{-msdata} option will only use @code{r13} to point to a single
14264 small data area.  The @option{-meabi} option is on by default if you
14265 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
14266
14267 @item -msdata=eabi
14268 @opindex msdata=eabi
14269 On System V.4 and embedded PowerPC systems, put small initialized
14270 @code{const} global and static data in the @samp{.sdata2} section, which
14271 is pointed to by register @code{r2}.  Put small initialized
14272 non-@code{const} global and static data in the @samp{.sdata} section,
14273 which is pointed to by register @code{r13}.  Put small uninitialized
14274 global and static data in the @samp{.sbss} section, which is adjacent to
14275 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
14276 incompatible with the @option{-mrelocatable} option.  The
14277 @option{-msdata=eabi} option also sets the @option{-memb} option.
14278
14279 @item -msdata=sysv
14280 @opindex msdata=sysv
14281 On System V.4 and embedded PowerPC systems, put small global and static
14282 data in the @samp{.sdata} section, which is pointed to by register
14283 @code{r13}.  Put small uninitialized global and static data in the
14284 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
14285 The @option{-msdata=sysv} option is incompatible with the
14286 @option{-mrelocatable} option.
14287
14288 @item -msdata=default
14289 @itemx -msdata
14290 @opindex msdata=default
14291 @opindex msdata
14292 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
14293 compile code the same as @option{-msdata=eabi}, otherwise compile code the
14294 same as @option{-msdata=sysv}.
14295
14296 @item -msdata-data
14297 @opindex msdata-data
14298 On System V.4 and embedded PowerPC systems, put small global
14299 data in the @samp{.sdata} section.  Put small uninitialized global
14300 data in the @samp{.sbss} section.  Do not use register @code{r13}
14301 to address small data however.  This is the default behavior unless
14302 other @option{-msdata} options are used.
14303
14304 @item -msdata=none
14305 @itemx -mno-sdata
14306 @opindex msdata=none
14307 @opindex mno-sdata
14308 On embedded PowerPC systems, put all initialized global and static data
14309 in the @samp{.data} section, and all uninitialized data in the
14310 @samp{.bss} section.
14311
14312 @item -G @var{num}
14313 @opindex G
14314 @cindex smaller data references (PowerPC)
14315 @cindex .sdata/.sdata2 references (PowerPC)
14316 On embedded PowerPC systems, put global and static items less than or
14317 equal to @var{num} bytes into the small data or bss sections instead of
14318 the normal data or bss section.  By default, @var{num} is 8.  The
14319 @option{-G @var{num}} switch is also passed to the linker.
14320 All modules should be compiled with the same @option{-G @var{num}} value.
14321
14322 @item -mregnames
14323 @itemx -mno-regnames
14324 @opindex mregnames
14325 @opindex mno-regnames
14326 On System V.4 and embedded PowerPC systems do (do not) emit register
14327 names in the assembly language output using symbolic forms.
14328
14329 @item -mlongcall
14330 @itemx -mno-longcall
14331 @opindex mlongcall
14332 @opindex mno-longcall
14333 By default assume that all calls are far away so that a longer more
14334 expensive calling sequence is required.  This is required for calls
14335 further than 32 megabytes (33,554,432 bytes) from the current location.
14336 A short call will be generated if the compiler knows
14337 the call cannot be that far away.  This setting can be overridden by
14338 the @code{shortcall} function attribute, or by @code{#pragma
14339 longcall(0)}.
14340
14341 Some linkers are capable of detecting out-of-range calls and generating
14342 glue code on the fly.  On these systems, long calls are unnecessary and
14343 generate slower code.  As of this writing, the AIX linker can do this,
14344 as can the GNU linker for PowerPC/64.  It is planned to add this feature
14345 to the GNU linker for 32-bit PowerPC systems as well.
14346
14347 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
14348 callee, L42'', plus a ``branch island'' (glue code).  The two target
14349 addresses represent the callee and the ``branch island''.  The
14350 Darwin/PPC linker will prefer the first address and generate a ``bl
14351 callee'' if the PPC ``bl'' instruction will reach the callee directly;
14352 otherwise, the linker will generate ``bl L42'' to call the ``branch
14353 island''.  The ``branch island'' is appended to the body of the
14354 calling function; it computes the full 32-bit address of the callee
14355 and jumps to it.
14356
14357 On Mach-O (Darwin) systems, this option directs the compiler emit to
14358 the glue for every direct call, and the Darwin linker decides whether
14359 to use or discard it.
14360
14361 In the future, we may cause GCC to ignore all longcall specifications
14362 when the linker is known to generate glue.
14363
14364 @item -pthread
14365 @opindex pthread
14366 Adds support for multithreading with the @dfn{pthreads} library.
14367 This option sets flags for both the preprocessor and linker.
14368
14369 @end table
14370
14371 @node S/390 and zSeries Options
14372 @subsection S/390 and zSeries Options
14373 @cindex S/390 and zSeries Options
14374
14375 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
14376
14377 @table @gcctabopt
14378 @item -mhard-float
14379 @itemx -msoft-float
14380 @opindex mhard-float
14381 @opindex msoft-float
14382 Use (do not use) the hardware floating-point instructions and registers
14383 for floating-point operations.  When @option{-msoft-float} is specified,
14384 functions in @file{libgcc.a} will be used to perform floating-point
14385 operations.  When @option{-mhard-float} is specified, the compiler
14386 generates IEEE floating-point instructions.  This is the default.
14387
14388 @item -mhard-dfp
14389 @itemx -mno-hard-dfp
14390 @opindex mhard-dfp
14391 @opindex mno-hard-dfp
14392 Use (do not use) the hardware decimal-floating-point instructions for
14393 decimal-floating-point operations.  When @option{-mno-hard-dfp} is
14394 specified, functions in @file{libgcc.a} will be used to perform
14395 decimal-floating-point operations.  When @option{-mhard-dfp} is
14396 specified, the compiler generates decimal-floating-point hardware
14397 instructions.  This is the default for @option{-march=z9-ec} or higher.
14398
14399 @item -mlong-double-64
14400 @itemx -mlong-double-128
14401 @opindex mlong-double-64
14402 @opindex mlong-double-128
14403 These switches control the size of @code{long double} type. A size
14404 of 64bit makes the @code{long double} type equivalent to the @code{double}
14405 type. This is the default.
14406
14407 @item -mbackchain
14408 @itemx -mno-backchain
14409 @opindex mbackchain
14410 @opindex mno-backchain
14411 Store (do not store) the address of the caller's frame as backchain pointer
14412 into the callee's stack frame.
14413 A backchain may be needed to allow debugging using tools that do not understand
14414 DWARF-2 call frame information.
14415 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
14416 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
14417 the backchain is placed into the topmost word of the 96/160 byte register
14418 save area.
14419
14420 In general, code compiled with @option{-mbackchain} is call-compatible with
14421 code compiled with @option{-mmo-backchain}; however, use of the backchain
14422 for debugging purposes usually requires that the whole binary is built with
14423 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
14424 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
14425 to build a linux kernel use @option{-msoft-float}.
14426
14427 The default is to not maintain the backchain.
14428
14429 @item -mpacked-stack
14430 @itemx -mno-packed-stack
14431 @opindex mpacked-stack
14432 @opindex mno-packed-stack
14433 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
14434 specified, the compiler uses the all fields of the 96/160 byte register save
14435 area only for their default purpose; unused fields still take up stack space.
14436 When @option{-mpacked-stack} is specified, register save slots are densely
14437 packed at the top of the register save area; unused space is reused for other
14438 purposes, allowing for more efficient use of the available stack space.
14439 However, when @option{-mbackchain} is also in effect, the topmost word of
14440 the save area is always used to store the backchain, and the return address
14441 register is always saved two words below the backchain.
14442
14443 As long as the stack frame backchain is not used, code generated with
14444 @option{-mpacked-stack} is call-compatible with code generated with
14445 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
14446 S/390 or zSeries generated code that uses the stack frame backchain at run
14447 time, not just for debugging purposes.  Such code is not call-compatible
14448 with code compiled with @option{-mpacked-stack}.  Also, note that the
14449 combination of @option{-mbackchain},
14450 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
14451 to build a linux kernel use @option{-msoft-float}.
14452
14453 The default is to not use the packed stack layout.
14454
14455 @item -msmall-exec
14456 @itemx -mno-small-exec
14457 @opindex msmall-exec
14458 @opindex mno-small-exec
14459 Generate (or do not generate) code using the @code{bras} instruction
14460 to do subroutine calls.
14461 This only works reliably if the total executable size does not
14462 exceed 64k.  The default is to use the @code{basr} instruction instead,
14463 which does not have this limitation.
14464
14465 @item -m64
14466 @itemx -m31
14467 @opindex m64
14468 @opindex m31
14469 When @option{-m31} is specified, generate code compliant to the
14470 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
14471 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
14472 particular to generate 64-bit instructions.  For the @samp{s390}
14473 targets, the default is @option{-m31}, while the @samp{s390x}
14474 targets default to @option{-m64}.
14475
14476 @item -mzarch
14477 @itemx -mesa
14478 @opindex mzarch
14479 @opindex mesa
14480 When @option{-mzarch} is specified, generate code using the
14481 instructions available on z/Architecture.
14482 When @option{-mesa} is specified, generate code using the
14483 instructions available on ESA/390.  Note that @option{-mesa} is
14484 not possible with @option{-m64}.
14485 When generating code compliant to the GNU/Linux for S/390 ABI,
14486 the default is @option{-mesa}.  When generating code compliant
14487 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
14488
14489 @item -mmvcle
14490 @itemx -mno-mvcle
14491 @opindex mmvcle
14492 @opindex mno-mvcle
14493 Generate (or do not generate) code using the @code{mvcle} instruction
14494 to perform block moves.  When @option{-mno-mvcle} is specified,
14495 use a @code{mvc} loop instead.  This is the default unless optimizing for
14496 size.
14497
14498 @item -mdebug
14499 @itemx -mno-debug
14500 @opindex mdebug
14501 @opindex mno-debug
14502 Print (or do not print) additional debug information when compiling.
14503 The default is to not print debug information.
14504
14505 @item -march=@var{cpu-type}
14506 @opindex march
14507 Generate code that will run on @var{cpu-type}, which is the name of a system
14508 representing a certain processor type.  Possible values for
14509 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
14510 @samp{z9-109}, @samp{z9-ec} and @samp{z10}.
14511 When generating code using the instructions available on z/Architecture,
14512 the default is @option{-march=z900}.  Otherwise, the default is
14513 @option{-march=g5}.
14514
14515 @item -mtune=@var{cpu-type}
14516 @opindex mtune
14517 Tune to @var{cpu-type} everything applicable about the generated code,
14518 except for the ABI and the set of available instructions.
14519 The list of @var{cpu-type} values is the same as for @option{-march}.
14520 The default is the value used for @option{-march}.
14521
14522 @item -mtpf-trace
14523 @itemx -mno-tpf-trace
14524 @opindex mtpf-trace
14525 @opindex mno-tpf-trace
14526 Generate code that adds (does not add) in TPF OS specific branches to trace
14527 routines in the operating system.  This option is off by default, even
14528 when compiling for the TPF OS@.
14529
14530 @item -mfused-madd
14531 @itemx -mno-fused-madd
14532 @opindex mfused-madd
14533 @opindex mno-fused-madd
14534 Generate code that uses (does not use) the floating point multiply and
14535 accumulate instructions.  These instructions are generated by default if
14536 hardware floating point is used.
14537
14538 @item -mwarn-framesize=@var{framesize}
14539 @opindex mwarn-framesize
14540 Emit a warning if the current function exceeds the given frame size.  Because
14541 this is a compile time check it doesn't need to be a real problem when the program
14542 runs.  It is intended to identify functions which most probably cause
14543 a stack overflow.  It is useful to be used in an environment with limited stack
14544 size e.g.@: the linux kernel.
14545
14546 @item -mwarn-dynamicstack
14547 @opindex mwarn-dynamicstack
14548 Emit a warning if the function calls alloca or uses dynamically
14549 sized arrays.  This is generally a bad idea with a limited stack size.
14550
14551 @item -mstack-guard=@var{stack-guard}
14552 @itemx -mstack-size=@var{stack-size}
14553 @opindex mstack-guard
14554 @opindex mstack-size
14555 If these options are provided the s390 back end emits additional instructions in
14556 the function prologue which trigger a trap if the stack size is @var{stack-guard}
14557 bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
14558 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
14559 the frame size of the compiled function is chosen.
14560 These options are intended to be used to help debugging stack overflow problems.
14561 The additionally emitted code causes only little overhead and hence can also be
14562 used in production like systems without greater performance degradation.  The given
14563 values have to be exact powers of 2 and @var{stack-size} has to be greater than
14564 @var{stack-guard} without exceeding 64k.
14565 In order to be efficient the extra code makes the assumption that the stack starts
14566 at an address aligned to the value given by @var{stack-size}.
14567 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
14568 @end table
14569
14570 @node Score Options
14571 @subsection Score Options
14572 @cindex Score Options
14573
14574 These options are defined for Score implementations:
14575
14576 @table @gcctabopt
14577 @item -meb
14578 @opindex meb
14579 Compile code for big endian mode.  This is the default.
14580
14581 @item -mel
14582 @opindex mel
14583 Compile code for little endian mode. 
14584
14585 @item -mnhwloop
14586 @opindex mnhwloop
14587 Disable generate bcnz instruction.
14588
14589 @item -muls
14590 @opindex muls
14591 Enable generate unaligned load and store instruction.
14592
14593 @item -mmac
14594 @opindex mmac
14595 Enable the use of multiply-accumulate instructions. Disabled by default. 
14596
14597 @item -mscore5
14598 @opindex mscore5
14599 Specify the SCORE5 as the target architecture.
14600
14601 @item -mscore5u
14602 @opindex mscore5u
14603 Specify the SCORE5U of the target architecture.
14604
14605 @item -mscore7
14606 @opindex mscore7
14607 Specify the SCORE7 as the target architecture. This is the default.
14608
14609 @item -mscore7d
14610 @opindex mscore7d
14611 Specify the SCORE7D as the target architecture.
14612 @end table
14613
14614 @node SH Options
14615 @subsection SH Options
14616
14617 These @samp{-m} options are defined for the SH implementations:
14618
14619 @table @gcctabopt
14620 @item -m1
14621 @opindex m1
14622 Generate code for the SH1.
14623
14624 @item -m2
14625 @opindex m2
14626 Generate code for the SH2.
14627
14628 @item -m2e
14629 Generate code for the SH2e.
14630
14631 @item -m3
14632 @opindex m3
14633 Generate code for the SH3.
14634
14635 @item -m3e
14636 @opindex m3e
14637 Generate code for the SH3e.
14638
14639 @item -m4-nofpu
14640 @opindex m4-nofpu
14641 Generate code for the SH4 without a floating-point unit.
14642
14643 @item -m4-single-only
14644 @opindex m4-single-only
14645 Generate code for the SH4 with a floating-point unit that only
14646 supports single-precision arithmetic.
14647
14648 @item -m4-single
14649 @opindex m4-single
14650 Generate code for the SH4 assuming the floating-point unit is in
14651 single-precision mode by default.
14652
14653 @item -m4
14654 @opindex m4
14655 Generate code for the SH4.
14656
14657 @item -m4a-nofpu
14658 @opindex m4a-nofpu
14659 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
14660 floating-point unit is not used.
14661
14662 @item -m4a-single-only
14663 @opindex m4a-single-only
14664 Generate code for the SH4a, in such a way that no double-precision
14665 floating point operations are used.
14666
14667 @item -m4a-single
14668 @opindex m4a-single
14669 Generate code for the SH4a assuming the floating-point unit is in
14670 single-precision mode by default.
14671
14672 @item -m4a
14673 @opindex m4a
14674 Generate code for the SH4a.
14675
14676 @item -m4al
14677 @opindex m4al
14678 Same as @option{-m4a-nofpu}, except that it implicitly passes
14679 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
14680 instructions at the moment.
14681
14682 @item -mb
14683 @opindex mb
14684 Compile code for the processor in big endian mode.
14685
14686 @item -ml
14687 @opindex ml
14688 Compile code for the processor in little endian mode.
14689
14690 @item -mdalign
14691 @opindex mdalign
14692 Align doubles at 64-bit boundaries.  Note that this changes the calling
14693 conventions, and thus some functions from the standard C library will
14694 not work unless you recompile it first with @option{-mdalign}.
14695
14696 @item -mrelax
14697 @opindex mrelax
14698 Shorten some address references at link time, when possible; uses the
14699 linker option @option{-relax}.
14700
14701 @item -mbigtable
14702 @opindex mbigtable
14703 Use 32-bit offsets in @code{switch} tables.  The default is to use
14704 16-bit offsets.
14705
14706 @item -mbitops
14707 @opindex mbitops
14708 Enable the use of bit manipulation instructions on SH2A.
14709
14710 @item -mfmovd
14711 @opindex mfmovd
14712 Enable the use of the instruction @code{fmovd}.
14713
14714 @item -mhitachi
14715 @opindex mhitachi
14716 Comply with the calling conventions defined by Renesas.
14717
14718 @item -mrenesas
14719 @opindex mhitachi
14720 Comply with the calling conventions defined by Renesas.
14721
14722 @item -mno-renesas
14723 @opindex mhitachi
14724 Comply with the calling conventions defined for GCC before the Renesas
14725 conventions were available.  This option is the default for all
14726 targets of the SH toolchain except for @samp{sh-symbianelf}.
14727
14728 @item -mnomacsave
14729 @opindex mnomacsave
14730 Mark the @code{MAC} register as call-clobbered, even if
14731 @option{-mhitachi} is given.
14732
14733 @item -mieee
14734 @opindex mieee
14735 Increase IEEE-compliance of floating-point code.
14736 At the moment, this is equivalent to @option{-fno-finite-math-only}.
14737 When generating 16 bit SH opcodes, getting IEEE-conforming results for
14738 comparisons of NANs / infinities incurs extra overhead in every
14739 floating point comparison, therefore the default is set to
14740 @option{-ffinite-math-only}.
14741
14742 @item -minline-ic_invalidate
14743 @opindex minline-ic_invalidate
14744 Inline code to invalidate instruction cache entries after setting up
14745 nested function trampolines.
14746 This option has no effect if -musermode is in effect and the selected
14747 code generation option (e.g. -m4) does not allow the use of the icbi
14748 instruction.
14749 If the selected code generation option does not allow the use of the icbi
14750 instruction, and -musermode is not in effect, the inlined code will
14751 manipulate the instruction cache address array directly with an associative
14752 write.  This not only requires privileged mode, but it will also
14753 fail if the cache line had been mapped via the TLB and has become unmapped.
14754
14755 @item -misize
14756 @opindex misize
14757 Dump instruction size and location in the assembly code.
14758
14759 @item -mpadstruct
14760 @opindex mpadstruct
14761 This option is deprecated.  It pads structures to multiple of 4 bytes,
14762 which is incompatible with the SH ABI@.
14763
14764 @item -mspace
14765 @opindex mspace
14766 Optimize for space instead of speed.  Implied by @option{-Os}.
14767
14768 @item -mprefergot
14769 @opindex mprefergot
14770 When generating position-independent code, emit function calls using
14771 the Global Offset Table instead of the Procedure Linkage Table.
14772
14773 @item -musermode
14774 @opindex musermode
14775 Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
14776 if the inlined code would not work in user mode.
14777 This is the default when the target is @code{sh-*-linux*}.
14778
14779 @item -multcost=@var{number}
14780 @opindex multcost=@var{number}
14781 Set the cost to assume for a multiply insn.
14782
14783 @item -mdiv=@var{strategy}
14784 @opindex mdiv=@var{strategy}
14785 Set the division strategy to use for SHmedia code.  @var{strategy} must be
14786 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
14787 inv:call2, inv:fp .
14788 "fp" performs the operation in floating point.  This has a very high latency,
14789 but needs only a few instructions, so it might be a good choice if
14790 your code has enough easily exploitable ILP to allow the compiler to
14791 schedule the floating point instructions together with other instructions.
14792 Division by zero causes a floating point exception.
14793 "inv" uses integer operations to calculate the inverse of the divisor,
14794 and then multiplies the dividend with the inverse.  This strategy allows
14795 cse and hoisting of the inverse calculation.  Division by zero calculates
14796 an unspecified result, but does not trap.
14797 "inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
14798 have been found, or if the entire operation has been hoisted to the same
14799 place, the last stages of the inverse calculation are intertwined with the
14800 final multiply to reduce the overall latency, at the expense of using a few
14801 more instructions, and thus offering fewer scheduling opportunities with
14802 other code.
14803 "call" calls a library function that usually implements the inv:minlat
14804 strategy.
14805 This gives high code density for m5-*media-nofpu compilations.
14806 "call2" uses a different entry point of the same library function, where it
14807 assumes that a pointer to a lookup table has already been set up, which
14808 exposes the pointer load to cse / code hoisting optimizations.
14809 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
14810 code generation, but if the code stays unoptimized, revert to the "call",
14811 "call2", or "fp" strategies, respectively.  Note that the
14812 potentially-trapping side effect of division by zero is carried by a
14813 separate instruction, so it is possible that all the integer instructions
14814 are hoisted out, but the marker for the side effect stays where it is.
14815 A recombination to fp operations or a call is not possible in that case.
14816 "inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
14817 that the inverse calculation was nor separated from the multiply, they speed
14818 up division where the dividend fits into 20 bits (plus sign where applicable),
14819 by inserting a test to skip a number of operations in this case; this test
14820 slows down the case of larger dividends.  inv20u assumes the case of a such
14821 a small dividend to be unlikely, and inv20l assumes it to be likely.
14822
14823 @item -mdivsi3_libfunc=@var{name}
14824 @opindex mdivsi3_libfunc=@var{name}
14825 Set the name of the library function used for 32 bit signed division to
14826 @var{name}.  This only affect the name used in the call and inv:call
14827 division strategies, and the compiler will still expect the same
14828 sets of input/output/clobbered registers as if this option was not present.
14829
14830 @item -mfixed-range=@var{register-range}
14831 @opindex mfixed-range
14832 Generate code treating the given register range as fixed registers.
14833 A fixed register is one that the register allocator can not use.  This is
14834 useful when compiling kernel code.  A register range is specified as
14835 two registers separated by a dash.  Multiple register ranges can be
14836 specified separated by a comma.
14837
14838 @item -madjust-unroll
14839 @opindex madjust-unroll
14840 Throttle unrolling to avoid thrashing target registers.
14841 This option only has an effect if the gcc code base supports the
14842 TARGET_ADJUST_UNROLL_MAX target hook.
14843
14844 @item -mindexed-addressing
14845 @opindex mindexed-addressing
14846 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
14847 This is only safe if the hardware and/or OS implement 32 bit wrap-around
14848 semantics for the indexed addressing mode.  The architecture allows the
14849 implementation of processors with 64 bit MMU, which the OS could use to
14850 get 32 bit addressing, but since no current hardware implementation supports
14851 this or any other way to make the indexed addressing mode safe to use in
14852 the 32 bit ABI, the default is -mno-indexed-addressing.
14853
14854 @item -mgettrcost=@var{number}
14855 @opindex mgettrcost=@var{number}
14856 Set the cost assumed for the gettr instruction to @var{number}.
14857 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
14858
14859 @item -mpt-fixed
14860 @opindex mpt-fixed
14861 Assume pt* instructions won't trap.  This will generally generate better
14862 scheduled code, but is unsafe on current hardware.  The current architecture
14863 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
14864 This has the unintentional effect of making it unsafe to schedule ptabs /
14865 ptrel before a branch, or hoist it out of a loop.  For example,
14866 __do_global_ctors, a part of libgcc that runs constructors at program
14867 startup, calls functions in a list which is delimited by @minus{}1.  With the
14868 -mpt-fixed option, the ptabs will be done before testing against @minus{}1.
14869 That means that all the constructors will be run a bit quicker, but when
14870 the loop comes to the end of the list, the program crashes because ptabs
14871 loads @minus{}1 into a target register.  Since this option is unsafe for any
14872 hardware implementing the current architecture specification, the default
14873 is -mno-pt-fixed.  Unless the user specifies a specific cost with
14874 @option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
14875 this deters register allocation using target registers for storing
14876 ordinary integers.
14877
14878 @item -minvalid-symbols
14879 @opindex minvalid-symbols
14880 Assume symbols might be invalid.  Ordinary function symbols generated by
14881 the compiler will always be valid to load with movi/shori/ptabs or
14882 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
14883 to generate symbols that will cause ptabs / ptrel to trap.
14884 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
14885 It will then prevent cross-basic-block cse, hoisting and most scheduling
14886 of symbol loads.  The default is @option{-mno-invalid-symbols}.
14887 @end table
14888
14889 @node SPARC Options
14890 @subsection SPARC Options
14891 @cindex SPARC options
14892
14893 These @samp{-m} options are supported on the SPARC:
14894
14895 @table @gcctabopt
14896 @item -mno-app-regs
14897 @itemx -mapp-regs
14898 @opindex mno-app-regs
14899 @opindex mapp-regs
14900 Specify @option{-mapp-regs} to generate output using the global registers
14901 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
14902 is the default.
14903
14904 To be fully SVR4 ABI compliant at the cost of some performance loss,
14905 specify @option{-mno-app-regs}.  You should compile libraries and system
14906 software with this option.
14907
14908 @item -mfpu
14909 @itemx -mhard-float
14910 @opindex mfpu
14911 @opindex mhard-float
14912 Generate output containing floating point instructions.  This is the
14913 default.
14914
14915 @item -mno-fpu
14916 @itemx -msoft-float
14917 @opindex mno-fpu
14918 @opindex msoft-float
14919 Generate output containing library calls for floating point.
14920 @strong{Warning:} the requisite libraries are not available for all SPARC
14921 targets.  Normally the facilities of the machine's usual C compiler are
14922 used, but this cannot be done directly in cross-compilation.  You must make
14923 your own arrangements to provide suitable library functions for
14924 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
14925 @samp{sparclite-*-*} do provide software floating point support.
14926
14927 @option{-msoft-float} changes the calling convention in the output file;
14928 therefore, it is only useful if you compile @emph{all} of a program with
14929 this option.  In particular, you need to compile @file{libgcc.a}, the
14930 library that comes with GCC, with @option{-msoft-float} in order for
14931 this to work.
14932
14933 @item -mhard-quad-float
14934 @opindex mhard-quad-float
14935 Generate output containing quad-word (long double) floating point
14936 instructions.
14937
14938 @item -msoft-quad-float
14939 @opindex msoft-quad-float
14940 Generate output containing library calls for quad-word (long double)
14941 floating point instructions.  The functions called are those specified
14942 in the SPARC ABI@.  This is the default.
14943
14944 As of this writing, there are no SPARC implementations that have hardware
14945 support for the quad-word floating point instructions.  They all invoke
14946 a trap handler for one of these instructions, and then the trap handler
14947 emulates the effect of the instruction.  Because of the trap handler overhead,
14948 this is much slower than calling the ABI library routines.  Thus the
14949 @option{-msoft-quad-float} option is the default.
14950
14951 @item -mno-unaligned-doubles
14952 @itemx -munaligned-doubles
14953 @opindex mno-unaligned-doubles
14954 @opindex munaligned-doubles
14955 Assume that doubles have 8 byte alignment.  This is the default.
14956
14957 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
14958 alignment only if they are contained in another type, or if they have an
14959 absolute address.  Otherwise, it assumes they have 4 byte alignment.
14960 Specifying this option avoids some rare compatibility problems with code
14961 generated by other compilers.  It is not the default because it results
14962 in a performance loss, especially for floating point code.
14963
14964 @item -mno-faster-structs
14965 @itemx -mfaster-structs
14966 @opindex mno-faster-structs
14967 @opindex mfaster-structs
14968 With @option{-mfaster-structs}, the compiler assumes that structures
14969 should have 8 byte alignment.  This enables the use of pairs of
14970 @code{ldd} and @code{std} instructions for copies in structure
14971 assignment, in place of twice as many @code{ld} and @code{st} pairs.
14972 However, the use of this changed alignment directly violates the SPARC
14973 ABI@.  Thus, it's intended only for use on targets where the developer
14974 acknowledges that their resulting code will not be directly in line with
14975 the rules of the ABI@.
14976
14977 @item -mimpure-text
14978 @opindex mimpure-text
14979 @option{-mimpure-text}, used in addition to @option{-shared}, tells
14980 the compiler to not pass @option{-z text} to the linker when linking a
14981 shared object.  Using this option, you can link position-dependent
14982 code into a shared object.
14983
14984 @option{-mimpure-text} suppresses the ``relocations remain against
14985 allocatable but non-writable sections'' linker error message.
14986 However, the necessary relocations will trigger copy-on-write, and the
14987 shared object is not actually shared across processes.  Instead of
14988 using @option{-mimpure-text}, you should compile all source code with
14989 @option{-fpic} or @option{-fPIC}.
14990
14991 This option is only available on SunOS and Solaris.
14992
14993 @item -mcpu=@var{cpu_type}
14994 @opindex mcpu
14995 Set the instruction set, register set, and instruction scheduling parameters
14996 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
14997 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
14998 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
14999 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
15000 @samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
15001
15002 Default instruction scheduling parameters are used for values that select
15003 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
15004 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
15005
15006 Here is a list of each supported architecture and their supported
15007 implementations.
15008
15009 @smallexample
15010     v7:             cypress
15011     v8:             supersparc, hypersparc
15012     sparclite:      f930, f934, sparclite86x
15013     sparclet:       tsc701
15014     v9:             ultrasparc, ultrasparc3, niagara, niagara2
15015 @end smallexample
15016
15017 By default (unless configured otherwise), GCC generates code for the V7
15018 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
15019 additionally optimizes it for the Cypress CY7C602 chip, as used in the
15020 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
15021 SPARCStation 1, 2, IPX etc.
15022
15023 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
15024 architecture.  The only difference from V7 code is that the compiler emits
15025 the integer multiply and integer divide instructions which exist in SPARC-V8
15026 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
15027 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
15028 2000 series.
15029
15030 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
15031 the SPARC architecture.  This adds the integer multiply, integer divide step
15032 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
15033 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
15034 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
15035 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
15036 MB86934 chip, which is the more recent SPARClite with FPU@.
15037
15038 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
15039 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
15040 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
15041 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
15042 optimizes it for the TEMIC SPARClet chip.
15043
15044 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
15045 architecture.  This adds 64-bit integer and floating-point move instructions,
15046 3 additional floating-point condition code registers and conditional move
15047 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
15048 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
15049 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
15050 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
15051 @option{-mcpu=niagara}, the compiler additionally optimizes it for
15052 Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
15053 additionally optimizes it for Sun UltraSPARC T2 chips.
15054
15055 @item -mtune=@var{cpu_type}
15056 @opindex mtune
15057 Set the instruction scheduling parameters for machine type
15058 @var{cpu_type}, but do not set the instruction set or register set that the
15059 option @option{-mcpu=@var{cpu_type}} would.
15060
15061 The same values for @option{-mcpu=@var{cpu_type}} can be used for
15062 @option{-mtune=@var{cpu_type}}, but the only useful values are those
15063 that select a particular cpu implementation.  Those are @samp{cypress},
15064 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
15065 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
15066 @samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
15067
15068 @item -mv8plus
15069 @itemx -mno-v8plus
15070 @opindex mv8plus
15071 @opindex mno-v8plus
15072 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
15073 difference from the V8 ABI is that the global and out registers are
15074 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
15075 mode for all SPARC-V9 processors.
15076
15077 @item -mvis
15078 @itemx -mno-vis
15079 @opindex mvis
15080 @opindex mno-vis
15081 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
15082 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
15083 @end table
15084
15085 These @samp{-m} options are supported in addition to the above
15086 on SPARC-V9 processors in 64-bit environments:
15087
15088 @table @gcctabopt
15089 @item -mlittle-endian
15090 @opindex mlittle-endian
15091 Generate code for a processor running in little-endian mode.  It is only
15092 available for a few configurations and most notably not on Solaris and Linux.
15093
15094 @item -m32
15095 @itemx -m64
15096 @opindex m32
15097 @opindex m64
15098 Generate code for a 32-bit or 64-bit environment.
15099 The 32-bit environment sets int, long and pointer to 32 bits.
15100 The 64-bit environment sets int to 32 bits and long and pointer
15101 to 64 bits.
15102
15103 @item -mcmodel=medlow
15104 @opindex mcmodel=medlow
15105 Generate code for the Medium/Low code model: 64-bit addresses, programs
15106 must be linked in the low 32 bits of memory.  Programs can be statically
15107 or dynamically linked.
15108
15109 @item -mcmodel=medmid
15110 @opindex mcmodel=medmid
15111 Generate code for the Medium/Middle code model: 64-bit addresses, programs
15112 must be linked in the low 44 bits of memory, the text and data segments must
15113 be less than 2GB in size and the data segment must be located within 2GB of
15114 the text segment.
15115
15116 @item -mcmodel=medany
15117 @opindex mcmodel=medany
15118 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
15119 may be linked anywhere in memory, the text and data segments must be less
15120 than 2GB in size and the data segment must be located within 2GB of the
15121 text segment.
15122
15123 @item -mcmodel=embmedany
15124 @opindex mcmodel=embmedany
15125 Generate code for the Medium/Anywhere code model for embedded systems:
15126 64-bit addresses, the text and data segments must be less than 2GB in
15127 size, both starting anywhere in memory (determined at link time).  The
15128 global register %g4 points to the base of the data segment.  Programs
15129 are statically linked and PIC is not supported.
15130
15131 @item -mstack-bias
15132 @itemx -mno-stack-bias
15133 @opindex mstack-bias
15134 @opindex mno-stack-bias
15135 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
15136 frame pointer if present, are offset by @minus{}2047 which must be added back
15137 when making stack frame references.  This is the default in 64-bit mode.
15138 Otherwise, assume no such offset is present.
15139 @end table
15140
15141 These switches are supported in addition to the above on Solaris:
15142
15143 @table @gcctabopt
15144 @item -threads
15145 @opindex threads
15146 Add support for multithreading using the Solaris threads library.  This
15147 option sets flags for both the preprocessor and linker.  This option does
15148 not affect the thread safety of object code produced by the compiler or
15149 that of libraries supplied with it.
15150
15151 @item -pthreads
15152 @opindex pthreads
15153 Add support for multithreading using the POSIX threads library.  This
15154 option sets flags for both the preprocessor and linker.  This option does
15155 not affect the thread safety of object code produced  by the compiler or
15156 that of libraries supplied with it.
15157
15158 @item -pthread
15159 @opindex pthread
15160 This is a synonym for @option{-pthreads}.
15161 @end table
15162
15163 @node SPU Options
15164 @subsection SPU Options
15165 @cindex SPU options
15166
15167 These @samp{-m} options are supported on the SPU:
15168
15169 @table @gcctabopt
15170 @item -mwarn-reloc
15171 @itemx -merror-reloc
15172 @opindex mwarn-reloc
15173 @opindex merror-reloc
15174
15175 The loader for SPU does not handle dynamic relocations.  By default, GCC
15176 will give an error when it generates code that requires a dynamic
15177 relocation.  @option{-mno-error-reloc} disables the error,
15178 @option{-mwarn-reloc} will generate a warning instead.
15179
15180 @item -msafe-dma
15181 @itemx -munsafe-dma
15182 @opindex msafe-dma
15183 @opindex munsafe-dma
15184
15185 Instructions which initiate or test completion of DMA must not be
15186 reordered with respect to loads and stores of the memory which is being
15187 accessed.  Users typically address this problem using the volatile
15188 keyword, but that can lead to inefficient code in places where the
15189 memory is known to not change.  Rather than mark the memory as volatile
15190 we treat the DMA instructions as potentially effecting all memory.  With
15191 @option{-munsafe-dma} users must use the volatile keyword to protect
15192 memory accesses.
15193
15194 @item -mbranch-hints
15195 @opindex mbranch-hints
15196
15197 By default, GCC will generate a branch hint instruction to avoid
15198 pipeline stalls for always taken or probably taken branches.  A hint
15199 will not be generated closer than 8 instructions away from its branch.
15200 There is little reason to disable them, except for debugging purposes,
15201 or to make an object a little bit smaller.
15202
15203 @item -msmall-mem
15204 @itemx -mlarge-mem
15205 @opindex msmall-mem
15206 @opindex mlarge-mem
15207
15208 By default, GCC generates code assuming that addresses are never larger
15209 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
15210 a full 32 bit address.
15211
15212 @item -mstdmain
15213 @opindex mstdmain
15214
15215 By default, GCC links against startup code that assumes the SPU-style
15216 main function interface (which has an unconventional parameter list).
15217 With @option{-mstdmain}, GCC will link your program against startup
15218 code that assumes a C99-style interface to @code{main}, including a
15219 local copy of @code{argv} strings.
15220
15221 @item -mfixed-range=@var{register-range}
15222 @opindex mfixed-range
15223 Generate code treating the given register range as fixed registers.
15224 A fixed register is one that the register allocator can not use.  This is
15225 useful when compiling kernel code.  A register range is specified as
15226 two registers separated by a dash.  Multiple register ranges can be
15227 specified separated by a comma.
15228
15229 @item -mdual-nops
15230 @itemx -mdual-nops=@var{n}
15231 @opindex mdual-nops
15232 By default, GCC will insert nops to increase dual issue when it expects
15233 it to increase performance.  @var{n} can be a value from 0 to 10.  A
15234 smaller @var{n} will insert fewer nops.  10 is the default, 0 is the
15235 same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
15236
15237 @item -mhint-max-nops=@var{n}
15238 @opindex mhint-max-nops
15239 Maximum number of nops to insert for a branch hint.  A branch hint must
15240 be at least 8 instructions away from the branch it is effecting.  GCC
15241 will insert up to @var{n} nops to enforce this, otherwise it will not
15242 generate the branch hint.
15243
15244 @item -mhint-max-distance=@var{n}
15245 @opindex mhint-max-distance
15246 The encoding of the branch hint instruction limits the hint to be within
15247 256 instructions of the branch it is effecting.  By default, GCC makes
15248 sure it is within 125. 
15249
15250 @item -msafe-hints
15251 @opindex msafe-hints
15252 Work around a hardware bug which causes the SPU to stall indefinitely.
15253 By default, GCC will insert the @code{hbrp} instruction to make sure
15254 this stall won't happen.
15255
15256 @end table
15257
15258 @node System V Options
15259 @subsection Options for System V
15260
15261 These additional options are available on System V Release 4 for
15262 compatibility with other compilers on those systems:
15263
15264 @table @gcctabopt
15265 @item -G
15266 @opindex G
15267 Create a shared object.
15268 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
15269
15270 @item -Qy
15271 @opindex Qy
15272 Identify the versions of each tool used by the compiler, in a
15273 @code{.ident} assembler directive in the output.
15274
15275 @item -Qn
15276 @opindex Qn
15277 Refrain from adding @code{.ident} directives to the output file (this is
15278 the default).
15279
15280 @item -YP,@var{dirs}
15281 @opindex YP
15282 Search the directories @var{dirs}, and no others, for libraries
15283 specified with @option{-l}.
15284
15285 @item -Ym,@var{dir}
15286 @opindex Ym
15287 Look in the directory @var{dir} to find the M4 preprocessor.
15288 The assembler uses this option.
15289 @c This is supposed to go with a -Yd for predefined M4 macro files, but
15290 @c the generic assembler that comes with Solaris takes just -Ym.
15291 @end table
15292
15293 @node V850 Options
15294 @subsection V850 Options
15295 @cindex V850 Options
15296
15297 These @samp{-m} options are defined for V850 implementations:
15298
15299 @table @gcctabopt
15300 @item -mlong-calls
15301 @itemx -mno-long-calls
15302 @opindex mlong-calls
15303 @opindex mno-long-calls
15304 Treat all calls as being far away (near).  If calls are assumed to be
15305 far away, the compiler will always load the functions address up into a
15306 register, and call indirect through the pointer.
15307
15308 @item -mno-ep
15309 @itemx -mep
15310 @opindex mno-ep
15311 @opindex mep
15312 Do not optimize (do optimize) basic blocks that use the same index
15313 pointer 4 or more times to copy pointer into the @code{ep} register, and
15314 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
15315 option is on by default if you optimize.
15316
15317 @item -mno-prolog-function
15318 @itemx -mprolog-function
15319 @opindex mno-prolog-function
15320 @opindex mprolog-function
15321 Do not use (do use) external functions to save and restore registers
15322 at the prologue and epilogue of a function.  The external functions
15323 are slower, but use less code space if more than one function saves
15324 the same number of registers.  The @option{-mprolog-function} option
15325 is on by default if you optimize.
15326
15327 @item -mspace
15328 @opindex mspace
15329 Try to make the code as small as possible.  At present, this just turns
15330 on the @option{-mep} and @option{-mprolog-function} options.
15331
15332 @item -mtda=@var{n}
15333 @opindex mtda
15334 Put static or global variables whose size is @var{n} bytes or less into
15335 the tiny data area that register @code{ep} points to.  The tiny data
15336 area can hold up to 256 bytes in total (128 bytes for byte references).
15337
15338 @item -msda=@var{n}
15339 @opindex msda
15340 Put static or global variables whose size is @var{n} bytes or less into
15341 the small data area that register @code{gp} points to.  The small data
15342 area can hold up to 64 kilobytes.
15343
15344 @item -mzda=@var{n}
15345 @opindex mzda
15346 Put static or global variables whose size is @var{n} bytes or less into
15347 the first 32 kilobytes of memory.
15348
15349 @item -mv850
15350 @opindex mv850
15351 Specify that the target processor is the V850.
15352
15353 @item -mbig-switch
15354 @opindex mbig-switch
15355 Generate code suitable for big switch tables.  Use this option only if
15356 the assembler/linker complain about out of range branches within a switch
15357 table.
15358
15359 @item -mapp-regs
15360 @opindex mapp-regs
15361 This option will cause r2 and r5 to be used in the code generated by
15362 the compiler.  This setting is the default.
15363
15364 @item -mno-app-regs
15365 @opindex mno-app-regs
15366 This option will cause r2 and r5 to be treated as fixed registers.
15367
15368 @item -mv850e1
15369 @opindex mv850e1
15370 Specify that the target processor is the V850E1.  The preprocessor
15371 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
15372 this option is used.
15373
15374 @item -mv850e
15375 @opindex mv850e
15376 Specify that the target processor is the V850E@.  The preprocessor
15377 constant @samp{__v850e__} will be defined if this option is used.
15378
15379 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
15380 are defined then a default target processor will be chosen and the
15381 relevant @samp{__v850*__} preprocessor constant will be defined.
15382
15383 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
15384 defined, regardless of which processor variant is the target.
15385
15386 @item -mdisable-callt
15387 @opindex mdisable-callt
15388 This option will suppress generation of the CALLT instruction for the
15389 v850e and v850e1 flavors of the v850 architecture.  The default is
15390 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
15391
15392 @end table
15393
15394 @node VAX Options
15395 @subsection VAX Options
15396 @cindex VAX options
15397
15398 These @samp{-m} options are defined for the VAX:
15399
15400 @table @gcctabopt
15401 @item -munix
15402 @opindex munix
15403 Do not output certain jump instructions (@code{aobleq} and so on)
15404 that the Unix assembler for the VAX cannot handle across long
15405 ranges.
15406
15407 @item -mgnu
15408 @opindex mgnu
15409 Do output those jump instructions, on the assumption that you
15410 will assemble with the GNU assembler.
15411
15412 @item -mg
15413 @opindex mg
15414 Output code for g-format floating point numbers instead of d-format.
15415 @end table
15416
15417 @node VxWorks Options
15418 @subsection VxWorks Options
15419 @cindex VxWorks Options
15420
15421 The options in this section are defined for all VxWorks targets.
15422 Options specific to the target hardware are listed with the other
15423 options for that target.
15424
15425 @table @gcctabopt
15426 @item -mrtp
15427 @opindex mrtp
15428 GCC can generate code for both VxWorks kernels and real time processes
15429 (RTPs).  This option switches from the former to the latter.  It also
15430 defines the preprocessor macro @code{__RTP__}.
15431
15432 @item -non-static
15433 @opindex non-static
15434 Link an RTP executable against shared libraries rather than static
15435 libraries.  The options @option{-static} and @option{-shared} can
15436 also be used for RTPs (@pxref{Link Options}); @option{-static}
15437 is the default.
15438
15439 @item -Bstatic
15440 @itemx -Bdynamic
15441 @opindex Bstatic
15442 @opindex Bdynamic
15443 These options are passed down to the linker.  They are defined for
15444 compatibility with Diab.
15445
15446 @item -Xbind-lazy
15447 @opindex Xbind-lazy
15448 Enable lazy binding of function calls.  This option is equivalent to
15449 @option{-Wl,-z,now} and is defined for compatibility with Diab.
15450
15451 @item -Xbind-now
15452 @opindex Xbind-now
15453 Disable lazy binding of function calls.  This option is the default and
15454 is defined for compatibility with Diab.
15455 @end table
15456
15457 @node x86-64 Options
15458 @subsection x86-64 Options
15459 @cindex x86-64 options
15460
15461 These are listed under @xref{i386 and x86-64 Options}.
15462
15463 @node Xstormy16 Options
15464 @subsection Xstormy16 Options
15465 @cindex Xstormy16 Options
15466
15467 These options are defined for Xstormy16:
15468
15469 @table @gcctabopt
15470 @item -msim
15471 @opindex msim
15472 Choose startup files and linker script suitable for the simulator.
15473 @end table
15474
15475 @node Xtensa Options
15476 @subsection Xtensa Options
15477 @cindex Xtensa Options
15478
15479 These options are supported for Xtensa targets:
15480
15481 @table @gcctabopt
15482 @item -mconst16
15483 @itemx -mno-const16
15484 @opindex mconst16
15485 @opindex mno-const16
15486 Enable or disable use of @code{CONST16} instructions for loading
15487 constant values.  The @code{CONST16} instruction is currently not a
15488 standard option from Tensilica.  When enabled, @code{CONST16}
15489 instructions are always used in place of the standard @code{L32R}
15490 instructions.  The use of @code{CONST16} is enabled by default only if
15491 the @code{L32R} instruction is not available.
15492
15493 @item -mfused-madd
15494 @itemx -mno-fused-madd
15495 @opindex mfused-madd
15496 @opindex mno-fused-madd
15497 Enable or disable use of fused multiply/add and multiply/subtract
15498 instructions in the floating-point option.  This has no effect if the
15499 floating-point option is not also enabled.  Disabling fused multiply/add
15500 and multiply/subtract instructions forces the compiler to use separate
15501 instructions for the multiply and add/subtract operations.  This may be
15502 desirable in some cases where strict IEEE 754-compliant results are
15503 required: the fused multiply add/subtract instructions do not round the
15504 intermediate result, thereby producing results with @emph{more} bits of
15505 precision than specified by the IEEE standard.  Disabling fused multiply
15506 add/subtract instructions also ensures that the program output is not
15507 sensitive to the compiler's ability to combine multiply and add/subtract
15508 operations.
15509
15510 @item -mserialize-volatile
15511 @itemx -mno-serialize-volatile
15512 @opindex mserialize-volatile
15513 @opindex mno-serialize-volatile
15514 When this option is enabled, GCC inserts @code{MEMW} instructions before
15515 @code{volatile} memory references to guarantee sequential consistency.
15516 The default is @option{-mserialize-volatile}.  Use
15517 @option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
15518
15519 @item -mtext-section-literals
15520 @itemx -mno-text-section-literals
15521 @opindex mtext-section-literals
15522 @opindex mno-text-section-literals
15523 Control the treatment of literal pools.  The default is
15524 @option{-mno-text-section-literals}, which places literals in a separate
15525 section in the output file.  This allows the literal pool to be placed
15526 in a data RAM/ROM, and it also allows the linker to combine literal
15527 pools from separate object files to remove redundant literals and
15528 improve code size.  With @option{-mtext-section-literals}, the literals
15529 are interspersed in the text section in order to keep them as close as
15530 possible to their references.  This may be necessary for large assembly
15531 files.
15532
15533 @item -mtarget-align
15534 @itemx -mno-target-align
15535 @opindex mtarget-align
15536 @opindex mno-target-align
15537 When this option is enabled, GCC instructs the assembler to
15538 automatically align instructions to reduce branch penalties at the
15539 expense of some code density.  The assembler attempts to widen density
15540 instructions to align branch targets and the instructions following call
15541 instructions.  If there are not enough preceding safe density
15542 instructions to align a target, no widening will be performed.  The
15543 default is @option{-mtarget-align}.  These options do not affect the
15544 treatment of auto-aligned instructions like @code{LOOP}, which the
15545 assembler will always align, either by widening density instructions or
15546 by inserting no-op instructions.
15547
15548 @item -mlongcalls
15549 @itemx -mno-longcalls
15550 @opindex mlongcalls
15551 @opindex mno-longcalls
15552 When this option is enabled, GCC instructs the assembler to translate
15553 direct calls to indirect calls unless it can determine that the target
15554 of a direct call is in the range allowed by the call instruction.  This
15555 translation typically occurs for calls to functions in other source
15556 files.  Specifically, the assembler translates a direct @code{CALL}
15557 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
15558 The default is @option{-mno-longcalls}.  This option should be used in
15559 programs where the call target can potentially be out of range.  This
15560 option is implemented in the assembler, not the compiler, so the
15561 assembly code generated by GCC will still show direct call
15562 instructions---look at the disassembled object code to see the actual
15563 instructions.  Note that the assembler will use an indirect call for
15564 every cross-file call, not just those that really will be out of range.
15565 @end table
15566
15567 @node zSeries Options
15568 @subsection zSeries Options
15569 @cindex zSeries options
15570
15571 These are listed under @xref{S/390 and zSeries Options}.
15572
15573 @node Code Gen Options
15574 @section Options for Code Generation Conventions
15575 @cindex code generation conventions
15576 @cindex options, code generation
15577 @cindex run-time options
15578
15579 These machine-independent options control the interface conventions
15580 used in code generation.
15581
15582 Most of them have both positive and negative forms; the negative form
15583 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
15584 one of the forms is listed---the one which is not the default.  You
15585 can figure out the other form by either removing @samp{no-} or adding
15586 it.
15587
15588 @table @gcctabopt
15589 @item -fbounds-check
15590 @opindex fbounds-check
15591 For front-ends that support it, generate additional code to check that
15592 indices used to access arrays are within the declared range.  This is
15593 currently only supported by the Java and Fortran front-ends, where
15594 this option defaults to true and false respectively.
15595
15596 @item -ftrapv
15597 @opindex ftrapv
15598 This option generates traps for signed overflow on addition, subtraction,
15599 multiplication operations.
15600
15601 @item -fwrapv
15602 @opindex fwrapv
15603 This option instructs the compiler to assume that signed arithmetic
15604 overflow of addition, subtraction and multiplication wraps around
15605 using twos-complement representation.  This flag enables some optimizations
15606 and disables others.  This option is enabled by default for the Java
15607 front-end, as required by the Java language specification.
15608
15609 @item -fexceptions
15610 @opindex fexceptions
15611 Enable exception handling.  Generates extra code needed to propagate
15612 exceptions.  For some targets, this implies GCC will generate frame
15613 unwind information for all functions, which can produce significant data
15614 size overhead, although it does not affect execution.  If you do not
15615 specify this option, GCC will enable it by default for languages like
15616 C++ which normally require exception handling, and disable it for
15617 languages like C that do not normally require it.  However, you may need
15618 to enable this option when compiling C code that needs to interoperate
15619 properly with exception handlers written in C++.  You may also wish to
15620 disable this option if you are compiling older C++ programs that don't
15621 use exception handling.
15622
15623 @item -fnon-call-exceptions
15624 @opindex fnon-call-exceptions
15625 Generate code that allows trapping instructions to throw exceptions.
15626 Note that this requires platform-specific runtime support that does
15627 not exist everywhere.  Moreover, it only allows @emph{trapping}
15628 instructions to throw exceptions, i.e.@: memory references or floating
15629 point instructions.  It does not allow exceptions to be thrown from
15630 arbitrary signal handlers such as @code{SIGALRM}.
15631
15632 @item -funwind-tables
15633 @opindex funwind-tables
15634 Similar to @option{-fexceptions}, except that it will just generate any needed
15635 static data, but will not affect the generated code in any other way.
15636 You will normally not enable this option; instead, a language processor
15637 that needs this handling would enable it on your behalf.
15638
15639 @item -fasynchronous-unwind-tables
15640 @opindex fasynchronous-unwind-tables
15641 Generate unwind table in dwarf2 format, if supported by target machine.  The
15642 table is exact at each instruction boundary, so it can be used for stack
15643 unwinding from asynchronous events (such as debugger or garbage collector).
15644
15645 @item -fpcc-struct-return
15646 @opindex fpcc-struct-return
15647 Return ``short'' @code{struct} and @code{union} values in memory like
15648 longer ones, rather than in registers.  This convention is less
15649 efficient, but it has the advantage of allowing intercallability between
15650 GCC-compiled files and files compiled with other compilers, particularly
15651 the Portable C Compiler (pcc).
15652
15653 The precise convention for returning structures in memory depends
15654 on the target configuration macros.
15655
15656 Short structures and unions are those whose size and alignment match
15657 that of some integer type.
15658
15659 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
15660 switch is not binary compatible with code compiled with the
15661 @option{-freg-struct-return} switch.
15662 Use it to conform to a non-default application binary interface.
15663
15664 @item -freg-struct-return
15665 @opindex freg-struct-return
15666 Return @code{struct} and @code{union} values in registers when possible.
15667 This is more efficient for small structures than
15668 @option{-fpcc-struct-return}.
15669
15670 If you specify neither @option{-fpcc-struct-return} nor
15671 @option{-freg-struct-return}, GCC defaults to whichever convention is
15672 standard for the target.  If there is no standard convention, GCC
15673 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
15674 the principal compiler.  In those cases, we can choose the standard, and
15675 we chose the more efficient register return alternative.
15676
15677 @strong{Warning:} code compiled with the @option{-freg-struct-return}
15678 switch is not binary compatible with code compiled with the
15679 @option{-fpcc-struct-return} switch.
15680 Use it to conform to a non-default application binary interface.
15681
15682 @item -fshort-enums
15683 @opindex fshort-enums
15684 Allocate to an @code{enum} type only as many bytes as it needs for the
15685 declared range of possible values.  Specifically, the @code{enum} type
15686 will be equivalent to the smallest integer type which has enough room.
15687
15688 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
15689 code that is not binary compatible with code generated without that switch.
15690 Use it to conform to a non-default application binary interface.
15691
15692 @item -fshort-double
15693 @opindex fshort-double
15694 Use the same size for @code{double} as for @code{float}.
15695
15696 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
15697 code that is not binary compatible with code generated without that switch.
15698 Use it to conform to a non-default application binary interface.
15699
15700 @item -fshort-wchar
15701 @opindex fshort-wchar
15702 Override the underlying type for @samp{wchar_t} to be @samp{short
15703 unsigned int} instead of the default for the target.  This option is
15704 useful for building programs to run under WINE@.
15705
15706 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
15707 code that is not binary compatible with code generated without that switch.
15708 Use it to conform to a non-default application binary interface.
15709
15710 @item -fno-common
15711 @opindex fno-common
15712 In C, allocate even uninitialized global variables in the data section of the
15713 object file, rather than generating them as common blocks.  This has the
15714 effect that if the same variable is declared (without @code{extern}) in
15715 two different compilations, you will get an error when you link them.
15716 The only reason this might be useful is if you wish to verify that the
15717 program will work on other systems which always work this way.
15718
15719 @item -fno-ident
15720 @opindex fno-ident
15721 Ignore the @samp{#ident} directive.
15722
15723 @item -finhibit-size-directive
15724 @opindex finhibit-size-directive
15725 Don't output a @code{.size} assembler directive, or anything else that
15726 would cause trouble if the function is split in the middle, and the
15727 two halves are placed at locations far apart in memory.  This option is
15728 used when compiling @file{crtstuff.c}; you should not need to use it
15729 for anything else.
15730
15731 @item -fverbose-asm
15732 @opindex fverbose-asm
15733 Put extra commentary information in the generated assembly code to
15734 make it more readable.  This option is generally only of use to those
15735 who actually need to read the generated assembly code (perhaps while
15736 debugging the compiler itself).
15737
15738 @option{-fno-verbose-asm}, the default, causes the
15739 extra information to be omitted and is useful when comparing two assembler
15740 files.
15741
15742 @item -frecord-gcc-switches
15743 @opindex frecord-gcc-switches
15744 This switch causes the command line that was used to invoke the
15745 compiler to be recorded into the object file that is being created.
15746 This switch is only implemented on some targets and the exact format
15747 of the recording is target and binary file format dependent, but it
15748 usually takes the form of a section containing ASCII text.  This
15749 switch is related to the @option{-fverbose-asm} switch, but that
15750 switch only records information in the assembler output file as
15751 comments, so it never reaches the object file.
15752
15753 @item -fpic
15754 @opindex fpic
15755 @cindex global offset table
15756 @cindex PIC
15757 Generate position-independent code (PIC) suitable for use in a shared
15758 library, if supported for the target machine.  Such code accesses all
15759 constant addresses through a global offset table (GOT)@.  The dynamic
15760 loader resolves the GOT entries when the program starts (the dynamic
15761 loader is not part of GCC; it is part of the operating system).  If
15762 the GOT size for the linked executable exceeds a machine-specific
15763 maximum size, you get an error message from the linker indicating that
15764 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
15765 instead.  (These maximums are 8k on the SPARC and 32k
15766 on the m68k and RS/6000.  The 386 has no such limit.)
15767
15768 Position-independent code requires special support, and therefore works
15769 only on certain machines.  For the 386, GCC supports PIC for System V
15770 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
15771 position-independent.
15772
15773 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
15774 are defined to 1.
15775
15776 @item -fPIC
15777 @opindex fPIC
15778 If supported for the target machine, emit position-independent code,
15779 suitable for dynamic linking and avoiding any limit on the size of the
15780 global offset table.  This option makes a difference on the m68k,
15781 PowerPC and SPARC@.
15782
15783 Position-independent code requires special support, and therefore works
15784 only on certain machines.
15785
15786 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
15787 are defined to 2.
15788
15789 @item -fpie
15790 @itemx -fPIE
15791 @opindex fpie
15792 @opindex fPIE
15793 These options are similar to @option{-fpic} and @option{-fPIC}, but
15794 generated position independent code can be only linked into executables.
15795 Usually these options are used when @option{-pie} GCC option will be
15796 used during linking.
15797
15798 @option{-fpie} and @option{-fPIE} both define the macros
15799 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
15800 for @option{-fpie} and 2 for @option{-fPIE}.
15801
15802 @item -fno-jump-tables
15803 @opindex fno-jump-tables
15804 Do not use jump tables for switch statements even where it would be
15805 more efficient than other code generation strategies.  This option is
15806 of use in conjunction with @option{-fpic} or @option{-fPIC} for
15807 building code which forms part of a dynamic linker and cannot
15808 reference the address of a jump table.  On some targets, jump tables
15809 do not require a GOT and this option is not needed.
15810
15811 @item -ffixed-@var{reg}
15812 @opindex ffixed
15813 Treat the register named @var{reg} as a fixed register; generated code
15814 should never refer to it (except perhaps as a stack pointer, frame
15815 pointer or in some other fixed role).
15816
15817 @var{reg} must be the name of a register.  The register names accepted
15818 are machine-specific and are defined in the @code{REGISTER_NAMES}
15819 macro in the machine description macro file.
15820
15821 This flag does not have a negative form, because it specifies a
15822 three-way choice.
15823
15824 @item -fcall-used-@var{reg}
15825 @opindex fcall-used
15826 Treat the register named @var{reg} as an allocable register that is
15827 clobbered by function calls.  It may be allocated for temporaries or
15828 variables that do not live across a call.  Functions compiled this way
15829 will not save and restore the register @var{reg}.
15830
15831 It is an error to used this flag with the frame pointer or stack pointer.
15832 Use of this flag for other registers that have fixed pervasive roles in
15833 the machine's execution model will produce disastrous results.
15834
15835 This flag does not have a negative form, because it specifies a
15836 three-way choice.
15837
15838 @item -fcall-saved-@var{reg}
15839 @opindex fcall-saved
15840 Treat the register named @var{reg} as an allocable register saved by
15841 functions.  It may be allocated even for temporaries or variables that
15842 live across a call.  Functions compiled this way will save and restore
15843 the register @var{reg} if they use it.
15844
15845 It is an error to used this flag with the frame pointer or stack pointer.
15846 Use of this flag for other registers that have fixed pervasive roles in
15847 the machine's execution model will produce disastrous results.
15848
15849 A different sort of disaster will result from the use of this flag for
15850 a register in which function values may be returned.
15851
15852 This flag does not have a negative form, because it specifies a
15853 three-way choice.
15854
15855 @item -fpack-struct[=@var{n}]
15856 @opindex fpack-struct
15857 Without a value specified, pack all structure members together without
15858 holes.  When a value is specified (which must be a small power of two), pack
15859 structure members according to this value, representing the maximum
15860 alignment (that is, objects with default alignment requirements larger than
15861 this will be output potentially unaligned at the next fitting location.
15862
15863 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
15864 code that is not binary compatible with code generated without that switch.
15865 Additionally, it makes the code suboptimal.
15866 Use it to conform to a non-default application binary interface.
15867
15868 @item -finstrument-functions
15869 @opindex finstrument-functions
15870 Generate instrumentation calls for entry and exit to functions.  Just
15871 after function entry and just before function exit, the following
15872 profiling functions will be called with the address of the current
15873 function and its call site.  (On some platforms,
15874 @code{__builtin_return_address} does not work beyond the current
15875 function, so the call site information may not be available to the
15876 profiling functions otherwise.)
15877
15878 @smallexample
15879 void __cyg_profile_func_enter (void *this_fn,
15880                                void *call_site);
15881 void __cyg_profile_func_exit  (void *this_fn,
15882                                void *call_site);
15883 @end smallexample
15884
15885 The first argument is the address of the start of the current function,
15886 which may be looked up exactly in the symbol table.
15887
15888 This instrumentation is also done for functions expanded inline in other
15889 functions.  The profiling calls will indicate where, conceptually, the
15890 inline function is entered and exited.  This means that addressable
15891 versions of such functions must be available.  If all your uses of a
15892 function are expanded inline, this may mean an additional expansion of
15893 code size.  If you use @samp{extern inline} in your C code, an
15894 addressable version of such functions must be provided.  (This is
15895 normally the case anyways, but if you get lucky and the optimizer always
15896 expands the functions inline, you might have gotten away without
15897 providing static copies.)
15898
15899 A function may be given the attribute @code{no_instrument_function}, in
15900 which case this instrumentation will not be done.  This can be used, for
15901 example, for the profiling functions listed above, high-priority
15902 interrupt routines, and any functions from which the profiling functions
15903 cannot safely be called (perhaps signal handlers, if the profiling
15904 routines generate output or allocate memory).
15905
15906 @item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
15907 @opindex finstrument-functions-exclude-file-list
15908
15909 Set the list of functions that are excluded from instrumentation (see
15910 the description of @code{-finstrument-functions}).  If the file that
15911 contains a function definition matches with one of @var{file}, then
15912 that function is not instrumented.  The match is done on substrings:
15913 if the @var{file} parameter is a substring of the file name, it is
15914 considered to be a match.
15915
15916 For example,
15917 @code{-finstrument-functions-exclude-file-list=/bits/stl,include/sys}
15918 will exclude any inline function defined in files whose pathnames
15919 contain @code{/bits/stl} or @code{include/sys}.
15920
15921 If, for some reason, you want to include letter @code{','} in one of
15922 @var{sym}, write @code{'\,'}. For example,
15923 @code{-finstrument-functions-exclude-file-list='\,\,tmp'}
15924 (note the single quote surrounding the option).
15925
15926 @item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
15927 @opindex finstrument-functions-exclude-function-list
15928
15929 This is similar to @code{-finstrument-functions-exclude-file-list},
15930 but this option sets the list of function names to be excluded from
15931 instrumentation.  The function name to be matched is its user-visible
15932 name, such as @code{vector<int> blah(const vector<int> &)}, not the
15933 internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
15934 match is done on substrings: if the @var{sym} parameter is a substring
15935 of the function name, it is considered to be a match.
15936
15937 @item -fstack-check
15938 @opindex fstack-check
15939 Generate code to verify that you do not go beyond the boundary of the
15940 stack.  You should specify this flag if you are running in an
15941 environment with multiple threads, but only rarely need to specify it in
15942 a single-threaded environment since stack overflow is automatically
15943 detected on nearly all systems if there is only one stack.
15944
15945 Note that this switch does not actually cause checking to be done; the
15946 operating system or the language runtime must do that.  The switch causes
15947 generation of code to ensure that they see the stack being extended.
15948
15949 You can additionally specify a string parameter: @code{no} means no
15950 checking, @code{generic} means force the use of old-style checking,
15951 @code{specific} means use the best checking method and is equivalent
15952 to bare @option{-fstack-check}.
15953
15954 Old-style checking is a generic mechanism that requires no specific
15955 target support in the compiler but comes with the following drawbacks:
15956
15957 @enumerate
15958 @item
15959 Modified allocation strategy for large objects: they will always be
15960 allocated dynamically if their size exceeds a fixed threshold.
15961
15962 @item
15963 Fixed limit on the size of the static frame of functions: when it is
15964 topped by a particular function, stack checking is not reliable and
15965 a warning is issued by the compiler.
15966
15967 @item
15968 Inefficiency: because of both the modified allocation strategy and the
15969 generic implementation, the performances of the code are hampered.
15970 @end enumerate
15971
15972 Note that old-style stack checking is also the fallback method for
15973 @code{specific} if no target support has been added in the compiler.
15974
15975 @item -fstack-limit-register=@var{reg}
15976 @itemx -fstack-limit-symbol=@var{sym}
15977 @itemx -fno-stack-limit
15978 @opindex fstack-limit-register
15979 @opindex fstack-limit-symbol
15980 @opindex fno-stack-limit
15981 Generate code to ensure that the stack does not grow beyond a certain value,
15982 either the value of a register or the address of a symbol.  If the stack
15983 would grow beyond the value, a signal is raised.  For most targets,
15984 the signal is raised before the stack overruns the boundary, so
15985 it is possible to catch the signal without taking special precautions.
15986
15987 For instance, if the stack starts at absolute address @samp{0x80000000}
15988 and grows downwards, you can use the flags
15989 @option{-fstack-limit-symbol=__stack_limit} and
15990 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
15991 of 128KB@.  Note that this may only work with the GNU linker.
15992
15993 @cindex aliasing of parameters
15994 @cindex parameters, aliased
15995 @item -fargument-alias
15996 @itemx -fargument-noalias
15997 @itemx -fargument-noalias-global
15998 @itemx -fargument-noalias-anything
15999 @opindex fargument-alias
16000 @opindex fargument-noalias
16001 @opindex fargument-noalias-global
16002 @opindex fargument-noalias-anything
16003 Specify the possible relationships among parameters and between
16004 parameters and global data.
16005
16006 @option{-fargument-alias} specifies that arguments (parameters) may
16007 alias each other and may alias global storage.@*
16008 @option{-fargument-noalias} specifies that arguments do not alias
16009 each other, but may alias global storage.@*
16010 @option{-fargument-noalias-global} specifies that arguments do not
16011 alias each other and do not alias global storage.
16012 @option{-fargument-noalias-anything} specifies that arguments do not
16013 alias any other storage.
16014
16015 Each language will automatically use whatever option is required by
16016 the language standard.  You should not need to use these options yourself.
16017
16018 @item -fleading-underscore
16019 @opindex fleading-underscore
16020 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
16021 change the way C symbols are represented in the object file.  One use
16022 is to help link with legacy assembly code.
16023
16024 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
16025 generate code that is not binary compatible with code generated without that
16026 switch.  Use it to conform to a non-default application binary interface.
16027 Not all targets provide complete support for this switch.
16028
16029 @item -ftls-model=@var{model}
16030 @opindex ftls-model
16031 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
16032 The @var{model} argument should be one of @code{global-dynamic},
16033 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
16034
16035 The default without @option{-fpic} is @code{initial-exec}; with
16036 @option{-fpic} the default is @code{global-dynamic}.
16037
16038 @item -fvisibility=@var{default|internal|hidden|protected}
16039 @opindex fvisibility
16040 Set the default ELF image symbol visibility to the specified option---all
16041 symbols will be marked with this unless overridden within the code.
16042 Using this feature can very substantially improve linking and
16043 load times of shared object libraries, produce more optimized
16044 code, provide near-perfect API export and prevent symbol clashes.
16045 It is @strong{strongly} recommended that you use this in any shared objects
16046 you distribute.
16047
16048 Despite the nomenclature, @code{default} always means public ie;
16049 available to be linked against from outside the shared object.
16050 @code{protected} and @code{internal} are pretty useless in real-world
16051 usage so the only other commonly used option will be @code{hidden}.
16052 The default if @option{-fvisibility} isn't specified is
16053 @code{default}, i.e., make every
16054 symbol public---this causes the same behavior as previous versions of
16055 GCC@.
16056
16057 A good explanation of the benefits offered by ensuring ELF
16058 symbols have the correct visibility is given by ``How To Write
16059 Shared Libraries'' by Ulrich Drepper (which can be found at
16060 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
16061 solution made possible by this option to marking things hidden when
16062 the default is public is to make the default hidden and mark things
16063 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
16064 and @code{__attribute__ ((visibility("default")))} instead of
16065 @code{__declspec(dllexport)} you get almost identical semantics with
16066 identical syntax.  This is a great boon to those working with
16067 cross-platform projects.
16068
16069 For those adding visibility support to existing code, you may find
16070 @samp{#pragma GCC visibility} of use.  This works by you enclosing
16071 the declarations you wish to set visibility for with (for example)
16072 @samp{#pragma GCC visibility push(hidden)} and
16073 @samp{#pragma GCC visibility pop}.
16074 Bear in mind that symbol visibility should be viewed @strong{as
16075 part of the API interface contract} and thus all new code should
16076 always specify visibility when it is not the default ie; declarations
16077 only for use within the local DSO should @strong{always} be marked explicitly
16078 as hidden as so to avoid PLT indirection overheads---making this
16079 abundantly clear also aids readability and self-documentation of the code.
16080 Note that due to ISO C++ specification requirements, operator new and
16081 operator delete must always be of default visibility.
16082
16083 Be aware that headers from outside your project, in particular system
16084 headers and headers from any other library you use, may not be
16085 expecting to be compiled with visibility other than the default.  You
16086 may need to explicitly say @samp{#pragma GCC visibility push(default)}
16087 before including any such headers.
16088
16089 @samp{extern} declarations are not affected by @samp{-fvisibility}, so
16090 a lot of code can be recompiled with @samp{-fvisibility=hidden} with
16091 no modifications.  However, this means that calls to @samp{extern}
16092 functions with no explicit visibility will use the PLT, so it is more
16093 effective to use @samp{__attribute ((visibility))} and/or
16094 @samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
16095 declarations should be treated as hidden.
16096
16097 Note that @samp{-fvisibility} does affect C++ vague linkage
16098 entities. This means that, for instance, an exception class that will
16099 be thrown between DSOs must be explicitly marked with default
16100 visibility so that the @samp{type_info} nodes will be unified between
16101 the DSOs.
16102
16103 An overview of these techniques, their benefits and how to use them
16104 is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
16105
16106 @end table
16107
16108 @c man end
16109
16110 @node Environment Variables
16111 @section Environment Variables Affecting GCC
16112 @cindex environment variables
16113
16114 @c man begin ENVIRONMENT
16115 This section describes several environment variables that affect how GCC
16116 operates.  Some of them work by specifying directories or prefixes to use
16117 when searching for various kinds of files.  Some are used to specify other
16118 aspects of the compilation environment.
16119
16120 Note that you can also specify places to search using options such as
16121 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
16122 take precedence over places specified using environment variables, which
16123 in turn take precedence over those specified by the configuration of GCC@.
16124 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
16125 GNU Compiler Collection (GCC) Internals}.
16126
16127 @table @env
16128 @item LANG
16129 @itemx LC_CTYPE
16130 @c @itemx LC_COLLATE
16131 @itemx LC_MESSAGES
16132 @c @itemx LC_MONETARY
16133 @c @itemx LC_NUMERIC
16134 @c @itemx LC_TIME
16135 @itemx LC_ALL
16136 @findex LANG
16137 @findex LC_CTYPE
16138 @c @findex LC_COLLATE
16139 @findex LC_MESSAGES
16140 @c @findex LC_MONETARY
16141 @c @findex LC_NUMERIC
16142 @c @findex LC_TIME
16143 @findex LC_ALL
16144 @cindex locale
16145 These environment variables control the way that GCC uses
16146 localization information that allow GCC to work with different
16147 national conventions.  GCC inspects the locale categories
16148 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
16149 so.  These locale categories can be set to any value supported by your
16150 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
16151 Kingdom encoded in UTF-8.
16152
16153 The @env{LC_CTYPE} environment variable specifies character
16154 classification.  GCC uses it to determine the character boundaries in
16155 a string; this is needed for some multibyte encodings that contain quote
16156 and escape characters that would otherwise be interpreted as a string
16157 end or escape.
16158
16159 The @env{LC_MESSAGES} environment variable specifies the language to
16160 use in diagnostic messages.
16161
16162 If the @env{LC_ALL} environment variable is set, it overrides the value
16163 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
16164 and @env{LC_MESSAGES} default to the value of the @env{LANG}
16165 environment variable.  If none of these variables are set, GCC
16166 defaults to traditional C English behavior.
16167
16168 @item TMPDIR
16169 @findex TMPDIR
16170 If @env{TMPDIR} is set, it specifies the directory to use for temporary
16171 files.  GCC uses temporary files to hold the output of one stage of
16172 compilation which is to be used as input to the next stage: for example,
16173 the output of the preprocessor, which is the input to the compiler
16174 proper.
16175
16176 @item GCC_EXEC_PREFIX
16177 @findex GCC_EXEC_PREFIX
16178 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
16179 names of the subprograms executed by the compiler.  No slash is added
16180 when this prefix is combined with the name of a subprogram, but you can
16181 specify a prefix that ends with a slash if you wish.
16182
16183 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
16184 an appropriate prefix to use based on the pathname it was invoked with.
16185
16186 If GCC cannot find the subprogram using the specified prefix, it
16187 tries looking in the usual places for the subprogram.
16188
16189 The default value of @env{GCC_EXEC_PREFIX} is
16190 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
16191 the installed compiler. In many cases @var{prefix} is the value
16192 of @code{prefix} when you ran the @file{configure} script.
16193
16194 Other prefixes specified with @option{-B} take precedence over this prefix.
16195
16196 This prefix is also used for finding files such as @file{crt0.o} that are
16197 used for linking.
16198
16199 In addition, the prefix is used in an unusual way in finding the
16200 directories to search for header files.  For each of the standard
16201 directories whose name normally begins with @samp{/usr/local/lib/gcc}
16202 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
16203 replacing that beginning with the specified prefix to produce an
16204 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
16205 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
16206 These alternate directories are searched first; the standard directories
16207 come next. If a standard directory begins with the configured
16208 @var{prefix} then the value of @var{prefix} is replaced by
16209 @env{GCC_EXEC_PREFIX} when looking for header files.
16210
16211 @item COMPILER_PATH
16212 @findex COMPILER_PATH
16213 The value of @env{COMPILER_PATH} is a colon-separated list of
16214 directories, much like @env{PATH}.  GCC tries the directories thus
16215 specified when searching for subprograms, if it can't find the
16216 subprograms using @env{GCC_EXEC_PREFIX}.
16217
16218 @item LIBRARY_PATH
16219 @findex LIBRARY_PATH
16220 The value of @env{LIBRARY_PATH} is a colon-separated list of
16221 directories, much like @env{PATH}.  When configured as a native compiler,
16222 GCC tries the directories thus specified when searching for special
16223 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
16224 using GCC also uses these directories when searching for ordinary
16225 libraries for the @option{-l} option (but directories specified with
16226 @option{-L} come first).
16227
16228 @item LANG
16229 @findex LANG
16230 @cindex locale definition
16231 This variable is used to pass locale information to the compiler.  One way in
16232 which this information is used is to determine the character set to be used
16233 when character literals, string literals and comments are parsed in C and C++.
16234 When the compiler is configured to allow multibyte characters,
16235 the following values for @env{LANG} are recognized:
16236
16237 @table @samp
16238 @item C-JIS
16239 Recognize JIS characters.
16240 @item C-SJIS
16241 Recognize SJIS characters.
16242 @item C-EUCJP
16243 Recognize EUCJP characters.
16244 @end table
16245
16246 If @env{LANG} is not defined, or if it has some other value, then the
16247 compiler will use mblen and mbtowc as defined by the default locale to
16248 recognize and translate multibyte characters.
16249 @end table
16250
16251 @noindent
16252 Some additional environments variables affect the behavior of the
16253 preprocessor.
16254
16255 @include cppenv.texi
16256
16257 @c man end
16258
16259 @node Precompiled Headers
16260 @section Using Precompiled Headers
16261 @cindex precompiled headers
16262 @cindex speed of compilation
16263
16264 Often large projects have many header files that are included in every
16265 source file.  The time the compiler takes to process these header files
16266 over and over again can account for nearly all of the time required to
16267 build the project.  To make builds faster, GCC allows users to
16268 `precompile' a header file; then, if builds can use the precompiled
16269 header file they will be much faster.
16270
16271 To create a precompiled header file, simply compile it as you would any
16272 other file, if necessary using the @option{-x} option to make the driver
16273 treat it as a C or C++ header file.  You will probably want to use a
16274 tool like @command{make} to keep the precompiled header up-to-date when
16275 the headers it contains change.
16276
16277 A precompiled header file will be searched for when @code{#include} is
16278 seen in the compilation.  As it searches for the included file
16279 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
16280 compiler looks for a precompiled header in each directory just before it
16281 looks for the include file in that directory.  The name searched for is
16282 the name specified in the @code{#include} with @samp{.gch} appended.  If
16283 the precompiled header file can't be used, it is ignored.
16284
16285 For instance, if you have @code{#include "all.h"}, and you have
16286 @file{all.h.gch} in the same directory as @file{all.h}, then the
16287 precompiled header file will be used if possible, and the original
16288 header will be used otherwise.
16289
16290 Alternatively, you might decide to put the precompiled header file in a
16291 directory and use @option{-I} to ensure that directory is searched
16292 before (or instead of) the directory containing the original header.
16293 Then, if you want to check that the precompiled header file is always
16294 used, you can put a file of the same name as the original header in this
16295 directory containing an @code{#error} command.
16296
16297 This also works with @option{-include}.  So yet another way to use
16298 precompiled headers, good for projects not designed with precompiled
16299 header files in mind, is to simply take most of the header files used by
16300 a project, include them from another header file, precompile that header
16301 file, and @option{-include} the precompiled header.  If the header files
16302 have guards against multiple inclusion, they will be skipped because
16303 they've already been included (in the precompiled header).
16304
16305 If you need to precompile the same header file for different
16306 languages, targets, or compiler options, you can instead make a
16307 @emph{directory} named like @file{all.h.gch}, and put each precompiled
16308 header in the directory, perhaps using @option{-o}.  It doesn't matter
16309 what you call the files in the directory, every precompiled header in
16310 the directory will be considered.  The first precompiled header
16311 encountered in the directory that is valid for this compilation will
16312 be used; they're searched in no particular order.
16313
16314 There are many other possibilities, limited only by your imagination,
16315 good sense, and the constraints of your build system.
16316
16317 A precompiled header file can be used only when these conditions apply:
16318
16319 @itemize
16320 @item
16321 Only one precompiled header can be used in a particular compilation.
16322
16323 @item
16324 A precompiled header can't be used once the first C token is seen.  You
16325 can have preprocessor directives before a precompiled header; you can
16326 even include a precompiled header from inside another header, so long as
16327 there are no C tokens before the @code{#include}.
16328
16329 @item
16330 The precompiled header file must be produced for the same language as
16331 the current compilation.  You can't use a C precompiled header for a C++
16332 compilation.
16333
16334 @item
16335 The precompiled header file must have been produced by the same compiler
16336 binary as the current compilation is using.
16337
16338 @item
16339 Any macros defined before the precompiled header is included must
16340 either be defined in the same way as when the precompiled header was
16341 generated, or must not affect the precompiled header, which usually
16342 means that they don't appear in the precompiled header at all.
16343
16344 The @option{-D} option is one way to define a macro before a
16345 precompiled header is included; using a @code{#define} can also do it.
16346 There are also some options that define macros implicitly, like
16347 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
16348 defined this way.
16349
16350 @item If debugging information is output when using the precompiled
16351 header, using @option{-g} or similar, the same kind of debugging information
16352 must have been output when building the precompiled header.  However,
16353 a precompiled header built using @option{-g} can be used in a compilation
16354 when no debugging information is being output.
16355
16356 @item The same @option{-m} options must generally be used when building
16357 and using the precompiled header.  @xref{Submodel Options},
16358 for any cases where this rule is relaxed.
16359
16360 @item Each of the following options must be the same when building and using
16361 the precompiled header:
16362
16363 @gccoptlist{-fexceptions}
16364
16365 @item
16366 Some other command-line options starting with @option{-f},
16367 @option{-p}, or @option{-O} must be defined in the same way as when
16368 the precompiled header was generated.  At present, it's not clear
16369 which options are safe to change and which are not; the safest choice
16370 is to use exactly the same options when generating and using the
16371 precompiled header.  The following are known to be safe:
16372
16373 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
16374 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
16375 -fsched-verbose=<number>  -fschedule-insns  -fvisibility= @gol
16376 -pedantic-errors}
16377
16378 @end itemize
16379
16380 For all of these except the last, the compiler will automatically
16381 ignore the precompiled header if the conditions aren't met.  If you
16382 find an option combination that doesn't work and doesn't cause the
16383 precompiled header to be ignored, please consider filing a bug report,
16384 see @ref{Bugs}.
16385
16386 If you do use differing options when generating and using the
16387 precompiled header, the actual behavior will be a mixture of the
16388 behavior for the options.  For instance, if you use @option{-g} to
16389 generate the precompiled header but not when using it, you may or may
16390 not get debugging information for routines in the precompiled header.
16391
16392 @node Running Protoize
16393 @section Running Protoize
16394
16395 The program @code{protoize} is an optional part of GCC@.  You can use
16396 it to add prototypes to a program, thus converting the program to ISO
16397 C in one respect.  The companion program @code{unprotoize} does the
16398 reverse: it removes argument types from any prototypes that are found.
16399
16400 When you run these programs, you must specify a set of source files as
16401 command line arguments.  The conversion programs start out by compiling
16402 these files to see what functions they define.  The information gathered
16403 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
16404
16405 After scanning comes actual conversion.  The specified files are all
16406 eligible to be converted; any files they include (whether sources or
16407 just headers) are eligible as well.
16408
16409 But not all the eligible files are converted.  By default,
16410 @code{protoize} and @code{unprotoize} convert only source and header
16411 files in the current directory.  You can specify additional directories
16412 whose files should be converted with the @option{-d @var{directory}}
16413 option.  You can also specify particular files to exclude with the
16414 @option{-x @var{file}} option.  A file is converted if it is eligible, its
16415 directory name matches one of the specified directory names, and its
16416 name within the directory has not been excluded.
16417
16418 Basic conversion with @code{protoize} consists of rewriting most
16419 function definitions and function declarations to specify the types of
16420 the arguments.  The only ones not rewritten are those for varargs
16421 functions.
16422
16423 @code{protoize} optionally inserts prototype declarations at the
16424 beginning of the source file, to make them available for any calls that
16425 precede the function's definition.  Or it can insert prototype
16426 declarations with block scope in the blocks where undeclared functions
16427 are called.
16428
16429 Basic conversion with @code{unprotoize} consists of rewriting most
16430 function declarations to remove any argument types, and rewriting
16431 function definitions to the old-style pre-ISO form.
16432
16433 Both conversion programs print a warning for any function declaration or
16434 definition that they can't convert.  You can suppress these warnings
16435 with @option{-q}.
16436
16437 The output from @code{protoize} or @code{unprotoize} replaces the
16438 original source file.  The original file is renamed to a name ending
16439 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
16440 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
16441 for DOS) file already exists, then the source file is simply discarded.
16442
16443 @code{protoize} and @code{unprotoize} both depend on GCC itself to
16444 scan the program and collect information about the functions it uses.
16445 So neither of these programs will work until GCC is installed.
16446
16447 Here is a table of the options you can use with @code{protoize} and
16448 @code{unprotoize}.  Each option works with both programs unless
16449 otherwise stated.
16450
16451 @table @code
16452 @item -B @var{directory}
16453 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
16454 usual directory (normally @file{/usr/local/lib}).  This file contains
16455 prototype information about standard system functions.  This option
16456 applies only to @code{protoize}.
16457
16458 @item -c @var{compilation-options}
16459 Use @var{compilation-options} as the options when running @command{gcc} to
16460 produce the @samp{.X} files.  The special option @option{-aux-info} is
16461 always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
16462
16463 Note that the compilation options must be given as a single argument to
16464 @code{protoize} or @code{unprotoize}.  If you want to specify several
16465 @command{gcc} options, you must quote the entire set of compilation options
16466 to make them a single word in the shell.
16467
16468 There are certain @command{gcc} arguments that you cannot use, because they
16469 would produce the wrong kind of output.  These include @option{-g},
16470 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
16471 the @var{compilation-options}, they are ignored.
16472
16473 @item -C
16474 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
16475 systems) instead of @samp{.c}.  This is convenient if you are converting
16476 a C program to C++.  This option applies only to @code{protoize}.
16477
16478 @item -g
16479 Add explicit global declarations.  This means inserting explicit
16480 declarations at the beginning of each source file for each function
16481 that is called in the file and was not declared.  These declarations
16482 precede the first function definition that contains a call to an
16483 undeclared function.  This option applies only to @code{protoize}.
16484
16485 @item -i @var{string}
16486 Indent old-style parameter declarations with the string @var{string}.
16487 This option applies only to @code{protoize}.
16488
16489 @code{unprotoize} converts prototyped function definitions to old-style
16490 function definitions, where the arguments are declared between the
16491 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
16492 uses five spaces as the indentation.  If you want to indent with just
16493 one space instead, use @option{-i " "}.
16494
16495 @item -k
16496 Keep the @samp{.X} files.  Normally, they are deleted after conversion
16497 is finished.
16498
16499 @item -l
16500 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
16501 a prototype declaration for each function in each block which calls the
16502 function without any declaration.  This option applies only to
16503 @code{protoize}.
16504
16505 @item -n
16506 Make no real changes.  This mode just prints information about the conversions
16507 that would have been done without @option{-n}.
16508
16509 @item -N
16510 Make no @samp{.save} files.  The original files are simply deleted.
16511 Use this option with caution.
16512
16513 @item -p @var{program}
16514 Use the program @var{program} as the compiler.  Normally, the name
16515 @file{gcc} is used.
16516
16517 @item -q
16518 Work quietly.  Most warnings are suppressed.
16519
16520 @item -v
16521 Print the version number, just like @option{-v} for @command{gcc}.
16522 @end table
16523
16524 If you need special compiler options to compile one of your program's
16525 source files, then you should generate that file's @samp{.X} file
16526 specially, by running @command{gcc} on that source file with the
16527 appropriate options and the option @option{-aux-info}.  Then run
16528 @code{protoize} on the entire set of files.  @code{protoize} will use
16529 the existing @samp{.X} file because it is newer than the source file.
16530 For example:
16531
16532 @smallexample
16533 gcc -Dfoo=bar file1.c -aux-info file1.X
16534 protoize *.c
16535 @end smallexample
16536
16537 @noindent
16538 You need to include the special files along with the rest in the
16539 @code{protoize} command, even though their @samp{.X} files already
16540 exist, because otherwise they won't get converted.
16541
16542 @xref{Protoize Caveats}, for more information on how to use
16543 @code{protoize} successfully.