OSDN Git Service

2007-05-01 Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
[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
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 Free Software Foundation, Inc.
15
16 Permission is granted to copy, distribute and/or modify this document
17 under the terms of the GNU Free Documentation License, Version 1.2 or
18 any later version published by the Free Software Foundation; with the
19 Invariant Sections being ``GNU General Public License'' and ``Funding
20 Free Software'', the Front-Cover texts being (a) (see below), and with
21 the Back-Cover Texts being (b) (see below).  A copy of the license is
22 included in the gfdl(7) man page.
23
24 (a) The FSF's Front-Cover Text is:
25
26      A GNU Manual
27
28 (b) The FSF's Back-Cover Text is:
29
30      You have freedom to copy and modify this GNU Manual, like GNU
31      software.  Copies published by the Free Software Foundation raise
32      funds for GNU development.
33 @c man end
34 @c Set file name and title for the man page.
35 @setfilename gcc
36 @settitle GNU project C and C++ compiler
37 @c man begin SYNOPSIS
38 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
39     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
40     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
41     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
42     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
43     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
44     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
45
46 Only the most useful options are listed here; see below for the
47 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
48 @c man end
49 @c man begin SEEALSO
50 gpl(7), gfdl(7), fsf-funding(7),
51 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
52 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
53 @file{ld}, @file{binutils} and @file{gdb}.
54 @c man end
55 @c man begin BUGS
56 For instructions on reporting bugs, see
57 @w{@uref{http://gcc.gnu.org/bugs.html}}.
58 @c man end
59 @c man begin AUTHOR
60 See the Info entry for @command{gcc}, or
61 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
62 for contributors to GCC@.
63 @c man end
64 @end ignore
65
66 @node Invoking GCC
67 @chapter GCC Command Options
68 @cindex GCC command options
69 @cindex command options
70 @cindex options, GCC command
71
72 @c man begin DESCRIPTION
73 When you invoke GCC, it normally does preprocessing, compilation,
74 assembly and linking.  The ``overall options'' allow you to stop this
75 process at an intermediate stage.  For example, the @option{-c} option
76 says not to run the linker.  Then the output consists of object files
77 output by the assembler.
78
79 Other options are passed on to one stage of processing.  Some options
80 control the preprocessor and others the compiler itself.  Yet other
81 options control the assembler and linker; most of these are not
82 documented here, since you rarely need to use any of them.
83
84 @cindex C compilation options
85 Most of the command line options that you can use with GCC are useful
86 for C programs; when an option is only useful with another language
87 (usually C++), the explanation says so explicitly.  If the description
88 for a particular option does not mention a source language, you can use
89 that option with all supported languages.
90
91 @cindex C++ compilation options
92 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
93 options for compiling C++ programs.
94
95 @cindex grouping options
96 @cindex options, grouping
97 The @command{gcc} program accepts options and file names as operands.  Many
98 options have multi-letter names; therefore multiple single-letter options
99 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
100 -r}}.
101
102 @cindex order of options
103 @cindex options, order
104 You can mix options and other arguments.  For the most part, the order
105 you use doesn't matter.  Order does matter when you use several options
106 of the same kind; for example, if you specify @option{-L} more than once,
107 the directories are searched in the order specified.
108
109 Many options have long names starting with @samp{-f} or with
110 @samp{-W}---for example,
111 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
112 these have both positive and negative forms; the negative form of
113 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
114 only one of these two forms, whichever one is not the default.
115
116 @c man end
117
118 @xref{Option Index}, for an index to GCC's options.
119
120 @menu
121 * Option Summary::      Brief list of all options, without explanations.
122 * Overall Options::     Controlling the kind of output:
123                         an executable, object files, assembler files,
124                         or preprocessed source.
125 * Invoking G++::        Compiling C++ programs.
126 * C Dialect Options::   Controlling the variant of C language compiled.
127 * C++ Dialect Options:: Variations on C++.
128 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
129                         and Objective-C++.
130 * Language Independent Options:: Controlling how diagnostics should be
131                         formatted.
132 * Warning Options::     How picky should the compiler be?
133 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
134 * Optimize Options::    How much optimization?
135 * Preprocessor Options:: Controlling header files and macro definitions.
136                          Also, getting dependency information for Make.
137 * Assembler Options::   Passing options to the assembler.
138 * Link Options::        Specifying libraries and so on.
139 * Directory Options::   Where to find header files and libraries.
140                         Where to find the compiler executable files.
141 * Spec Files::          How to pass switches to sub-processes.
142 * Target Options::      Running a cross-compiler, or an old version of GCC.
143 * Submodel Options::    Specifying minor hardware or convention variations,
144                         such as 68010 vs 68020.
145 * Code Gen Options::    Specifying conventions for function calls, data layout
146                         and register usage.
147 * Environment Variables:: Env vars that affect GCC.
148 * Precompiled Headers:: Compiling a header once, and using it many times.
149 * Running Protoize::    Automatically adding or removing function prototypes.
150 @end menu
151
152 @c man begin OPTIONS
153
154 @node Option Summary
155 @section Option Summary
156
157 Here is a summary of all the options, grouped by type.  Explanations are
158 in the following sections.
159
160 @table @emph
161 @item Overall Options
162 @xref{Overall Options,,Options Controlling the Kind of Output}.
163 @gccoptlist{-c  -S  -E  -o @var{file}  -combine  -pipe  -pass-exit-codes  @gol
164 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{]}  --target-help  @gol
165 --version @@@var{file}}
166
167 @item C Language Options
168 @xref{C Dialect Options,,Options Controlling C Dialect}.
169 @gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
170 -aux-info @var{filename} @gol
171 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
172 -fhosted  -ffreestanding -fopenmp -fms-extensions @gol
173 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
174 -fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
175 -fsigned-bitfields  -fsigned-char @gol
176 -funsigned-bitfields  -funsigned-char}
177
178 @item C++ Language Options
179 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
180 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
181 -fconserve-space  -ffriend-injection @gol
182 -fno-elide-constructors @gol
183 -fno-enforce-eh-specs @gol
184 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
185 -fno-implicit-templates @gol
186 -fno-implicit-inline-templates @gol
187 -fno-implement-inlines  -fms-extensions @gol
188 -fno-nonansi-builtins  -fno-operator-names @gol
189 -fno-optional-diags  -fpermissive @gol
190 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
191 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
192 -fno-default-inline  -fvisibility-inlines-hidden @gol
193 -Wabi  -Wctor-dtor-privacy @gol
194 -Wnon-virtual-dtor  -Wreorder @gol
195 -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel @gol
196 -Wno-non-template-friend  -Wold-style-cast @gol
197 -Woverloaded-virtual  -Wno-pmf-conversions @gol
198 -Wsign-promo}
199
200 @item Objective-C and Objective-C++ Language Options
201 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
202 Objective-C and Objective-C++ Dialects}.
203 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
204 -fgnu-runtime  -fnext-runtime @gol
205 -fno-nil-receivers @gol
206 -fobjc-call-cxx-cdtors @gol
207 -fobjc-direct-dispatch @gol
208 -fobjc-exceptions @gol
209 -fobjc-gc @gol
210 -freplace-objc-classes @gol
211 -fzero-link @gol
212 -gen-decls @gol
213 -Wassign-intercept @gol
214 -Wno-protocol  -Wselector @gol
215 -Wstrict-selector-match @gol
216 -Wundeclared-selector}
217
218 @item Language Independent Options
219 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
220 @gccoptlist{-fmessage-length=@var{n}  @gol
221 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
222 -fdiagnostics-show-option}
223
224 @item Warning Options
225 @xref{Warning Options,,Options to Request or Suppress Warnings}.
226 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
227 -w  -Wextra  -Wall  -Waddress  -Waggregate-return -Warray-bounds @gol
228 -Wno-attributes -Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual  @gol
229 -Wchar-subscripts -Wclobbered  -Wcomment @gol
230 -Wconversion -Wcoverage-mismatch -Wno-deprecated-declarations @gol
231 -Wdisabled-optimization  -Wno-div-by-zero  @gol
232 -Wempty-body  -Wno-endif-labels @gol
233 -Werror  -Werror=* @gol
234 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
235 -Wno-format-extra-args -Wformat-nonliteral @gol
236 -Wformat-security  -Wformat-y2k @gol
237 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
238 -Wimport  -Wno-import  -Winit-self  -Winline @gol
239 -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
240 -Winvalid-pch -Wlarger-than-@var{len}  -Wunsafe-loop-optimizations @gol
241 -Wlogical-op -Wlong-long @gol
242 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
243 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
244 -Wmissing-noreturn @gol
245 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
246 -Woverlength-strings  -Wpacked  -Wpadded @gol
247 -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast @gol
248 -Wredundant-decls @gol
249 -Wreturn-type  -Wsequence-point  -Wshadow @gol
250 -Wsign-compare  -Wstack-protector @gol
251 -Wstrict-aliasing -Wstrict-aliasing=2 @gol
252 -Wstrict-overflow -Wstrict-overflow=@var{n} @gol
253 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
254 -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
255 -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
256 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
257 -Wunused-value  -Wunused-variable @gol
258 -Wvariadic-macros -Wvla @gol
259 -Wvolatile-register-var  -Wwrite-strings}
260
261 @item C-only Warning Options
262 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
263 -Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
264 -Wold-style-declaration  -Wold-style-definition @gol
265 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
266 -Wdeclaration-after-statement -Wpointer-sign}
267
268 @item Debugging Options
269 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
270 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
271 -fdump-noaddr -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
272 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
273 -fdump-ipa-all -fdump-ipa-cgraph @gol
274 -fdump-tree-all @gol
275 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
276 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
277 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
278 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
279 -fdump-tree-ch @gol
280 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
281 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
282 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
283 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
284 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
285 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
286 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
287 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
288 -fdump-tree-nrv -fdump-tree-vect @gol
289 -fdump-tree-sink @gol
290 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
291 -fdump-tree-salias @gol
292 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
293 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
294 -ftree-vectorizer-verbose=@var{n} @gol
295 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
296 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
297 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
298 -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
299 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
300 -ftest-coverage  -ftime-report -fvar-tracking @gol
301 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
302 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
303 -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
304 -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
305 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
306 -print-multi-directory  -print-multi-lib @gol
307 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
308 -print-sysroot-headers-suffix @gol
309 -save-temps  -time}
310
311 @item Optimization Options
312 @xref{Optimize Options,,Options that Control Optimization}.
313 @gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
314 -falign-labels=@var{n}  -falign-loops=@var{n}  @gol
315 -fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
316 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
317 -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
318 -fcaller-saves  -fcprop-registers  -fcse-follow-jumps @gol
319 -fcse-skip-blocks  -fcx-limited-range  -fdata-sections @gol
320 -fdelayed-branch  -fdelete-null-pointer-checks -fearly-inlining @gol
321 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
322 -fforce-addr  -fforward-propagate  -ffunction-sections @gol
323 -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -fgcse-after-reload @gol
324 -fcrossjumping  -fif-conversion  -fif-conversion2 @gol
325 -finline-functions  -finline-functions-called-once @gol
326 -finline-limit=@var{n}  -fkeep-inline-functions @gol
327 -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
328 -fmodulo-sched -fno-branch-count-reg @gol
329 -fno-default-inline  -fno-defer-pop -fmove-loop-invariants @gol
330 -fno-function-cse  -fno-guess-branch-probability @gol
331 -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
332 -funsafe-math-optimizations  -funsafe-loop-optimizations @gol
333 -ffinite-math-only  -fno-signed-zeros @gol
334 -fno-toplevel-reorder -fno-trapping-math  -fno-zero-initialized-in-bss @gol
335 -fomit-frame-pointer  -foptimize-register-move @gol
336 -foptimize-sibling-calls  -fprefetch-loop-arrays @gol
337 -fprofile-generate -fprofile-use @gol
338 -fregmove  -frename-registers @gol
339 -freorder-blocks  -freorder-blocks-and-partition -freorder-functions @gol
340 -frerun-cse-after-loop @gol
341 -frounding-math -frtl-abstract-sequences @gol
342 -fschedule-insns  -fschedule-insns2 @gol
343 -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
344 -fsched-spec-load-dangerous  @gol
345 -fsched-stalled-insns=@var{n} -fsched-stalled-insns-dep=@var{n} @gol
346 -fsched2-use-superblocks @gol
347 -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops @gol
348 -fsection-anchors  -fsignaling-nans  -fsingle-precision-constant @gol
349 -fno-split-wide-types -fstack-protector  -fstack-protector-all @gol
350 -fstrict-aliasing  -fstrict-overflow  -ftracer  -fthread-jumps @gol
351 -funroll-all-loops  -funroll-loops  -fpeel-loops @gol
352 -fsplit-ivs-in-unroller -funswitch-loops @gol
353 -fvariable-expansion-in-unroller @gol
354 -ftree-pre  -ftree-ccp  -ftree-dce -ftree-loop-optimize @gol
355 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol
356 -fcheck-data-deps @gol
357 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol
358 -ftree-ch -ftree-sra -ftree-ter -ftree-fre -ftree-vectorize @gol
359 -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb @gol
360 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol
361 --param @var{name}=@var{value}
362 -O  -O0  -O1  -O2  -O3  -Os}
363
364 @item Preprocessor Options
365 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
366 @gccoptlist{-A@var{question}=@var{answer} @gol
367 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
368 -C  -dD  -dI  -dM  -dN @gol
369 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
370 -idirafter @var{dir} @gol
371 -include @var{file}  -imacros @var{file} @gol
372 -iprefix @var{file}  -iwithprefix @var{dir} @gol
373 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
374 -imultilib @var{dir} -isysroot @var{dir} @gol
375 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
376 -P  -fworking-directory  -remap @gol
377 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
378 -Xpreprocessor @var{option}}
379
380 @item Assembler Option
381 @xref{Assembler Options,,Passing Options to the Assembler}.
382 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
383
384 @item Linker Options
385 @xref{Link Options,,Options for Linking}.
386 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
387 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
388 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
389 -Wl,@var{option}  -Xlinker @var{option} @gol
390 -u @var{symbol}}
391
392 @item Directory Options
393 @xref{Directory Options,,Options for Directory Search}.
394 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
395 -specs=@var{file}  -I- --sysroot=@var{dir}}
396
397 @item Target Options
398 @c I wrote this xref this way to avoid overfull hbox. -- rms
399 @xref{Target Options}.
400 @gccoptlist{-V @var{version}  -b @var{machine}}
401
402 @item Machine Dependent Options
403 @xref{Submodel Options,,Hardware Models and Configurations}.
404 @c This list is ordered alphanumerically by subsection name.
405 @c Try and put the significant identifier (CPU or system) first,
406 @c so users have a clue at guessing where the ones they want will be.
407
408 @emph{ARC Options}
409 @gccoptlist{-EB  -EL @gol
410 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
411 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
412
413 @emph{ARM Options}
414 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
415 -mabi=@var{name} @gol
416 -mapcs-stack-check  -mno-apcs-stack-check @gol
417 -mapcs-float  -mno-apcs-float @gol
418 -mapcs-reentrant  -mno-apcs-reentrant @gol
419 -msched-prolog  -mno-sched-prolog @gol
420 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
421 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
422 -mthumb-interwork  -mno-thumb-interwork @gol
423 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
424 -mstructure-size-boundary=@var{n} @gol
425 -mabort-on-noreturn @gol
426 -mlong-calls  -mno-long-calls @gol
427 -msingle-pic-base  -mno-single-pic-base @gol
428 -mpic-register=@var{reg} @gol
429 -mnop-fun-dllimport @gol
430 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
431 -mpoke-function-name @gol
432 -mthumb  -marm @gol
433 -mtpcs-frame  -mtpcs-leaf-frame @gol
434 -mcaller-super-interworking  -mcallee-super-interworking @gol
435 -mtp=@var{name}}
436
437 @emph{AVR Options}
438 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
439 -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
440
441 @emph{Blackfin Options}
442 @gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol
443 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol
444 -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
445 -mno-id-shared-library -mshared-library-id=@var{n} @gol
446 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
447 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls}
448
449 @emph{CRIS Options}
450 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
451 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
452 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
453 -mstack-align  -mdata-align  -mconst-align @gol
454 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
455 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
456 -mmul-bug-workaround  -mno-mul-bug-workaround}
457
458 @emph{CRX Options}
459 @gccoptlist{-mmac -mpush-args}
460
461 @emph{Darwin Options}
462 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
463 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
464 -client_name  -compatibility_version  -current_version @gol
465 -dead_strip @gol
466 -dependency-file  -dylib_file  -dylinker_install_name @gol
467 -dynamic  -dynamiclib  -exported_symbols_list @gol
468 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
469 -force_flat_namespace  -headerpad_max_install_names @gol
470 -iframework @gol
471 -image_base  -init  -install_name  -keep_private_externs @gol
472 -multi_module  -multiply_defined  -multiply_defined_unused @gol
473 -noall_load   -no_dead_strip_inits_and_terms @gol
474 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
475 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
476 -private_bundle  -read_only_relocs  -sectalign @gol
477 -sectobjectsymbols  -whyload  -seg1addr @gol
478 -sectcreate  -sectobjectsymbols  -sectorder @gol
479 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
480 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
481 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
482 -single_module  -static  -sub_library  -sub_umbrella @gol
483 -twolevel_namespace  -umbrella  -undefined @gol
484 -unexported_symbols_list  -weak_reference_mismatches @gol
485 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
486 -mkernel -mone-byte-bool}
487
488 @emph{DEC Alpha Options}
489 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
490 -mieee  -mieee-with-inexact  -mieee-conformant @gol
491 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
492 -mtrap-precision=@var{mode}  -mbuild-constants @gol
493 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
494 -mbwx  -mmax  -mfix  -mcix @gol
495 -mfloat-vax  -mfloat-ieee @gol
496 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
497 -msmall-text  -mlarge-text @gol
498 -mmemory-latency=@var{time}}
499
500 @emph{DEC Alpha/VMS Options}
501 @gccoptlist{-mvms-return-codes}
502
503 @emph{FRV Options}
504 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
505 -mhard-float  -msoft-float @gol
506 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
507 -mdouble  -mno-double @gol
508 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
509 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
510 -mlinked-fp  -mlong-calls  -malign-labels @gol
511 -mlibrary-pic  -macc-4  -macc-8 @gol
512 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
513 -moptimize-membar -mno-optimize-membar @gol
514 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
515 -mvliw-branch  -mno-vliw-branch @gol
516 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
517 -mno-nested-cond-exec  -mtomcat-stats @gol
518 -mTLS -mtls @gol
519 -mcpu=@var{cpu}}
520
521 @emph{GNU/Linux Options}
522 @gccoptlist{-muclibc}
523
524 @emph{H8/300 Options}
525 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
526
527 @emph{HPPA Options}
528 @gccoptlist{-march=@var{architecture-type} @gol
529 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
530 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
531 -mfixed-range=@var{register-range} @gol
532 -mjump-in-delay -mlinker-opt -mlong-calls @gol
533 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
534 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
535 -mno-jump-in-delay  -mno-long-load-store @gol
536 -mno-portable-runtime  -mno-soft-float @gol
537 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
538 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
539 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
540 -munix=@var{unix-std}  -nolibdld  -static  -threads}
541
542 @emph{i386 and x86-64 Options}
543 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
544 -mfpmath=@var{unit} @gol
545 -masm=@var{dialect}  -mno-fancy-math-387 @gol
546 -mno-fp-ret-in-387  -msoft-float @gol
547 -mno-wide-multiply  -mrtd  -malign-double @gol
548 -mpreferred-stack-boundary=@var{num} -mcx16 -msahf @gol
549 -mmmx  -msse  -msse2 -msse3 -mssse3 -msse4a -m3dnow -mpopcnt -mabm @gol
550 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
551 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
552 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
553 -mpc32 -mpc64 -mpc80 mstackrealign @gol
554 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
555 -mcmodel=@var{code-model} @gol
556 -m32  -m64 -mlarge-data-threshold=@var{num}}
557
558 @emph{IA-64 Options}
559 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
560 -mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
561 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
562 -minline-float-divide-max-throughput @gol
563 -minline-int-divide-min-latency @gol
564 -minline-int-divide-max-throughput  @gol
565 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
566 -mno-dwarf2-asm -mearly-stop-bits @gol
567 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
568 -mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol
569 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol
570 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
571 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol
572 -mno-sched-prefer-non-data-spec-insns @gol
573 -mno-sched-prefer-non-control-spec-insns @gol
574 -mno-sched-count-spec-in-critical-path}
575
576 @emph{M32R/D Options}
577 @gccoptlist{-m32r2 -m32rx -m32r @gol
578 -mdebug @gol
579 -malign-loops -mno-align-loops @gol
580 -missue-rate=@var{number} @gol
581 -mbranch-cost=@var{number} @gol
582 -mmodel=@var{code-size-model-type} @gol
583 -msdata=@var{sdata-type} @gol
584 -mno-flush-func -mflush-func=@var{name} @gol
585 -mno-flush-trap -mflush-trap=@var{number} @gol
586 -G @var{num}}
587
588 @emph{M32C Options}
589 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
590
591 @emph{M680x0 Options}
592 @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
593 -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
594 -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
595 -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
596 -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
597 -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
598 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
599 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
600
601 @emph{M68hc1x Options}
602 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
603 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
604 -msoft-reg-count=@var{count}}
605
606 @emph{MCore Options}
607 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
608 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
609 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
610 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
611 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
612
613 @emph{MIPS Options}
614 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
615 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
616 -mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
617 -mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64 @gol
618 -mfp32  -mfp64  -mhard-float  -msoft-float @gol
619 -msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
620 -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
621 -mips3d  -mno-mips3d  -mmt  -mno-mt @gol
622 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
623 -G@var{num}  -membedded-data  -mno-embedded-data @gol
624 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
625 -msplit-addresses  -mno-split-addresses @gol
626 -mexplicit-relocs  -mno-explicit-relocs @gol
627 -mcheck-zero-division  -mno-check-zero-division @gol
628 -mdivide-traps  -mdivide-breaks @gol
629 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
630 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
631 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
632 -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130  -mno-fix-vr4130 @gol
633 -mfix-sb1  -mno-fix-sb1 @gol
634 -mflush-func=@var{func}  -mno-flush-func @gol
635 -mbranch-likely  -mno-branch-likely @gol
636 -mfp-exceptions -mno-fp-exceptions @gol
637 -mvr4130-align -mno-vr4130-align}
638
639 @emph{MMIX Options}
640 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
641 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
642 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
643 -mno-base-addresses  -msingle-exit  -mno-single-exit}
644
645 @emph{MN10300 Options}
646 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
647 -mam33  -mno-am33 @gol
648 -mam33-2  -mno-am33-2 @gol
649 -mreturn-pointer-on-d0 @gol
650 -mno-crt0  -mrelax}
651
652 @emph{MT Options}
653 @gccoptlist{-mno-crt0 -mbacc -msim @gol
654 -march=@var{cpu-type} }
655
656 @emph{PDP-11 Options}
657 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
658 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
659 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
660 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
661 -mbranch-expensive  -mbranch-cheap @gol
662 -msplit  -mno-split  -munix-asm  -mdec-asm}
663
664 @emph{PowerPC Options}
665 See RS/6000 and PowerPC Options.
666
667 @emph{RS/6000 and PowerPC Options}
668 @gccoptlist{-mcpu=@var{cpu-type} @gol
669 -mtune=@var{cpu-type} @gol
670 -mpower  -mno-power  -mpower2  -mno-power2 @gol
671 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
672 -maltivec  -mno-altivec @gol
673 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
674 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
675 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd @gol
676 -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mdfp -mno-dfp @gol
677 -mnew-mnemonics  -mold-mnemonics @gol
678 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
679 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
680 -malign-power  -malign-natural @gol
681 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
682 -mstring  -mno-string  -mupdate  -mno-update @gol
683 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
684 -mstrict-align  -mno-strict-align  -mrelocatable @gol
685 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
686 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
687 -mdynamic-no-pic  -maltivec  -mswdiv @gol
688 -mprioritize-restricted-insns=@var{priority} @gol
689 -msched-costly-dep=@var{dependence_type} @gol
690 -minsert-sched-nops=@var{scheme} @gol
691 -mcall-sysv  -mcall-netbsd @gol
692 -maix-struct-return  -msvr4-struct-return @gol
693 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
694 -misel -mno-isel @gol
695 -misel=yes  -misel=no @gol
696 -mspe -mno-spe @gol
697 -mspe=yes  -mspe=no @gol
698 -mvrsave -mno-vrsave @gol
699 -mmulhw -mno-mulhw @gol
700 -mdlmzb -mno-dlmzb @gol
701 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
702 -mprototype  -mno-prototype @gol
703 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
704 -msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
705
706 @emph{S/390 and zSeries Options}
707 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
708 -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128 @gol
709 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
710 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
711 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
712 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
713 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
714
715 @emph{Score Options}
716 @gccoptlist{-meb -mel @gol
717 -mnhwloop @gol
718 -muls @gol
719 -mmac @gol
720 -mscore5 -mscore5u -mscore7 -mscore7d}
721
722 @emph{SH Options}
723 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
724 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
725 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
726 -m5-64media  -m5-64media-nofpu @gol
727 -m5-32media  -m5-32media-nofpu @gol
728 -m5-compact  -m5-compact-nofpu @gol
729 -mb  -ml  -mdalign  -mrelax @gol
730 -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
731 -mieee  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
732 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
733 -mdivsi3_libfunc=@var{name}  @gol
734 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
735  -minvalid-symbols}
736
737 @emph{SPARC Options}
738 @gccoptlist{-mcpu=@var{cpu-type} @gol
739 -mtune=@var{cpu-type} @gol
740 -mcmodel=@var{code-model} @gol
741 -m32  -m64  -mapp-regs  -mno-app-regs @gol
742 -mfaster-structs  -mno-faster-structs @gol
743 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
744 -mhard-quad-float  -msoft-quad-float @gol
745 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
746 -mstack-bias  -mno-stack-bias @gol
747 -munaligned-doubles  -mno-unaligned-doubles @gol
748 -mv8plus  -mno-v8plus  -mvis  -mno-vis
749 -threads -pthreads -pthread}
750
751 @emph{SPU Options}
752 @gccoptlist{-mwarn-reloc -merror-reloc @gol
753 -msafe-dma -munsafe-dma @gol
754 -mbranch-hints @gol
755 -msmall-mem -mlarge-mem -mstdmain @gol
756 -mfixed-range=@var{register-range}}
757
758 @emph{System V Options}
759 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
760
761 @emph{TMS320C3x/C4x Options}
762 @gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
763 -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
764 -mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
765 -mparallel-insns  -mparallel-mpy  -mpreserve-float}
766
767 @emph{V850 Options}
768 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
769 -mprolog-function  -mno-prolog-function  -mspace @gol
770 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
771 -mapp-regs  -mno-app-regs @gol
772 -mdisable-callt  -mno-disable-callt @gol
773 -mv850e1 @gol
774 -mv850e @gol
775 -mv850  -mbig-switch}
776
777 @emph{VAX Options}
778 @gccoptlist{-mg  -mgnu  -munix}
779
780 @emph{VxWorks Options}
781 @gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
782 -Xbind-lazy  -Xbind-now}
783
784 @emph{x86-64 Options}
785 See i386 and x86-64 Options.
786
787 @emph{Xstormy16 Options}
788 @gccoptlist{-msim}
789
790 @emph{Xtensa Options}
791 @gccoptlist{-mconst16 -mno-const16 @gol
792 -mfused-madd  -mno-fused-madd @gol
793 -mtext-section-literals  -mno-text-section-literals @gol
794 -mtarget-align  -mno-target-align @gol
795 -mlongcalls  -mno-longcalls}
796
797 @emph{zSeries Options}
798 See S/390 and zSeries Options.
799
800 @item Code Generation Options
801 @xref{Code Gen Options,,Options for Code Generation Conventions}.
802 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
803 -ffixed-@var{reg}  -fexceptions @gol
804 -fnon-call-exceptions  -funwind-tables @gol
805 -fasynchronous-unwind-tables @gol
806 -finhibit-size-directive  -finstrument-functions @gol
807 -fno-common  -fno-ident @gol
808 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
809 -fno-jump-tables @gol
810 -frecord-gcc-switches @gol
811 -freg-struct-return  -fshort-enums @gol
812 -fshort-double  -fshort-wchar @gol
813 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
814 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
815 -fargument-alias  -fargument-noalias @gol
816 -fargument-noalias-global  -fargument-noalias-anything
817 -fleading-underscore  -ftls-model=@var{model} @gol
818 -ftrapv  -fwrapv  -fbounds-check @gol
819 -fvisibility}
820 @end table
821
822 @menu
823 * Overall Options::     Controlling the kind of output:
824                         an executable, object files, assembler files,
825                         or preprocessed source.
826 * C Dialect Options::   Controlling the variant of C language compiled.
827 * C++ Dialect Options:: Variations on C++.
828 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
829                         and Objective-C++.
830 * Language Independent Options:: Controlling how diagnostics should be
831                         formatted.
832 * Warning Options::     How picky should the compiler be?
833 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
834 * Optimize Options::    How much optimization?
835 * Preprocessor Options:: Controlling header files and macro definitions.
836                          Also, getting dependency information for Make.
837 * Assembler Options::   Passing options to the assembler.
838 * Link Options::        Specifying libraries and so on.
839 * Directory Options::   Where to find header files and libraries.
840                         Where to find the compiler executable files.
841 * Spec Files::          How to pass switches to sub-processes.
842 * Target Options::      Running a cross-compiler, or an old version of GCC.
843 @end menu
844
845 @node Overall Options
846 @section Options Controlling the Kind of Output
847
848 Compilation can involve up to four stages: preprocessing, compilation
849 proper, assembly and linking, always in that order.  GCC is capable of
850 preprocessing and compiling several files either into several
851 assembler input files, or into one assembler input file; then each
852 assembler input file produces an object file, and linking combines all
853 the object files (those newly compiled, and those specified as input)
854 into an executable file.
855
856 @cindex file name suffix
857 For any given input file, the file name suffix determines what kind of
858 compilation is done:
859
860 @table @gcctabopt
861 @item @var{file}.c
862 C source code which must be preprocessed.
863
864 @item @var{file}.i
865 C source code which should not be preprocessed.
866
867 @item @var{file}.ii
868 C++ source code which should not be preprocessed.
869
870 @item @var{file}.m
871 Objective-C source code.  Note that you must link with the @file{libobjc}
872 library to make an Objective-C program work.
873
874 @item @var{file}.mi
875 Objective-C source code which should not be preprocessed.
876
877 @item @var{file}.mm
878 @itemx @var{file}.M
879 Objective-C++ source code.  Note that you must link with the @file{libobjc}
880 library to make an Objective-C++ program work.  Note that @samp{.M} refers
881 to a literal capital M@.
882
883 @item @var{file}.mii
884 Objective-C++ source code which should not be preprocessed.
885
886 @item @var{file}.h
887 C, C++, Objective-C or Objective-C++ header file to be turned into a
888 precompiled header.
889
890 @item @var{file}.cc
891 @itemx @var{file}.cp
892 @itemx @var{file}.cxx
893 @itemx @var{file}.cpp
894 @itemx @var{file}.CPP
895 @itemx @var{file}.c++
896 @itemx @var{file}.C
897 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
898 the last two letters must both be literally @samp{x}.  Likewise,
899 @samp{.C} refers to a literal capital C@.
900
901 @item @var{file}.mm
902 @itemx @var{file}.M
903 Objective-C++ source code which must be preprocessed.
904
905 @item @var{file}.mii
906 Objective-C++ source code which should not be preprocessed.
907
908 @item @var{file}.hh
909 @itemx @var{file}.H
910 C++ header file to be turned into a precompiled header.
911
912 @item @var{file}.f
913 @itemx @var{file}.for
914 @itemx @var{file}.FOR
915 Fixed form Fortran source code which should not be preprocessed.
916
917 @item @var{file}.F
918 @itemx @var{file}.fpp
919 @itemx @var{file}.FPP
920 Fixed form Fortran source code which must be preprocessed (with the traditional
921 preprocessor).
922
923 @item @var{file}.f90
924 @itemx @var{file}.f95
925 Free form Fortran source code which should not be preprocessed.
926
927 @item @var{file}.F90
928 @itemx @var{file}.F95
929 Free form Fortran source code which must be preprocessed (with the
930 traditional preprocessor).
931
932 @c FIXME: Descriptions of Java file types.
933 @c @var{file}.java
934 @c @var{file}.class
935 @c @var{file}.zip
936 @c @var{file}.jar
937
938 @item @var{file}.ads
939 Ada source code file which contains a library unit declaration (a
940 declaration of a package, subprogram, or generic, or a generic
941 instantiation), or a library unit renaming declaration (a package,
942 generic, or subprogram renaming declaration).  Such files are also
943 called @dfn{specs}.
944
945 @itemx @var{file}.adb
946 Ada source code file containing a library unit body (a subprogram or
947 package body).  Such files are also called @dfn{bodies}.
948
949 @c GCC also knows about some suffixes for languages not yet included:
950 @c Pascal:
951 @c @var{file}.p
952 @c @var{file}.pas
953 @c Ratfor:
954 @c @var{file}.r
955
956 @item @var{file}.s
957 Assembler code.
958
959 @item @var{file}.S
960 Assembler code which must be preprocessed.
961
962 @item @var{other}
963 An object file to be fed straight into linking.
964 Any file name with no recognized suffix is treated this way.
965 @end table
966
967 @opindex x
968 You can specify the input language explicitly with the @option{-x} option:
969
970 @table @gcctabopt
971 @item -x @var{language}
972 Specify explicitly the @var{language} for the following input files
973 (rather than letting the compiler choose a default based on the file
974 name suffix).  This option applies to all following input files until
975 the next @option{-x} option.  Possible values for @var{language} are:
976 @smallexample
977 c  c-header  c-cpp-output
978 c++  c++-header  c++-cpp-output
979 objective-c  objective-c-header  objective-c-cpp-output
980 objective-c++ objective-c++-header objective-c++-cpp-output
981 assembler  assembler-with-cpp
982 ada
983 f95  f95-cpp-input
984 java
985 treelang
986 @end smallexample
987
988 @item -x none
989 Turn off any specification of a language, so that subsequent files are
990 handled according to their file name suffixes (as they are if @option{-x}
991 has not been used at all).
992
993 @item -pass-exit-codes
994 @opindex pass-exit-codes
995 Normally the @command{gcc} program will exit with the code of 1 if any
996 phase of the compiler returns a non-success return code.  If you specify
997 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
998 numerically highest error produced by any phase that returned an error
999 indication.  The C, C++, and Fortran frontends return 4, if an internal
1000 compiler error is encountered.
1001 @end table
1002
1003 If you only want some of the stages of compilation, you can use
1004 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1005 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1006 @command{gcc} is to stop.  Note that some combinations (for example,
1007 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1008
1009 @table @gcctabopt
1010 @item -c
1011 @opindex c
1012 Compile or assemble the source files, but do not link.  The linking
1013 stage simply is not done.  The ultimate output is in the form of an
1014 object file for each source file.
1015
1016 By default, the object file name for a source file is made by replacing
1017 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1018
1019 Unrecognized input files, not requiring compilation or assembly, are
1020 ignored.
1021
1022 @item -S
1023 @opindex S
1024 Stop after the stage of compilation proper; do not assemble.  The output
1025 is in the form of an assembler code file for each non-assembler input
1026 file specified.
1027
1028 By default, the assembler file name for a source file is made by
1029 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1030
1031 Input files that don't require compilation are ignored.
1032
1033 @item -E
1034 @opindex E
1035 Stop after the preprocessing stage; do not run the compiler proper.  The
1036 output is in the form of preprocessed source code, which is sent to the
1037 standard output.
1038
1039 Input files which don't require preprocessing are ignored.
1040
1041 @cindex output file option
1042 @item -o @var{file}
1043 @opindex o
1044 Place output in file @var{file}.  This applies regardless to whatever
1045 sort of output is being produced, whether it be an executable file,
1046 an object file, an assembler file or preprocessed C code.
1047
1048 If @option{-o} is not specified, the default is to put an executable
1049 file in @file{a.out}, the object file for
1050 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1051 assembler file in @file{@var{source}.s}, a precompiled header file in
1052 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1053 standard output.
1054
1055 @item -v
1056 @opindex v
1057 Print (on standard error output) the commands executed to run the stages
1058 of compilation.  Also print the version number of the compiler driver
1059 program and of the preprocessor and the compiler proper.
1060
1061 @item -###
1062 @opindex ###
1063 Like @option{-v} except the commands are not executed and all command
1064 arguments are quoted.  This is useful for shell scripts to capture the
1065 driver-generated command lines.
1066
1067 @item -pipe
1068 @opindex pipe
1069 Use pipes rather than temporary files for communication between the
1070 various stages of compilation.  This fails to work on some systems where
1071 the assembler is unable to read from a pipe; but the GNU assembler has
1072 no trouble.
1073
1074 @item -combine
1075 @opindex combine
1076 If you are compiling multiple source files, this option tells the driver
1077 to pass all the source files to the compiler at once (for those
1078 languages for which the compiler can handle this).  This will allow
1079 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1080 language for which this is supported is C@.  If you pass source files for
1081 multiple languages to the driver, using this option, the driver will invoke
1082 the compiler(s) that support IMA once each, passing each compiler all the
1083 source files appropriate for it.  For those languages that do not support
1084 IMA this option will be ignored, and the compiler will be invoked once for
1085 each source file in that language.  If you use this option in conjunction
1086 with @option{-save-temps}, the compiler will generate multiple
1087 pre-processed files
1088 (one for each source file), but only one (combined) @file{.o} or
1089 @file{.s} file.
1090
1091 @item --help
1092 @opindex help
1093 Print (on the standard output) a description of the command line options
1094 understood by @command{gcc}.  If the @option{-v} option is also specified
1095 then @option{--help} will also be passed on to the various processes
1096 invoked by @command{gcc}, so that they can display the command line options
1097 they accept.  If the @option{-Wextra} option has also been specified
1098 (prior to the @option{--help} option), then command line options which
1099 have no documentation associated with them will also be displayed.
1100
1101 @item --target-help
1102 @opindex target-help
1103 Print (on the standard output) a description of target-specific command
1104 line options for each tool.
1105
1106 @item --help=@var{class}@r{[},@var{qualifier}@r{]}
1107 Print (on the standard output) a description of the command line
1108 options understood by the compiler that fit into a specific class.
1109 The class can be one of @samp{optimizers}, @samp{warnings}, @samp{target},
1110 @samp{params}, or @var{language}:
1111
1112 @table @asis
1113 @item @samp{optimizers}
1114 This will display all of the optimization options supported by the
1115 compiler.
1116
1117 @item @samp{warnings}
1118 This will display all of the options controlling warning messages
1119 produced by the compiler.
1120
1121 @item @samp{target}
1122 This will display target-specific options.  Unlike the
1123 @option{--target-help} option however, target-specific options of the
1124 linker and assembler will not be displayed.  This is because those
1125 tools do not currently support the extended @option{--help=} syntax.
1126
1127 @item @samp{params}
1128 This will display the values recognized by the @option{--param}
1129 option.
1130
1131 @item @var{language}
1132 This will display the options supported for @var{language}, where 
1133 @var{language} is the name of one of the languages supported in this 
1134 version of GCC.
1135
1136 @item @samp{common}
1137 This will display the options that are common to all languages.
1138 @end table
1139
1140 It is possible to further refine the output of the @option{--help=}
1141 option by adding a comma separated list of qualifiers after the
1142 class.  These can be any from the following list:
1143
1144 @table @asis
1145 @item @samp{undocumented}
1146 Display only those options which are undocumented.
1147
1148 @item @samp{joined}
1149 Display options which take an argument that appears after an equal
1150 sign in the same continuous piece of text, such as:
1151 @samp{--help=target}.
1152
1153 @item @samp{separate}
1154 Display options which take an argument that appears as a separate word
1155 following the original option, such as: @samp{-o output-file}.
1156 @end table
1157
1158 Thus for example to display all the undocumented target-specific
1159 switches supported by the compiler the following can be used:
1160
1161 @smallexample
1162 --help=target,undocumented
1163 @end smallexample
1164
1165 The sense of a qualifier can be inverted by prefixing it with the
1166 @var{^} character, so for example to display all binary warning
1167 options (i.e. ones that are either on or off and that do not take an
1168 argument), which have a description the following can be used:
1169
1170 @smallexample
1171 --help=warnings,^joined,^undocumented
1172 @end smallexample
1173
1174 A class can also be used as a qualifier, although this usually
1175 restricts the output by so much that there is nothing to display.  One
1176 case where it does work however is when one of the classes is
1177 @var{target}.  So for example to display all the target-specific
1178 optimization options the following can be used:
1179
1180 @smallexample
1181 --help=target,optimizers
1182 @end smallexample
1183
1184 The @option{--help=} option can be repeated on the command line.  Each
1185 successive use will display its requested class of options, skipping
1186 those that have already been displayed.
1187
1188 If the @option{-Q} option appears on the command line before the
1189 @option{--help=} option, then the descriptive text displayed by
1190 @option{--help=} is changed.  Instead of describing the displayed
1191 options, an indication is given as to whether the option is enabled,
1192 disabled or set to a specific value (assuming that the compiler
1193 knows this at the point where the @option{--help=} option is used).
1194
1195 Here is a truncated example from the ARM port of @command{gcc}:
1196
1197 @smallexample
1198   % gcc -Q -mabi=2 --help=target -c
1199   The following options are target specific:
1200   -mabi=                                2
1201   -mabort-on-noreturn                   [disabled]
1202   -mapcs                                [disabled]
1203 @end smallexample
1204
1205 The output is sensitive to the effects of previous command line
1206 options, so for example it is possible to find out which optimizations
1207 are enabled at @option{-O2} by using:
1208
1209 @smallexample
1210 -O2 --help=optimizers
1211 @end smallexample
1212
1213 Alternatively you can discover which binary optimizations are enabled
1214 by @option{-O3} by using:
1215
1216 @smallexample
1217 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1218 gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1219 diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1220 @end smallexample
1221
1222 @item --version
1223 @opindex version
1224 Display the version number and copyrights of the invoked GCC@.
1225
1226 @include @value{srcdir}/../libiberty/at-file.texi
1227 @end table
1228
1229 @node Invoking G++
1230 @section Compiling C++ Programs
1231
1232 @cindex suffixes for C++ source
1233 @cindex C++ source file suffixes
1234 C++ source files conventionally use one of the suffixes @samp{.C},
1235 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1236 @samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
1237 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1238 files with these names and compiles them as C++ programs even if you
1239 call the compiler the same way as for compiling C programs (usually
1240 with the name @command{gcc}).
1241
1242 @findex g++
1243 @findex c++
1244 However, the use of @command{gcc} does not add the C++ library.
1245 @command{g++} is a program that calls GCC and treats @samp{.c},
1246 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1247 files unless @option{-x} is used, and automatically specifies linking
1248 against the C++ library.  This program is also useful when
1249 precompiling a C header file with a @samp{.h} extension for use in C++
1250 compilations.  On many systems, @command{g++} is also installed with
1251 the name @command{c++}.
1252
1253 @cindex invoking @command{g++}
1254 When you compile C++ programs, you may specify many of the same
1255 command-line options that you use for compiling programs in any
1256 language; or command-line options meaningful for C and related
1257 languages; or options that are meaningful only for C++ programs.
1258 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1259 explanations of options for languages related to C@.
1260 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1261 explanations of options that are meaningful only for C++ programs.
1262
1263 @node C Dialect Options
1264 @section Options Controlling C Dialect
1265 @cindex dialect options
1266 @cindex language dialect options
1267 @cindex options, dialect
1268
1269 The following options control the dialect of C (or languages derived
1270 from C, such as C++, Objective-C and Objective-C++) that the compiler
1271 accepts:
1272
1273 @table @gcctabopt
1274 @cindex ANSI support
1275 @cindex ISO support
1276 @item -ansi
1277 @opindex ansi
1278 In C mode, support all ISO C90 programs.  In C++ mode,
1279 remove GNU extensions that conflict with ISO C++.
1280
1281 This turns off certain features of GCC that are incompatible with ISO
1282 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1283 such as the @code{asm} and @code{typeof} keywords, and
1284 predefined macros such as @code{unix} and @code{vax} that identify the
1285 type of system you are using.  It also enables the undesirable and
1286 rarely used ISO trigraph feature.  For the C compiler,
1287 it disables recognition of C++ style @samp{//} comments as well as
1288 the @code{inline} keyword.
1289
1290 The alternate keywords @code{__asm__}, @code{__extension__},
1291 @code{__inline__} and @code{__typeof__} continue to work despite
1292 @option{-ansi}.  You would not want to use them in an ISO C program, of
1293 course, but it is useful to put them in header files that might be included
1294 in compilations done with @option{-ansi}.  Alternate predefined macros
1295 such as @code{__unix__} and @code{__vax__} are also available, with or
1296 without @option{-ansi}.
1297
1298 The @option{-ansi} option does not cause non-ISO programs to be
1299 rejected gratuitously.  For that, @option{-pedantic} is required in
1300 addition to @option{-ansi}.  @xref{Warning Options}.
1301
1302 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1303 option is used.  Some header files may notice this macro and refrain
1304 from declaring certain functions or defining certain macros that the
1305 ISO standard doesn't call for; this is to avoid interfering with any
1306 programs that might use these names for other things.
1307
1308 Functions which would normally be built in but do not have semantics
1309 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1310 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1311 built-in functions provided by GCC}, for details of the functions
1312 affected.
1313
1314 @item -std=
1315 @opindex std
1316 Determine the language standard.  This option is currently only
1317 supported when compiling C or C++.  A value for this option must be
1318 provided; possible values are
1319
1320 @table @samp
1321 @item c89
1322 @itemx iso9899:1990
1323 ISO C90 (same as @option{-ansi}).
1324
1325 @item iso9899:199409
1326 ISO C90 as modified in amendment 1.
1327
1328 @item c99
1329 @itemx c9x
1330 @itemx iso9899:1999
1331 @itemx iso9899:199x
1332 ISO C99.  Note that this standard is not yet fully supported; see
1333 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1334 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1335
1336 @item gnu89
1337 Default, ISO C90 plus GNU extensions (including some C99 features).
1338
1339 @item gnu99
1340 @itemx gnu9x
1341 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1342 this will become the default.  The name @samp{gnu9x} is deprecated.
1343
1344 @item c++98
1345 The 1998 ISO C++ standard plus amendments.
1346
1347 @item gnu++98
1348 The same as @option{-std=c++98} plus GNU extensions.  This is the
1349 default for C++ code.
1350
1351 @item c++0x
1352 The working draft of the upcoming ISO C++0x standard. This option
1353 enables experimental features that are likely to be included in
1354 C++0x. The working draft is constantly changing, and any feature that is
1355 enabled by this flag may be removed from future versions of GCC if it is
1356 not part of the C++0x standard.
1357
1358 @item gnu++0x
1359 The same as @option{-std=c++0x} plus GNU extensions. As with
1360 @option{-std=c++0x}, this option enables experimental features that may
1361 be removed in future versions of GCC.
1362 @end table
1363
1364 Even when this option is not specified, you can still use some of the
1365 features of newer standards in so far as they do not conflict with
1366 previous C standards.  For example, you may use @code{__restrict__} even
1367 when @option{-std=c99} is not specified.
1368
1369 The @option{-std} options specifying some version of ISO C have the same
1370 effects as @option{-ansi}, except that features that were not in ISO C90
1371 but are in the specified version (for example, @samp{//} comments and
1372 the @code{inline} keyword in ISO C99) are not disabled.
1373
1374 @xref{Standards,,Language Standards Supported by GCC}, for details of
1375 these standard versions.
1376
1377 @item -fgnu89-inline
1378 @opindex fgnu89-inline
1379 The option @option{-fgnu89-inline} tells GCC to use the traditional
1380 GNU semantics for @code{inline} functions when in C99 mode.
1381 @xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1382 is accepted and ignored by GCC versions 4.1.3 up to but not including
1383 4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1384 C99 mode.  Using this option is roughly equivalent to adding the
1385 @code{gnu_inline} function attribute to all inline functions
1386 (@pxref{Function Attributes}).
1387
1388 The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1389 C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1390 specifies the default behavior).  This option was first supported in
1391 GCC 4.3.  This option is not supported in C89 or gnu89 mode.
1392
1393 The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1394 @code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1395 in effect for @code{inline} functions.  @xref{Common Predefined
1396 Macros,,,cpp,The C Preprocessor}.
1397
1398 @item -aux-info @var{filename}
1399 @opindex aux-info
1400 Output to the given filename prototyped declarations for all functions
1401 declared and/or defined in a translation unit, including those in header
1402 files.  This option is silently ignored in any language other than C@.
1403
1404 Besides declarations, the file indicates, in comments, the origin of
1405 each declaration (source file and line), whether the declaration was
1406 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1407 @samp{O} for old, respectively, in the first character after the line
1408 number and the colon), and whether it came from a declaration or a
1409 definition (@samp{C} or @samp{F}, respectively, in the following
1410 character).  In the case of function definitions, a K&R-style list of
1411 arguments followed by their declarations is also provided, inside
1412 comments, after the declaration.
1413
1414 @item -fno-asm
1415 @opindex fno-asm
1416 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1417 keyword, so that code can use these words as identifiers.  You can use
1418 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1419 instead.  @option{-ansi} implies @option{-fno-asm}.
1420
1421 In C++, this switch only affects the @code{typeof} keyword, since
1422 @code{asm} and @code{inline} are standard keywords.  You may want to
1423 use the @option{-fno-gnu-keywords} flag instead, which has the same
1424 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1425 switch only affects the @code{asm} and @code{typeof} keywords, since
1426 @code{inline} is a standard keyword in ISO C99.
1427
1428 @item -fno-builtin
1429 @itemx -fno-builtin-@var{function}
1430 @opindex fno-builtin
1431 @cindex built-in functions
1432 Don't recognize built-in functions that do not begin with
1433 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1434 functions provided by GCC}, for details of the functions affected,
1435 including those which are not built-in functions when @option{-ansi} or
1436 @option{-std} options for strict ISO C conformance are used because they
1437 do not have an ISO standard meaning.
1438
1439 GCC normally generates special code to handle certain built-in functions
1440 more efficiently; for instance, calls to @code{alloca} may become single
1441 instructions that adjust the stack directly, and calls to @code{memcpy}
1442 may become inline copy loops.  The resulting code is often both smaller
1443 and faster, but since the function calls no longer appear as such, you
1444 cannot set a breakpoint on those calls, nor can you change the behavior
1445 of the functions by linking with a different library.  In addition,
1446 when a function is recognized as a built-in function, GCC may use
1447 information about that function to warn about problems with calls to
1448 that function, or to generate more efficient code, even if the
1449 resulting code still contains calls to that function.  For example,
1450 warnings are given with @option{-Wformat} for bad calls to
1451 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1452 known not to modify global memory.
1453
1454 With the @option{-fno-builtin-@var{function}} option
1455 only the built-in function @var{function} is
1456 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1457 function is named this is not built-in in this version of GCC, this
1458 option is ignored.  There is no corresponding
1459 @option{-fbuiltin-@var{function}} option; if you wish to enable
1460 built-in functions selectively when using @option{-fno-builtin} or
1461 @option{-ffreestanding}, you may define macros such as:
1462
1463 @smallexample
1464 #define abs(n)          __builtin_abs ((n))
1465 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1466 @end smallexample
1467
1468 @item -fhosted
1469 @opindex fhosted
1470 @cindex hosted environment
1471
1472 Assert that compilation takes place in a hosted environment.  This implies
1473 @option{-fbuiltin}.  A hosted environment is one in which the
1474 entire standard library is available, and in which @code{main} has a return
1475 type of @code{int}.  Examples are nearly everything except a kernel.
1476 This is equivalent to @option{-fno-freestanding}.
1477
1478 @item -ffreestanding
1479 @opindex ffreestanding
1480 @cindex hosted environment
1481
1482 Assert that compilation takes place in a freestanding environment.  This
1483 implies @option{-fno-builtin}.  A freestanding environment
1484 is one in which the standard library may not exist, and program startup may
1485 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1486 This is equivalent to @option{-fno-hosted}.
1487
1488 @xref{Standards,,Language Standards Supported by GCC}, for details of
1489 freestanding and hosted environments.
1490
1491 @item -fopenmp
1492 @opindex fopenmp
1493 @cindex openmp parallel
1494 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1495 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1496 compiler generates parallel code according to the OpenMP Application
1497 Program Interface v2.5 @w{@uref{http://www.openmp.org/}}.
1498
1499 @item -fms-extensions
1500 @opindex fms-extensions
1501 Accept some non-standard constructs used in Microsoft header files.
1502
1503 Some cases of unnamed fields in structures and unions are only
1504 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1505 fields within structs/unions}, for details.
1506
1507 @item -trigraphs
1508 @opindex trigraphs
1509 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1510 options for strict ISO C conformance) implies @option{-trigraphs}.
1511
1512 @item -no-integrated-cpp
1513 @opindex no-integrated-cpp
1514 Performs a compilation in two passes: preprocessing and compiling.  This
1515 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1516 @option{-B} option.  The user supplied compilation step can then add in
1517 an additional preprocessing step after normal preprocessing but before
1518 compiling.  The default is to use the integrated cpp (internal cpp)
1519
1520 The semantics of this option will change if "cc1", "cc1plus", and
1521 "cc1obj" are merged.
1522
1523 @cindex traditional C language
1524 @cindex C language, traditional
1525 @item -traditional
1526 @itemx -traditional-cpp
1527 @opindex traditional-cpp
1528 @opindex traditional
1529 Formerly, these options caused GCC to attempt to emulate a pre-standard
1530 C compiler.  They are now only supported with the @option{-E} switch.
1531 The preprocessor continues to support a pre-standard mode.  See the GNU
1532 CPP manual for details.
1533
1534 @item -fcond-mismatch
1535 @opindex fcond-mismatch
1536 Allow conditional expressions with mismatched types in the second and
1537 third arguments.  The value of such an expression is void.  This option
1538 is not supported for C++.
1539
1540 @item -flax-vector-conversions
1541 @opindex flax-vector-conversions
1542 Allow implicit conversions between vectors with differing numbers of
1543 elements and/or incompatible element types.  This option should not be
1544 used for new code.
1545
1546 @item -funsigned-char
1547 @opindex funsigned-char
1548 Let the type @code{char} be unsigned, like @code{unsigned char}.
1549
1550 Each kind of machine has a default for what @code{char} should
1551 be.  It is either like @code{unsigned char} by default or like
1552 @code{signed char} by default.
1553
1554 Ideally, a portable program should always use @code{signed char} or
1555 @code{unsigned char} when it depends on the signedness of an object.
1556 But many programs have been written to use plain @code{char} and
1557 expect it to be signed, or expect it to be unsigned, depending on the
1558 machines they were written for.  This option, and its inverse, let you
1559 make such a program work with the opposite default.
1560
1561 The type @code{char} is always a distinct type from each of
1562 @code{signed char} or @code{unsigned char}, even though its behavior
1563 is always just like one of those two.
1564
1565 @item -fsigned-char
1566 @opindex fsigned-char
1567 Let the type @code{char} be signed, like @code{signed char}.
1568
1569 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1570 the negative form of @option{-funsigned-char}.  Likewise, the option
1571 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1572
1573 @item -fsigned-bitfields
1574 @itemx -funsigned-bitfields
1575 @itemx -fno-signed-bitfields
1576 @itemx -fno-unsigned-bitfields
1577 @opindex fsigned-bitfields
1578 @opindex funsigned-bitfields
1579 @opindex fno-signed-bitfields
1580 @opindex fno-unsigned-bitfields
1581 These options control whether a bit-field is signed or unsigned, when the
1582 declaration does not use either @code{signed} or @code{unsigned}.  By
1583 default, such a bit-field is signed, because this is consistent: the
1584 basic integer types such as @code{int} are signed types.
1585 @end table
1586
1587 @node C++ Dialect Options
1588 @section Options Controlling C++ Dialect
1589
1590 @cindex compiler options, C++
1591 @cindex C++ options, command line
1592 @cindex options, C++
1593 This section describes the command-line options that are only meaningful
1594 for C++ programs; but you can also use most of the GNU compiler options
1595 regardless of what language your program is in.  For example, you
1596 might compile a file @code{firstClass.C} like this:
1597
1598 @smallexample
1599 g++ -g -frepo -O -c firstClass.C
1600 @end smallexample
1601
1602 @noindent
1603 In this example, only @option{-frepo} is an option meant
1604 only for C++ programs; you can use the other options with any
1605 language supported by GCC@.
1606
1607 Here is a list of options that are @emph{only} for compiling C++ programs:
1608
1609 @table @gcctabopt
1610
1611 @item -fabi-version=@var{n}
1612 @opindex fabi-version
1613 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1614 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1615 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1616 the version that conforms most closely to the C++ ABI specification.
1617 Therefore, the ABI obtained using version 0 will change as ABI bugs
1618 are fixed.
1619
1620 The default is version 2.
1621
1622 @item -fno-access-control
1623 @opindex fno-access-control
1624 Turn off all access checking.  This switch is mainly useful for working
1625 around bugs in the access control code.
1626
1627 @item -fcheck-new
1628 @opindex fcheck-new
1629 Check that the pointer returned by @code{operator new} is non-null
1630 before attempting to modify the storage allocated.  This check is
1631 normally unnecessary because the C++ standard specifies that
1632 @code{operator new} will only return @code{0} if it is declared
1633 @samp{throw()}, in which case the compiler will always check the
1634 return value even without this option.  In all other cases, when
1635 @code{operator new} has a non-empty exception specification, memory
1636 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1637 @samp{new (nothrow)}.
1638
1639 @item -fconserve-space
1640 @opindex fconserve-space
1641 Put uninitialized or runtime-initialized global variables into the
1642 common segment, as C does.  This saves space in the executable at the
1643 cost of not diagnosing duplicate definitions.  If you compile with this
1644 flag and your program mysteriously crashes after @code{main()} has
1645 completed, you may have an object that is being destroyed twice because
1646 two definitions were merged.
1647
1648 This option is no longer useful on most targets, now that support has
1649 been added for putting variables into BSS without making them common.
1650
1651 @item -ffriend-injection
1652 @opindex ffriend-injection
1653 Inject friend functions into the enclosing namespace, so that they are
1654 visible outside the scope of the class in which they are declared.
1655 Friend functions were documented to work this way in the old Annotated
1656 C++ Reference Manual, and versions of G++ before 4.1 always worked
1657 that way.  However, in ISO C++ a friend function which is not declared
1658 in an enclosing scope can only be found using argument dependent
1659 lookup.  This option causes friends to be injected as they were in
1660 earlier releases.
1661
1662 This option is for compatibility, and may be removed in a future
1663 release of G++.
1664
1665 @item -fno-elide-constructors
1666 @opindex fno-elide-constructors
1667 The C++ standard allows an implementation to omit creating a temporary
1668 which is only used to initialize another object of the same type.
1669 Specifying this option disables that optimization, and forces G++ to
1670 call the copy constructor in all cases.
1671
1672 @item -fno-enforce-eh-specs
1673 @opindex fno-enforce-eh-specs
1674 Don't generate code to check for violation of exception specifications
1675 at runtime.  This option violates the C++ standard, but may be useful
1676 for reducing code size in production builds, much like defining
1677 @samp{NDEBUG}.  This does not give user code permission to throw
1678 exceptions in violation of the exception specifications; the compiler
1679 will still optimize based on the specifications, so throwing an
1680 unexpected exception will result in undefined behavior.
1681
1682 @item -ffor-scope
1683 @itemx -fno-for-scope
1684 @opindex ffor-scope
1685 @opindex fno-for-scope
1686 If @option{-ffor-scope} is specified, the scope of variables declared in
1687 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1688 as specified by the C++ standard.
1689 If @option{-fno-for-scope} is specified, the scope of variables declared in
1690 a @i{for-init-statement} extends to the end of the enclosing scope,
1691 as was the case in old versions of G++, and other (traditional)
1692 implementations of C++.
1693
1694 The default if neither flag is given to follow the standard,
1695 but to allow and give a warning for old-style code that would
1696 otherwise be invalid, or have different behavior.
1697
1698 @item -fno-gnu-keywords
1699 @opindex fno-gnu-keywords
1700 Do not recognize @code{typeof} as a keyword, so that code can use this
1701 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1702 @option{-ansi} implies @option{-fno-gnu-keywords}.
1703
1704 @item -fno-implicit-templates
1705 @opindex fno-implicit-templates
1706 Never emit code for non-inline templates which are instantiated
1707 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1708 @xref{Template Instantiation}, for more information.
1709
1710 @item -fno-implicit-inline-templates
1711 @opindex fno-implicit-inline-templates
1712 Don't emit code for implicit instantiations of inline templates, either.
1713 The default is to handle inlines differently so that compiles with and
1714 without optimization will need the same set of explicit instantiations.
1715
1716 @item -fno-implement-inlines
1717 @opindex fno-implement-inlines
1718 To save space, do not emit out-of-line copies of inline functions
1719 controlled by @samp{#pragma implementation}.  This will cause linker
1720 errors if these functions are not inlined everywhere they are called.
1721
1722 @item -fms-extensions
1723 @opindex fms-extensions
1724 Disable pedantic warnings about constructs used in MFC, such as implicit
1725 int and getting a pointer to member function via non-standard syntax.
1726
1727 @item -fno-nonansi-builtins
1728 @opindex fno-nonansi-builtins
1729 Disable built-in declarations of functions that are not mandated by
1730 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1731 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1732
1733 @item -fno-operator-names
1734 @opindex fno-operator-names
1735 Do not treat the operator name keywords @code{and}, @code{bitand},
1736 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1737 synonyms as keywords.
1738
1739 @item -fno-optional-diags
1740 @opindex fno-optional-diags
1741 Disable diagnostics that the standard says a compiler does not need to
1742 issue.  Currently, the only such diagnostic issued by G++ is the one for
1743 a name having multiple meanings within a class.
1744
1745 @item -fpermissive
1746 @opindex fpermissive
1747 Downgrade some diagnostics about nonconformant code from errors to
1748 warnings.  Thus, using @option{-fpermissive} will allow some
1749 nonconforming code to compile.
1750
1751 @item -frepo
1752 @opindex frepo
1753 Enable automatic template instantiation at link time.  This option also
1754 implies @option{-fno-implicit-templates}.  @xref{Template
1755 Instantiation}, for more information.
1756
1757 @item -fno-rtti
1758 @opindex fno-rtti
1759 Disable generation of information about every class with virtual
1760 functions for use by the C++ runtime type identification features
1761 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1762 of the language, you can save some space by using this flag.  Note that
1763 exception handling uses the same information, but it will generate it as
1764 needed. The @samp{dynamic_cast} operator can still be used for casts that
1765 do not require runtime type information, i.e. casts to @code{void *} or to
1766 unambiguous base classes.
1767
1768 @item -fstats
1769 @opindex fstats
1770 Emit statistics about front-end processing at the end of the compilation.
1771 This information is generally only useful to the G++ development team.
1772
1773 @item -ftemplate-depth-@var{n}
1774 @opindex ftemplate-depth
1775 Set the maximum instantiation depth for template classes to @var{n}.
1776 A limit on the template instantiation depth is needed to detect
1777 endless recursions during template class instantiation.  ANSI/ISO C++
1778 conforming programs must not rely on a maximum depth greater than 17.
1779
1780 @item -fno-threadsafe-statics
1781 @opindex fno-threadsafe-statics
1782 Do not emit the extra code to use the routines specified in the C++
1783 ABI for thread-safe initialization of local statics.  You can use this
1784 option to reduce code size slightly in code that doesn't need to be
1785 thread-safe.
1786
1787 @item -fuse-cxa-atexit
1788 @opindex fuse-cxa-atexit
1789 Register destructors for objects with static storage duration with the
1790 @code{__cxa_atexit} function rather than the @code{atexit} function.
1791 This option is required for fully standards-compliant handling of static
1792 destructors, but will only work if your C library supports
1793 @code{__cxa_atexit}.
1794
1795 @item -fno-use-cxa-get-exception-ptr
1796 @opindex fno-use-cxa-get-exception-ptr
1797 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
1798 will cause @code{std::uncaught_exception} to be incorrect, but is necessary
1799 if the runtime routine is not available.
1800
1801 @item -fvisibility-inlines-hidden
1802 @opindex fvisibility-inlines-hidden
1803 This switch declares that the user does not attempt to compare
1804 pointers to inline methods where the addresses of the two functions
1805 were taken in different shared objects.
1806
1807 The effect of this is that GCC may, effectively, mark inline methods with
1808 @code{__attribute__ ((visibility ("hidden")))} so that they do not
1809 appear in the export table of a DSO and do not require a PLT indirection
1810 when used within the DSO@.  Enabling this option can have a dramatic effect
1811 on load and link times of a DSO as it massively reduces the size of the
1812 dynamic export table when the library makes heavy use of templates.
1813
1814 The behavior of this switch is not quite the same as marking the
1815 methods as hidden directly, because it does not affect static variables
1816 local to the function or cause the compiler to deduce that
1817 the function is defined in only one shared object.
1818
1819 You may mark a method as having a visibility explicitly to negate the
1820 effect of the switch for that method.  For example, if you do want to
1821 compare pointers to a particular inline method, you might mark it as
1822 having default visibility.  Marking the enclosing class with explicit
1823 visibility will have no effect.
1824
1825 Explicitly instantiated inline methods are unaffected by this option
1826 as their linkage might otherwise cross a shared library boundary.
1827 @xref{Template Instantiation}.
1828
1829 @item -fno-weak
1830 @opindex fno-weak
1831 Do not use weak symbol support, even if it is provided by the linker.
1832 By default, G++ will use weak symbols if they are available.  This
1833 option exists only for testing, and should not be used by end-users;
1834 it will result in inferior code and has no benefits.  This option may
1835 be removed in a future release of G++.
1836
1837 @item -nostdinc++
1838 @opindex nostdinc++
1839 Do not search for header files in the standard directories specific to
1840 C++, but do still search the other standard directories.  (This option
1841 is used when building the C++ library.)
1842 @end table
1843
1844 In addition, these optimization, warning, and code generation options
1845 have meanings only for C++ programs:
1846
1847 @table @gcctabopt
1848 @item -fno-default-inline
1849 @opindex fno-default-inline
1850 Do not assume @samp{inline} for functions defined inside a class scope.
1851 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1852 functions will have linkage like inline functions; they just won't be
1853 inlined by default.
1854
1855 @item -Wabi @r{(C++ only)}
1856 @opindex Wabi
1857 Warn when G++ generates code that is probably not compatible with the
1858 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
1859 all such cases, there are probably some cases that are not warned about,
1860 even though G++ is generating incompatible code.  There may also be
1861 cases where warnings are emitted even though the code that is generated
1862 will be compatible.
1863
1864 You should rewrite your code to avoid these warnings if you are
1865 concerned about the fact that code generated by G++ may not be binary
1866 compatible with code generated by other compilers.
1867
1868 The known incompatibilities at this point include:
1869
1870 @itemize @bullet
1871
1872 @item
1873 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1874 pack data into the same byte as a base class.  For example:
1875
1876 @smallexample
1877 struct A @{ virtual void f(); int f1 : 1; @};
1878 struct B : public A @{ int f2 : 1; @};
1879 @end smallexample
1880
1881 @noindent
1882 In this case, G++ will place @code{B::f2} into the same byte
1883 as@code{A::f1}; other compilers will not.  You can avoid this problem
1884 by explicitly padding @code{A} so that its size is a multiple of the
1885 byte size on your platform; that will cause G++ and other compilers to
1886 layout @code{B} identically.
1887
1888 @item
1889 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1890 tail padding when laying out virtual bases.  For example:
1891
1892 @smallexample
1893 struct A @{ virtual void f(); char c1; @};
1894 struct B @{ B(); char c2; @};
1895 struct C : public A, public virtual B @{@};
1896 @end smallexample
1897
1898 @noindent
1899 In this case, G++ will not place @code{B} into the tail-padding for
1900 @code{A}; other compilers will.  You can avoid this problem by
1901 explicitly padding @code{A} so that its size is a multiple of its
1902 alignment (ignoring virtual base classes); that will cause G++ and other
1903 compilers to layout @code{C} identically.
1904
1905 @item
1906 Incorrect handling of bit-fields with declared widths greater than that
1907 of their underlying types, when the bit-fields appear in a union.  For
1908 example:
1909
1910 @smallexample
1911 union U @{ int i : 4096; @};
1912 @end smallexample
1913
1914 @noindent
1915 Assuming that an @code{int} does not have 4096 bits, G++ will make the
1916 union too small by the number of bits in an @code{int}.
1917
1918 @item
1919 Empty classes can be placed at incorrect offsets.  For example:
1920
1921 @smallexample
1922 struct A @{@};
1923
1924 struct B @{
1925   A a;
1926   virtual void f ();
1927 @};
1928
1929 struct C : public B, public A @{@};
1930 @end smallexample
1931
1932 @noindent
1933 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1934 it should be placed at offset zero.  G++ mistakenly believes that the
1935 @code{A} data member of @code{B} is already at offset zero.
1936
1937 @item
1938 Names of template functions whose types involve @code{typename} or
1939 template template parameters can be mangled incorrectly.
1940
1941 @smallexample
1942 template <typename Q>
1943 void f(typename Q::X) @{@}
1944
1945 template <template <typename> class Q>
1946 void f(typename Q<int>::X) @{@}
1947 @end smallexample
1948
1949 @noindent
1950 Instantiations of these templates may be mangled incorrectly.
1951
1952 @end itemize
1953
1954 @item -Wctor-dtor-privacy @r{(C++ only)}
1955 @opindex Wctor-dtor-privacy
1956 Warn when a class seems unusable because all the constructors or
1957 destructors in that class are private, and it has neither friends nor
1958 public static member functions.
1959
1960 @item -Wnon-virtual-dtor @r{(C++ only)}
1961 @opindex Wnon-virtual-dtor
1962 Warn when a class appears to be polymorphic, thereby requiring a virtual
1963 destructor, yet it declares a non-virtual one.  This warning is also
1964 enabled if -Weffc++ is specified.
1965
1966 @item -Wreorder @r{(C++ only)}
1967 @opindex Wreorder
1968 @cindex reordering, warning
1969 @cindex warning for reordering of member initializers
1970 Warn when the order of member initializers given in the code does not
1971 match the order in which they must be executed.  For instance:
1972
1973 @smallexample
1974 struct A @{
1975   int i;
1976   int j;
1977   A(): j (0), i (1) @{ @}
1978 @};
1979 @end smallexample
1980
1981 The compiler will rearrange the member initializers for @samp{i}
1982 and @samp{j} to match the declaration order of the members, emitting
1983 a warning to that effect.  This warning is enabled by @option{-Wall}.
1984 @end table
1985
1986 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1987
1988 @table @gcctabopt
1989 @item -Weffc++ @r{(C++ only)}
1990 @opindex Weffc++
1991 Warn about violations of the following style guidelines from Scott Meyers'
1992 @cite{Effective C++} book:
1993
1994 @itemize @bullet
1995 @item
1996 Item 11:  Define a copy constructor and an assignment operator for classes
1997 with dynamically allocated memory.
1998
1999 @item
2000 Item 12:  Prefer initialization to assignment in constructors.
2001
2002 @item
2003 Item 14:  Make destructors virtual in base classes.
2004
2005 @item
2006 Item 15:  Have @code{operator=} return a reference to @code{*this}.
2007
2008 @item
2009 Item 23:  Don't try to return a reference when you must return an object.
2010
2011 @end itemize
2012
2013 Also warn about violations of the following style guidelines from
2014 Scott Meyers' @cite{More Effective C++} book:
2015
2016 @itemize @bullet
2017 @item
2018 Item 6:  Distinguish between prefix and postfix forms of increment and
2019 decrement operators.
2020
2021 @item
2022 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2023
2024 @end itemize
2025
2026 When selecting this option, be aware that the standard library
2027 headers do not obey all of these guidelines; use @samp{grep -v}
2028 to filter out those warnings.
2029
2030 @item -Wno-deprecated @r{(C++ only)}
2031 @opindex Wno-deprecated
2032 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
2033
2034 @item -Wstrict-null-sentinel @r{(C++ only)}
2035 @opindex Wstrict-null-sentinel
2036 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2037 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2038 to @code{__null}.  Although it is a null pointer constant not a null pointer,
2039 it is guaranteed to of the same size as a pointer.  But this use is
2040 not portable across different compilers.
2041
2042 @item -Wno-non-template-friend @r{(C++ only)}
2043 @opindex Wno-non-template-friend
2044 Disable warnings when non-templatized friend functions are declared
2045 within a template.  Since the advent of explicit template specification
2046 support in G++, if the name of the friend is an unqualified-id (i.e.,
2047 @samp{friend foo(int)}), the C++ language specification demands that the
2048 friend declare or define an ordinary, nontemplate function.  (Section
2049 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2050 could be interpreted as a particular specialization of a templatized
2051 function.  Because this non-conforming behavior is no longer the default
2052 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2053 check existing code for potential trouble spots and is on by default.
2054 This new compiler behavior can be turned off with
2055 @option{-Wno-non-template-friend} which keeps the conformant compiler code
2056 but disables the helpful warning.
2057
2058 @item -Wold-style-cast @r{(C++ only)}
2059 @opindex Wold-style-cast
2060 Warn if an old-style (C-style) cast to a non-void type is used within
2061 a C++ program.  The new-style casts (@samp{dynamic_cast},
2062 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2063 less vulnerable to unintended effects and much easier to search for.
2064
2065 @item -Woverloaded-virtual @r{(C++ only)}
2066 @opindex Woverloaded-virtual
2067 @cindex overloaded virtual fn, warning
2068 @cindex warning for overloaded virtual fn
2069 Warn when a function declaration hides virtual functions from a
2070 base class.  For example, in:
2071
2072 @smallexample
2073 struct A @{
2074   virtual void f();
2075 @};
2076
2077 struct B: public A @{
2078   void f(int);
2079 @};
2080 @end smallexample
2081
2082 the @code{A} class version of @code{f} is hidden in @code{B}, and code
2083 like:
2084
2085 @smallexample
2086 B* b;
2087 b->f();
2088 @end smallexample
2089
2090 will fail to compile.
2091
2092 @item -Wno-pmf-conversions @r{(C++ only)}
2093 @opindex Wno-pmf-conversions
2094 Disable the diagnostic for converting a bound pointer to member function
2095 to a plain pointer.
2096
2097 @item -Wsign-promo @r{(C++ only)}
2098 @opindex Wsign-promo
2099 Warn when overload resolution chooses a promotion from unsigned or
2100 enumerated type to a signed type, over a conversion to an unsigned type of
2101 the same size.  Previous versions of G++ would try to preserve
2102 unsignedness, but the standard mandates the current behavior.
2103
2104 @smallexample
2105 struct A @{
2106   operator int ();
2107   A& operator = (int);
2108 @};
2109
2110 main ()
2111 @{
2112   A a,b;
2113   a = b;
2114 @}
2115 @end smallexample
2116
2117 In this example, G++ will synthesize a default @samp{A& operator =
2118 (const A&);}, while cfront will use the user-defined @samp{operator =}.
2119 @end table
2120
2121 @node Objective-C and Objective-C++ Dialect Options
2122 @section Options Controlling Objective-C and Objective-C++ Dialects
2123
2124 @cindex compiler options, Objective-C and Objective-C++
2125 @cindex Objective-C and Objective-C++ options, command line
2126 @cindex options, Objective-C and Objective-C++
2127 (NOTE: This manual does not describe the Objective-C and Objective-C++
2128 languages themselves.  See @xref{Standards,,Language Standards
2129 Supported by GCC}, for references.)
2130
2131 This section describes the command-line options that are only meaningful
2132 for Objective-C and Objective-C++ programs, but you can also use most of
2133 the language-independent GNU compiler options.
2134 For example, you might compile a file @code{some_class.m} like this:
2135
2136 @smallexample
2137 gcc -g -fgnu-runtime -O -c some_class.m
2138 @end smallexample
2139
2140 @noindent
2141 In this example, @option{-fgnu-runtime} is an option meant only for
2142 Objective-C and Objective-C++ programs; you can use the other options with
2143 any language supported by GCC@.
2144
2145 Note that since Objective-C is an extension of the C language, Objective-C
2146 compilations may also use options specific to the C front-end (e.g.,
2147 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2148 C++-specific options (e.g., @option{-Wabi}).
2149
2150 Here is a list of options that are @emph{only} for compiling Objective-C
2151 and Objective-C++ programs:
2152
2153 @table @gcctabopt
2154 @item -fconstant-string-class=@var{class-name}
2155 @opindex fconstant-string-class
2156 Use @var{class-name} as the name of the class to instantiate for each
2157 literal string specified with the syntax @code{@@"@dots{}"}.  The default
2158 class name is @code{NXConstantString} if the GNU runtime is being used, and
2159 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
2160 @option{-fconstant-cfstrings} option, if also present, will override the
2161 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2162 to be laid out as constant CoreFoundation strings.
2163
2164 @item -fgnu-runtime
2165 @opindex fgnu-runtime
2166 Generate object code compatible with the standard GNU Objective-C
2167 runtime.  This is the default for most types of systems.
2168
2169 @item -fnext-runtime
2170 @opindex fnext-runtime
2171 Generate output compatible with the NeXT runtime.  This is the default
2172 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2173 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2174 used.
2175
2176 @item -fno-nil-receivers
2177 @opindex fno-nil-receivers
2178 Assume that all Objective-C message dispatches (e.g.,
2179 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
2180 is not @code{nil}.  This allows for more efficient entry points in the runtime
2181 to be used.  Currently, this option is only available in conjunction with
2182 the NeXT runtime on Mac OS X 10.3 and later.
2183
2184 @item -fobjc-call-cxx-cdtors
2185 @opindex fobjc-call-cxx-cdtors
2186 For each Objective-C class, check if any of its instance variables is a
2187 C++ object with a non-trivial default constructor.  If so, synthesize a
2188 special @code{- (id) .cxx_construct} instance method that will run
2189 non-trivial default constructors on any such instance variables, in order,
2190 and then return @code{self}.  Similarly, check if any instance variable
2191 is a C++ object with a non-trivial destructor, and if so, synthesize a
2192 special @code{- (void) .cxx_destruct} method that will run
2193 all such default destructors, in reverse order.
2194
2195 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2196 thusly generated will only operate on instance variables declared in the
2197 current Objective-C class, and not those inherited from superclasses.  It
2198 is the responsibility of the Objective-C runtime to invoke all such methods
2199 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2200 will be invoked by the runtime immediately after a new object
2201 instance is allocated; the @code{- (void) .cxx_destruct} methods will
2202 be invoked immediately before the runtime deallocates an object instance.
2203
2204 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2205 support for invoking the @code{- (id) .cxx_construct} and
2206 @code{- (void) .cxx_destruct} methods.
2207
2208 @item -fobjc-direct-dispatch
2209 @opindex fobjc-direct-dispatch
2210 Allow fast jumps to the message dispatcher.  On Darwin this is
2211 accomplished via the comm page.
2212
2213 @item -fobjc-exceptions
2214 @opindex fobjc-exceptions
2215 Enable syntactic support for structured exception handling in Objective-C,
2216 similar to what is offered by C++ and Java.  This option is
2217 unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2218 earlier.
2219
2220 @smallexample
2221   @@try @{
2222     @dots{}
2223        @@throw expr;
2224     @dots{}
2225   @}
2226   @@catch (AnObjCClass *exc) @{
2227     @dots{}
2228       @@throw expr;
2229     @dots{}
2230       @@throw;
2231     @dots{}
2232   @}
2233   @@catch (AnotherClass *exc) @{
2234     @dots{}
2235   @}
2236   @@catch (id allOthers) @{
2237     @dots{}
2238   @}
2239   @@finally @{
2240     @dots{}
2241       @@throw expr;
2242     @dots{}
2243   @}
2244 @end smallexample
2245
2246 The @code{@@throw} statement may appear anywhere in an Objective-C or
2247 Objective-C++ program; when used inside of a @code{@@catch} block, the
2248 @code{@@throw} may appear without an argument (as shown above), in which case
2249 the object caught by the @code{@@catch} will be rethrown.
2250
2251 Note that only (pointers to) Objective-C objects may be thrown and
2252 caught using this scheme.  When an object is thrown, it will be caught
2253 by the nearest @code{@@catch} clause capable of handling objects of that type,
2254 analogously to how @code{catch} blocks work in C++ and Java.  A
2255 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2256 any and all Objective-C exceptions not caught by previous @code{@@catch}
2257 clauses (if any).
2258
2259 The @code{@@finally} clause, if present, will be executed upon exit from the
2260 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2261 regardless of whether any exceptions are thrown, caught or rethrown
2262 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2263 of the @code{finally} clause in Java.
2264
2265 There are several caveats to using the new exception mechanism:
2266
2267 @itemize @bullet
2268 @item
2269 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2270 idioms provided by the @code{NSException} class, the new
2271 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2272 systems, due to additional functionality needed in the (NeXT) Objective-C
2273 runtime.
2274
2275 @item
2276 As mentioned above, the new exceptions do not support handling
2277 types other than Objective-C objects.   Furthermore, when used from
2278 Objective-C++, the Objective-C exception model does not interoperate with C++
2279 exceptions at this time.  This means you cannot @code{@@throw} an exception
2280 from Objective-C and @code{catch} it in C++, or vice versa
2281 (i.e., @code{throw @dots{} @@catch}).
2282 @end itemize
2283
2284 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2285 blocks for thread-safe execution:
2286
2287 @smallexample
2288   @@synchronized (ObjCClass *guard) @{
2289     @dots{}
2290   @}
2291 @end smallexample
2292
2293 Upon entering the @code{@@synchronized} block, a thread of execution shall
2294 first check whether a lock has been placed on the corresponding @code{guard}
2295 object by another thread.  If it has, the current thread shall wait until
2296 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2297 the current thread will place its own lock on it, execute the code contained in
2298 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2299 making @code{guard} available to other threads).
2300
2301 Unlike Java, Objective-C does not allow for entire methods to be marked
2302 @code{@@synchronized}.  Note that throwing exceptions out of
2303 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2304 to be unlocked properly.
2305
2306 @item -fobjc-gc
2307 @opindex fobjc-gc
2308 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2309
2310 @item -freplace-objc-classes
2311 @opindex freplace-objc-classes
2312 Emit a special marker instructing @command{ld(1)} not to statically link in
2313 the resulting object file, and allow @command{dyld(1)} to load it in at
2314 run time instead.  This is used in conjunction with the Fix-and-Continue
2315 debugging mode, where the object file in question may be recompiled and
2316 dynamically reloaded in the course of program execution, without the need
2317 to restart the program itself.  Currently, Fix-and-Continue functionality
2318 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2319 and later.
2320
2321 @item -fzero-link
2322 @opindex fzero-link
2323 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2324 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2325 compile time) with static class references that get initialized at load time,
2326 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2327 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2328 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2329 for individual class implementations to be modified during program execution.
2330
2331 @item -gen-decls
2332 @opindex gen-decls
2333 Dump interface declarations for all classes seen in the source file to a
2334 file named @file{@var{sourcename}.decl}.
2335
2336 @item -Wassign-intercept
2337 @opindex Wassign-intercept
2338 Warn whenever an Objective-C assignment is being intercepted by the
2339 garbage collector.
2340
2341 @item -Wno-protocol
2342 @opindex Wno-protocol
2343 If a class is declared to implement a protocol, a warning is issued for
2344 every method in the protocol that is not implemented by the class.  The
2345 default behavior is to issue a warning for every method not explicitly
2346 implemented in the class, even if a method implementation is inherited
2347 from the superclass.  If you use the @option{-Wno-protocol} option, then
2348 methods inherited from the superclass are considered to be implemented,
2349 and no warning is issued for them.
2350
2351 @item -Wselector
2352 @opindex Wselector
2353 Warn if multiple methods of different types for the same selector are
2354 found during compilation.  The check is performed on the list of methods
2355 in the final stage of compilation.  Additionally, a check is performed
2356 for each selector appearing in a @code{@@selector(@dots{})}
2357 expression, and a corresponding method for that selector has been found
2358 during compilation.  Because these checks scan the method table only at
2359 the end of compilation, these warnings are not produced if the final
2360 stage of compilation is not reached, for example because an error is
2361 found during compilation, or because the @option{-fsyntax-only} option is
2362 being used.
2363
2364 @item -Wstrict-selector-match
2365 @opindex Wstrict-selector-match
2366 Warn if multiple methods with differing argument and/or return types are
2367 found for a given selector when attempting to send a message using this
2368 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2369 is off (which is the default behavior), the compiler will omit such warnings
2370 if any differences found are confined to types which share the same size
2371 and alignment.
2372
2373 @item -Wundeclared-selector
2374 @opindex Wundeclared-selector
2375 Warn if a @code{@@selector(@dots{})} expression referring to an
2376 undeclared selector is found.  A selector is considered undeclared if no
2377 method with that name has been declared before the
2378 @code{@@selector(@dots{})} expression, either explicitly in an
2379 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2380 an @code{@@implementation} section.  This option always performs its
2381 checks as soon as a @code{@@selector(@dots{})} expression is found,
2382 while @option{-Wselector} only performs its checks in the final stage of
2383 compilation.  This also enforces the coding style convention
2384 that methods and selectors must be declared before being used.
2385
2386 @item -print-objc-runtime-info
2387 @opindex print-objc-runtime-info
2388 Generate C header describing the largest structure that is passed by
2389 value, if any.
2390
2391 @end table
2392
2393 @node Language Independent Options
2394 @section Options to Control Diagnostic Messages Formatting
2395 @cindex options to control diagnostics formatting
2396 @cindex diagnostic messages
2397 @cindex message formatting
2398
2399 Traditionally, diagnostic messages have been formatted irrespective of
2400 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2401 below can be used to control the diagnostic messages formatting
2402 algorithm, e.g.@: how many characters per line, how often source location
2403 information should be reported.  Right now, only the C++ front end can
2404 honor these options.  However it is expected, in the near future, that
2405 the remaining front ends would be able to digest them correctly.
2406
2407 @table @gcctabopt
2408 @item -fmessage-length=@var{n}
2409 @opindex fmessage-length
2410 Try to format error messages so that they fit on lines of about @var{n}
2411 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2412 the front ends supported by GCC@.  If @var{n} is zero, then no
2413 line-wrapping will be done; each error message will appear on a single
2414 line.
2415
2416 @opindex fdiagnostics-show-location
2417 @item -fdiagnostics-show-location=once
2418 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2419 reporter to emit @emph{once} source location information; that is, in
2420 case the message is too long to fit on a single physical line and has to
2421 be wrapped, the source location won't be emitted (as prefix) again,
2422 over and over, in subsequent continuation lines.  This is the default
2423 behavior.
2424
2425 @item -fdiagnostics-show-location=every-line
2426 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2427 messages reporter to emit the same source location information (as
2428 prefix) for physical lines that result from the process of breaking
2429 a message which is too long to fit on a single line.
2430
2431 @item -fdiagnostics-show-option
2432 @opindex fdiagnostics-show-option
2433 This option instructs the diagnostic machinery to add text to each
2434 diagnostic emitted, which indicates which command line option directly
2435 controls that diagnostic, when such an option is known to the
2436 diagnostic machinery.
2437
2438 @item -Wcoverage-mismatch
2439 @opindex Wcoverage-mismatch
2440 Warn if feedback profiles do not match when using the
2441 @option{-fprofile-use} option.
2442 If a source file was changed between @option{-fprofile-gen} and
2443 @option{-fprofile-use}, the files with the profile feedback can fail
2444 to match the source file and GCC can not use the profile feedback
2445 information.  By default, GCC emits an error message in this case.
2446 The option @option{-Wcoverage-mismatch} emits a warning instead of an
2447 error.  GCC does not use appropriate feedback profiles, so using this
2448 option can result in poorly optimized code.  This option is useful
2449 only in the case of very minor changes such as bug fixes to an
2450 existing code-base.
2451
2452 @end table
2453
2454 @node Warning Options
2455 @section Options to Request or Suppress Warnings
2456 @cindex options to control warnings
2457 @cindex warning messages
2458 @cindex messages, warning
2459 @cindex suppressing warnings
2460
2461 Warnings are diagnostic messages that report constructions which
2462 are not inherently erroneous but which are risky or suggest there
2463 may have been an error.
2464
2465 You can request many specific warnings with options beginning @samp{-W},
2466 for example @option{-Wimplicit} to request warnings on implicit
2467 declarations.  Each of these specific warning options also has a
2468 negative form beginning @samp{-Wno-} to turn off warnings;
2469 for example, @option{-Wno-implicit}.  This manual lists only one of the
2470 two forms, whichever is not the default.
2471
2472 The following options control the amount and kinds of warnings produced
2473 by GCC; for further, language-specific options also refer to
2474 @ref{C++ Dialect Options} and @ref{Objective-C and Objective-C++ Dialect
2475 Options}.
2476
2477 @table @gcctabopt
2478 @cindex syntax checking
2479 @item -fsyntax-only
2480 @opindex fsyntax-only
2481 Check the code for syntax errors, but don't do anything beyond that.
2482
2483 @item -pedantic
2484 @opindex pedantic
2485 Issue all the warnings demanded by strict ISO C and ISO C++;
2486 reject all programs that use forbidden extensions, and some other
2487 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2488 version of the ISO C standard specified by any @option{-std} option used.
2489
2490 Valid ISO C and ISO C++ programs should compile properly with or without
2491 this option (though a rare few will require @option{-ansi} or a
2492 @option{-std} option specifying the required version of ISO C)@.  However,
2493 without this option, certain GNU extensions and traditional C and C++
2494 features are supported as well.  With this option, they are rejected.
2495
2496 @option{-pedantic} does not cause warning messages for use of the
2497 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2498 warnings are also disabled in the expression that follows
2499 @code{__extension__}.  However, only system header files should use
2500 these escape routes; application programs should avoid them.
2501 @xref{Alternate Keywords}.
2502
2503 Some users try to use @option{-pedantic} to check programs for strict ISO
2504 C conformance.  They soon find that it does not do quite what they want:
2505 it finds some non-ISO practices, but not all---only those for which
2506 ISO C @emph{requires} a diagnostic, and some others for which
2507 diagnostics have been added.
2508
2509 A feature to report any failure to conform to ISO C might be useful in
2510 some instances, but would require considerable additional work and would
2511 be quite different from @option{-pedantic}.  We don't have plans to
2512 support such a feature in the near future.
2513
2514 Where the standard specified with @option{-std} represents a GNU
2515 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2516 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2517 extended dialect is based.  Warnings from @option{-pedantic} are given
2518 where they are required by the base standard.  (It would not make sense
2519 for such warnings to be given only for features not in the specified GNU
2520 C dialect, since by definition the GNU dialects of C include all
2521 features the compiler supports with the given option, and there would be
2522 nothing to warn about.)
2523
2524 @item -pedantic-errors
2525 @opindex pedantic-errors
2526 Like @option{-pedantic}, except that errors are produced rather than
2527 warnings.
2528
2529 @item -w
2530 @opindex w
2531 Inhibit all warning messages.
2532
2533 @item -Wno-import
2534 @opindex Wno-import
2535 Inhibit warning messages about the use of @samp{#import}.
2536
2537 @item -Wchar-subscripts
2538 @opindex Wchar-subscripts
2539 Warn if an array subscript has type @code{char}.  This is a common cause
2540 of error, as programmers often forget that this type is signed on some
2541 machines.
2542 This warning is enabled by @option{-Wall}.
2543
2544 @item -Wcomment
2545 @opindex Wcomment
2546 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2547 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2548 This warning is enabled by @option{-Wall}.
2549
2550 @item -Wfatal-errors
2551 @opindex Wfatal-errors
2552 This option causes the compiler to abort compilation on the first error
2553 occurred rather than trying to keep going and printing further error
2554 messages.
2555
2556 @item -Wformat
2557 @opindex Wformat
2558 @opindex ffreestanding
2559 @opindex fno-builtin
2560 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2561 the arguments supplied have types appropriate to the format string
2562 specified, and that the conversions specified in the format string make
2563 sense.  This includes standard functions, and others specified by format
2564 attributes (@pxref{Function Attributes}), in the @code{printf},
2565 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2566 not in the C standard) families (or other target-specific families).
2567 Which functions are checked without format attributes having been
2568 specified depends on the standard version selected, and such checks of
2569 functions without the attribute specified are disabled by
2570 @option{-ffreestanding} or @option{-fno-builtin}.
2571
2572 The formats are checked against the format features supported by GNU
2573 libc version 2.2.  These include all ISO C90 and C99 features, as well
2574 as features from the Single Unix Specification and some BSD and GNU
2575 extensions.  Other library implementations may not support all these
2576 features; GCC does not support warning about features that go beyond a
2577 particular library's limitations.  However, if @option{-pedantic} is used
2578 with @option{-Wformat}, warnings will be given about format features not
2579 in the selected standard version (but not for @code{strfmon} formats,
2580 since those are not in any version of the C standard).  @xref{C Dialect
2581 Options,,Options Controlling C Dialect}.
2582
2583 Since @option{-Wformat} also checks for null format arguments for
2584 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2585
2586 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2587 aspects of format checking, the options @option{-Wformat-y2k},
2588 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2589 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2590 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2591
2592 @item -Wformat-y2k
2593 @opindex Wformat-y2k
2594 If @option{-Wformat} is specified, also warn about @code{strftime}
2595 formats which may yield only a two-digit year.
2596
2597 @item -Wno-format-extra-args
2598 @opindex Wno-format-extra-args
2599 If @option{-Wformat} is specified, do not warn about excess arguments to a
2600 @code{printf} or @code{scanf} format function.  The C standard specifies
2601 that such arguments are ignored.
2602
2603 Where the unused arguments lie between used arguments that are
2604 specified with @samp{$} operand number specifications, normally
2605 warnings are still given, since the implementation could not know what
2606 type to pass to @code{va_arg} to skip the unused arguments.  However,
2607 in the case of @code{scanf} formats, this option will suppress the
2608 warning if the unused arguments are all pointers, since the Single
2609 Unix Specification says that such unused arguments are allowed.
2610
2611 @item -Wno-format-zero-length
2612 @opindex Wno-format-zero-length
2613 If @option{-Wformat} is specified, do not warn about zero-length formats.
2614 The C standard specifies that zero-length formats are allowed.
2615
2616 @item -Wformat-nonliteral
2617 @opindex Wformat-nonliteral
2618 If @option{-Wformat} is specified, also warn if the format string is not a
2619 string literal and so cannot be checked, unless the format function
2620 takes its format arguments as a @code{va_list}.
2621
2622 @item -Wformat-security
2623 @opindex Wformat-security
2624 If @option{-Wformat} is specified, also warn about uses of format
2625 functions that represent possible security problems.  At present, this
2626 warns about calls to @code{printf} and @code{scanf} functions where the
2627 format string is not a string literal and there are no format arguments,
2628 as in @code{printf (foo);}.  This may be a security hole if the format
2629 string came from untrusted input and contains @samp{%n}.  (This is
2630 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2631 in future warnings may be added to @option{-Wformat-security} that are not
2632 included in @option{-Wformat-nonliteral}.)
2633
2634 @item -Wformat=2
2635 @opindex Wformat=2
2636 Enable @option{-Wformat} plus format checks not included in
2637 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2638 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2639
2640 @item -Wnonnull
2641 @opindex Wnonnull
2642 Warn about passing a null pointer for arguments marked as
2643 requiring a non-null value by the @code{nonnull} function attribute.
2644
2645 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2646 can be disabled with the @option{-Wno-nonnull} option.
2647
2648 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
2649 @opindex Winit-self
2650 Warn about uninitialized variables which are initialized with themselves.
2651 Note this option can only be used with the @option{-Wuninitialized} option,
2652 which in turn only works with @option{-O1} and above.
2653
2654 For example, GCC will warn about @code{i} being uninitialized in the
2655 following snippet only when @option{-Winit-self} has been specified:
2656 @smallexample
2657 @group
2658 int f()
2659 @{
2660   int i = i;
2661   return i;
2662 @}
2663 @end group
2664 @end smallexample
2665
2666 @item -Wimplicit-int
2667 @opindex Wimplicit-int
2668 Warn when a declaration does not specify a type.
2669 This warning is enabled by @option{-Wall}.
2670
2671 @item -Wimplicit-function-declaration
2672 @opindex Wimplicit-function-declaration
2673 @opindex Wno-implicit-function-declaration
2674 Give a warning whenever a function is used before being declared. In
2675 C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
2676 enabled by default and it is made into an error by
2677 @option{-pedantic-errors}. This warning is also enabled by
2678 @option{-Wall}.
2679
2680 @item -Wimplicit
2681 @opindex Wimplicit
2682 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2683 This warning is enabled by @option{-Wall}.
2684
2685 @item -Wmain
2686 @opindex Wmain
2687 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2688 function with external linkage, returning int, taking either zero
2689 arguments, two, or three arguments of appropriate types.
2690 This warning is enabled by @option{-Wall}.
2691
2692 @item -Wmissing-braces
2693 @opindex Wmissing-braces
2694 Warn if an aggregate or union initializer is not fully bracketed.  In
2695 the following example, the initializer for @samp{a} is not fully
2696 bracketed, but that for @samp{b} is fully bracketed.
2697
2698 @smallexample
2699 int a[2][2] = @{ 0, 1, 2, 3 @};
2700 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2701 @end smallexample
2702
2703 This warning is enabled by @option{-Wall}.
2704
2705 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
2706 @opindex Wmissing-include-dirs
2707 Warn if a user-supplied include directory does not exist.
2708
2709 @item -Wparentheses
2710 @opindex Wparentheses
2711 Warn if parentheses are omitted in certain contexts, such
2712 as when there is an assignment in a context where a truth value
2713 is expected, or when operators are nested whose precedence people
2714 often get confused about.
2715
2716 Also warn if a comparison like @samp{x<=y<=z} appears; this is
2717 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
2718 interpretation from that of ordinary mathematical notation.
2719
2720 Also warn about constructions where there may be confusion to which
2721 @code{if} statement an @code{else} branch belongs.  Here is an example of
2722 such a case:
2723
2724 @smallexample
2725 @group
2726 @{
2727   if (a)
2728     if (b)
2729       foo ();
2730   else
2731     bar ();
2732 @}
2733 @end group
2734 @end smallexample
2735
2736 In C/C++, every @code{else} branch belongs to the innermost possible
2737 @code{if} statement, which in this example is @code{if (b)}.  This is
2738 often not what the programmer expected, as illustrated in the above
2739 example by indentation the programmer chose.  When there is the
2740 potential for this confusion, GCC will issue a warning when this flag
2741 is specified.  To eliminate the warning, add explicit braces around
2742 the innermost @code{if} statement so there is no way the @code{else}
2743 could belong to the enclosing @code{if}.  The resulting code would
2744 look like this:
2745
2746 @smallexample
2747 @group
2748 @{
2749   if (a)
2750     @{
2751       if (b)
2752         foo ();
2753       else
2754         bar ();
2755     @}
2756 @}
2757 @end group
2758 @end smallexample
2759
2760 This warning is enabled by @option{-Wall}.
2761
2762 @item -Wsequence-point
2763 @opindex Wsequence-point
2764 Warn about code that may have undefined semantics because of violations
2765 of sequence point rules in the C and C++ standards.
2766
2767 The C and C++ standards defines the order in which expressions in a C/C++
2768 program are evaluated in terms of @dfn{sequence points}, which represent
2769 a partial ordering between the execution of parts of the program: those
2770 executed before the sequence point, and those executed after it.  These
2771 occur after the evaluation of a full expression (one which is not part
2772 of a larger expression), after the evaluation of the first operand of a
2773 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2774 function is called (but after the evaluation of its arguments and the
2775 expression denoting the called function), and in certain other places.
2776 Other than as expressed by the sequence point rules, the order of
2777 evaluation of subexpressions of an expression is not specified.  All
2778 these rules describe only a partial order rather than a total order,
2779 since, for example, if two functions are called within one expression
2780 with no sequence point between them, the order in which the functions
2781 are called is not specified.  However, the standards committee have
2782 ruled that function calls do not overlap.
2783
2784 It is not specified when between sequence points modifications to the
2785 values of objects take effect.  Programs whose behavior depends on this
2786 have undefined behavior; the C and C++ standards specify that ``Between
2787 the previous and next sequence point an object shall have its stored
2788 value modified at most once by the evaluation of an expression.
2789 Furthermore, the prior value shall be read only to determine the value
2790 to be stored.''.  If a program breaks these rules, the results on any
2791 particular implementation are entirely unpredictable.
2792
2793 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2794 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2795 diagnosed by this option, and it may give an occasional false positive
2796 result, but in general it has been found fairly effective at detecting
2797 this sort of problem in programs.
2798
2799 The standard is worded confusingly, therefore there is some debate
2800 over the precise meaning of the sequence point rules in subtle cases.
2801 Links to discussions of the problem, including proposed formal
2802 definitions, may be found on the GCC readings page, at
2803 @w{@uref{http://gcc.gnu.org/readings.html}}.
2804
2805 This warning is enabled by @option{-Wall} for C and C++.
2806
2807 @item -Wreturn-type
2808 @opindex Wreturn-type
2809 Warn whenever a function is defined with a return-type that defaults to
2810 @code{int}.  Also warn about any @code{return} statement with no
2811 return-value in a function whose return-type is not @code{void}.
2812
2813 Also warn if the return type of a function has a type qualifier
2814 such as @code{const}.  For ISO C such a type qualifier has no effect,
2815 since the value returned by a function is not an lvalue.
2816 For C++, the warning is only emitted for scalar types or @code{void}.
2817 ISO C prohibits qualified @code{void} return types on function
2818 definitions, so such return types always receive a warning
2819 even without this option.
2820
2821 For C++, a function without return type always produces a diagnostic
2822 message, even when @option{-Wno-return-type} is specified.  The only
2823 exceptions are @samp{main} and functions defined in system headers.
2824
2825 This warning is enabled by @option{-Wall}.
2826
2827 @item -Wswitch
2828 @opindex Wswitch
2829 Warn whenever a @code{switch} statement has an index of enumerated type
2830 and lacks a @code{case} for one or more of the named codes of that
2831 enumeration.  (The presence of a @code{default} label prevents this
2832 warning.)  @code{case} labels outside the enumeration range also
2833 provoke warnings when this option is used.
2834 This warning is enabled by @option{-Wall}.
2835
2836 @item -Wswitch-default
2837 @opindex Wswitch-switch
2838 Warn whenever a @code{switch} statement does not have a @code{default}
2839 case.
2840
2841 @item -Wswitch-enum
2842 @opindex Wswitch-enum
2843 Warn whenever a @code{switch} statement has an index of enumerated type
2844 and lacks a @code{case} for one or more of the named codes of that
2845 enumeration.  @code{case} labels outside the enumeration range also
2846 provoke warnings when this option is used.
2847
2848 @item -Wtrigraphs
2849 @opindex Wtrigraphs
2850 Warn if any trigraphs are encountered that might change the meaning of
2851 the program (trigraphs within comments are not warned about).
2852 This warning is enabled by @option{-Wall}.
2853
2854 @item -Wunused-function
2855 @opindex Wunused-function
2856 Warn whenever a static function is declared but not defined or a
2857 non-inline static function is unused.
2858 This warning is enabled by @option{-Wall}.
2859
2860 @item -Wunused-label
2861 @opindex Wunused-label
2862 Warn whenever a label is declared but not used.
2863 This warning is enabled by @option{-Wall}.
2864
2865 To suppress this warning use the @samp{unused} attribute
2866 (@pxref{Variable Attributes}).
2867
2868 @item -Wunused-parameter
2869 @opindex Wunused-parameter
2870 Warn whenever a function parameter is unused aside from its declaration.
2871
2872 To suppress this warning use the @samp{unused} attribute
2873 (@pxref{Variable Attributes}).
2874
2875 @item -Wunused-variable
2876 @opindex Wunused-variable
2877 Warn whenever a local variable or non-constant static variable is unused
2878 aside from its declaration.
2879 This warning is enabled by @option{-Wall}.
2880
2881 To suppress this warning use the @samp{unused} attribute
2882 (@pxref{Variable Attributes}).
2883
2884 @item -Wunused-value
2885 @opindex Wunused-value
2886 Warn whenever a statement computes a result that is explicitly not
2887 used. To suppress this warning cast the unused expression to
2888 @samp{void}. This includes an expression-statement or the left-hand
2889 side of a comma expression that contains no side effects. For example,
2890 an expression such as @samp{x[i,j]} will cause a warning, while
2891 @samp{x[(void)i,j]} will not.
2892
2893 This warning is enabled by @option{-Wall}.
2894
2895 @item -Wunused
2896 @opindex Wunused
2897 All the above @option{-Wunused} options combined.
2898
2899 In order to get a warning about an unused function parameter, you must
2900 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2901 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
2902
2903 @item -Wuninitialized
2904 @opindex Wuninitialized
2905 Warn if an automatic variable is used without first being initialized or
2906 if a variable may be clobbered by a @code{setjmp} call.
2907
2908 These warnings are possible only in optimizing compilation,
2909 because they require data flow information that is computed only
2910 when optimizing.  If you do not specify @option{-O}, you will not get
2911 these warnings. Instead, GCC will issue a warning about @option{-Wuninitialized}
2912 requiring @option{-O}.
2913
2914 If you want to warn about code which uses the uninitialized value of the
2915 variable in its own initializer, use the @option{-Winit-self} option.
2916
2917 These warnings occur for individual uninitialized or clobbered
2918 elements of structure, union or array variables as well as for
2919 variables which are uninitialized or clobbered as a whole.  They do
2920 not occur for variables or elements declared @code{volatile}.  Because
2921 these warnings depend on optimization, the exact variables or elements
2922 for which there are warnings will depend on the precise optimization
2923 options and version of GCC used.
2924
2925 Note that there may be no warning about a variable that is used only
2926 to compute a value that itself is never used, because such
2927 computations may be deleted by data flow analysis before the warnings
2928 are printed.
2929
2930 These warnings are made optional because GCC is not smart
2931 enough to see all the reasons why the code might be correct
2932 despite appearing to have an error.  Here is one example of how
2933 this can happen:
2934
2935 @smallexample
2936 @group
2937 @{
2938   int x;
2939   switch (y)
2940     @{
2941     case 1: x = 1;
2942       break;
2943     case 2: x = 4;
2944       break;
2945     case 3: x = 5;
2946     @}
2947   foo (x);
2948 @}
2949 @end group
2950 @end smallexample
2951
2952 @noindent
2953 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2954 always initialized, but GCC doesn't know this.  Here is
2955 another common case:
2956
2957 @smallexample
2958 @{
2959   int save_y;
2960   if (change_y) save_y = y, y = new_y;
2961   @dots{}
2962   if (change_y) y = save_y;
2963 @}
2964 @end smallexample
2965
2966 @noindent
2967 This has no bug because @code{save_y} is used only if it is set.
2968
2969 @cindex @code{longjmp} warnings
2970 This option also warns when a non-volatile automatic variable might be
2971 changed by a call to @code{longjmp}.  These warnings as well are possible
2972 only in optimizing compilation.
2973
2974 The compiler sees only the calls to @code{setjmp}.  It cannot know
2975 where @code{longjmp} will be called; in fact, a signal handler could
2976 call it at any point in the code.  As a result, you may get a warning
2977 even when there is in fact no problem because @code{longjmp} cannot
2978 in fact be called at the place which would cause a problem.
2979
2980 Some spurious warnings can be avoided if you declare all the functions
2981 you use that never return as @code{noreturn}.  @xref{Function
2982 Attributes}.
2983
2984 This warning is enabled by @option{-Wall}.
2985
2986 @item -Wunknown-pragmas
2987 @opindex Wunknown-pragmas
2988 @cindex warning for unknown pragmas
2989 @cindex unknown pragmas, warning
2990 @cindex pragmas, warning of unknown
2991 Warn when a #pragma directive is encountered which is not understood by
2992 GCC@.  If this command line option is used, warnings will even be issued
2993 for unknown pragmas in system header files.  This is not the case if
2994 the warnings were only enabled by the @option{-Wall} command line option.
2995
2996 @item -Wno-pragmas
2997 @opindex Wno-pragmas
2998 @opindex Wpragmas
2999 Do not warn about misuses of pragmas, such as incorrect parameters,
3000 invalid syntax, or conflicts between pragmas.  See also
3001 @samp{-Wunknown-pragmas}.
3002
3003 @item -Wstrict-aliasing
3004 @opindex Wstrict-aliasing
3005 This option is only active when @option{-fstrict-aliasing} is active.
3006 It warns about code which might break the strict aliasing rules that the
3007 compiler is using for optimization.  The warning does not catch all
3008 cases, but does attempt to catch the more common pitfalls.  It is
3009 included in @option{-Wall}.
3010
3011 @item -Wstrict-aliasing=2
3012 @opindex Wstrict-aliasing=2
3013 This option is only active when @option{-fstrict-aliasing} is active.
3014 It warns about code which might break the strict aliasing rules that the
3015 compiler is using for optimization.  This warning catches more cases than
3016 @option{-Wstrict-aliasing}, but it will also give a warning for some ambiguous
3017 cases that are safe.
3018
3019 @item -Wstrict-overflow
3020 @item -Wstrict-overflow=@var{n}
3021 @opindex Wstrict-overflow
3022 This option is only active when @option{-fstrict-overflow} is active.
3023 It warns about cases where the compiler optimizes based on the
3024 assumption that signed overflow does not occur.  Note that it does not
3025 warn about all cases where the code might overflow: it only warns
3026 about cases where the compiler implements some optimization.  Thus
3027 this warning depends on the optimization level.
3028
3029 An optimization which assumes that signed overflow does not occur is
3030 perfectly safe if the values of the variables involved are such that
3031 overflow never does, in fact, occur.  Therefore this warning can
3032 easily give a false positive: a warning about code which is not
3033 actually a problem.  To help focus on important issues, several
3034 warning levels are defined.  No warnings are issued for the use of
3035 undefined signed overflow when estimating how many iterations a loop
3036 will require, in particular when determining whether a loop will be
3037 executed at all.
3038
3039 @table @option
3040 @item -Wstrict-overflow=1
3041 Warn about cases which are both questionable and easy to avoid.  For
3042 example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
3043 compiler will simplify this to @code{1}.  This level of
3044 @option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3045 are not, and must be explicitly requested.
3046
3047 @item -Wstrict-overflow=2
3048 Also warn about other cases where a comparison is simplified to a
3049 constant.  For example: @code{abs (x) >= 0}.  This can only be
3050 simplified when @option{-fstrict-overflow} is in effect, because
3051 @code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3052 zero.  @option{-Wstrict-overflow} (with no level) is the same as
3053 @option{-Wstrict-overflow=2}.
3054
3055 @item -Wstrict-overflow=3
3056 Also warn about other cases where a comparison is simplified.  For
3057 example: @code{x + 1 > 1} will be simplified to @code{x > 0}.
3058
3059 @item -Wstrict-overflow=4
3060 Also warn about other simplifications not covered by the above cases.
3061 For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.
3062
3063 @item -Wstrict-overflow=5
3064 Also warn about cases where the compiler reduces the magnitude of a
3065 constant involved in a comparison.  For example: @code{x + 2 > y} will
3066 be simplified to @code{x + 1 >= y}.  This is reported only at the
3067 highest warning level because this simplification applies to many
3068 comparisons, so this warning level will give a very large number of
3069 false positives.
3070 @end table
3071
3072 @item -Warray-bounds
3073 @opindex Wno-array-bounds
3074 @opindex Warray-bounds
3075 This option is only active when @option{-ftree-vrp} is active
3076 (default for -O2 and above). It warns about subscripts to arrays
3077 that are always out of bounds. This warning is enabled by @option{-Wall}.
3078
3079 @item -Wall
3080 @opindex Wall
3081 All of the above @samp{-W} options combined.  This enables all the
3082 warnings about constructions that some users consider questionable, and
3083 that are easy to avoid (or modify to prevent the warning), even in
3084 conjunction with macros.  This also enables some language-specific
3085 warnings described in @ref{C++ Dialect Options} and
3086 @ref{Objective-C and Objective-C++ Dialect Options}.
3087 @end table
3088
3089 The following @option{-W@dots{}} options are not implied by @option{-Wall}.
3090 Some of them warn about constructions that users generally do not
3091 consider questionable, but which occasionally you might wish to check
3092 for; others warn about constructions that are necessary or hard to avoid
3093 in some cases, and there is no simple way to modify the code to suppress
3094 the warning.
3095
3096 @table @gcctabopt
3097 @item -Wextra
3098 @opindex W
3099 @opindex Wextra
3100 (This option used to be called @option{-W}.  The older name is still
3101 supported, but the newer name is more descriptive.)  Print extra warning
3102 messages for these events:
3103
3104 @itemize @bullet
3105 @item
3106 A function can return either with or without a value.  (Falling
3107 off the end of the function body is considered returning without
3108 a value.)  For example, this function would evoke such a
3109 warning:
3110
3111 @smallexample
3112 @group
3113 foo (a)
3114 @{
3115   if (a > 0)
3116     return a;
3117 @}
3118 @end group
3119 @end smallexample
3120
3121 @item
3122 An unsigned value is compared against zero with @samp{<} or @samp{>=}.
3123
3124 @item @r{(C only)}
3125 Storage-class specifiers like @code{static} are not the first things
3126 in a declaration.  According to the C Standard, this usage is
3127 obsolescent.  This warning can be independently controlled by
3128 @option{-Wold-style-declaration}.
3129
3130 @item
3131 If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
3132 arguments.
3133
3134 @item
3135 A comparison between signed and unsigned values could produce an
3136 incorrect result when the signed value is converted to unsigned.
3137 (But don't warn if @option{-Wno-sign-compare} is also specified.)
3138
3139 @item
3140 An aggregate has an initializer which does not initialize all members.
3141 This warning can be independently controlled by
3142 @option{-Wmissing-field-initializers}.
3143
3144 @item
3145 An initialized field without side effects is overridden when using
3146 designated initializers (@pxref{Designated Inits, , Designated
3147 Initializers}).  This warning can be independently controlled by
3148 @option{-Woverride-init}.
3149
3150 @item @r{(C only)}
3151 A function parameter is declared without a type specifier in K&R-style
3152 functions.  This warning can be independently controlled by
3153 @option{-Wmissing-parameter-type}.
3154
3155 @item
3156 An empty body occurs in an @samp{if}, @samp{else} or
3157 @samp{do while} statement. This warning can be independently
3158 controlled by @option{-Wempty-body}.
3159
3160 @item
3161 A pointer is compared against integer zero with @samp{<}, @samp{<=},
3162 @samp{>}, or @samp{>=}.
3163
3164 @item
3165 A variable might be changed by @samp{longjmp} or @samp{vfork}.
3166 This warning can be independently controlled by @option{-Wclobbered}.
3167
3168 @item @r{(C++ only)}
3169 An enumerator and a non-enumerator both appear in a conditional expression.
3170
3171 @item @r{(C++ only)}
3172 A non-static reference or non-static @samp{const} member appears in a
3173 class without constructors.
3174
3175 @item @r{(C++ only)}
3176 Ambiguous virtual bases.
3177
3178 @item @r{(C++ only)}
3179 Subscripting an array which has been declared @samp{register}.
3180
3181 @item @r{(C++ only)}
3182 Taking the address of a variable which has been declared @samp{register}.
3183
3184 @item @r{(C++ only)}
3185 A base class is not initialized in a derived class' copy constructor.
3186 @end itemize
3187
3188 @item -Wno-div-by-zero
3189 @opindex Wno-div-by-zero
3190 @opindex Wdiv-by-zero
3191 Do not warn about compile-time integer division by zero.  Floating point
3192 division by zero is not warned about, as it can be a legitimate way of
3193 obtaining infinities and NaNs.
3194
3195 @item -Wsystem-headers
3196 @opindex Wsystem-headers
3197 @cindex warnings from system headers
3198 @cindex system headers, warnings from
3199 Print warning messages for constructs found in system header files.
3200 Warnings from system headers are normally suppressed, on the assumption
3201 that they usually do not indicate real problems and would only make the
3202 compiler output harder to read.  Using this command line option tells
3203 GCC to emit warnings from system headers as if they occurred in user
3204 code.  However, note that using @option{-Wall} in conjunction with this
3205 option will @emph{not} warn about unknown pragmas in system
3206 headers---for that, @option{-Wunknown-pragmas} must also be used.
3207
3208 @item -Wfloat-equal
3209 @opindex Wfloat-equal
3210 Warn if floating point values are used in equality comparisons.
3211
3212 The idea behind this is that sometimes it is convenient (for the
3213 programmer) to consider floating-point values as approximations to
3214 infinitely precise real numbers.  If you are doing this, then you need
3215 to compute (by analyzing the code, or in some other way) the maximum or
3216 likely maximum error that the computation introduces, and allow for it
3217 when performing comparisons (and when producing output, but that's a
3218 different problem).  In particular, instead of testing for equality, you
3219 would check to see whether the two values have ranges that overlap; and
3220 this is done with the relational operators, so equality comparisons are
3221 probably mistaken.
3222
3223 @item -Wtraditional @r{(C only)}
3224 @opindex Wtraditional
3225 Warn about certain constructs that behave differently in traditional and
3226 ISO C@.  Also warn about ISO C constructs that have no traditional C
3227 equivalent, and/or problematic constructs which should be avoided.
3228
3229 @itemize @bullet
3230 @item
3231 Macro parameters that appear within string literals in the macro body.
3232 In traditional C macro replacement takes place within string literals,
3233 but does not in ISO C@.
3234
3235 @item
3236 In traditional C, some preprocessor directives did not exist.
3237 Traditional preprocessors would only consider a line to be a directive
3238 if the @samp{#} appeared in column 1 on the line.  Therefore
3239 @option{-Wtraditional} warns about directives that traditional C
3240 understands but would ignore because the @samp{#} does not appear as the
3241 first character on the line.  It also suggests you hide directives like
3242 @samp{#pragma} not understood by traditional C by indenting them.  Some
3243 traditional implementations would not recognize @samp{#elif}, so it
3244 suggests avoiding it altogether.
3245
3246 @item
3247 A function-like macro that appears without arguments.
3248
3249 @item
3250 The unary plus operator.
3251
3252 @item
3253 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3254 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3255 constants.)  Note, these suffixes appear in macros defined in the system
3256 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3257 Use of these macros in user code might normally lead to spurious
3258 warnings, however GCC's integrated preprocessor has enough context to
3259 avoid warning in these cases.
3260
3261 @item
3262 A function declared external in one block and then used after the end of
3263 the block.
3264
3265 @item
3266 A @code{switch} statement has an operand of type @code{long}.
3267
3268 @item
3269 A non-@code{static} function declaration follows a @code{static} one.
3270 This construct is not accepted by some traditional C compilers.
3271
3272 @item
3273 The ISO type of an integer constant has a different width or
3274 signedness from its traditional type.  This warning is only issued if
3275 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3276 typically represent bit patterns, are not warned about.
3277
3278 @item
3279 Usage of ISO string concatenation is detected.
3280
3281 @item
3282 Initialization of automatic aggregates.
3283
3284 @item
3285 Identifier conflicts with labels.  Traditional C lacks a separate
3286 namespace for labels.
3287
3288 @item
3289 Initialization of unions.  If the initializer is zero, the warning is
3290 omitted.  This is done under the assumption that the zero initializer in
3291 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3292 initializer warnings and relies on default initialization to zero in the
3293 traditional C case.
3294
3295 @item
3296 Conversions by prototypes between fixed/floating point values and vice
3297 versa.  The absence of these prototypes when compiling with traditional
3298 C would cause serious problems.  This is a subset of the possible
3299 conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3300
3301 @item
3302 Use of ISO C style function definitions.  This warning intentionally is
3303 @emph{not} issued for prototype declarations or variadic functions
3304 because these ISO C features will appear in your code when using
3305 libiberty's traditional C compatibility macros, @code{PARAMS} and
3306 @code{VPARAMS}.  This warning is also bypassed for nested functions
3307 because that feature is already a GCC extension and thus not relevant to
3308 traditional C compatibility.
3309 @end itemize
3310
3311 @item -Wtraditional-conversion @r{(C only)}
3312 @opindex Wtraditional-conversion
3313 Warn if a prototype causes a type conversion that is different from what
3314 would happen to the same argument in the absence of a prototype.  This
3315 includes conversions of fixed point to floating and vice versa, and
3316 conversions changing the width or signedness of a fixed point argument
3317 except when the same as the default promotion.
3318
3319 @item -Wdeclaration-after-statement @r{(C only)}
3320 @opindex Wdeclaration-after-statement
3321 Warn when a declaration is found after a statement in a block.  This
3322 construct, known from C++, was introduced with ISO C99 and is by default
3323 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3324 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3325
3326 @item -Wundef
3327 @opindex Wundef
3328 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3329
3330 @item -Wno-endif-labels
3331 @opindex Wno-endif-labels
3332 @opindex Wendif-labels
3333 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3334
3335 @item -Wshadow
3336 @opindex Wshadow
3337 Warn whenever a local variable shadows another local variable, parameter or
3338 global variable or whenever a built-in function is shadowed.
3339
3340 @item -Wlarger-than-@var{len}
3341 @opindex Wlarger-than
3342 Warn whenever an object of larger than @var{len} bytes is defined.
3343
3344 @item -Wunsafe-loop-optimizations
3345 @opindex Wunsafe-loop-optimizations
3346 Warn if the loop cannot be optimized because the compiler could not
3347 assume anything on the bounds of the loop indices.  With
3348 @option{-funsafe-loop-optimizations} warn if the compiler made
3349 such assumptions.
3350
3351 @item -Wpointer-arith
3352 @opindex Wpointer-arith
3353 Warn about anything that depends on the ``size of'' a function type or
3354 of @code{void}.  GNU C assigns these types a size of 1, for
3355 convenience in calculations with @code{void *} pointers and pointers
3356 to functions.  In C++, warn also when an arithmetic operation involves
3357 @code{NULL}.  This warning is also enabled by @option{-pedantic}.
3358
3359 @item -Wbad-function-cast @r{(C only)}
3360 @opindex Wbad-function-cast
3361 Warn whenever a function call is cast to a non-matching type.
3362 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3363
3364 @item -Wc++-compat
3365 Warn about ISO C constructs that are outside of the common subset of
3366 ISO C and ISO C++, e.g.@: request for implicit conversion from
3367 @code{void *} to a pointer to non-@code{void} type.
3368
3369 @item -Wc++0x-compat @r{(C++ and Objective-C++ only)}
3370 Warn about C++ constructs whose meaning differs between ISO C++ 1998 and
3371 ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will become keywords
3372 in ISO C++ 200x.  This warning is enabled by @option{-Wall}.
3373
3374 @item -Wcast-qual
3375 @opindex Wcast-qual
3376 Warn whenever a pointer is cast so as to remove a type qualifier from
3377 the target type.  For example, warn if a @code{const char *} is cast
3378 to an ordinary @code{char *}.
3379
3380 @item -Wcast-align
3381 @opindex Wcast-align
3382 Warn whenever a pointer is cast such that the required alignment of the
3383 target is increased.  For example, warn if a @code{char *} is cast to
3384 an @code{int *} on machines where integers can only be accessed at
3385 two- or four-byte boundaries.
3386
3387 @item -Wwrite-strings
3388 @opindex Wwrite-strings
3389 When compiling C, give string constants the type @code{const
3390 char[@var{length}]} so that
3391 copying the address of one into a non-@code{const} @code{char *}
3392 pointer will get a warning; when compiling C++, warn about the
3393 deprecated conversion from string literals to @code{char *}.  This
3394 warning, by default, is enabled for C++ programs.
3395 These warnings will help you find at
3396 compile time code that can try to write into a string constant, but
3397 only if you have been very careful about using @code{const} in
3398 declarations and prototypes.  Otherwise, it will just be a nuisance;
3399 this is why we did not make @option{-Wall} request these warnings.
3400
3401 @item -Wclobbered
3402 @opindex Wclobbered
3403 Warn for variables that might be changed by @samp{longjmp} or
3404 @samp{vfork}.  This warning is also enabled by @option{-Wextra}.
3405
3406 @item -Wconversion
3407 @opindex Wconversion
3408 Warn for implicit conversions that may alter a value. This includes
3409 conversions between real and integer, like @code{abs (x)} when
3410 @code{x} is @code{double}; conversions between signed and unsigned,
3411 like @code{unsigned ui = -1}; and conversions to smaller types, like
3412 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3413 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3414 changed by the conversion like in @code{abs (2.0)}.
3415
3416 For C++, also warn for conversions between @code{NULL} and non-pointer
3417 types; confusing overload resolution for user-defined conversions; and
3418 conversions that will never use a type conversion operator:
3419 conversions to @code{void}, the same type, a base class or a reference
3420 to them.
3421
3422 @item -Wempty-body
3423 @opindex Wempty-body
3424 An empty body occurs in an @samp{if}, @samp{else} or @samp{do while}
3425 statement.  This warning is also enabled by @option{-Wextra}.
3426
3427 @item -Wsign-compare
3428 @opindex Wsign-compare
3429 @cindex warning for comparison of signed and unsigned values
3430 @cindex comparison of signed and unsigned values, warning
3431 @cindex signed and unsigned values, comparison warning
3432 Warn when a comparison between signed and unsigned values could produce
3433 an incorrect result when the signed value is converted to unsigned.
3434 This warning is also enabled by @option{-Wextra}; to get the other warnings
3435 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3436
3437 @item -Waddress
3438 @opindex Waddress
3439 @opindex Wno-address
3440 Warn about suspicious uses of memory addresses. These include using
3441 the address of a function in a conditional expression, such as
3442 @code{void func(void); if (func)}, and comparisons against the memory
3443 address of a string literal, such as @code{if (x == "abc")}.  Such
3444 uses typically indicate a programmer error: the address of a function
3445 always evaluates to true, so their use in a conditional usually
3446 indicate that the programmer forgot the parentheses in a function
3447 call; and comparisons against string literals result in unspecified
3448 behavior and are not portable in C, so they usually indicate that the
3449 programmer intended to use @code{strcmp}.  This warning is enabled by
3450 @option{-Wall}.
3451
3452 @item -Wlogical-op
3453 @opindex Wlogical-op
3454 @opindex Wno-logical-op
3455 Warn about suspicious uses of logical operators in expressions.
3456 This includes using logical operators in contexts where a
3457 bit-wise operator is likely to be expected.
3458
3459 @item -Waggregate-return
3460 @opindex Waggregate-return
3461 Warn if any functions that return structures or unions are defined or
3462 called.  (In languages where you can return an array, this also elicits
3463 a warning.)
3464
3465 @item -Wno-attributes
3466 @opindex Wno-attributes
3467 @opindex Wattributes
3468 Do not warn if an unexpected @code{__attribute__} is used, such as
3469 unrecognized attributes, function attributes applied to variables,
3470 etc.  This will not stop errors for incorrect use of supported
3471 attributes.
3472
3473 @item -Wstrict-prototypes @r{(C only)}
3474 @opindex Wstrict-prototypes
3475 Warn if a function is declared or defined without specifying the
3476 argument types.  (An old-style function definition is permitted without
3477 a warning if preceded by a declaration which specifies the argument
3478 types.)
3479
3480 @item -Wold-style-declaration @r{(C only)}
3481 @opindex Wold-style-declaration
3482 Warn for obsolescent usages, according to the C Standard, in a
3483 declaration. For example, warn if storage-class specifiers like
3484 @code{static} are not the first things in a declaration.  This warning
3485 is also enabled by @option{-Wextra}.
3486
3487 @item -Wold-style-definition @r{(C only)}
3488 @opindex Wold-style-definition
3489 Warn if an old-style function definition is used.  A warning is given
3490 even if there is a previous prototype.
3491
3492 @item -Wmissing-parameter-type @r{(C only)}
3493 @opindex Wmissing-parameter-type
3494 A function parameter is declared without a type specifier in K&R-style
3495 functions:
3496
3497 @smallexample
3498 void foo(bar) @{ @}
3499 @end smallexample
3500
3501 This warning is also enabled by @option{-Wextra}.
3502
3503 @item -Wmissing-prototypes @r{(C only)}
3504 @opindex Wmissing-prototypes
3505 Warn if a global function is defined without a previous prototype
3506 declaration.  This warning is issued even if the definition itself
3507 provides a prototype.  The aim is to detect global functions that fail
3508 to be declared in header files.
3509
3510 @item -Wmissing-declarations @r{(C and C++ only)}
3511 @opindex Wmissing-declarations
3512 Warn if a global function is defined without a previous declaration.
3513 Do so even if the definition itself provides a prototype.
3514 Use this option to detect global functions that are not declared in
3515 header files.  In C++, no warnings are issued for function templates,
3516 or for inline functions, or for functions in anonymous namespaces.
3517
3518 @item -Wmissing-field-initializers
3519 @opindex Wmissing-field-initializers
3520 @opindex W
3521 @opindex Wextra
3522 Warn if a structure's initializer has some fields missing.  For
3523 example, the following code would cause such a warning, because
3524 @code{x.h} is implicitly zero:
3525
3526 @smallexample
3527 struct s @{ int f, g, h; @};
3528 struct s x = @{ 3, 4 @};
3529 @end smallexample
3530
3531 This option does not warn about designated initializers, so the following
3532 modification would not trigger a warning:
3533
3534 @smallexample
3535 struct s @{ int f, g, h; @};
3536 struct s x = @{ .f = 3, .g = 4 @};
3537 @end smallexample
3538
3539 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
3540 warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
3541
3542 @item -Wmissing-noreturn
3543 @opindex Wmissing-noreturn
3544 Warn about functions which might be candidates for attribute @code{noreturn}.
3545 Note these are only possible candidates, not absolute ones.  Care should
3546 be taken to manually verify functions actually do not ever return before
3547 adding the @code{noreturn} attribute, otherwise subtle code generation
3548 bugs could be introduced.  You will not get a warning for @code{main} in
3549 hosted C environments.
3550
3551 @item -Wmissing-format-attribute
3552 @opindex Wmissing-format-attribute
3553 @opindex Wformat
3554 Warn about function pointers which might be candidates for @code{format}
3555 attributes.  Note these are only possible candidates, not absolute ones.
3556 GCC will guess that function pointers with @code{format} attributes that
3557 are used in assignment, initialization, parameter passing or return
3558 statements should have a corresponding @code{format} attribute in the
3559 resulting type.  I.e.@: the left-hand side of the assignment or
3560 initialization, the type of the parameter variable, or the return type
3561 of the containing function respectively should also have a @code{format}
3562 attribute to avoid the warning.
3563
3564 GCC will also warn about function definitions which might be
3565 candidates for @code{format} attributes.  Again, these are only
3566 possible candidates.  GCC will guess that @code{format} attributes
3567 might be appropriate for any function that calls a function like
3568 @code{vprintf} or @code{vscanf}, but this might not always be the
3569 case, and some functions for which @code{format} attributes are
3570 appropriate may not be detected.
3571
3572 @item -Wno-multichar
3573 @opindex Wno-multichar
3574 @opindex Wmultichar
3575 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
3576 Usually they indicate a typo in the user's code, as they have
3577 implementation-defined values, and should not be used in portable code.
3578
3579 @item -Wnormalized=<none|id|nfc|nfkc>
3580 @opindex Wnormalized
3581 @cindex NFC
3582 @cindex NFKC
3583 @cindex character set, input normalization
3584 In ISO C and ISO C++, two identifiers are different if they are
3585 different sequences of characters.  However, sometimes when characters
3586 outside the basic ASCII character set are used, you can have two
3587 different character sequences that look the same.  To avoid confusion,
3588 the ISO 10646 standard sets out some @dfn{normalization rules} which
3589 when applied ensure that two sequences that look the same are turned into
3590 the same sequence.  GCC can warn you if you are using identifiers which
3591 have not been normalized; this option controls that warning.
3592
3593 There are four levels of warning that GCC supports.  The default is
3594 @option{-Wnormalized=nfc}, which warns about any identifier which is
3595 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
3596 recommended form for most uses.
3597
3598 Unfortunately, there are some characters which ISO C and ISO C++ allow
3599 in identifiers that when turned into NFC aren't allowable as
3600 identifiers.  That is, there's no way to use these symbols in portable
3601 ISO C or C++ and have all your identifiers in NFC.
3602 @option{-Wnormalized=id} suppresses the warning for these characters.
3603 It is hoped that future versions of the standards involved will correct
3604 this, which is why this option is not the default.
3605
3606 You can switch the warning off for all characters by writing
3607 @option{-Wnormalized=none}.  You would only want to do this if you
3608 were using some other normalization scheme (like ``D''), because
3609 otherwise you can easily create bugs that are literally impossible to see.
3610
3611 Some characters in ISO 10646 have distinct meanings but look identical
3612 in some fonts or display methodologies, especially once formatting has
3613 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
3614 LETTER N'', will display just like a regular @code{n} which has been
3615 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
3616 normalization scheme to convert all these into a standard form as
3617 well, and GCC will warn if your code is not in NFKC if you use
3618 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
3619 about every identifier that contains the letter O because it might be
3620 confused with the digit 0, and so is not the default, but may be
3621 useful as a local coding convention if the programming environment is
3622 unable to be fixed to display these characters distinctly.
3623
3624 @item -Wno-deprecated-declarations
3625 @opindex Wno-deprecated-declarations
3626 Do not warn about uses of functions (@pxref{Function Attributes}),
3627 variables (@pxref{Variable Attributes}), and types (@pxref{Type
3628 Attributes}) marked as deprecated by using the @code{deprecated}
3629 attribute.
3630
3631 @item -Wno-overflow
3632 @opindex Wno-overflow
3633 Do not warn about compile-time overflow in constant expressions.
3634
3635 @item -Woverride-init
3636 @opindex Woverride-init
3637 @opindex W
3638 @opindex Wextra
3639 Warn if an initialized field without side effects is overridden when
3640 using designated initializers (@pxref{Designated Inits, , Designated
3641 Initializers}).
3642
3643 This warning is included in @option{-Wextra}.  To get other
3644 @option{-Wextra} warnings without this one, use @samp{-Wextra
3645 -Wno-override-init}.
3646
3647 @item -Wpacked
3648 @opindex Wpacked
3649 Warn if a structure is given the packed attribute, but the packed
3650 attribute has no effect on the layout or size of the structure.
3651 Such structures may be mis-aligned for little benefit.  For
3652 instance, in this code, the variable @code{f.x} in @code{struct bar}
3653 will be misaligned even though @code{struct bar} does not itself
3654 have the packed attribute:
3655
3656 @smallexample
3657 @group
3658 struct foo @{
3659   int x;
3660   char a, b, c, d;
3661 @} __attribute__((packed));
3662 struct bar @{
3663   char z;
3664   struct foo f;
3665 @};
3666 @end group
3667 @end smallexample
3668
3669 @item -Wpadded
3670 @opindex Wpadded
3671 Warn if padding is included in a structure, either to align an element
3672 of the structure or to align the whole structure.  Sometimes when this
3673 happens it is possible to rearrange the fields of the structure to
3674 reduce the padding and so make the structure smaller.
3675
3676 @item -Wredundant-decls
3677 @opindex Wredundant-decls
3678 Warn if anything is declared more than once in the same scope, even in
3679 cases where multiple declaration is valid and changes nothing.
3680
3681 @item -Wnested-externs @r{(C only)}
3682 @opindex Wnested-externs
3683 Warn if an @code{extern} declaration is encountered within a function.
3684
3685 @item -Wunreachable-code
3686 @opindex Wunreachable-code
3687 Warn if the compiler detects that code will never be executed.
3688
3689 This option is intended to warn when the compiler detects that at
3690 least a whole line of source code will never be executed, because
3691 some condition is never satisfied or because it is after a
3692 procedure that never returns.
3693
3694 It is possible for this option to produce a warning even though there
3695 are circumstances under which part of the affected line can be executed,
3696 so care should be taken when removing apparently-unreachable code.
3697
3698 For instance, when a function is inlined, a warning may mean that the
3699 line is unreachable in only one inlined copy of the function.
3700
3701 This option is not made part of @option{-Wall} because in a debugging
3702 version of a program there is often substantial code which checks
3703 correct functioning of the program and is, hopefully, unreachable
3704 because the program does work.  Another common use of unreachable
3705 code is to provide behavior which is selectable at compile-time.
3706
3707 @item -Winline
3708 @opindex Winline
3709 Warn if a function can not be inlined and it was declared as inline.
3710 Even with this option, the compiler will not warn about failures to
3711 inline functions declared in system headers.
3712
3713 The compiler uses a variety of heuristics to determine whether or not
3714 to inline a function.  For example, the compiler takes into account
3715 the size of the function being inlined and the amount of inlining
3716 that has already been done in the current function.  Therefore,
3717 seemingly insignificant changes in the source program can cause the
3718 warnings produced by @option{-Winline} to appear or disappear.
3719
3720 @item -Wno-invalid-offsetof @r{(C++ only)}
3721 @opindex Wno-invalid-offsetof
3722 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
3723 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
3724 to a non-POD type is undefined.  In existing C++ implementations,
3725 however, @samp{offsetof} typically gives meaningful results even when
3726 applied to certain kinds of non-POD types. (Such as a simple
3727 @samp{struct} that fails to be a POD type only by virtue of having a
3728 constructor.)  This flag is for users who are aware that they are
3729 writing nonportable code and who have deliberately chosen to ignore the
3730 warning about it.
3731
3732 The restrictions on @samp{offsetof} may be relaxed in a future version
3733 of the C++ standard.
3734
3735 @item -Wno-int-to-pointer-cast @r{(C only)}
3736 @opindex Wno-int-to-pointer-cast
3737 Suppress warnings from casts to pointer type of an integer of a
3738 different size.
3739
3740 @item -Wno-pointer-to-int-cast @r{(C only)}
3741 @opindex Wno-pointer-to-int-cast
3742 Suppress warnings from casts from a pointer to an integer type of a
3743 different size.
3744
3745 @item -Winvalid-pch
3746 @opindex Winvalid-pch
3747 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
3748 the search path but can't be used.
3749
3750 @item -Wlong-long
3751 @opindex Wlong-long
3752 @opindex Wno-long-long
3753 Warn if @samp{long long} type is used.  This is default.  To inhibit
3754 the warning messages, use @option{-Wno-long-long}.  Flags
3755 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
3756 only when @option{-pedantic} flag is used.
3757
3758 @item -Wvariadic-macros
3759 @opindex Wvariadic-macros
3760 @opindex Wno-variadic-macros
3761 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
3762 alternate syntax when in pedantic ISO C99 mode.  This is default.
3763 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
3764
3765 @item -Wvla
3766 @opindex Wvla
3767 @opindex Wno-vla
3768 Warn if variable length array is used in the code.
3769 @option{-Wno-vla} will prevent the @option{-pedantic} warning of
3770 the variable length array.
3771
3772 @item -Wvolatile-register-var
3773 @opindex Wvolatile-register-var
3774 @opindex Wno-volatile-register-var
3775 Warn if a register variable is declared volatile.  The volatile
3776 modifier does not inhibit all optimizations that may eliminate reads
3777 and/or writes to register variables.
3778
3779 @item -Wdisabled-optimization
3780 @opindex Wdisabled-optimization
3781 Warn if a requested optimization pass is disabled.  This warning does
3782 not generally indicate that there is anything wrong with your code; it
3783 merely indicates that GCC's optimizers were unable to handle the code
3784 effectively.  Often, the problem is that your code is too big or too
3785 complex; GCC will refuse to optimize programs when the optimization
3786 itself is likely to take inordinate amounts of time.
3787
3788 @item -Wpointer-sign
3789 @opindex Wpointer-sign
3790 @opindex Wno-pointer-sign
3791 Warn for pointer argument passing or assignment with different signedness.
3792 This option is only supported for C and Objective-C@.  It is implied by
3793 @option{-Wall} and by @option{-pedantic}, which can be disabled with
3794 @option{-Wno-pointer-sign}.
3795
3796 @item -Werror
3797 @opindex Werror
3798 Make all warnings into errors.
3799
3800 @item -Werror=
3801 @opindex Werror=
3802 Make the specified warning into an errors.  The specifier for a
3803 warning is appended, for example @option{-Werror=switch} turns the
3804 warnings controlled by @option{-Wswitch} into errors.  This switch
3805 takes a negative form, to be used to negate @option{-Werror} for
3806 specific warnings, for example @option{-Wno-error=switch} makes
3807 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
3808 is in effect.  You can use the @option{-fdiagnostics-show-option}
3809 option to have each controllable warning amended with the option which
3810 controls it, to determine what to use with this option.
3811
3812 Note that specifying @option{-Werror=}@var{foo} automatically implies
3813 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3814 imply anything.
3815
3816 @item -Wstack-protector
3817 @opindex Wstack-protector
3818 This option is only active when @option{-fstack-protector} is active.  It
3819 warns about functions that will not be protected against stack smashing.
3820
3821 @item -Woverlength-strings
3822 @opindex Woverlength-strings
3823 Warn about string constants which are longer than the ``minimum
3824 maximum'' length specified in the C standard.  Modern compilers
3825 generally allow string constants which are much longer than the
3826 standard's minimum limit, but very portable programs should avoid
3827 using longer strings.
3828
3829 The limit applies @emph{after} string constant concatenation, and does
3830 not count the trailing NUL@.  In C89, the limit was 509 characters; in
3831 C99, it was raised to 4095.  C++98 does not specify a normative
3832 minimum maximum, so we do not diagnose overlength strings in C++@.
3833
3834 This option is implied by @option{-pedantic}, and can be disabled with
3835 @option{-Wno-overlength-strings}.
3836 @end table
3837
3838 @node Debugging Options
3839 @section Options for Debugging Your Program or GCC
3840 @cindex options, debugging
3841 @cindex debugging information options
3842
3843 GCC has various special options that are used for debugging
3844 either your program or GCC:
3845
3846 @table @gcctabopt
3847 @item -g
3848 @opindex g
3849 Produce debugging information in the operating system's native format
3850 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
3851 information.
3852
3853 On most systems that use stabs format, @option{-g} enables use of extra
3854 debugging information that only GDB can use; this extra information
3855 makes debugging work better in GDB but will probably make other debuggers
3856 crash or
3857 refuse to read the program.  If you want to control for certain whether
3858 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
3859 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
3860
3861 GCC allows you to use @option{-g} with
3862 @option{-O}.  The shortcuts taken by optimized code may occasionally
3863 produce surprising results: some variables you declared may not exist
3864 at all; flow of control may briefly move where you did not expect it;
3865 some statements may not be executed because they compute constant
3866 results or their values were already at hand; some statements may
3867 execute in different places because they were moved out of loops.
3868
3869 Nevertheless it proves possible to debug optimized output.  This makes
3870 it reasonable to use the optimizer for programs that might have bugs.
3871
3872 The following options are useful when GCC is generated with the
3873 capability for more than one debugging format.
3874
3875 @item -ggdb
3876 @opindex ggdb
3877 Produce debugging information for use by GDB@.  This means to use the
3878 most expressive format available (DWARF 2, stabs, or the native format
3879 if neither of those are supported), including GDB extensions if at all
3880 possible.
3881
3882 @item -gstabs
3883 @opindex gstabs
3884 Produce debugging information in stabs format (if that is supported),
3885 without GDB extensions.  This is the format used by DBX on most BSD
3886 systems.  On MIPS, Alpha and System V Release 4 systems this option
3887 produces stabs debugging output which is not understood by DBX or SDB@.
3888 On System V Release 4 systems this option requires the GNU assembler.
3889
3890 @item -feliminate-unused-debug-symbols
3891 @opindex feliminate-unused-debug-symbols
3892 Produce debugging information in stabs format (if that is supported),
3893 for only symbols that are actually used.
3894
3895 @item -femit-class-debug-always
3896 Instead of emitting debugging information for a C++ class in only one
3897 object file, emit it in all object files using the class.  This option
3898 should be used only with debuggers that are unable to handle the way GCC
3899 normally emits debugging information for classes because using this
3900 option will increase the size of debugging information by as much as a
3901 factor of two.
3902
3903 @item -gstabs+
3904 @opindex gstabs+
3905 Produce debugging information in stabs format (if that is supported),
3906 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3907 use of these extensions is likely to make other debuggers crash or
3908 refuse to read the program.
3909
3910 @item -gcoff
3911 @opindex gcoff
3912 Produce debugging information in COFF format (if that is supported).
3913 This is the format used by SDB on most System V systems prior to
3914 System V Release 4.
3915
3916 @item -gxcoff
3917 @opindex gxcoff
3918 Produce debugging information in XCOFF format (if that is supported).
3919 This is the format used by the DBX debugger on IBM RS/6000 systems.
3920
3921 @item -gxcoff+
3922 @opindex gxcoff+
3923 Produce debugging information in XCOFF format (if that is supported),
3924 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3925 use of these extensions is likely to make other debuggers crash or
3926 refuse to read the program, and may cause assemblers other than the GNU
3927 assembler (GAS) to fail with an error.
3928
3929 @item -gdwarf-2
3930 @opindex gdwarf-2
3931 Produce debugging information in DWARF version 2 format (if that is
3932 supported).  This is the format used by DBX on IRIX 6.  With this
3933 option, GCC uses features of DWARF version 3 when they are useful;
3934 version 3 is upward compatible with version 2, but may still cause
3935 problems for older debuggers.
3936
3937 @item -gvms
3938 @opindex gvms
3939 Produce debugging information in VMS debug format (if that is
3940 supported).  This is the format used by DEBUG on VMS systems.
3941
3942 @item -g@var{level}
3943 @itemx -ggdb@var{level}
3944 @itemx -gstabs@var{level}
3945 @itemx -gcoff@var{level}
3946 @itemx -gxcoff@var{level}
3947 @itemx -gvms@var{level}
3948 Request debugging information and also use @var{level} to specify how
3949 much information.  The default level is 2.
3950
3951 Level 0 produces no debug information at all.  Thus, @option{-g0} negates
3952 @option{-g}.
3953
3954 Level 1 produces minimal information, enough for making backtraces in
3955 parts of the program that you don't plan to debug.  This includes
3956 descriptions of functions and external variables, but no information
3957 about local variables and no line numbers.
3958
3959 Level 3 includes extra information, such as all the macro definitions
3960 present in the program.  Some debuggers support macro expansion when
3961 you use @option{-g3}.
3962
3963 @option{-gdwarf-2} does not accept a concatenated debug level, because
3964 GCC used to support an option @option{-gdwarf} that meant to generate
3965 debug information in version 1 of the DWARF format (which is very
3966 different from version 2), and it would have been too confusing.  That
3967 debug format is long obsolete, but the option cannot be changed now.
3968 Instead use an additional @option{-g@var{level}} option to change the
3969 debug level for DWARF2.
3970
3971 @item -feliminate-dwarf2-dups
3972 @opindex feliminate-dwarf2-dups
3973 Compress DWARF2 debugging information by eliminating duplicated
3974 information about each symbol.  This option only makes sense when
3975 generating DWARF2 debugging information with @option{-gdwarf-2}.
3976
3977 @item -femit-struct-debug-baseonly
3978 Emit debug information for struct-like types
3979 only when the base name of the compilation source file
3980 matches the base name of file in which the struct was defined.
3981
3982 This option substantially reduces the size of debugging information,
3983 but at significant potential loss in type information to the debugger.
3984 See @option{-femit-struct-debug-reduced} for a less aggressive option.
3985 See @option{-femit-struct-debug-detailed} for more detailed control.
3986
3987 This option works only with DWARF 2.
3988
3989 @item -femit-struct-debug-reduced
3990 Emit debug information for struct-like types
3991 only when the base name of the compilation source file
3992 matches the base name of file in which the type was defined,
3993 unless the struct is a template or defined in a system header.
3994
3995 This option significantly reduces the size of debugging information,
3996 with some potential loss in type information to the debugger.
3997 See @option{-femit-struct-debug-baseonly} for a more aggressive option.
3998 See @option{-femit-struct-debug-detailed} for more detailed control.
3999
4000 This option works only with DWARF 2.
4001
4002 @item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
4003 Specify the struct-like types
4004 for which the compiler will generate debug information.
4005 The intent is to reduce duplicate struct debug information
4006 between different object files within the same program.
4007
4008 This option is a detailed version of
4009 @option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
4010 which will serve for most needs.
4011
4012 A specification has the syntax
4013 [@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
4014
4015 The optional first word limits the specification to
4016 structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
4017 A struct type is used directly when it is the type of a variable, member.
4018 Indirect uses arise through pointers to structs.
4019 That is, when use of an incomplete struct would be legal, the use is indirect.
4020 An example is
4021 @samp{struct one direct; struct two * indirect;}.
4022
4023 The optional second word limits the specification to
4024 ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
4025 Generic structs are a bit complicated to explain.
4026 For C++, these are non-explicit specializations of template classes,
4027 or non-template classes within the above.
4028 Other programming languages have generics,
4029 but @samp{-femit-struct-debug-detailed} does not yet implement them.
4030
4031 The third word specifies the source files for those
4032 structs for which the compiler will emit debug information.
4033 The values @samp{none} and @samp{any} have the normal meaning.
4034 The value @samp{base} means that
4035 the base of name of the file in which the type declaration appears
4036 must match the base of the name of the main compilation file.
4037 In practice, this means that
4038 types declared in @file{foo.c} and @file{foo.h} will have debug information,
4039 but types declared in other header will not.
4040 The value @samp{sys} means those types satisfying @samp{base}
4041 or declared in system or compiler headers.
4042
4043 You may need to experiment to determine the best settings for your application.
4044
4045 The default is @samp{-femit-struct-debug-detailed=all}.
4046
4047 This option works only with DWARF 2.
4048
4049 @cindex @command{prof}
4050 @item -p
4051 @opindex p
4052 Generate extra code to write profile information suitable for the
4053 analysis program @command{prof}.  You must use this option when compiling
4054 the source files you want data about, and you must also use it when
4055 linking.
4056
4057 @cindex @command{gprof}
4058 @item -pg
4059 @opindex pg
4060 Generate extra code to write profile information suitable for the
4061 analysis program @command{gprof}.  You must use this option when compiling
4062 the source files you want data about, and you must also use it when
4063 linking.
4064
4065 @item -Q
4066 @opindex Q
4067 Makes the compiler print out each function name as it is compiled, and
4068 print some statistics about each pass when it finishes.
4069
4070 @item -ftime-report
4071 @opindex ftime-report
4072 Makes the compiler print some statistics about the time consumed by each
4073 pass when it finishes.
4074
4075 @item -fmem-report
4076 @opindex fmem-report
4077 Makes the compiler print some statistics about permanent memory
4078 allocation when it finishes.
4079
4080 @item -fpre-ipa-mem-report
4081 @opindex fpre-ipa-mem-report
4082 @item -fpost-ipa-mem-report
4083 @opindex fpost-ipa-mem-report
4084 Makes the compiler print some statistics about permanent memory
4085 allocation before or after interprocedural optimization.
4086
4087 @item -fprofile-arcs
4088 @opindex fprofile-arcs
4089 Add code so that program flow @dfn{arcs} are instrumented.  During
4090 execution the program records how many times each branch and call is
4091 executed and how many times it is taken or returns.  When the compiled
4092 program exits it saves this data to a file called
4093 @file{@var{auxname}.gcda} for each source file.  The data may be used for
4094 profile-directed optimizations (@option{-fbranch-probabilities}), or for
4095 test coverage analysis (@option{-ftest-coverage}).  Each object file's
4096 @var{auxname} is generated from the name of the output file, if
4097 explicitly specified and it is not the final executable, otherwise it is
4098 the basename of the source file.  In both cases any suffix is removed
4099 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
4100 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
4101 @xref{Cross-profiling}.
4102
4103 @cindex @command{gcov}
4104 @item --coverage
4105 @opindex coverage
4106
4107 This option is used to compile and link code instrumented for coverage
4108 analysis.  The option is a synonym for @option{-fprofile-arcs}
4109 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
4110 linking).  See the documentation for those options for more details.
4111
4112 @itemize
4113
4114 @item
4115 Compile the source files with @option{-fprofile-arcs} plus optimization
4116 and code generation options.  For test coverage analysis, use the
4117 additional @option{-ftest-coverage} option.  You do not need to profile
4118 every source file in a program.
4119
4120 @item
4121 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
4122 (the latter implies the former).
4123
4124 @item
4125 Run the program on a representative workload to generate the arc profile
4126 information.  This may be repeated any number of times.  You can run
4127 concurrent instances of your program, and provided that the file system
4128 supports locking, the data files will be correctly updated.  Also
4129 @code{fork} calls are detected and correctly handled (double counting
4130 will not happen).
4131
4132 @item
4133 For profile-directed optimizations, compile the source files again with
4134 the same optimization and code generation options plus
4135 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
4136 Control Optimization}).
4137
4138 @item
4139 For test coverage analysis, use @command{gcov} to produce human readable
4140 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
4141 @command{gcov} documentation for further information.
4142
4143 @end itemize
4144
4145 With @option{-fprofile-arcs}, for each function of your program GCC
4146 creates a program flow graph, then finds a spanning tree for the graph.
4147 Only arcs that are not on the spanning tree have to be instrumented: the
4148 compiler adds code to count the number of times that these arcs are
4149 executed.  When an arc is the only exit or only entrance to a block, the
4150 instrumentation code can be added to the block; otherwise, a new basic
4151 block must be created to hold the instrumentation code.
4152
4153 @need 2000
4154 @item -ftest-coverage
4155 @opindex ftest-coverage
4156 Produce a notes file that the @command{gcov} code-coverage utility
4157 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
4158 show program coverage.  Each source file's note file is called
4159 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
4160 above for a description of @var{auxname} and instructions on how to
4161 generate test coverage data.  Coverage data will match the source files
4162 more closely, if you do not optimize.
4163
4164 @item -d@var{letters}
4165 @item -fdump-rtl-@var{pass}
4166 @opindex d
4167 Says to make debugging dumps during compilation at times specified by
4168 @var{letters}.    This is used for debugging the RTL-based passes of the
4169 compiler.  The file names for most of the dumps are made by appending a
4170 pass number and a word to the @var{dumpname}.  @var{dumpname} is generated
4171 from the name of the output file, if explicitly specified and it is not
4172 an executable, otherwise it is the basename of the source file.
4173
4174 Most debug dumps can be enabled either passing a letter to the @option{-d}
4175 option, or with a long @option{-fdump-rtl} switch; here are the possible
4176 letters for use in @var{letters} and @var{pass}, and their meanings:
4177
4178 @table @gcctabopt
4179 @item -dA
4180 @opindex dA
4181 Annotate the assembler output with miscellaneous debugging information.
4182
4183 @item -dB
4184 @itemx -fdump-rtl-bbro
4185 @opindex dB
4186 @opindex fdump-rtl-bbro
4187 Dump after block reordering, to @file{@var{file}.148r.bbro}.
4188
4189 @item -dc
4190 @itemx -fdump-rtl-combine
4191 @opindex dc
4192 @opindex fdump-rtl-combine
4193 Dump after the RTL instruction combination pass, to the file
4194 @file{@var{file}.129r.combine}.
4195
4196 @item -dC
4197 @itemx -fdump-rtl-ce1
4198 @itemx -fdump-rtl-ce2
4199 @opindex dC
4200 @opindex fdump-rtl-ce1
4201 @opindex fdump-rtl-ce2
4202 @option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the
4203 first if conversion, to the file @file{@var{file}.117r.ce1}.  @option{-dC}
4204 and @option{-fdump-rtl-ce2} enable dumping after the second if
4205 conversion, to the file @file{@var{file}.130r.ce2}.
4206
4207 @item -dd
4208 @itemx -fdump-rtl-btl
4209 @itemx -fdump-rtl-dbr
4210 @opindex dd
4211 @opindex fdump-rtl-btl
4212 @opindex fdump-rtl-dbr
4213 @option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch
4214 target load optimization, to @file{@var{file}.31.btl}.  @option{-dd}
4215 and @option{-fdump-rtl-dbr} enable dumping after delayed branch
4216 scheduling, to @file{@var{file}.36.dbr}.
4217
4218 @item -dD
4219 @opindex dD
4220 Dump all macro definitions, at the end of preprocessing, in addition to
4221 normal output.
4222
4223 @item -dE
4224 @itemx -fdump-rtl-ce3
4225 @opindex dE
4226 @opindex fdump-rtl-ce3
4227 Dump after the third if conversion, to @file{@var{file}.146r.ce3}.
4228
4229 @item -df
4230 @itemx -fdump-rtl-cfg
4231 @itemx -fdump-rtl-life
4232 @opindex df
4233 @opindex fdump-rtl-cfg
4234 @opindex fdump-rtl-life
4235 @option{-df} and @option{-fdump-rtl-cfg} enable dumping after control
4236 and data flow analysis, to @file{@var{file}.116r.cfg}.  @option{-df}
4237 and @option{-fdump-rtl-cfg} enable dumping dump after life analysis,
4238 to @file{@var{file}.128r.life1} and @file{@var{file}.135r.life2}.
4239
4240 @item -dg
4241 @itemx -fdump-rtl-greg
4242 @opindex dg
4243 @opindex fdump-rtl-greg
4244 Dump after global register allocation, to @file{@var{file}.139r.greg}.
4245
4246 @item -dG
4247 @itemx -fdump-rtl-gcse
4248 @itemx -fdump-rtl-bypass
4249 @opindex dG
4250 @opindex fdump-rtl-gcse
4251 @opindex fdump-rtl-bypass
4252 @option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to
4253 @file{@var{file}.114r.gcse}.  @option{-dG} and @option{-fdump-rtl-bypass}
4254 enable dumping after jump bypassing and control flow optimizations, to
4255 @file{@var{file}.115r.bypass}.
4256
4257 @item -dh
4258 @itemx -fdump-rtl-eh
4259 @opindex dh
4260 @opindex fdump-rtl-eh
4261 Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
4262
4263 @item -di
4264 @itemx -fdump-rtl-sibling
4265 @opindex di
4266 @opindex fdump-rtl-sibling
4267 Dump after sibling call optimizations, to @file{@var{file}.106r.sibling}.
4268
4269 @item -dj
4270 @itemx -fdump-rtl-jump
4271 @opindex dj
4272 @opindex fdump-rtl-jump
4273 Dump after the first jump optimization, to @file{@var{file}.112r.jump}.
4274
4275 @item -dk
4276 @itemx -fdump-rtl-stack
4277 @opindex dk
4278 @opindex fdump-rtl-stack
4279 Dump after conversion from GCC's "flat register file" registers to the
4280 x87's stack-like registers, to @file{@var{file}.152r.stack}.
4281
4282 @item -dl
4283 @itemx -fdump-rtl-lreg
4284 @opindex dl
4285 @opindex fdump-rtl-lreg
4286 Dump after local register allocation, to @file{@var{file}.138r.lreg}.
4287
4288 @item -dL
4289 @itemx -fdump-rtl-loop2
4290 @opindex dL
4291 @opindex fdump-rtl-loop2
4292 @option{-dL} and @option{-fdump-rtl-loop2} enable dumping after the
4293 loop optimization pass, to @file{@var{file}.119r.loop2},
4294 @file{@var{file}.120r.loop2_init},
4295 @file{@var{file}.121r.loop2_invariant}, and
4296 @file{@var{file}.125r.loop2_done}.
4297
4298 @item -dm
4299 @itemx -fdump-rtl-sms
4300 @opindex dm
4301 @opindex fdump-rtl-sms
4302 Dump after modulo scheduling, to @file{@var{file}.136r.sms}.
4303
4304 @item -dM
4305 @itemx -fdump-rtl-mach
4306 @opindex dM
4307 @opindex fdump-rtl-mach
4308 Dump after performing the machine dependent reorganization pass, to
4309 @file{@var{file}.155r.mach}.
4310
4311 @item -dn
4312 @itemx -fdump-rtl-rnreg
4313 @opindex dn
4314 @opindex fdump-rtl-rnreg
4315 Dump after register renumbering, to @file{@var{file}.147r.rnreg}.
4316
4317 @item -dN
4318 @itemx -fdump-rtl-regmove
4319 @opindex dN
4320 @opindex fdump-rtl-regmove
4321 Dump after the register move pass, to @file{@var{file}.132r.regmove}.
4322
4323 @item -do
4324 @itemx -fdump-rtl-postreload
4325 @opindex do
4326 @opindex fdump-rtl-postreload
4327 Dump after post-reload optimizations, to @file{@var{file}.24.postreload}.
4328
4329 @item -dr
4330 @itemx -fdump-rtl-expand
4331 @opindex dr
4332 @opindex fdump-rtl-expand
4333 Dump after RTL generation, to @file{@var{file}.104r.expand}.
4334
4335 @item -dR
4336 @itemx -fdump-rtl-sched2
4337 @opindex dR
4338 @opindex fdump-rtl-sched2
4339 Dump after the second scheduling pass, to @file{@var{file}.149r.sched2}.
4340
4341 @item -ds
4342 @itemx -fdump-rtl-cse
4343 @opindex ds
4344 @opindex fdump-rtl-cse
4345 Dump after CSE (including the jump optimization that sometimes follows
4346 CSE), to @file{@var{file}.113r.cse}.
4347
4348 @item -dS
4349 @itemx -fdump-rtl-sched1
4350 @opindex dS
4351 @opindex fdump-rtl-sched1
4352 Dump after the first scheduling pass, to @file{@var{file}.136r.sched1}.
4353
4354 @item -dt
4355 @itemx -fdump-rtl-cse2
4356 @opindex dt
4357 @opindex fdump-rtl-cse2
4358 Dump after the second CSE pass (including the jump optimization that
4359 sometimes follows CSE), to @file{@var{file}.127r.cse2}.
4360
4361 @item -dT
4362 @itemx -fdump-rtl-tracer
4363 @opindex dT
4364 @opindex fdump-rtl-tracer
4365 Dump after running tracer, to @file{@var{file}.118r.tracer}.
4366
4367 @item -dV
4368 @itemx -fdump-rtl-vpt
4369 @itemx -fdump-rtl-vartrack
4370 @opindex dV
4371 @opindex fdump-rtl-vpt
4372 @opindex fdump-rtl-vartrack
4373 @option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value
4374 profile transformations, to @file{@var{file}.10.vpt}.  @option{-dV}
4375 and @option{-fdump-rtl-vartrack} enable dumping after variable tracking,
4376 to @file{@var{file}.154r.vartrack}.
4377
4378 @item -dw
4379 @itemx -fdump-rtl-flow2
4380 @opindex dw
4381 @opindex fdump-rtl-flow2
4382 Dump after the second flow pass, to @file{@var{file}.142r.flow2}.
4383
4384 @item -dz
4385 @itemx -fdump-rtl-peephole2
4386 @opindex dz
4387 @opindex fdump-rtl-peephole2
4388 Dump after the peephole pass, to @file{@var{file}.145r.peephole2}.
4389
4390 @item -dZ
4391 @itemx -fdump-rtl-web
4392 @opindex dZ
4393 @opindex fdump-rtl-web
4394 Dump after live range splitting, to @file{@var{file}.126r.web}.
4395
4396 @item -da
4397 @itemx -fdump-rtl-all
4398 @opindex da
4399 @opindex fdump-rtl-all
4400 Produce all the dumps listed above.
4401
4402 @item -dH
4403 @opindex dH
4404 Produce a core dump whenever an error occurs.
4405
4406 @item -dm
4407 @opindex dm
4408 Print statistics on memory usage, at the end of the run, to
4409 standard error.
4410
4411 @item -dp
4412 @opindex dp
4413 Annotate the assembler output with a comment indicating which
4414 pattern and alternative was used.  The length of each instruction is
4415 also printed.
4416
4417 @item -dP
4418 @opindex dP
4419 Dump the RTL in the assembler output as a comment before each instruction.
4420 Also turns on @option{-dp} annotation.
4421
4422 @item -dv
4423 @opindex dv
4424 For each of the other indicated dump files (either with @option{-d} or
4425 @option{-fdump-rtl-@var{pass}}), dump a representation of the control flow
4426 graph suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
4427
4428 @item -dx
4429 @opindex dx
4430 Just generate RTL for a function instead of compiling it.  Usually used
4431 with @samp{r} (@option{-fdump-rtl-expand}).
4432
4433 @item -dy
4434 @opindex dy
4435 Dump debugging information during parsing, to standard error.
4436 @end table
4437
4438 @item -fdump-noaddr
4439 @opindex fdump-noaddr
4440 When doing debugging dumps (see @option{-d} option above), suppress
4441 address output.  This makes it more feasible to use diff on debugging
4442 dumps for compiler invocations with different compiler binaries and/or
4443 different text / bss / data / heap / stack / dso start locations.
4444
4445 @item -fdump-unnumbered
4446 @opindex fdump-unnumbered
4447 When doing debugging dumps (see @option{-d} option above), suppress instruction
4448 numbers, line number note and address output.  This makes it more feasible to
4449 use diff on debugging dumps for compiler invocations with different
4450 options, in particular with and without @option{-g}.
4451
4452 @item -fdump-translation-unit @r{(C++ only)}
4453 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
4454 @opindex fdump-translation-unit
4455 Dump a representation of the tree structure for the entire translation
4456 unit to a file.  The file name is made by appending @file{.tu} to the
4457 source file name.  If the @samp{-@var{options}} form is used, @var{options}
4458 controls the details of the dump as described for the
4459 @option{-fdump-tree} options.
4460
4461 @item -fdump-class-hierarchy @r{(C++ only)}
4462 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
4463 @opindex fdump-class-hierarchy
4464 Dump a representation of each class's hierarchy and virtual function
4465 table layout to a file.  The file name is made by appending @file{.class}
4466 to the source file name.  If the @samp{-@var{options}} form is used,
4467 @var{options} controls the details of the dump as described for the
4468 @option{-fdump-tree} options.
4469
4470 @item -fdump-ipa-@var{switch}
4471 @opindex fdump-ipa
4472 Control the dumping at various stages of inter-procedural analysis
4473 language tree to a file.  The file name is generated by appending a switch
4474 specific suffix to the source file name.  The following dumps are possible:
4475
4476 @table @samp
4477 @item all
4478 Enables all inter-procedural analysis dumps; currently the only produced
4479 dump is the @samp{cgraph} dump.
4480
4481 @item cgraph
4482 Dumps information about call-graph optimization, unused function removal,
4483 and inlining decisions.
4484 @end table
4485
4486 @item -fdump-tree-@var{switch}
4487 @itemx -fdump-tree-@var{switch}-@var{options}
4488 @opindex fdump-tree
4489 Control the dumping at various stages of processing the intermediate
4490 language tree to a file.  The file name is generated by appending a switch
4491 specific suffix to the source file name.  If the @samp{-@var{options}}
4492 form is used, @var{options} is a list of @samp{-} separated options that
4493 control the details of the dump.  Not all options are applicable to all
4494 dumps, those which are not meaningful will be ignored.  The following
4495 options are available
4496
4497 @table @samp
4498 @item address
4499 Print the address of each node.  Usually this is not meaningful as it
4500 changes according to the environment and source file.  Its primary use
4501 is for tying up a dump file with a debug environment.
4502 @item slim
4503 Inhibit dumping of members of a scope or body of a function merely
4504 because that scope has been reached.  Only dump such items when they
4505 are directly reachable by some other path.  When dumping pretty-printed
4506 trees, this option inhibits dumping the bodies of control structures.
4507 @item raw
4508 Print a raw representation of the tree.  By default, trees are
4509 pretty-printed into a C-like representation.
4510 @item details
4511 Enable more detailed dumps (not honored by every dump option).
4512 @item stats
4513 Enable dumping various statistics about the pass (not honored by every dump
4514 option).
4515 @item blocks
4516 Enable showing basic block boundaries (disabled in raw dumps).
4517 @item vops
4518 Enable showing virtual operands for every statement.
4519 @item lineno
4520 Enable showing line numbers for statements.
4521 @item uid
4522 Enable showing the unique ID (@code{DECL_UID}) for each variable.
4523 @item all
4524 Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
4525 @end table
4526
4527 The following tree dumps are possible:
4528 @table @samp
4529
4530 @item original
4531 Dump before any tree based optimization, to @file{@var{file}.original}.
4532
4533 @item optimized
4534 Dump after all tree based optimization, to @file{@var{file}.optimized}.
4535
4536 @item inlined
4537 Dump after function inlining, to @file{@var{file}.inlined}.
4538
4539 @item gimple
4540 @opindex fdump-tree-gimple
4541 Dump each function before and after the gimplification pass to a file.  The
4542 file name is made by appending @file{.gimple} to the source file name.
4543
4544 @item cfg
4545 @opindex fdump-tree-cfg
4546 Dump the control flow graph of each function to a file.  The file name is
4547 made by appending @file{.cfg} to the source file name.
4548
4549 @item vcg
4550 @opindex fdump-tree-vcg
4551 Dump the control flow graph of each function to a file in VCG format.  The
4552 file name is made by appending @file{.vcg} to the source file name.  Note
4553 that if the file contains more than one function, the generated file cannot
4554 be used directly by VCG@.  You will need to cut and paste each function's
4555 graph into its own separate file first.
4556
4557 @item ch
4558 @opindex fdump-tree-ch
4559 Dump each function after copying loop headers.  The file name is made by
4560 appending @file{.ch} to the source file name.
4561
4562 @item ssa
4563 @opindex fdump-tree-ssa
4564 Dump SSA related information to a file.  The file name is made by appending
4565 @file{.ssa} to the source file name.
4566
4567 @item salias
4568 @opindex fdump-tree-salias
4569 Dump structure aliasing variable information to a file.  This file name
4570 is made by appending @file{.salias} to the source file name.
4571
4572 @item alias
4573 @opindex fdump-tree-alias
4574 Dump aliasing information for each function.  The file name is made by
4575 appending @file{.alias} to the source file name.
4576
4577 @item ccp
4578 @opindex fdump-tree-ccp
4579 Dump each function after CCP@.  The file name is made by appending
4580 @file{.ccp} to the source file name.
4581
4582 @item storeccp
4583 @opindex fdump-tree-storeccp
4584 Dump each function after STORE-CCP.  The file name is made by appending
4585 @file{.storeccp} to the source file name.
4586
4587 @item pre
4588 @opindex fdump-tree-pre
4589 Dump trees after partial redundancy elimination.  The file name is made
4590 by appending @file{.pre} to the source file name.
4591
4592 @item fre
4593 @opindex fdump-tree-fre
4594 Dump trees after full redundancy elimination.  The file name is made
4595 by appending @file{.fre} to the source file name.
4596
4597 @item copyprop
4598 @opindex fdump-tree-copyprop
4599 Dump trees after copy propagation.  The file name is made
4600 by appending @file{.copyprop} to the source file name.
4601
4602 @item store_copyprop
4603 @opindex fdump-tree-store_copyprop
4604 Dump trees after store copy-propagation.  The file name is made
4605 by appending @file{.store_copyprop} to the source file name.
4606
4607 @item dce
4608 @opindex fdump-tree-dce
4609 Dump each function after dead code elimination.  The file name is made by
4610 appending @file{.dce} to the source file name.
4611
4612 @item mudflap
4613 @opindex fdump-tree-mudflap
4614 Dump each function after adding mudflap instrumentation.  The file name is
4615 made by appending @file{.mudflap} to the source file name.
4616
4617 @item sra
4618 @opindex fdump-tree-sra
4619 Dump each function after performing scalar replacement of aggregates.  The
4620 file name is made by appending @file{.sra} to the source file name.
4621
4622 @item sink
4623 @opindex fdump-tree-sink
4624 Dump each function after performing code sinking.  The file name is made
4625 by appending @file{.sink} to the source file name.
4626
4627 @item dom
4628 @opindex fdump-tree-dom
4629 Dump each function after applying dominator tree optimizations.  The file
4630 name is made by appending @file{.dom} to the source file name.
4631
4632 @item dse
4633 @opindex fdump-tree-dse
4634 Dump each function after applying dead store elimination.  The file
4635 name is made by appending @file{.dse} to the source file name.
4636
4637 @item phiopt
4638 @opindex fdump-tree-phiopt
4639 Dump each function after optimizing PHI nodes into straightline code.  The file
4640 name is made by appending @file{.phiopt} to the source file name.
4641
4642 @item forwprop
4643 @opindex fdump-tree-forwprop
4644 Dump each function after forward propagating single use variables.  The file
4645 name is made by appending @file{.forwprop} to the source file name.
4646
4647 @item copyrename
4648 @opindex fdump-tree-copyrename
4649 Dump each function after applying the copy rename optimization.  The file
4650 name is made by appending @file{.copyrename} to the source file name.
4651
4652 @item nrv
4653 @opindex fdump-tree-nrv
4654 Dump each function after applying the named return value optimization on
4655 generic trees.  The file name is made by appending @file{.nrv} to the source
4656 file name.
4657
4658 @item vect
4659 @opindex fdump-tree-vect
4660 Dump each function after applying vectorization of loops.  The file name is
4661 made by appending @file{.vect} to the source file name.
4662
4663 @item vrp
4664 @opindex fdump-tree-vrp
4665 Dump each function after Value Range Propagation (VRP).  The file name
4666 is made by appending @file{.vrp} to the source file name.
4667
4668 @item all
4669 @opindex fdump-tree-all
4670 Enable all the available tree dumps with the flags provided in this option.
4671 @end table
4672
4673 @item -ftree-vectorizer-verbose=@var{n}
4674 @opindex ftree-vectorizer-verbose
4675 This option controls the amount of debugging output the vectorizer prints.
4676 This information is written to standard error, unless
4677 @option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified,
4678 in which case it is output to the usual dump listing file, @file{.vect}.
4679 For @var{n}=0 no diagnostic information is reported.
4680 If @var{n}=1 the vectorizer reports each loop that got vectorized,
4681 and the total number of loops that got vectorized.
4682 If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
4683 the first analysis phase (vect_analyze_loop_form) - i.e. countable,
4684 inner-most, single-bb, single-entry/exit loops.  This is the same verbosity
4685 level that @option{-fdump-tree-vect-stats} uses.
4686 Higher verbosity levels mean either more information dumped for each
4687 reported loop, or same amount of information reported for more loops:
4688 If @var{n}=3, alignment related information is added to the reports.
4689 If @var{n}=4, data-references related information (e.g. memory dependences,
4690 memory access-patterns) is added to the reports.
4691 If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops
4692 that did not pass the first analysis phase (i.e. may not be countable, or
4693 may have complicated control-flow).
4694 If @var{n}=6, the vectorizer reports also non-vectorized nested loops.
4695 For @var{n}=7, all the information the vectorizer generates during its
4696 analysis and transformation is reported.  This is the same verbosity level
4697 that @option{-fdump-tree-vect-details} uses.
4698
4699 @item -frandom-seed=@var{string}
4700 @opindex frandom-string
4701 This option provides a seed that GCC uses when it would otherwise use
4702 random numbers.  It is used to generate certain symbol names
4703 that have to be different in every compiled file.  It is also used to
4704 place unique stamps in coverage data files and the object files that
4705 produce them.  You can use the @option{-frandom-seed} option to produce
4706 reproducibly identical object files.
4707
4708 The @var{string} should be different for every file you compile.
4709
4710 @item -fsched-verbose=@var{n}
4711 @opindex fsched-verbose
4712 On targets that use instruction scheduling, this option controls the
4713 amount of debugging output the scheduler prints.  This information is
4714 written to standard error, unless @option{-dS} or @option{-dR} is
4715 specified, in which case it is output to the usual dump
4716 listing file, @file{.sched} or @file{.sched2} respectively.  However
4717 for @var{n} greater than nine, the output is always printed to standard
4718 error.
4719
4720 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
4721 same information as @option{-dRS}.  For @var{n} greater than one, it
4722 also output basic block probabilities, detailed ready list information
4723 and unit/insn info.  For @var{n} greater than two, it includes RTL
4724 at abort point, control-flow and regions info.  And for @var{n} over
4725 four, @option{-fsched-verbose} also includes dependence info.
4726
4727 @item -save-temps
4728 @opindex save-temps
4729 Store the usual ``temporary'' intermediate files permanently; place them
4730 in the current directory and name them based on the source file.  Thus,
4731 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
4732 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
4733 preprocessed @file{foo.i} output file even though the compiler now
4734 normally uses an integrated preprocessor.
4735
4736 When used in combination with the @option{-x} command line option,
4737 @option{-save-temps} is sensible enough to avoid over writing an
4738 input source file with the same extension as an intermediate file.
4739 The corresponding intermediate file may be obtained by renaming the
4740 source file before using @option{-save-temps}.
4741
4742 @item -time
4743 @opindex time
4744 Report the CPU time taken by each subprocess in the compilation
4745 sequence.  For C source files, this is the compiler proper and assembler
4746 (plus the linker if linking is done).  The output looks like this:
4747
4748 @smallexample
4749 # cc1 0.12 0.01
4750 # as 0.00 0.01
4751 @end smallexample
4752
4753 The first number on each line is the ``user time'', that is time spent
4754 executing the program itself.  The second number is ``system time'',
4755 time spent executing operating system routines on behalf of the program.
4756 Both numbers are in seconds.
4757
4758 @item -fvar-tracking
4759 @opindex fvar-tracking
4760 Run variable tracking pass.  It computes where variables are stored at each
4761 position in code.  Better debugging information is then generated
4762 (if the debugging information format supports this information).
4763
4764 It is enabled by default when compiling with optimization (@option{-Os},
4765 @option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
4766 the debug info format supports it.
4767
4768 @item -print-file-name=@var{library}
4769 @opindex print-file-name
4770 Print the full absolute name of the library file @var{library} that
4771 would be used when linking---and don't do anything else.  With this
4772 option, GCC does not compile or link anything; it just prints the
4773 file name.
4774
4775 @item -print-multi-directory
4776 @opindex print-multi-directory
4777 Print the directory name corresponding to the multilib selected by any
4778 other switches present in the command line.  This directory is supposed
4779 to exist in @env{GCC_EXEC_PREFIX}.
4780
4781 @item -print-multi-lib
4782 @opindex print-multi-lib
4783 Print the mapping from multilib directory names to compiler switches
4784 that enable them.  The directory name is separated from the switches by
4785 @samp{;}, and each switch starts with an @samp{@@} instead of the
4786 @samp{-}, without spaces between multiple switches.  This is supposed to
4787 ease shell-processing.
4788
4789 @item -print-prog-name=@var{program}
4790 @opindex print-prog-name
4791 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
4792
4793 @item -print-libgcc-file-name
4794 @opindex print-libgcc-file-name
4795 Same as @option{-print-file-name=libgcc.a}.
4796
4797 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
4798 but you do want to link with @file{libgcc.a}.  You can do
4799
4800 @smallexample
4801 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
4802 @end smallexample
4803
4804 @item -print-search-dirs
4805 @opindex print-search-dirs
4806 Print the name of the configured installation directory and a list of
4807 program and library directories @command{gcc} will search---and don't do anything else.
4808
4809 This is useful when @command{gcc} prints the error message
4810 @samp{installation problem, cannot exec cpp0: No such file or directory}.
4811 To resolve this you either need to put @file{cpp0} and the other compiler
4812 components where @command{gcc} expects to find them, or you can set the environment
4813 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
4814 Don't forget the trailing @samp{/}.
4815 @xref{Environment Variables}.
4816
4817 @item -print-sysroot-headers-suffix
4818 @opindex print-sysroot-headers-suffix
4819 Print the suffix added to the target sysroot when searching for
4820 headers, or give an error if the compiler is not configured with such
4821 a suffix---and don't do anything else.
4822
4823 @item -dumpmachine
4824 @opindex dumpmachine
4825 Print the compiler's target machine (for example,
4826 @samp{i686-pc-linux-gnu})---and don't do anything else.
4827
4828 @item -dumpversion
4829 @opindex dumpversion
4830 Print the compiler version (for example, @samp{3.0})---and don't do
4831 anything else.
4832
4833 @item -dumpspecs
4834 @opindex dumpspecs
4835 Print the compiler's built-in specs---and don't do anything else.  (This
4836 is used when GCC itself is being built.)  @xref{Spec Files}.
4837
4838 @item -feliminate-unused-debug-types
4839 @opindex feliminate-unused-debug-types
4840 Normally, when producing DWARF2 output, GCC will emit debugging
4841 information for all types declared in a compilation
4842 unit, regardless of whether or not they are actually used
4843 in that compilation unit.  Sometimes this is useful, such as
4844 if, in the debugger, you want to cast a value to a type that is
4845 not actually used in your program (but is declared).  More often,
4846 however, this results in a significant amount of wasted space.
4847 With this option, GCC will avoid producing debug symbol output
4848 for types that are nowhere used in the source file being compiled.
4849 @end table
4850
4851 @node Optimize Options
4852 @section Options That Control Optimization
4853 @cindex optimize options
4854 @cindex options, optimization
4855
4856 These options control various sorts of optimizations.
4857
4858 Without any optimization option, the compiler's goal is to reduce the
4859 cost of compilation and to make debugging produce the expected
4860 results.  Statements are independent: if you stop the program with a
4861 breakpoint between statements, you can then assign a new value to any
4862 variable or change the program counter to any other statement in the
4863 function and get exactly the results you would expect from the source
4864 code.
4865
4866 Turning on optimization flags makes the compiler attempt to improve
4867 the performance and/or code size at the expense of compilation time
4868 and possibly the ability to debug the program.
4869
4870 The compiler performs optimization based on the knowledge it has of
4871 the program.  Optimization levels @option{-O} and above, in
4872 particular, enable @emph{unit-at-a-time} mode, which allows the
4873 compiler to consider information gained from later functions in
4874 the file when compiling a function.  Compiling multiple files at
4875 once to a single output file in @emph{unit-at-a-time} mode allows
4876 the compiler to use information gained from all of the files when
4877 compiling each of them.
4878
4879 Not all optimizations are controlled directly by a flag.  Only
4880 optimizations that have a flag are listed.
4881
4882 @table @gcctabopt
4883 @item -O
4884 @itemx -O1
4885 @opindex O
4886 @opindex O1
4887 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4888 more memory for a large function.
4889
4890 With @option{-O}, the compiler tries to reduce code size and execution
4891 time, without performing any optimizations that take a great deal of
4892 compilation time.
4893
4894 @option{-O} turns on the following optimization flags:
4895 @gccoptlist{-fdefer-pop @gol
4896 -fdelayed-branch @gol
4897 -fguess-branch-probability @gol
4898 -fcprop-registers @gol
4899 -fif-conversion @gol
4900 -fif-conversion2 @gol
4901 -fsplit-wide-types @gol
4902 -ftree-ccp @gol
4903 -ftree-dce @gol
4904 -ftree-dominator-opts @gol
4905 -ftree-dse @gol
4906 -ftree-ter @gol
4907 -ftree-sra @gol
4908 -ftree-copyrename @gol
4909 -ftree-fre @gol
4910 -ftree-ch @gol
4911 -funit-at-a-time @gol
4912 -fmerge-constants}
4913
4914 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
4915 where doing so does not interfere with debugging.
4916
4917 @item -O2
4918 @opindex O2
4919 Optimize even more.  GCC performs nearly all supported optimizations
4920 that do not involve a space-speed tradeoff.  The compiler does not
4921 perform loop unrolling or function inlining when you specify @option{-O2}.
4922 As compared to @option{-O}, this option increases both compilation time
4923 and the performance of the generated code.
4924
4925 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
4926 also turns on the following optimization flags:
4927 @gccoptlist{-fthread-jumps @gol
4928 -fcrossjumping @gol
4929 -foptimize-sibling-calls @gol
4930 -fcse-follow-jumps  -fcse-skip-blocks @gol
4931 -fgcse  -fgcse-lm  @gol
4932 -fexpensive-optimizations @gol
4933 -frerun-cse-after-loop  @gol
4934 -fcaller-saves @gol
4935 -fpeephole2 @gol
4936 -fschedule-insns  -fschedule-insns2 @gol
4937 -fsched-interblock  -fsched-spec @gol
4938 -fregmove @gol
4939 -fstrict-aliasing -fstrict-overflow @gol
4940 -fdelete-null-pointer-checks @gol
4941 -freorder-blocks  -freorder-functions @gol
4942 -falign-functions  -falign-jumps @gol
4943 -falign-loops  -falign-labels @gol
4944 -ftree-vrp @gol
4945 -ftree-pre}
4946
4947 Please note the warning under @option{-fgcse} about
4948 invoking @option{-O2} on programs that use computed gotos.
4949
4950 @item -O3
4951 @opindex O3
4952 Optimize yet more.  @option{-O3} turns on all optimizations specified by
4953 @option{-O2} and also turns on the @option{-finline-functions},
4954 @option{-funswitch-loops} and @option{-fgcse-after-reload} options.
4955
4956 @item -O0
4957 @opindex O0
4958 Reduce compilation time and make debugging produce the expected
4959 results.  This is the default.
4960
4961 @item -Os
4962 @opindex Os
4963 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
4964 do not typically increase code size.  It also performs further
4965 optimizations designed to reduce code size.
4966
4967 @option{-Os} disables the following optimization flags:
4968 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
4969 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
4970 -fprefetch-loop-arrays  -ftree-vect-loop-version}
4971
4972 If you use multiple @option{-O} options, with or without level numbers,
4973 the last such option is the one that is effective.
4974 @end table
4975
4976 Options of the form @option{-f@var{flag}} specify machine-independent
4977 flags.  Most flags have both positive and negative forms; the negative
4978 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
4979 below, only one of the forms is listed---the one you typically will
4980 use.  You can figure out the other form by either removing @samp{no-}
4981 or adding it.
4982
4983 The following options control specific optimizations.  They are either
4984 activated by @option{-O} options or are related to ones that are.  You
4985 can use the following flags in the rare cases when ``fine-tuning'' of
4986 optimizations to be performed is desired.
4987
4988 @table @gcctabopt
4989 @item -fno-default-inline
4990 @opindex fno-default-inline
4991 Do not make member functions inline by default merely because they are
4992 defined inside the class scope (C++ only).  Otherwise, when you specify
4993 @w{@option{-O}}, member functions defined inside class scope are compiled
4994 inline by default; i.e., you don't need to add @samp{inline} in front of
4995 the member function name.
4996
4997 @item -fno-defer-pop
4998 @opindex fno-defer-pop
4999 Always pop the arguments to each function call as soon as that function
5000 returns.  For machines which must pop arguments after a function call,
5001 the compiler normally lets arguments accumulate on the stack for several
5002 function calls and pops them all at once.
5003
5004 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5005
5006 @item -fforce-addr
5007 @opindex fforce-addr
5008 Force memory address constants to be copied into registers before
5009 doing arithmetic on them.
5010
5011 @item -fforward-propagate
5012 @opindex fforward-propagate
5013 Perform a forward propagation pass on RTL.  The pass tries to combine two
5014 instructions and checks if the result can be simplified.  If loop unrolling
5015 is active, two passes are performed and the second is scheduled after
5016 loop unrolling.
5017
5018 This option is enabled by default at optimization levels @option{-O2},
5019 @option{-O3}, @option{-Os}.
5020
5021 @item -fomit-frame-pointer
5022 @opindex fomit-frame-pointer
5023 Don't keep the frame pointer in a register for functions that
5024 don't need one.  This avoids the instructions to save, set up and
5025 restore frame pointers; it also makes an extra register available
5026 in many functions.  @strong{It also makes debugging impossible on
5027 some machines.}
5028
5029 On some machines, such as the VAX, this flag has no effect, because
5030 the standard calling sequence automatically handles the frame pointer
5031 and nothing is saved by pretending it doesn't exist.  The
5032 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
5033 whether a target machine supports this flag.  @xref{Registers,,Register
5034 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
5035
5036 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5037
5038 @item -foptimize-sibling-calls
5039 @opindex foptimize-sibling-calls
5040 Optimize sibling and tail recursive calls.
5041
5042 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5043
5044 @item -fno-inline
5045 @opindex fno-inline
5046 Don't pay attention to the @code{inline} keyword.  Normally this option
5047 is used to keep the compiler from expanding any functions inline.
5048 Note that if you are not optimizing, no functions can be expanded inline.
5049
5050 @item -finline-functions
5051 @opindex finline-functions
5052 Integrate all simple functions into their callers.  The compiler
5053 heuristically decides which functions are simple enough to be worth
5054 integrating in this way.
5055
5056 If all calls to a given function are integrated, and the function is
5057 declared @code{static}, then the function is normally not output as
5058 assembler code in its own right.
5059
5060 Enabled at level @option{-O3}.
5061
5062 @item -finline-functions-called-once
5063 @opindex finline-functions-called-once
5064 Consider all @code{static} functions called once for inlining into their
5065 caller even if they are not marked @code{inline}.  If a call to a given
5066 function is integrated, then the function is not output as assembler code
5067 in its own right.
5068
5069 Enabled if @option{-funit-at-a-time} is enabled.
5070
5071 @item -fearly-inlining
5072 @opindex fearly-inlining
5073 Inline functions marked by @code{always_inline} and functions whose body seems
5074 smaller than the function call overhead early before doing
5075 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
5076 makes profiling significantly cheaper and usually inlining faster on programs
5077 having large chains of nested wrapper functions.
5078
5079 Enabled by default.
5080
5081 @item -finline-limit=@var{n}
5082 @opindex finline-limit
5083 By default, GCC limits the size of functions that can be inlined.  This flag
5084 allows the control of this limit for functions that are explicitly marked as
5085 inline (i.e., marked with the inline keyword or defined within the class
5086 definition in c++).  @var{n} is the size of functions that can be inlined in
5087 number of pseudo instructions (not counting parameter handling).  The default
5088 value of @var{n} is 600.
5089 Increasing this value can result in more inlined code at
5090 the cost of compilation time and memory consumption.  Decreasing usually makes
5091 the compilation faster and less code will be inlined (which presumably
5092 means slower programs).  This option is particularly useful for programs that
5093 use inlining heavily such as those based on recursive templates with C++.
5094
5095 Inlining is actually controlled by a number of parameters, which may be
5096 specified individually by using @option{--param @var{name}=@var{value}}.
5097 The @option{-finline-limit=@var{n}} option sets some of these parameters
5098 as follows:
5099
5100 @table @gcctabopt
5101 @item max-inline-insns-single
5102  is set to @var{n}/2.
5103 @item max-inline-insns-auto
5104  is set to @var{n}/2.
5105 @item min-inline-insns
5106  is set to 130 or @var{n}/4, whichever is smaller.
5107 @item max-inline-insns-rtl
5108  is set to @var{n}.
5109 @end table
5110
5111 See below for a documentation of the individual
5112 parameters controlling inlining.
5113
5114 @emph{Note:} pseudo instruction represents, in this particular context, an
5115 abstract measurement of function's size.  In no way does it represent a count
5116 of assembly instructions and as such its exact meaning might change from one
5117 release to an another.
5118
5119 @item -fkeep-inline-functions
5120 @opindex fkeep-inline-functions
5121 In C, emit @code{static} functions that are declared @code{inline}
5122 into the object file, even if the function has been inlined into all
5123 of its callers.  This switch does not affect functions using the
5124 @code{extern inline} extension in GNU C89@.  In C++, emit any and all
5125 inline functions into the object file.
5126
5127 @item -fkeep-static-consts
5128 @opindex fkeep-static-consts
5129 Emit variables declared @code{static const} when optimization isn't turned
5130 on, even if the variables aren't referenced.
5131
5132 GCC enables this option by default.  If you want to force the compiler to
5133 check if the variable was referenced, regardless of whether or not
5134 optimization is turned on, use the @option{-fno-keep-static-consts} option.
5135
5136 @item -fmerge-constants
5137 Attempt to merge identical constants (string constants and floating point
5138 constants) across compilation units.
5139
5140 This option is the default for optimized compilation if the assembler and
5141 linker support it.  Use @option{-fno-merge-constants} to inhibit this
5142 behavior.
5143
5144 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5145
5146 @item -fmerge-all-constants
5147 Attempt to merge identical constants and identical variables.
5148
5149 This option implies @option{-fmerge-constants}.  In addition to
5150 @option{-fmerge-constants} this considers e.g.@: even constant initialized
5151 arrays or initialized constant variables with integral or floating point
5152 types.  Languages like C or C++ require each non-automatic variable to
5153 have distinct location, so using this option will result in non-conforming
5154 behavior.
5155
5156 @item -fmodulo-sched
5157 @opindex fmodulo-sched
5158 Perform swing modulo scheduling immediately before the first scheduling
5159 pass.  This pass looks at innermost loops and reorders their
5160 instructions by overlapping different iterations.
5161
5162 @item -fno-branch-count-reg
5163 @opindex fno-branch-count-reg
5164 Do not use ``decrement and branch'' instructions on a count register,
5165 but instead generate a sequence of instructions that decrement a
5166 register, compare it against zero, then branch based upon the result.
5167 This option is only meaningful on architectures that support such
5168 instructions, which include x86, PowerPC, IA-64 and S/390.
5169
5170 The default is @option{-fbranch-count-reg}.
5171
5172 @item -fno-function-cse
5173 @opindex fno-function-cse
5174 Do not put function addresses in registers; make each instruction that
5175 calls a constant function contain the function's address explicitly.
5176
5177 This option results in less efficient code, but some strange hacks
5178 that alter the assembler output may be confused by the optimizations
5179 performed when this option is not used.
5180
5181 The default is @option{-ffunction-cse}
5182
5183 @item -fno-zero-initialized-in-bss
5184 @opindex fno-zero-initialized-in-bss
5185 If the target supports a BSS section, GCC by default puts variables that
5186 are initialized to zero into BSS@.  This can save space in the resulting
5187 code.
5188
5189 This option turns off this behavior because some programs explicitly
5190 rely on variables going to the data section.  E.g., so that the
5191 resulting executable can find the beginning of that section and/or make
5192 assumptions based on that.
5193
5194 The default is @option{-fzero-initialized-in-bss}.
5195
5196 @item -fbounds-check
5197 @opindex fbounds-check
5198 For front-ends that support it, generate additional code to check that
5199 indices used to access arrays are within the declared range.  This is
5200 currently only supported by the Java and Fortran front-ends, where
5201 this option defaults to true and false respectively.
5202
5203 @item -fmudflap -fmudflapth -fmudflapir
5204 @opindex fmudflap
5205 @opindex fmudflapth
5206 @opindex fmudflapir
5207 @cindex bounds checking
5208 @cindex mudflap
5209 For front-ends that support it (C and C++), instrument all risky
5210 pointer/array dereferencing operations, some standard library
5211 string/heap functions, and some other associated constructs with
5212 range/validity tests.  Modules so instrumented should be immune to
5213 buffer overflows, invalid heap use, and some other classes of C/C++
5214 programming errors.  The instrumentation relies on a separate runtime
5215 library (@file{libmudflap}), which will be linked into a program if
5216 @option{-fmudflap} is given at link time.  Run-time behavior of the
5217 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
5218 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
5219 for its options.
5220
5221 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
5222 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
5223 addition to @option{-fmudflap} or @option{-fmudflapth}, if
5224 instrumentation should ignore pointer reads.  This produces less
5225 instrumentation (and therefore faster execution) and still provides
5226 some protection against outright memory corrupting writes, but allows
5227 erroneously read data to propagate within a program.
5228
5229 @item -fthread-jumps
5230 @opindex fthread-jumps
5231 Perform optimizations where we check to see if a jump branches to a
5232 location where another comparison subsumed by the first is found.  If
5233 so, the first branch is redirected to either the destination of the
5234 second branch or a point immediately following it, depending on whether
5235 the condition is known to be true or false.
5236
5237 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5238
5239 @item -fsplit-wide-types
5240 @opindex fsplit-wide-types
5241 When using a type that occupies multiple registers, such as @code{long
5242 long} on a 32-bit system, split the registers apart and allocate them
5243 independently.  This normally generates better code for those types,
5244 but may make debugging more difficult.
5245
5246 Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
5247 @option{-Os}.
5248
5249 @item -fcse-follow-jumps
5250 @opindex fcse-follow-jumps
5251 In common subexpression elimination, scan through jump instructions
5252 when the target of the jump is not reached by any other path.  For
5253 example, when CSE encounters an @code{if} statement with an
5254 @code{else} clause, CSE will follow the jump when the condition
5255 tested is false.
5256
5257 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5258
5259 @item -fcse-skip-blocks
5260 @opindex fcse-skip-blocks
5261 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
5262 follow jumps which conditionally skip over blocks.  When CSE
5263 encounters a simple @code{if} statement with no else clause,
5264 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
5265 body of the @code{if}.
5266
5267 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5268
5269 @item -frerun-cse-after-loop
5270 @opindex frerun-cse-after-loop
5271 Re-run common subexpression elimination after loop optimizations has been
5272 performed.
5273
5274 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5275
5276 @item -fgcse
5277 @opindex fgcse
5278 Perform a global common subexpression elimination pass.
5279 This pass also performs global constant and copy propagation.
5280
5281 @emph{Note:} When compiling a program using computed gotos, a GCC
5282 extension, you may get better runtime performance if you disable
5283 the global common subexpression elimination pass by adding
5284 @option{-fno-gcse} to the command line.
5285
5286 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5287
5288 @item -fgcse-lm
5289 @opindex fgcse-lm
5290 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
5291 attempt to move loads which are only killed by stores into themselves.  This
5292 allows a loop containing a load/store sequence to be changed to a load outside
5293 the loop, and a copy/store within the loop.
5294
5295 Enabled by default when gcse is enabled.
5296
5297 @item -fgcse-sm
5298 @opindex fgcse-sm
5299 When @option{-fgcse-sm} is enabled, a store motion pass is run after
5300 global common subexpression elimination.  This pass will attempt to move
5301 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
5302 loops containing a load/store sequence can be changed to a load before
5303 the loop and a store after the loop.
5304
5305 Not enabled at any optimization level.
5306
5307 @item -fgcse-las
5308 @opindex fgcse-las
5309 When @option{-fgcse-las} is enabled, the global common subexpression
5310 elimination pass eliminates redundant loads that come after stores to the
5311 same memory location (both partial and full redundancies).
5312
5313 Not enabled at any optimization level.
5314
5315 @item -fgcse-after-reload
5316 @opindex fgcse-after-reload
5317 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
5318 pass is performed after reload.  The purpose of this pass is to cleanup
5319 redundant spilling.
5320
5321 @item -funsafe-loop-optimizations
5322 @opindex funsafe-loop-optimizations
5323 If given, the loop optimizer will assume that loop indices do not
5324 overflow, and that the loops with nontrivial exit condition are not
5325 infinite.  This enables a wider range of loop optimizations even if
5326 the loop optimizer itself cannot prove that these assumptions are valid.
5327 Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
5328 if it finds this kind of loop.
5329
5330 @item -fcrossjumping
5331 @opindex crossjumping
5332 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
5333 resulting code may or may not perform better than without cross-jumping.
5334
5335 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5336
5337 @item -fif-conversion
5338 @opindex if-conversion
5339 Attempt to transform conditional jumps into branch-less equivalents.  This
5340 include use of conditional moves, min, max, set flags and abs instructions, and
5341 some tricks doable by standard arithmetics.  The use of conditional execution
5342 on chips where it is available is controlled by @code{if-conversion2}.
5343
5344 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5345
5346 @item -fif-conversion2
5347 @opindex if-conversion2
5348 Use conditional execution (where available) to transform conditional jumps into
5349 branch-less equivalents.
5350
5351 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5352
5353 @item -fdelete-null-pointer-checks
5354 @opindex fdelete-null-pointer-checks
5355 Use global dataflow analysis to identify and eliminate useless checks
5356 for null pointers.  The compiler assumes that dereferencing a null
5357 pointer would have halted the program.  If a pointer is checked after
5358 it has already been dereferenced, it cannot be null.
5359
5360 In some environments, this assumption is not true, and programs can
5361 safely dereference null pointers.  Use
5362 @option{-fno-delete-null-pointer-checks} to disable this optimization
5363 for programs which depend on that behavior.
5364
5365 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5366
5367 @item -fexpensive-optimizations
5368 @opindex fexpensive-optimizations
5369 Perform a number of minor optimizations that are relatively expensive.
5370
5371 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5372
5373 @item -foptimize-register-move
5374 @itemx -fregmove
5375 @opindex foptimize-register-move
5376 @opindex fregmove
5377 Attempt to reassign register numbers in move instructions and as
5378 operands of other simple instructions in order to maximize the amount of
5379 register tying.  This is especially helpful on machines with two-operand
5380 instructions.
5381
5382 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
5383 optimization.
5384
5385 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5386
5387 @item -fdelayed-branch
5388 @opindex fdelayed-branch
5389 If supported for the target machine, attempt to reorder instructions
5390 to exploit instruction slots available after delayed branch
5391 instructions.
5392
5393 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5394
5395 @item -fschedule-insns
5396 @opindex fschedule-insns
5397 If supported for the target machine, attempt to reorder instructions to
5398 eliminate execution stalls due to required data being unavailable.  This
5399 helps machines that have slow floating point or memory load instructions
5400 by allowing other instructions to be issued until the result of the load
5401 or floating point instruction is required.
5402
5403 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5404
5405 @item -fschedule-insns2
5406 @opindex fschedule-insns2
5407 Similar to @option{-fschedule-insns}, but requests an additional pass of
5408 instruction scheduling after register allocation has been done.  This is
5409 especially useful on machines with a relatively small number of
5410 registers and where memory load instructions take more than one cycle.
5411
5412 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5413
5414 @item -fno-sched-interblock
5415 @opindex fno-sched-interblock
5416 Don't schedule instructions across basic blocks.  This is normally
5417 enabled by default when scheduling before register allocation, i.e.@:
5418 with @option{-fschedule-insns} or at @option{-O2} or higher.
5419
5420 @item -fno-sched-spec
5421 @opindex fno-sched-spec
5422 Don't allow speculative motion of non-load instructions.  This is normally
5423 enabled by default when scheduling before register allocation, i.e.@:
5424 with @option{-fschedule-insns} or at @option{-O2} or higher.
5425
5426 @item -fsched-spec-load
5427 @opindex fsched-spec-load
5428 Allow speculative motion of some load instructions.  This only makes
5429 sense when scheduling before register allocation, i.e.@: with
5430 @option{-fschedule-insns} or at @option{-O2} or higher.
5431
5432 @item -fsched-spec-load-dangerous
5433 @opindex fsched-spec-load-dangerous
5434 Allow speculative motion of more load instructions.  This only makes
5435 sense when scheduling before register allocation, i.e.@: with
5436 @option{-fschedule-insns} or at @option{-O2} or higher.
5437
5438 @item -fsched-stalled-insns=@var{n}
5439 @opindex fsched-stalled-insns
5440 Define how many insns (if any) can be moved prematurely from the queue
5441 of stalled insns into the ready list, during the second scheduling pass.
5442
5443 @item -fsched-stalled-insns-dep=@var{n}
5444 @opindex fsched-stalled-insns-dep
5445 Define how many insn groups (cycles) will be examined for a dependency
5446 on a stalled insn that is candidate for premature removal from the queue
5447 of stalled insns.  Has an effect only during the second scheduling pass,
5448 and only if @option{-fsched-stalled-insns} is used and its value is not zero.
5449
5450 @item -fsched2-use-superblocks
5451 @opindex fsched2-use-superblocks
5452 When scheduling after register allocation, do use superblock scheduling
5453 algorithm.  Superblock scheduling allows motion across basic block boundaries
5454 resulting on faster schedules.  This option is experimental, as not all machine
5455 descriptions used by GCC model the CPU closely enough to avoid unreliable
5456 results from the algorithm.
5457
5458 This only makes sense when scheduling after register allocation, i.e.@: with
5459 @option{-fschedule-insns2} or at @option{-O2} or higher.
5460
5461 @item -fsched2-use-traces
5462 @opindex fsched2-use-traces
5463 Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
5464 allocation and additionally perform code duplication in order to increase the
5465 size of superblocks using tracer pass.  See @option{-ftracer} for details on
5466 trace formation.
5467
5468 This mode should produce faster but significantly longer programs.  Also
5469 without @option{-fbranch-probabilities} the traces constructed may not
5470 match the reality and hurt the performance.  This only makes
5471 sense when scheduling after register allocation, i.e.@: with
5472 @option{-fschedule-insns2} or at @option{-O2} or higher.
5473
5474 @item -fsee
5475 @opindex fsee
5476 Eliminates redundant extension instructions and move the non redundant
5477 ones to optimal placement using LCM.
5478
5479 @item -freschedule-modulo-scheduled-loops
5480 @opindex fscheduling-in-modulo-scheduled-loops
5481 The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled
5482 we may want to prevent the later scheduling passes from changing its schedule, we use this
5483 option to control that.
5484
5485 @item -fcaller-saves
5486 @opindex fcaller-saves
5487 Enable values to be allocated in registers that will be clobbered by
5488 function calls, by emitting extra instructions to save and restore the
5489 registers around such calls.  Such allocation is done only when it
5490 seems to result in better code than would otherwise be produced.
5491
5492 This option is always enabled by default on certain machines, usually
5493 those which have no call-preserved registers to use instead.
5494
5495 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5496
5497 @item -ftree-pre
5498 Perform Partial Redundancy Elimination (PRE) on trees.  This flag is
5499 enabled by default at @option{-O2} and @option{-O3}.
5500
5501 @item -ftree-fre
5502 Perform Full Redundancy Elimination (FRE) on trees.  The difference
5503 between FRE and PRE is that FRE only considers expressions
5504 that are computed on all paths leading to the redundant computation.
5505 This analysis is faster than PRE, though it exposes fewer redundancies.
5506 This flag is enabled by default at @option{-O} and higher.
5507
5508 @item -ftree-copy-prop
5509 Perform copy propagation on trees.  This pass eliminates unnecessary
5510 copy operations.  This flag is enabled by default at @option{-O} and
5511 higher.
5512
5513 @item -ftree-store-copy-prop
5514 Perform copy propagation of memory loads and stores.  This pass
5515 eliminates unnecessary copy operations in memory references
5516 (structures, global variables, arrays, etc).  This flag is enabled by
5517 default at @option{-O2} and higher.
5518
5519 @item -ftree-salias
5520 Perform structural alias analysis on trees.  This flag
5521 is enabled by default at @option{-O} and higher.
5522
5523 @item -fipa-pta
5524 Perform interprocedural pointer analysis.
5525
5526 @item -ftree-sink
5527 Perform forward store motion  on trees.  This flag is
5528 enabled by default at @option{-O} and higher.
5529
5530 @item -ftree-ccp
5531 Perform sparse conditional constant propagation (CCP) on trees.  This
5532 pass only operates on local scalar variables and is enabled by default
5533 at @option{-O} and higher.
5534
5535 @item -ftree-store-ccp
5536 Perform sparse conditional constant propagation (CCP) on trees.  This
5537 pass operates on both local scalar variables and memory stores and
5538 loads (global variables, structures, arrays, etc).  This flag is
5539 enabled by default at @option{-O2} and higher.
5540
5541 @item -ftree-dce
5542 Perform dead code elimination (DCE) on trees.  This flag is enabled by
5543 default at @option{-O} and higher.
5544
5545 @item -ftree-dominator-opts
5546 Perform a variety of simple scalar cleanups (constant/copy
5547 propagation, redundancy elimination, range propagation and expression
5548 simplification) based on a dominator tree traversal.  This also
5549 performs jump threading (to reduce jumps to jumps). This flag is
5550 enabled by default at @option{-O} and higher.
5551
5552 @item -ftree-ch
5553 Perform loop header copying on trees.  This is beneficial since it increases
5554 effectiveness of code motion optimizations.  It also saves one jump.  This flag
5555 is enabled by default at @option{-O} and higher.  It is not enabled
5556 for @option{-Os}, since it usually increases code size.
5557
5558 @item -ftree-loop-optimize
5559 Perform loop optimizations on trees.  This flag is enabled by default
5560 at @option{-O} and higher.
5561
5562 @item -ftree-loop-linear
5563 Perform linear loop transformations on tree.  This flag can improve cache
5564 performance and allow further loop optimizations to take place.
5565
5566 @item -fcheck-data-deps
5567 Compare the results of several data dependence analyzers.  This option
5568 is used for debugging the data dependence analyzers.
5569
5570 @item -ftree-loop-im
5571 Perform loop invariant motion on trees.  This pass moves only invariants that
5572 would be hard to handle at RTL level (function calls, operations that expand to
5573 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
5574 operands of conditions that are invariant out of the loop, so that we can use
5575 just trivial invariantness analysis in loop unswitching.  The pass also includes
5576 store motion.
5577
5578 @item -ftree-loop-ivcanon
5579 Create a canonical counter for number of iterations in the loop for that
5580 determining number of iterations requires complicated analysis.  Later
5581 optimizations then may determine the number easily.  Useful especially
5582 in connection with unrolling.
5583
5584 @item -fivopts
5585 Perform induction variable optimizations (strength reduction, induction
5586 variable merging and induction variable elimination) on trees.
5587
5588 @item -ftree-sra
5589 Perform scalar replacement of aggregates.  This pass replaces structure
5590 references with scalars to prevent committing structures to memory too
5591 early.  This flag is enabled by default at @option{-O} and higher.
5592
5593 @item -ftree-copyrename
5594 Perform copy renaming on trees.  This pass attempts to rename compiler
5595 temporaries to other variables at copy locations, usually resulting in
5596 variable names which more closely resemble the original variables.  This flag
5597 is enabled by default at @option{-O} and higher.
5598
5599 @item -ftree-ter
5600 Perform temporary expression replacement during the SSA->normal phase.  Single
5601 use/single def temporaries are replaced at their use location with their
5602 defining expression.  This results in non-GIMPLE code, but gives the expanders
5603 much more complex trees to work on resulting in better RTL generation.  This is
5604 enabled by default at @option{-O} and higher.
5605
5606 @item -ftree-vectorize
5607 Perform loop vectorization on trees.
5608
5609 @item -ftree-vect-loop-version
5610 @opindex ftree-vect-loop-version
5611 Perform loop versioning when doing loop vectorization on trees.  When a loop
5612 appears to be vectorizable except that data alignment or data dependence cannot
5613 be determined at compile time then vectorized and non-vectorized versions of
5614 the loop are generated along with runtime checks for alignment or dependence
5615 to control which version is executed.  This option is enabled by default
5616 except at level @option{-Os} where it is disabled.
5617
5618 @item -ftree-vrp
5619 Perform Value Range Propagation on trees.  This is similar to the
5620 constant propagation pass, but instead of values, ranges of values are
5621 propagated.  This allows the optimizers to remove unnecessary range
5622 checks like array bound checks and null pointer checks.  This is
5623 enabled by default at @option{-O2} and higher.  Null pointer check
5624 elimination is only done if @option{-fdelete-null-pointer-checks} is
5625 enabled.
5626
5627 @item -ftracer
5628 @opindex ftracer
5629 Perform tail duplication to enlarge superblock size.  This transformation
5630 simplifies the control flow of the function allowing other optimizations to do
5631 better job.
5632
5633 @item -funroll-loops
5634 @opindex funroll-loops
5635 Unroll loops whose number of iterations can be determined at compile
5636 time or upon entry to the loop.  @option{-funroll-loops} implies
5637 @option{-frerun-cse-after-loop}.  This option makes code larger,
5638 and may or may not make it run faster.
5639
5640 @item -funroll-all-loops
5641 @opindex funroll-all-loops
5642 Unroll all loops, even if their number of iterations is uncertain when
5643 the loop is entered.  This usually makes programs run more slowly.
5644 @option{-funroll-all-loops} implies the same options as
5645 @option{-funroll-loops},
5646
5647 @item -fsplit-ivs-in-unroller
5648 @opindex fsplit-ivs-in-unroller
5649 Enables expressing of values of induction variables in later iterations
5650 of the unrolled loop using the value in the first iteration.  This breaks
5651 long dependency chains, thus improving efficiency of the scheduling passes.
5652
5653 Combination of @option{-fweb} and CSE is often sufficient to obtain the
5654 same effect.  However in cases the loop body is more complicated than
5655 a single basic block, this is not reliable.  It also does not work at all
5656 on some of the architectures due to restrictions in the CSE pass.
5657
5658 This optimization is enabled by default.
5659
5660 @item -fvariable-expansion-in-unroller
5661 @opindex fvariable-expansion-in-unroller
5662 With this option, the compiler will create multiple copies of some
5663 local variables when unrolling a loop which can result in superior code.
5664
5665 @item -fprefetch-loop-arrays
5666 @opindex fprefetch-loop-arrays
5667 If supported by the target machine, generate instructions to prefetch
5668 memory to improve the performance of loops that access large arrays.
5669
5670 This option may generate better or worse code; results are highly
5671 dependent on the structure of loops within the source code.
5672
5673 Disabled at level @option{-Os}.
5674
5675 @item -fno-peephole
5676 @itemx -fno-peephole2
5677 @opindex fno-peephole
5678 @opindex fno-peephole2
5679 Disable any machine-specific peephole optimizations.  The difference
5680 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
5681 are implemented in the compiler; some targets use one, some use the
5682 other, a few use both.
5683
5684 @option{-fpeephole} is enabled by default.
5685 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5686
5687 @item -fno-guess-branch-probability
5688 @opindex fno-guess-branch-probability
5689 Do not guess branch probabilities using heuristics.
5690
5691 GCC will use heuristics to guess branch probabilities if they are
5692 not provided by profiling feedback (@option{-fprofile-arcs}).  These
5693 heuristics are based on the control flow graph.  If some branch probabilities
5694 are specified by @samp{__builtin_expect}, then the heuristics will be
5695 used to guess branch probabilities for the rest of the control flow graph,
5696 taking the @samp{__builtin_expect} info into account.  The interactions
5697 between the heuristics and @samp{__builtin_expect} can be complex, and in
5698 some cases, it may be useful to disable the heuristics so that the effects
5699 of @samp{__builtin_expect} are easier to understand.
5700
5701 The default is @option{-fguess-branch-probability} at levels
5702 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5703
5704 @item -freorder-blocks
5705 @opindex freorder-blocks
5706 Reorder basic blocks in the compiled function in order to reduce number of
5707 taken branches and improve code locality.
5708
5709 Enabled at levels @option{-O2}, @option{-O3}.
5710
5711 @item -freorder-blocks-and-partition
5712 @opindex freorder-blocks-and-partition
5713 In addition to reordering basic blocks in the compiled function, in order
5714 to reduce number of taken branches, partitions hot and cold basic blocks
5715 into separate sections of the assembly and .o files, to improve
5716 paging and cache locality performance.
5717
5718 This optimization is automatically turned off in the presence of
5719 exception handling, for linkonce sections, for functions with a user-defined
5720 section attribute and on any architecture that does not support named
5721 sections.
5722
5723 @item -freorder-functions
5724 @opindex freorder-functions
5725 Reorder functions in the object file in order to
5726 improve code locality.  This is implemented by using special
5727 subsections @code{.text.hot} for most frequently executed functions and
5728 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
5729 the linker so object file format must support named sections and linker must
5730 place them in a reasonable way.
5731
5732 Also profile feedback must be available in to make this option effective.  See
5733 @option{-fprofile-arcs} for details.
5734
5735 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5736
5737 @item -fstrict-aliasing
5738 @opindex fstrict-aliasing
5739 Allows the compiler to assume the strictest aliasing rules applicable to
5740 the language being compiled.  For C (and C++), this activates
5741 optimizations based on the type of expressions.  In particular, an
5742 object of one type is assumed never to reside at the same address as an
5743 object of a different type, unless the types are almost the same.  For
5744 example, an @code{unsigned int} can alias an @code{int}, but not a
5745 @code{void*} or a @code{double}.  A character type may alias any other
5746 type.
5747
5748 Pay special attention to code like this:
5749 @smallexample
5750 union a_union @{
5751   int i;
5752   double d;
5753 @};
5754
5755 int f() @{
5756   a_union t;
5757   t.d = 3.0;
5758   return t.i;
5759 @}
5760 @end smallexample
5761 The practice of reading from a different union member than the one most
5762 recently written to (called ``type-punning'') is common.  Even with
5763 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
5764 is accessed through the union type.  So, the code above will work as
5765 expected.  However, this code might not:
5766 @smallexample
5767 int f() @{
5768   a_union t;
5769   int* ip;
5770   t.d = 3.0;
5771   ip = &t.i;
5772   return *ip;
5773 @}
5774 @end smallexample
5775
5776 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5777
5778 @item -fstrict-overflow
5779 @opindex fstrict-overflow
5780 Allow the compiler to assume strict signed overflow rules, depending
5781 on the language being compiled.  For C (and C++) this means that
5782 overflow when doing arithmetic with signed numbers is undefined, which
5783 means that the compiler may assume that it will not happen.  This
5784 permits various optimizations.  For example, the compiler will assume
5785 that an expression like @code{i + 10 > i} will always be true for
5786 signed @code{i}.  This assumption is only valid if signed overflow is
5787 undefined, as the expression is false if @code{i + 10} overflows when
5788 using twos complement arithmetic.  When this option is in effect any
5789 attempt to determine whether an operation on signed numbers will
5790 overflow must be written carefully to not actually involve overflow.
5791
5792 See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
5793 that signed overflow is fully defined: it wraps.  When
5794 @option{-fwrapv} is used, there is no difference between
5795 @option{-fstrict-overflow} and @option{-fno-strict-overflow}.  With
5796 @option{-fwrapv} certain types of overflow are permitted.  For
5797 example, if the compiler gets an overflow when doing arithmetic on
5798 constants, the overflowed value can still be used with
5799 @option{-fwrapv}, but not otherwise.
5800
5801 The @option{-fstrict-overflow} option is enabled at levels
5802 @option{-O2}, @option{-O3}, @option{-Os}.
5803
5804 @item -falign-functions
5805 @itemx -falign-functions=@var{n}
5806 @opindex falign-functions
5807 Align the start of functions to the next power-of-two greater than
5808 @var{n}, skipping up to @var{n} bytes.  For instance,
5809 @option{-falign-functions=32} aligns functions to the next 32-byte
5810 boundary, but @option{-falign-functions=24} would align to the next
5811 32-byte boundary only if this can be done by skipping 23 bytes or less.
5812
5813 @option{-fno-align-functions} and @option{-falign-functions=1} are
5814 equivalent and mean that functions will not be aligned.
5815
5816 Some assemblers only support this flag when @var{n} is a power of two;
5817 in that case, it is rounded up.
5818
5819 If @var{n} is not specified or is zero, use a machine-dependent default.
5820
5821 Enabled at levels @option{-O2}, @option{-O3}.
5822
5823 @item -falign-labels
5824 @itemx -falign-labels=@var{n}
5825 @opindex falign-labels
5826 Align all branch targets to a power-of-two boundary, skipping up to
5827 @var{n} bytes like @option{-falign-functions}.  This option can easily
5828 make code slower, because it must insert dummy operations for when the
5829 branch target is reached in the usual flow of the code.
5830
5831 @option{-fno-align-labels} and @option{-falign-labels=1} are
5832 equivalent and mean that labels will not be aligned.
5833
5834 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
5835 are greater than this value, then their values are used instead.
5836
5837 If @var{n} is not specified or is zero, use a machine-dependent default
5838 which is very likely to be @samp{1}, meaning no alignment.
5839
5840 Enabled at levels @option{-O2}, @option{-O3}.
5841
5842 @item -falign-loops
5843 @itemx -falign-loops=@var{n}
5844 @opindex falign-loops
5845 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
5846 like @option{-falign-functions}.  The hope is that the loop will be
5847 executed many times, which will make up for any execution of the dummy
5848 operations.
5849
5850 @option{-fno-align-loops} and @option{-falign-loops=1} are
5851 equivalent and mean that loops will not be aligned.
5852
5853 If @var{n} is not specified or is zero, use a machine-dependent default.
5854
5855 Enabled at levels @option{-O2}, @option{-O3}.
5856
5857 @item -falign-jumps
5858 @itemx -falign-jumps=@var{n}
5859 @opindex falign-jumps
5860 Align branch targets to a power-of-two boundary, for branch targets
5861 where the targets can only be reached by jumping, skipping up to @var{n}
5862 bytes like @option{-falign-functions}.  In this case, no dummy operations
5863 need be executed.
5864
5865 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
5866 equivalent and mean that loops will not be aligned.
5867
5868 If @var{n} is not specified or is zero, use a machine-dependent default.
5869
5870 Enabled at levels @option{-O2}, @option{-O3}.
5871
5872 @item -funit-at-a-time
5873 @opindex funit-at-a-time
5874 Parse the whole compilation unit before starting to produce code.
5875 This allows some extra optimizations to take place but consumes
5876 more memory (in general).  There are some compatibility issues
5877 with @emph{unit-at-a-time} mode:
5878 @itemize @bullet
5879 @item
5880 enabling @emph{unit-at-a-time} mode may change the order
5881 in which functions, variables, and top-level @code{asm} statements
5882 are emitted, and will likely break code relying on some particular
5883 ordering.  The majority of such top-level @code{asm} statements,
5884 though, can be replaced by @code{section} attributes.  The
5885 @option{fno-toplevel-reorder} option may be used to keep the ordering
5886 used in the input file, at the cost of some optimizations.
5887
5888 @item
5889 @emph{unit-at-a-time} mode removes unreferenced static variables
5890 and functions.  This may result in undefined references
5891 when an @code{asm} statement refers directly to variables or functions
5892 that are otherwise unused.  In that case either the variable/function
5893 shall be listed as an operand of the @code{asm} statement operand or,
5894 in the case of top-level @code{asm} statements the attribute @code{used}
5895 shall be used on the declaration.
5896
5897 @item
5898 Static functions now can use non-standard passing conventions that
5899 may break @code{asm} statements calling functions directly.  Again,
5900 attribute @code{used} will prevent this behavior.
5901 @end itemize
5902
5903 As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
5904 but this scheme may not be supported by future releases of GCC@.
5905
5906 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5907
5908 @item -fno-toplevel-reorder
5909 Do not reorder top-level functions, variables, and @code{asm}
5910 statements.  Output them in the same order that they appear in the
5911 input file.  When this option is used, unreferenced static variables
5912 will not be removed.  This option is intended to support existing code
5913 which relies on a particular ordering.  For new code, it is better to
5914 use attributes.
5915
5916 @item -fweb
5917 @opindex fweb
5918 Constructs webs as commonly used for register allocation purposes and assign
5919 each web individual pseudo register.  This allows the register allocation pass
5920 to operate on pseudos directly, but also strengthens several other optimization
5921 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
5922 however, make debugging impossible, since variables will no longer stay in a
5923 ``home register''.
5924
5925 Enabled by default with @option{-funroll-loops}.
5926
5927 @item -fwhole-program
5928 @opindex fwhole-program
5929 Assume that the current compilation unit represents whole program being
5930 compiled.  All public functions and variables with the exception of @code{main}
5931 and those merged by attribute @code{externally_visible} become static functions
5932 and in a affect gets more aggressively optimized by interprocedural optimizers.
5933 While this option is equivalent to proper use of @code{static} keyword for
5934 programs consisting of single file, in combination with option
5935 @option{--combine} this flag can be used to compile most of smaller scale C
5936 programs since the functions and variables become local for the whole combined
5937 compilation unit, not for the single source file itself.
5938
5939
5940 @item -fno-cprop-registers
5941 @opindex fno-cprop-registers
5942 After register allocation and post-register allocation instruction splitting,
5943 we perform a copy-propagation pass to try to reduce scheduling dependencies
5944 and occasionally eliminate the copy.
5945
5946 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5947
5948 @item -fprofile-generate
5949 @opindex fprofile-generate
5950
5951 Enable options usually used for instrumenting application to produce
5952 profile useful for later recompilation with profile feedback based
5953 optimization.  You must use @option{-fprofile-generate} both when
5954 compiling and when linking your program.
5955
5956 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
5957
5958 @item -fprofile-use
5959 @opindex fprofile-use
5960 Enable profile feedback directed optimizations, and optimizations
5961 generally profitable only with profile feedback available.
5962
5963 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
5964 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
5965
5966 By default, GCC emits an error message if the feedback profiles do not
5967 match the source code.  This error can be turned into a warning by using
5968 @option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
5969 code.
5970 @end table
5971
5972 The following options control compiler behavior regarding floating
5973 point arithmetic.  These options trade off between speed and
5974 correctness.  All must be specifically enabled.
5975
5976 @table @gcctabopt
5977 @item -ffloat-store
5978 @opindex ffloat-store
5979 Do not store floating point variables in registers, and inhibit other
5980 options that might change whether a floating point value is taken from a
5981 register or memory.
5982
5983 @cindex floating point precision
5984 This option prevents undesirable excess precision on machines such as
5985 the 68000 where the floating registers (of the 68881) keep more
5986 precision than a @code{double} is supposed to have.  Similarly for the
5987 x86 architecture.  For most programs, the excess precision does only
5988 good, but a few programs rely on the precise definition of IEEE floating
5989 point.  Use @option{-ffloat-store} for such programs, after modifying
5990 them to store all pertinent intermediate computations into variables.
5991
5992 @item -ffast-math
5993 @opindex ffast-math
5994 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
5995 @option{-fno-trapping-math}, @option{-ffinite-math-only},
5996 @option{-fno-rounding-math}, @option{-fno-signaling-nans},
5997 @option{-fno-signed-zeros} and @option{fcx-limited-range}.
5998
5999 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
6000
6001 This option is not turned on by any @option{-O} option since
6002 it can result in incorrect output for programs which depend on
6003 an exact implementation of IEEE or ISO rules/specifications for
6004 math functions. It may, however, yield faster code for programs
6005 that do not require the guarantees of these specifications.
6006
6007 @item -fno-math-errno
6008 @opindex fno-math-errno
6009 Do not set ERRNO after calling math functions that are executed
6010 with a single instruction, e.g., sqrt.  A program that relies on
6011 IEEE exceptions for math error handling may want to use this flag
6012 for speed while maintaining IEEE arithmetic compatibility.
6013
6014 This option is not turned on by any @option{-O} option since
6015 it can result in incorrect output for programs which depend on
6016 an exact implementation of IEEE or ISO rules/specifications for
6017 math functions. It may, however, yield faster code for programs
6018 that do not require the guarantees of these specifications.
6019
6020 The default is @option{-fmath-errno}.
6021
6022 On Darwin systems, the math library never sets @code{errno}.  There is
6023 therefore no reason for the compiler to consider the possibility that
6024 it might, and @option{-fno-math-errno} is the default.
6025
6026 @item -funsafe-math-optimizations
6027 @opindex funsafe-math-optimizations
6028 Allow optimizations for floating-point arithmetic that (a) assume
6029 that arguments and results are valid and (b) may violate IEEE or
6030 ANSI standards.  When used at link-time, it may include libraries
6031 or startup files that change the default FPU control word or other
6032 similar optimizations.
6033
6034 This option is not turned on by any @option{-O} option since
6035 it can result in incorrect output for programs which depend on
6036 an exact implementation of IEEE or ISO rules/specifications for
6037 math functions. It may, however, yield faster code for programs
6038 that do not require the guarantees of these specifications.
6039
6040 The default is @option{-fno-unsafe-math-optimizations}.
6041
6042 @item -ffinite-math-only
6043 @opindex ffinite-math-only
6044 Allow optimizations for floating-point arithmetic that assume
6045 that arguments and results are not NaNs or +-Infs.
6046
6047 This option is not turned on by any @option{-O} option since
6048 it can result in incorrect output for programs which depend on
6049 an exact implementation of IEEE or ISO rules/specifications for
6050 math functions. It may, however, yield faster code for programs
6051 that do not require the guarantees of these specifications.
6052
6053 The default is @option{-fno-finite-math-only}.
6054
6055 @item -fno-signed-zeros
6056 @opindex fno-signed-zeros
6057 Allow optimizations for floating point arithmetic that ignore the
6058 signedness of zero.  IEEE arithmetic specifies the behavior of
6059 distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
6060 of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
6061 This option implies that the sign of a zero result isn't significant.
6062
6063 The default is @option{-fsigned-zeros}.
6064
6065 @item -fno-trapping-math
6066 @opindex fno-trapping-math
6067 Compile code assuming that floating-point operations cannot generate
6068 user-visible traps.  These traps include division by zero, overflow,
6069 underflow, inexact result and invalid operation.  This option implies
6070 @option{-fno-signaling-nans}.  Setting this option may allow faster
6071 code if one relies on ``non-stop'' IEEE arithmetic, for example.
6072
6073 This option should never be turned on by any @option{-O} option since
6074 it can result in incorrect output for programs which depend on
6075 an exact implementation of IEEE or ISO rules/specifications for
6076 math functions.
6077
6078 The default is @option{-ftrapping-math}.
6079
6080 @item -frounding-math
6081 @opindex frounding-math
6082 Disable transformations and optimizations that assume default floating
6083 point rounding behavior.  This is round-to-zero for all floating point
6084 to integer conversions, and round-to-nearest for all other arithmetic
6085 truncations.  This option should be specified for programs that change
6086 the FP rounding mode dynamically, or that may be executed with a
6087 non-default rounding mode.  This option disables constant folding of
6088 floating point expressions at compile-time (which may be affected by
6089 rounding mode) and arithmetic transformations that are unsafe in the
6090 presence of sign-dependent rounding modes.
6091
6092 The default is @option{-fno-rounding-math}.
6093
6094 This option is experimental and does not currently guarantee to
6095 disable all GCC optimizations that are affected by rounding mode.
6096 Future versions of GCC may provide finer control of this setting
6097 using C99's @code{FENV_ACCESS} pragma.  This command line option
6098 will be used to specify the default state for @code{FENV_ACCESS}.
6099
6100 @item -frtl-abstract-sequences
6101 @opindex frtl-abstract-sequences
6102 It is a size optimization method. This option is to find identical
6103 sequences of code, which can be turned into pseudo-procedures  and
6104 then  replace  all  occurrences with  calls to  the  newly created
6105 subroutine. It is kind of an opposite of @option{-finline-functions}.
6106 This optimization runs at RTL level.
6107
6108 @item -fsignaling-nans
6109 @opindex fsignaling-nans
6110 Compile code assuming that IEEE signaling NaNs may generate user-visible
6111 traps during floating-point operations.  Setting this option disables
6112 optimizations that may change the number of exceptions visible with
6113 signaling NaNs.  This option implies @option{-ftrapping-math}.
6114
6115 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
6116 be defined.
6117
6118 The default is @option{-fno-signaling-nans}.
6119
6120 This option is experimental and does not currently guarantee to
6121 disable all GCC optimizations that affect signaling NaN behavior.
6122
6123 @item -fsingle-precision-constant
6124 @opindex fsingle-precision-constant
6125 Treat floating point constant as single precision constant instead of
6126 implicitly converting it to double precision constant.
6127
6128 @item -fcx-limited-range
6129 @itemx -fno-cx-limited-range
6130 @opindex fcx-limited-range
6131 @opindex fno-cx-limited-range
6132 When enabled, this option states that a range reduction step is not
6133 needed when performing complex division.  The default is
6134 @option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.
6135
6136 This option controls the default setting of the ISO C99
6137 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
6138 all languages.
6139
6140 @end table
6141
6142 The following options control optimizations that may improve
6143 performance, but are not enabled by any @option{-O} options.  This
6144 section includes experimental options that may produce broken code.
6145
6146 @table @gcctabopt
6147 @item -fbranch-probabilities
6148 @opindex fbranch-probabilities
6149 After running a program compiled with @option{-fprofile-arcs}
6150 (@pxref{Debugging Options,, Options for Debugging Your Program or
6151 @command{gcc}}), you can compile it a second time using
6152 @option{-fbranch-probabilities}, to improve optimizations based on
6153 the number of times each branch was taken.  When the program
6154 compiled with @option{-fprofile-arcs} exits it saves arc execution
6155 counts to a file called @file{@var{sourcename}.gcda} for each source
6156 file.  The information in this data file is very dependent on the
6157 structure of the generated code, so you must use the same source code
6158 and the same optimization options for both compilations.
6159
6160 With @option{-fbranch-probabilities}, GCC puts a
6161 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
6162 These can be used to improve optimization.  Currently, they are only
6163 used in one place: in @file{reorg.c}, instead of guessing which path a
6164 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
6165 exactly determine which path is taken more often.
6166
6167 @item -fprofile-values
6168 @opindex fprofile-values
6169 If combined with @option{-fprofile-arcs}, it adds code so that some
6170 data about values of expressions in the program is gathered.
6171
6172 With @option{-fbranch-probabilities}, it reads back the data gathered
6173 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
6174 notes to instructions for their later usage in optimizations.
6175
6176 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
6177
6178 @item -fvpt
6179 @opindex fvpt
6180 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
6181 a code to gather information about values of expressions.
6182
6183 With @option{-fbranch-probabilities}, it reads back the data gathered
6184 and actually performs the optimizations based on them.
6185 Currently the optimizations include specialization of division operation
6186 using the knowledge about the value of the denominator.
6187
6188 @item -frename-registers
6189 @opindex frename-registers
6190 Attempt to avoid false dependencies in scheduled code by making use
6191 of registers left over after register allocation.  This optimization
6192 will most benefit processors with lots of registers.  Depending on the
6193 debug information format adopted by the target, however, it can
6194 make debugging impossible, since variables will no longer stay in
6195 a ``home register''.
6196
6197 Enabled by default with @option{-funroll-loops}.
6198
6199 @item -ftracer
6200 @opindex ftracer
6201 Perform tail duplication to enlarge superblock size.  This transformation
6202 simplifies the control flow of the function allowing other optimizations to do
6203 better job.
6204
6205 Enabled with @option{-fprofile-use}.
6206
6207 @item -funroll-loops
6208 @opindex funroll-loops
6209 Unroll loops whose number of iterations can be determined at compile time or
6210 upon entry to the loop.  @option{-funroll-loops} implies
6211 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
6212 It also turns on complete loop peeling (i.e.@: complete removal of loops with
6213 small constant number of iterations).  This option makes code larger, and may
6214 or may not make it run faster.
6215
6216 Enabled with @option{-fprofile-use}.
6217
6218 @item -funroll-all-loops
6219 @opindex funroll-all-loops
6220 Unroll all loops, even if their number of iterations is uncertain when
6221 the loop is entered.  This usually makes programs run more slowly.
6222 @option{-funroll-all-loops} implies the same options as
6223 @option{-funroll-loops}.
6224
6225 @item -fpeel-loops
6226 @opindex fpeel-loops
6227 Peels the loops for that there is enough information that they do not
6228 roll much (from profile feedback).  It also turns on complete loop peeling
6229 (i.e.@: complete removal of loops with small constant number of iterations).
6230
6231 Enabled with @option{-fprofile-use}.
6232
6233 @item -fmove-loop-invariants
6234 @opindex fmove-loop-invariants
6235 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
6236 at level @option{-O1}
6237
6238 @item -funswitch-loops
6239 @opindex funswitch-loops
6240 Move branches with loop invariant conditions out of the loop, with duplicates
6241 of the loop on both branches (modified according to result of the condition).
6242
6243 @item -ffunction-sections
6244 @itemx -fdata-sections
6245 @opindex ffunction-sections
6246 @opindex fdata-sections
6247 Place each function or data item into its own section in the output
6248 file if the target supports arbitrary sections.  The name of the
6249 function or the name of the data item determines the section's name
6250 in the output file.
6251
6252 Use these options on systems where the linker can perform optimizations
6253 to improve locality of reference in the instruction space.  Most systems
6254 using the ELF object format and SPARC processors running Solaris 2 have
6255 linkers with such optimizations.  AIX may have these optimizations in
6256 the future.
6257
6258 Only use these options when there are significant benefits from doing
6259 so.  When you specify these options, the assembler and linker will
6260 create larger object and executable files and will also be slower.
6261 You will not be able to use @code{gprof} on all systems if you
6262 specify this option and you may have problems with debugging if
6263 you specify both this option and @option{-g}.
6264
6265 @item -fbranch-target-load-optimize
6266 @opindex fbranch-target-load-optimize
6267 Perform branch target register load optimization before prologue / epilogue
6268 threading.
6269 The use of target registers can typically be exposed only during reload,
6270 thus hoisting loads out of loops and doing inter-block scheduling needs
6271 a separate optimization pass.
6272
6273 @item -fbranch-target-load-optimize2
6274 @opindex fbranch-target-load-optimize2
6275 Perform branch target register load optimization after prologue / epilogue
6276 threading.
6277
6278 @item -fbtr-bb-exclusive
6279 @opindex fbtr-bb-exclusive
6280 When performing branch target register load optimization, don't reuse
6281 branch target registers in within any basic block.
6282
6283 @item -fstack-protector
6284 Emit extra code to check for buffer overflows, such as stack smashing
6285 attacks.  This is done by adding a guard variable to functions with
6286 vulnerable objects.  This includes functions that call alloca, and
6287 functions with buffers larger than 8 bytes.  The guards are initialized
6288 when a function is entered and then checked when the function exits.
6289 If a guard check fails, an error message is printed and the program exits.
6290
6291 @item -fstack-protector-all
6292 Like @option{-fstack-protector} except that all functions are protected.
6293
6294 @item -fsection-anchors
6295 @opindex fsection-anchors
6296 Try to reduce the number of symbolic address calculations by using
6297 shared ``anchor'' symbols to address nearby objects.  This transformation
6298 can help to reduce the number of GOT entries and GOT accesses on some
6299 targets.
6300
6301 For example, the implementation of the following function @code{foo}:
6302
6303 @smallexample
6304 static int a, b, c;
6305 int foo (void) @{ return a + b + c; @}
6306 @end smallexample
6307
6308 would usually calculate the addresses of all three variables, but if you
6309 compile it with @option{-fsection-anchors}, it will access the variables
6310 from a common anchor point instead.  The effect is similar to the
6311 following pseudocode (which isn't valid C):
6312
6313 @smallexample
6314 int foo (void)
6315 @{
6316   register int *xr = &x;
6317   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
6318 @}
6319 @end smallexample
6320
6321 Not all targets support this option.
6322
6323 @item --param @var{name}=@var{value}
6324 @opindex param
6325 In some places, GCC uses various constants to control the amount of
6326 optimization that is done.  For example, GCC will not inline functions
6327 that contain more that a certain number of instructions.  You can
6328 control some of these constants on the command-line using the
6329 @option{--param} option.
6330
6331 The names of specific parameters, and the meaning of the values, are
6332 tied to the internals of the compiler, and are subject to change
6333 without notice in future releases.
6334
6335 In each case, the @var{value} is an integer.  The allowable choices for
6336 @var{name} are given in the following table:
6337
6338 @table @gcctabopt
6339 @item salias-max-implicit-fields
6340 The maximum number of fields in a variable without direct
6341 structure accesses for which structure aliasing will consider trying
6342 to track each field.  The default is 5
6343
6344 @item salias-max-array-elements
6345 The maximum number of elements an array can have and its elements
6346 still be tracked individually by structure aliasing. The default is 4
6347
6348 @item sra-max-structure-size
6349 The maximum structure size, in bytes, at which the scalar replacement
6350 of aggregates (SRA) optimization will perform block copies.  The
6351 default value, 0, implies that GCC will select the most appropriate
6352 size itself.
6353
6354 @item sra-field-structure-ratio
6355 The threshold ratio (as a percentage) between instantiated fields and
6356 the complete structure size.  We say that if the ratio of the number
6357 of bytes in instantiated fields to the number of bytes in the complete
6358 structure exceeds this parameter, then block copies are not used.  The
6359 default is 75.
6360
6361 @item max-crossjump-edges
6362 The maximum number of incoming edges to consider for crossjumping.
6363 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
6364 the number of edges incoming to each block.  Increasing values mean
6365 more aggressive optimization, making the compile time increase with
6366 probably small improvement in executable size.
6367
6368 @item min-crossjump-insns
6369 The minimum number of instructions which must be matched at the end
6370 of two blocks before crossjumping will be performed on them.  This
6371 value is ignored in the case where all instructions in the block being
6372 crossjumped from are matched.  The default value is 5.
6373
6374 @item max-grow-copy-bb-insns
6375 The maximum code size expansion factor when copying basic blocks
6376 instead of jumping.  The expansion is relative to a jump instruction.
6377 The default value is 8.
6378
6379 @item max-goto-duplication-insns
6380 The maximum number of instructions to duplicate to a block that jumps
6381 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
6382 passes, GCC factors computed gotos early in the compilation process,
6383 and unfactors them as late as possible.  Only computed jumps at the
6384 end of a basic blocks with no more than max-goto-duplication-insns are
6385 unfactored.  The default value is 8.
6386
6387 @item max-delay-slot-insn-search
6388 The maximum number of instructions to consider when looking for an
6389 instruction to fill a delay slot.  If more than this arbitrary number of
6390 instructions is searched, the time savings from filling the delay slot
6391 will be minimal so stop searching.  Increasing values mean more
6392 aggressive optimization, making the compile time increase with probably
6393 small improvement in executable run time.
6394
6395 @item max-delay-slot-live-search
6396 When trying to fill delay slots, the maximum number of instructions to
6397 consider when searching for a block with valid live register
6398 information.  Increasing this arbitrarily chosen value means more
6399 aggressive optimization, increasing the compile time.  This parameter
6400 should be removed when the delay slot code is rewritten to maintain the
6401 control-flow graph.
6402
6403 @item max-gcse-memory
6404 The approximate maximum amount of memory that will be allocated in
6405 order to perform the global common subexpression elimination
6406 optimization.  If more memory than specified is required, the
6407 optimization will not be done.
6408
6409 @item max-gcse-passes
6410 The maximum number of passes of GCSE to run.  The default is 1.
6411
6412 @item max-pending-list-length
6413 The maximum number of pending dependencies scheduling will allow
6414 before flushing the current state and starting over.  Large functions
6415 with few branches or calls can create excessively large lists which
6416 needlessly consume memory and resources.
6417
6418 @item max-inline-insns-single
6419 Several parameters control the tree inliner used in gcc.
6420 This number sets the maximum number of instructions (counted in GCC's
6421 internal representation) in a single function that the tree inliner
6422 will consider for inlining.  This only affects functions declared
6423 inline and methods implemented in a class declaration (C++).
6424 The default value is 450.
6425
6426 @item max-inline-insns-auto
6427 When you use @option{-finline-functions} (included in @option{-O3}),
6428 a lot of functions that would otherwise not be considered for inlining
6429 by the compiler will be investigated.  To those functions, a different
6430 (more restrictive) limit compared to functions declared inline can
6431 be applied.
6432 The default value is 90.
6433
6434 @item large-function-insns
6435 The limit specifying really large functions.  For functions larger than this
6436 limit after inlining inlining is constrained by
6437 @option{--param large-function-growth}.  This parameter is useful primarily
6438 to avoid extreme compilation time caused by non-linear algorithms used by the
6439 backend.
6440 This parameter is ignored when @option{-funit-at-a-time} is not used.
6441 The default value is 2700.
6442
6443 @item large-function-growth
6444 Specifies maximal growth of large function caused by inlining in percents.
6445 This parameter is ignored when @option{-funit-at-a-time} is not used.
6446 The default value is 100 which limits large function growth to 2.0 times
6447 the original size.
6448
6449 @item large-unit-insns
6450 The limit specifying large translation unit.  Growth caused by inlining of
6451 units larger than this limit is limited by @option{--param inline-unit-growth}.
6452 For small units this might be too tight (consider unit consisting of function A
6453 that is inline and B that just calls A three time.  If B is small relative to
6454 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
6455 large units consisting of small inlininable functions however the overall unit
6456 growth limit is needed to avoid exponential explosion of code size.  Thus for
6457 smaller units, the size is increased to @option{--param large-unit-insns}
6458 before applying @option{--param inline-unit-growth}.  The default is 10000
6459
6460 @item inline-unit-growth
6461 Specifies maximal overall growth of the compilation unit caused by inlining.
6462 This parameter is ignored when @option{-funit-at-a-time} is not used.
6463 The default value is 30 which limits unit growth to 1.3 times the original
6464 size.
6465
6466 @item large-stack-frame
6467 The limit specifying large stack frames.  While inlining the algorithm is trying
6468 to not grow past this limit too much.  Default value is 256 bytes.
6469
6470 @item large-stack-frame-growth
6471 Specifies maximal growth of large stack frames caused by inlining in percents.
6472 The default value is 1000 which limits large stack frame growth to 11 times
6473 the original size.
6474
6475 @item max-inline-insns-recursive
6476 @itemx max-inline-insns-recursive-auto
6477 Specifies maximum number of instructions out-of-line copy of self recursive inline
6478 function can grow into by performing recursive inlining.
6479
6480 For functions declared inline @option{--param max-inline-insns-recursive} is
6481 taken into account.  For function not declared inline, recursive inlining
6482 happens only when @option{-finline-functions} (included in @option{-O3}) is
6483 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
6484 default value is 450.
6485
6486 @item max-inline-recursive-depth
6487 @itemx max-inline-recursive-depth-auto
6488 Specifies maximum recursion depth used by the recursive inlining.
6489
6490 For functions declared inline @option{--param max-inline-recursive-depth} is
6491 taken into account.  For function not declared inline, recursive inlining
6492 happens only when @option{-finline-functions} (included in @option{-O3}) is
6493 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
6494 default value is 450.
6495
6496 @item min-inline-recursive-probability
6497 Recursive inlining is profitable only for function having deep recursion
6498 in average and can hurt for function having little recursion depth by
6499 increasing the prologue size or complexity of function body to other
6500 optimizers.
6501
6502 When profile feedback is available (see @option{-fprofile-generate}) the actual
6503 recursion depth can be guessed from probability that function will recurse via
6504 given call expression.  This parameter limits inlining only to call expression
6505 whose probability exceeds given threshold (in percents).  The default value is
6506 10.
6507
6508 @item inline-call-cost
6509 Specify cost of call instruction relative to simple arithmetics operations
6510 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
6511 functions and at the same time increases size of leaf function that is believed to
6512 reduce function size by being inlined.  In effect it increases amount of
6513 inlining for code having large abstraction penalty (many functions that just
6514 pass the arguments to other functions) and decrease inlining for code with low
6515 abstraction penalty.  The default value is 16.
6516
6517 @item min-vect-loop-bound
6518 The minimum number of iterations under which a loop will not get vectorized
6519 when @option{-ftree-vectorize} is used.  The number of iterations after
6520 vectorization needs to be greater than the value specified by this option
6521 to allow vectorization.  The default value is 0.
6522
6523 @item max-unrolled-insns
6524 The maximum number of instructions that a loop should have if that loop
6525 is unrolled, and if the loop is unrolled, it determines how many times
6526 the loop code is unrolled.
6527
6528 @item max-average-unrolled-insns
6529 The maximum number of instructions biased by probabilities of their execution
6530 that a loop should have if that loop is unrolled, and if the loop is unrolled,
6531 it determines how many times the loop code is unrolled.
6532
6533 @item max-unroll-times
6534 The maximum number of unrollings of a single loop.
6535
6536 @item max-peeled-insns
6537 The maximum number of instructions that a loop should have if that loop
6538 is peeled, and if the loop is peeled, it determines how many times
6539 the loop code is peeled.
6540
6541 @item max-peel-times
6542 The maximum number of peelings of a single loop.
6543
6544 @item max-completely-peeled-insns
6545 The maximum number of insns of a completely peeled loop.
6546
6547 @item max-completely-peel-times
6548 The maximum number of iterations of a loop to be suitable for complete peeling.
6549
6550 @item max-unswitch-insns
6551 The maximum number of insns of an unswitched loop.
6552
6553 @item max-unswitch-level
6554 The maximum number of branches unswitched in a single loop.
6555
6556 @item lim-expensive
6557 The minimum cost of an expensive expression in the loop invariant motion.
6558
6559 @item iv-consider-all-candidates-bound
6560 Bound on number of candidates for induction variables below that
6561 all candidates are considered for each use in induction variable
6562 optimizations.  Only the most relevant candidates are considered
6563 if there are more candidates, to avoid quadratic time complexity.
6564
6565 @item iv-max-considered-uses
6566 The induction variable optimizations give up on loops that contain more
6567 induction variable uses.
6568
6569 @item iv-always-prune-cand-set-bound
6570 If number of candidates in the set is smaller than this value,
6571 we always try to remove unnecessary ivs from the set during its
6572 optimization when a new iv is added to the set.
6573
6574 @item scev-max-expr-size
6575 Bound on size of expressions used in the scalar evolutions analyzer.
6576 Large expressions slow the analyzer.
6577
6578 @item omega-max-vars
6579 The maximum number of variables in an Omega constraint system.
6580 The default value is 128.
6581
6582 @item omega-max-geqs
6583 The maximum number of inequalities in an Omega constraint system.
6584 The default value is 256.
6585
6586 @item omega-max-eqs
6587 The maximum number of equalities in an Omega constraint system.
6588 The default value is 128.
6589
6590 @item omega-max-wild-cards
6591 The maximum number of wildcard variables that the Omega solver will
6592 be able to insert.  The default value is 18.
6593
6594 @item omega-hash-table-size
6595 The size of the hash table in the Omega solver.  The default value is
6596 550.
6597
6598 @item omega-max-keys
6599 The maximal number of keys used by the Omega solver.  The default
6600 value is 500.
6601
6602 @item omega-eliminate-redundant-constraints
6603 When set to 1, use expensive methods to eliminate all redundant
6604 constraints.  The default value is 0.
6605
6606 @item vect-max-version-checks
6607 The maximum number of runtime checks that can be performed when doing
6608 loop versioning in the vectorizer.  See option ftree-vect-loop-version
6609 for more information.
6610
6611 @item max-iterations-to-track
6612
6613 The maximum number of iterations of a loop the brute force algorithm
6614 for analysis of # of iterations of the loop tries to evaluate.
6615
6616 @item hot-bb-count-fraction
6617 Select fraction of the maximal count of repetitions of basic block in program
6618 given basic block needs to have to be considered hot.
6619
6620 @item hot-bb-frequency-fraction
6621 Select fraction of the maximal frequency of executions of basic block in
6622 function given basic block needs to have to be considered hot
6623
6624 @item max-predicted-iterations
6625 The maximum number of loop iterations we predict statically.  This is useful
6626 in cases where function contain single loop with known bound and other loop
6627 with unknown.  We predict the known number of iterations correctly, while
6628 the unknown number of iterations average to roughly 10.  This means that the
6629 loop without bounds would appear artificially cold relative to the other one.
6630
6631 @item tracer-dynamic-coverage
6632 @itemx tracer-dynamic-coverage-feedback
6633
6634 This value is used to limit superblock formation once the given percentage of
6635 executed instructions is covered.  This limits unnecessary code size
6636 expansion.
6637
6638 The @option{tracer-dynamic-coverage-feedback} is used only when profile
6639 feedback is available.  The real profiles (as opposed to statically estimated
6640 ones) are much less balanced allowing the threshold to be larger value.
6641
6642 @item tracer-max-code-growth
6643 Stop tail duplication once code growth has reached given percentage.  This is
6644 rather hokey argument, as most of the duplicates will be eliminated later in
6645 cross jumping, so it may be set to much higher values than is the desired code
6646 growth.
6647
6648 @item tracer-min-branch-ratio
6649
6650 Stop reverse growth when the reverse probability of best edge is less than this
6651 threshold (in percent).
6652
6653 @item tracer-min-branch-ratio
6654 @itemx tracer-min-branch-ratio-feedback
6655
6656 Stop forward growth if the best edge do have probability lower than this
6657 threshold.
6658
6659 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
6660 compilation for profile feedback and one for compilation without.  The value
6661 for compilation with profile feedback needs to be more conservative (higher) in
6662 order to make tracer effective.
6663
6664 @item max-cse-path-length
6665
6666 Maximum number of basic blocks on path that cse considers.  The default is 10.
6667
6668 @item max-cse-insns
6669 The maximum instructions CSE process before flushing. The default is 1000.
6670
6671 @item max-aliased-vops
6672
6673 Maximum number of virtual operands per function allowed to represent
6674 aliases before triggering the alias partitioning heuristic.  Alias
6675 partitioning reduces compile times and memory consumption needed for
6676 aliasing at the expense of precision loss in alias information.  The
6677 default value for this parameter is 100 for -O1, 500 for -O2 and 1000
6678 for -O3.
6679
6680 Notice that if a function contains more memory statements than the
6681 value of this parameter, it is not really possible to achieve this
6682 reduction.  In this case, the compiler will use the number of memory
6683 statements as the value for @option{max-aliased-vops}.
6684
6685 @item avg-aliased-vops
6686
6687 Average number of virtual operands per statement allowed to represent
6688 aliases before triggering the alias partitioning heuristic.  This
6689 works in conjunction with @option{max-aliased-vops}.  If a function
6690 contains more than @option{max-aliased-vops} virtual operators, then
6691 memory symbols will be grouped into memory partitions until either the
6692 total number of virtual operators is below @option{max-aliased-vops}
6693 or the average number of virtual operators per memory statement is
6694 below @option{avg-aliased-vops}.  The default value for this parameter
6695 is 1 for -O1 and -O2, and 3 for -O3.
6696
6697 @item ggc-min-expand
6698
6699 GCC uses a garbage collector to manage its own memory allocation.  This
6700 parameter specifies the minimum percentage by which the garbage
6701 collector's heap should be allowed to expand between collections.
6702 Tuning this may improve compilation speed; it has no effect on code
6703 generation.
6704
6705 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
6706 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
6707 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
6708 GCC is not able to calculate RAM on a particular platform, the lower
6709 bound of 30% is used.  Setting this parameter and
6710 @option{ggc-min-heapsize} to zero causes a full collection to occur at
6711 every opportunity.  This is extremely slow, but can be useful for
6712 debugging.
6713
6714 @item ggc-min-heapsize
6715
6716 Minimum size of the garbage collector's heap before it begins bothering
6717 to collect garbage.  The first collection occurs after the heap expands
6718 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
6719 tuning this may improve compilation speed, and has no effect on code
6720 generation.
6721
6722 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
6723 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
6724 with a lower bound of 4096 (four megabytes) and an upper bound of
6725 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
6726 particular platform, the lower bound is used.  Setting this parameter
6727 very large effectively disables garbage collection.  Setting this
6728 parameter and @option{ggc-min-expand} to zero causes a full collection
6729 to occur at every opportunity.
6730
6731 @item max-reload-search-insns
6732 The maximum number of instruction reload should look backward for equivalent
6733 register.  Increasing values mean more aggressive optimization, making the
6734 compile time increase with probably slightly better performance.  The default
6735 value is 100.
6736
6737 @item max-cselib-memory-locations
6738 The maximum number of memory locations cselib should take into account.
6739 Increasing values mean more aggressive optimization, making the compile time
6740 increase with probably slightly better performance.  The default value is 500.
6741
6742 @item max-flow-memory-locations
6743 Similar as @option{max-cselib-memory-locations} but for dataflow liveness.
6744 The default value is 100.
6745
6746 @item reorder-blocks-duplicate
6747 @itemx reorder-blocks-duplicate-feedback
6748
6749 Used by basic block reordering pass to decide whether to use unconditional
6750 branch or duplicate the code on its destination.  Code is duplicated when its
6751 estimated size is smaller than this value multiplied by the estimated size of
6752 unconditional jump in the hot spots of the program.
6753
6754 The @option{reorder-block-duplicate-feedback} is used only when profile
6755 feedback is available and may be set to higher values than
6756 @option{reorder-block-duplicate} since information about the hot spots is more
6757 accurate.
6758
6759 @item max-sched-ready-insns
6760 The maximum number of instructions ready to be issued the scheduler should
6761 consider at any given time during the first scheduling pass.  Increasing
6762 values mean more thorough searches, making the compilation time increase
6763 with probably little benefit.  The default value is 100.
6764
6765 @item max-sched-region-blocks
6766 The maximum number of blocks in a region to be considered for
6767 interblock scheduling.  The default value is 10.
6768
6769 @item max-sched-region-insns
6770 The maximum number of insns in a region to be considered for
6771 interblock scheduling.  The default value is 100.
6772
6773 @item min-spec-prob
6774 The minimum probability (in percents) of reaching a source block
6775 for interblock speculative scheduling.  The default value is 40.
6776
6777 @item max-sched-extend-regions-iters
6778 The maximum number of iterations through CFG to extend regions.
6779 0 - disable region extension,
6780 N - do at most N iterations.
6781 The default value is 0.
6782
6783 @item max-sched-insn-conflict-delay
6784 The maximum conflict delay for an insn to be considered for speculative motion.
6785 The default value is 3.
6786
6787 @item sched-spec-prob-cutoff
6788 The minimal probability of speculation success (in percents), so that
6789 speculative insn will be scheduled.
6790 The default value is 40.
6791
6792 @item max-last-value-rtl
6793
6794 The maximum size measured as number of RTLs that can be recorded in an expression
6795 in combiner for a pseudo register as last known value of that register.  The default
6796 is 10000.
6797
6798 @item integer-share-limit
6799 Small integer constants can use a shared data structure, reducing the
6800 compiler's memory usage and increasing its speed.  This sets the maximum
6801 value of a shared integer constant's.  The default value is 256.
6802
6803 @item min-virtual-mappings
6804 Specifies the minimum number of virtual mappings in the incremental
6805 SSA updater that should be registered to trigger the virtual mappings
6806 heuristic defined by virtual-mappings-ratio.  The default value is
6807 100.
6808
6809 @item virtual-mappings-ratio
6810 If the number of virtual mappings is virtual-mappings-ratio bigger
6811 than the number of virtual symbols to be updated, then the incremental
6812 SSA updater switches to a full update for those symbols.  The default
6813 ratio is 3.
6814
6815 @item ssp-buffer-size
6816 The minimum size of buffers (i.e. arrays) that will receive stack smashing
6817 protection when @option{-fstack-protection} is used.
6818
6819 @item max-jump-thread-duplication-stmts
6820 Maximum number of statements allowed in a block that needs to be
6821 duplicated when threading jumps.
6822
6823 @item max-fields-for-field-sensitive
6824 Maximum number of fields in a structure we will treat in
6825 a field sensitive manner during pointer analysis.
6826
6827 @item prefetch-latency
6828 Estimate on average number of instructions that are executed before
6829 prefetch finishes.  The distance we prefetch ahead is proportional
6830 to this constant.  Increasing this number may also lead to less
6831 streams being prefetched (see @option{simultaneous-prefetches}).
6832
6833 @item simultaneous-prefetches
6834 Maximum number of prefetches that can run at the same time.
6835
6836 @item l1-cache-line-size
6837 The size of cache line in L1 cache, in bytes.
6838
6839 @item l1-cache-size
6840 The number of cache lines in L1 cache.
6841
6842 @item verify-canonical-types
6843 Whether the compiler should verify the ``canonical'' types used for
6844 type equality comparisons within the C++ and Objective-C++ front
6845 ends. Set to 1 (the default when GCC is configured with
6846 --enable-checking) to enable verification, 0 to disable verification
6847 (the default when GCC is configured with --disable-checking).
6848
6849 @end table
6850 @end table
6851
6852 @node Preprocessor Options
6853 @section Options Controlling the Preprocessor
6854 @cindex preprocessor options
6855 @cindex options, preprocessor
6856
6857 These options control the C preprocessor, which is run on each C source
6858 file before actual compilation.
6859
6860 If you use the @option{-E} option, nothing is done except preprocessing.
6861 Some of these options make sense only together with @option{-E} because
6862 they cause the preprocessor output to be unsuitable for actual
6863 compilation.
6864
6865 @table @gcctabopt
6866 @opindex Wp
6867 You can use @option{-Wp,@var{option}} to bypass the compiler driver
6868 and pass @var{option} directly through to the preprocessor.  If
6869 @var{option} contains commas, it is split into multiple options at the
6870 commas.  However, many options are modified, translated or interpreted
6871 by the compiler driver before being passed to the preprocessor, and
6872 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
6873 interface is undocumented and subject to change, so whenever possible
6874 you should avoid using @option{-Wp} and let the driver handle the
6875 options instead.
6876
6877 @item -Xpreprocessor @var{option}
6878 @opindex preprocessor
6879 Pass @var{option} as an option to the preprocessor.  You can use this to
6880 supply system-specific preprocessor options which GCC does not know how to
6881 recognize.
6882
6883 If you want to pass an option that takes an argument, you must use
6884 @option{-Xpreprocessor} twice, once for the option and once for the argument.
6885 @end table
6886
6887 @include cppopts.texi
6888
6889 @node Assembler Options
6890 @section Passing Options to the Assembler
6891
6892 @c prevent bad page break with this line
6893 You can pass options to the assembler.
6894
6895 @table @gcctabopt
6896 @item -Wa,@var{option}
6897 @opindex Wa
6898 Pass @var{option} as an option to the assembler.  If @var{option}
6899 contains commas, it is split into multiple options at the commas.
6900
6901 @item -Xassembler @var{option}
6902 @opindex Xassembler
6903 Pass @var{option} as an option to the assembler.  You can use this to
6904 supply system-specific assembler options which GCC does not know how to
6905 recognize.
6906
6907 If you want to pass an option that takes an argument, you must use
6908 @option{-Xassembler} twice, once for the option and once for the argument.
6909
6910 @end table
6911
6912 @node Link Options
6913 @section Options for Linking
6914 @cindex link options
6915 @cindex options, linking
6916
6917 These options come into play when the compiler links object files into
6918 an executable output file.  They are meaningless if the compiler is
6919 not doing a link step.
6920
6921 @table @gcctabopt
6922 @cindex file names
6923 @item @var{object-file-name}
6924 A file name that does not end in a special recognized suffix is
6925 considered to name an object file or library.  (Object files are
6926 distinguished from libraries by the linker according to the file
6927 contents.)  If linking is done, these object files are used as input
6928 to the linker.
6929
6930 @item -c
6931 @itemx -S
6932 @itemx -E
6933 @opindex c
6934 @opindex S
6935 @opindex E
6936 If any of these options is used, then the linker is not run, and
6937 object file names should not be used as arguments.  @xref{Overall
6938 Options}.
6939
6940 @cindex Libraries
6941 @item -l@var{library}
6942 @itemx -l @var{library}
6943 @opindex l
6944 Search the library named @var{library} when linking.  (The second
6945 alternative with the library as a separate argument is only for
6946 POSIX compliance and is not recommended.)
6947
6948 It makes a difference where in the command you write this option; the
6949 linker searches and processes libraries and object files in the order they
6950 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
6951 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
6952 to functions in @samp{z}, those functions may not be loaded.
6953
6954 The linker searches a standard list of directories for the library,
6955 which is actually a file named @file{lib@var{library}.a}.  The linker
6956 then uses this file as if it had been specified precisely by name.
6957
6958 The directories searched include several standard system directories
6959 plus any that you specify with @option{-L}.
6960
6961 Normally the files found this way are library files---archive files
6962 whose members are object files.  The linker handles an archive file by
6963 scanning through it for members which define symbols that have so far
6964 been referenced but not defined.  But if the file that is found is an
6965 ordinary object file, it is linked in the usual fashion.  The only
6966 difference between using an @option{-l} option and specifying a file name
6967 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
6968 and searches several directories.
6969
6970 @item -lobjc
6971 @opindex lobjc
6972 You need this special case of the @option{-l} option in order to
6973 link an Objective-C or Objective-C++ program.
6974
6975 @item -nostartfiles
6976 @opindex nostartfiles
6977 Do not use the standard system startup files when linking.
6978 The standard system libraries are used normally, unless @option{-nostdlib}
6979 or @option{-nodefaultlibs} is used.
6980
6981 @item -nodefaultlibs
6982 @opindex nodefaultlibs
6983 Do not use the standard system libraries when linking.
6984 Only the libraries you specify will be passed to the linker.
6985 The standard startup files are used normally, unless @option{-nostartfiles}
6986 is used.  The compiler may generate calls to @code{memcmp},
6987 @code{memset}, @code{memcpy} and @code{memmove}.
6988 These entries are usually resolved by entries in
6989 libc.  These entry points should be supplied through some other
6990 mechanism when this option is specified.
6991
6992 @item -nostdlib
6993 @opindex nostdlib
6994 Do not use the standard system startup files or libraries when linking.
6995 No startup files and only the libraries you specify will be passed to
6996 the linker.  The compiler may generate calls to @code{memcmp}, @code{memset},
6997 @code{memcpy} and @code{memmove}.
6998 These entries are usually resolved by entries in
6999 libc.  These entry points should be supplied through some other
7000 mechanism when this option is specified.
7001
7002 @cindex @option{-lgcc}, use with @option{-nostdlib}
7003 @cindex @option{-nostdlib} and unresolved references
7004 @cindex unresolved references and @option{-nostdlib}
7005 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
7006 @cindex @option{-nodefaultlibs} and unresolved references
7007 @cindex unresolved references and @option{-nodefaultlibs}
7008 One of the standard libraries bypassed by @option{-nostdlib} and
7009 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
7010 that GCC uses to overcome shortcomings of particular machines, or special
7011 needs for some languages.
7012 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
7013 Collection (GCC) Internals},
7014 for more discussion of @file{libgcc.a}.)
7015 In most cases, you need @file{libgcc.a} even when you want to avoid
7016 other standard libraries.  In other words, when you specify @option{-nostdlib}
7017 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
7018 This ensures that you have no unresolved references to internal GCC
7019 library subroutines.  (For example, @samp{__main}, used to ensure C++
7020 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
7021 GNU Compiler Collection (GCC) Internals}.)
7022
7023 @item -pie
7024 @opindex pie
7025 Produce a position independent executable on targets which support it.
7026 For predictable results, you must also specify the same set of options
7027 that were used to generate code (@option{-fpie}, @option{-fPIE},
7028 or model suboptions) when you specify this option.
7029
7030 @item -rdynamic
7031 @opindex rdynamic
7032 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
7033 that support it. This instructs the linker to add all symbols, not
7034 only used ones, to the dynamic symbol table. This option is needed
7035 for some uses of @code{dlopen} or to allow obtaining backtraces
7036 from within a program.
7037
7038 @item -s
7039 @opindex s
7040 Remove all symbol table and relocation information from the executable.
7041
7042 @item -static
7043 @opindex static
7044 On systems that support dynamic linking, this prevents linking with the shared
7045 libraries.  On other systems, this option has no effect.
7046
7047 @item -shared
7048 @opindex shared
7049 Produce a shared object which can then be linked with other objects to
7050 form an executable.  Not all systems support this option.  For predictable
7051 results, you must also specify the same set of options that were used to
7052 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
7053 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
7054 needs to build supplementary stub code for constructors to work.  On
7055 multi-libbed systems, @samp{gcc -shared} must select the correct support
7056 libraries to link against.  Failing to supply the correct flags may lead
7057 to subtle defects.  Supplying them in cases where they are not necessary
7058 is innocuous.}
7059
7060 @item -shared-libgcc
7061 @itemx -static-libgcc
7062 @opindex shared-libgcc
7063 @opindex static-libgcc
7064 On systems that provide @file{libgcc} as a shared library, these options
7065 force the use of either the shared or static version respectively.
7066 If no shared version of @file{libgcc} was built when the compiler was
7067 configured, these options have no effect.
7068
7069 There are several situations in which an application should use the
7070 shared @file{libgcc} instead of the static version.  The most common
7071 of these is when the application wishes to throw and catch exceptions
7072 across different shared libraries.  In that case, each of the libraries
7073 as well as the application itself should use the shared @file{libgcc}.
7074
7075 Therefore, the G++ and GCJ drivers automatically add
7076 @option{-shared-libgcc} whenever you build a shared library or a main
7077 executable, because C++ and Java programs typically use exceptions, so
7078 this is the right thing to do.
7079
7080 If, instead, you use the GCC driver to create shared libraries, you may
7081 find that they will not always be linked with the shared @file{libgcc}.
7082 If GCC finds, at its configuration time, that you have a non-GNU linker
7083 or a GNU linker that does not support option @option{--eh-frame-hdr},
7084 it will link the shared version of @file{libgcc} into shared libraries
7085 by default.  Otherwise, it will take advantage of the linker and optimize
7086 away the linking with the shared version of @file{libgcc}, linking with
7087 the static version of libgcc by default.  This allows exceptions to
7088 propagate through such shared libraries, without incurring relocation
7089 costs at library load time.
7090
7091 However, if a library or main executable is supposed to throw or catch
7092 exceptions, you must link it using the G++ or GCJ driver, as appropriate
7093 for the languages used in the program, or using the option
7094 @option{-shared-libgcc}, such that it is linked with the shared
7095 @file{libgcc}.
7096
7097 @item -symbolic
7098 @opindex symbolic
7099 Bind references to global symbols when building a shared object.  Warn
7100 about any unresolved references (unless overridden by the link editor
7101 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
7102 this option.
7103
7104 @item -Xlinker @var{option}
7105 @opindex Xlinker
7106 Pass @var{option} as an option to the linker.  You can use this to
7107 supply system-specific linker options which GCC does not know how to
7108 recognize.
7109
7110 If you want to pass an option that takes an argument, you must use
7111 @option{-Xlinker} twice, once for the option and once for the argument.
7112 For example, to pass @option{-assert definitions}, you must write
7113 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
7114 @option{-Xlinker "-assert definitions"}, because this passes the entire
7115 string as a single argument, which is not what the linker expects.
7116
7117 @item -Wl,@var{option}
7118 @opindex Wl
7119 Pass @var{option} as an option to the linker.  If @var{option} contains
7120 commas, it is split into multiple options at the commas.
7121
7122 @item -u @var{symbol}
7123 @opindex u
7124 Pretend the symbol @var{symbol} is undefined, to force linking of
7125 library modules to define it.  You can use @option{-u} multiple times with
7126 different symbols to force loading of additional library modules.
7127 @end table
7128
7129 @node Directory Options
7130 @section Options for Directory Search
7131 @cindex directory options
7132 @cindex options, directory search
7133 @cindex search path
7134
7135 These options specify directories to search for header files, for
7136 libraries and for parts of the compiler:
7137
7138 @table @gcctabopt
7139 @item -I@var{dir}
7140 @opindex I
7141 Add the directory @var{dir} to the head of the list of directories to be
7142 searched for header files.  This can be used to override a system header
7143 file, substituting your own version, since these directories are
7144 searched before the system header file directories.  However, you should
7145 not use this option to add directories that contain vendor-supplied
7146 system header files (use @option{-isystem} for that).  If you use more than
7147 one @option{-I} option, the directories are scanned in left-to-right
7148 order; the standard system directories come after.
7149
7150 If a standard system include directory, or a directory specified with
7151 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
7152 option will be ignored.  The directory will still be searched but as a
7153 system directory at its normal position in the system include chain.
7154 This is to ensure that GCC's procedure to fix buggy system headers and
7155 the ordering for the include_next directive are not inadvertently changed.
7156 If you really need to change the search order for system directories,
7157 use the @option{-nostdinc} and/or @option{-isystem} options.
7158
7159 @item -iquote@var{dir}
7160 @opindex iquote
7161 Add the directory @var{dir} to the head of the list of directories to
7162 be searched for header files only for the case of @samp{#include
7163 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
7164 otherwise just like @option{-I}.
7165
7166 @item -L@var{dir}
7167 @opindex L
7168 Add directory @var{dir} to the list of directories to be searched
7169 for @option{-l}.
7170
7171 @item -B@var{prefix}
7172 @opindex B
7173 This option specifies where to find the executables, libraries,
7174 include files, and data files of the compiler itself.
7175
7176 The compiler driver program runs one or more of the subprograms
7177 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
7178 @var{prefix} as a prefix for each program it tries to run, both with and
7179 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
7180
7181 For each subprogram to be run, the compiler driver first tries the
7182 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
7183 was not specified, the driver tries two standard prefixes, which are
7184 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
7185 those results in a file name that is found, the unmodified program
7186 name is searched for using the directories specified in your
7187 @env{PATH} environment variable.
7188
7189 The compiler will check to see if the path provided by the @option{-B}
7190 refers to a directory, and if necessary it will add a directory
7191 separator character at the end of the path.
7192
7193 @option{-B} prefixes that effectively specify directory names also apply
7194 to libraries in the linker, because the compiler translates these
7195 options into @option{-L} options for the linker.  They also apply to
7196 includes files in the preprocessor, because the compiler translates these
7197 options into @option{-isystem} options for the preprocessor.  In this case,
7198 the compiler appends @samp{include} to the prefix.
7199
7200 The run-time support file @file{libgcc.a} can also be searched for using
7201 the @option{-B} prefix, if needed.  If it is not found there, the two
7202 standard prefixes above are tried, and that is all.  The file is left
7203 out of the link if it is not found by those means.
7204
7205 Another way to specify a prefix much like the @option{-B} prefix is to use
7206 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
7207 Variables}.
7208
7209 As a special kludge, if the path provided by @option{-B} is
7210 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
7211 9, then it will be replaced by @file{[dir/]include}.  This is to help
7212 with boot-strapping the compiler.
7213
7214 @item -specs=@var{file}
7215 @opindex specs
7216 Process @var{file} after the compiler reads in the standard @file{specs}
7217 file, in order to override the defaults that the @file{gcc} driver
7218 program uses when determining what switches to pass to @file{cc1},
7219 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
7220 @option{-specs=@var{file}} can be specified on the command line, and they
7221 are processed in order, from left to right.
7222
7223 @item --sysroot=@var{dir}
7224 @opindex sysroot
7225 Use @var{dir} as the logical root directory for headers and libraries.
7226 For example, if the compiler would normally search for headers in
7227 @file{/usr/include} and libraries in @file{/usr/lib}, it will instead
7228 search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
7229
7230 If you use both this option and the @option{-isysroot} option, then
7231 the @option{--sysroot} option will apply to libraries, but the
7232 @option{-isysroot} option will apply to header files.
7233
7234 The GNU linker (beginning with version 2.16) has the necessary support
7235 for this option.  If your linker does not support this option, the
7236 header file aspect of @option{--sysroot} will still work, but the
7237 library aspect will not.
7238
7239 @item -I-
7240 @opindex I-
7241 This option has been deprecated.  Please use @option{-iquote} instead for
7242 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
7243 Any directories you specify with @option{-I} options before the @option{-I-}
7244 option are searched only for the case of @samp{#include "@var{file}"};
7245 they are not searched for @samp{#include <@var{file}>}.
7246
7247 If additional directories are specified with @option{-I} options after
7248 the @option{-I-}, these directories are searched for all @samp{#include}
7249 directives.  (Ordinarily @emph{all} @option{-I} directories are used
7250 this way.)
7251
7252 In addition, the @option{-I-} option inhibits the use of the current
7253 directory (where the current input file came from) as the first search
7254 directory for @samp{#include "@var{file}"}.  There is no way to
7255 override this effect of @option{-I-}.  With @option{-I.} you can specify
7256 searching the directory which was current when the compiler was
7257 invoked.  That is not exactly the same as what the preprocessor does
7258 by default, but it is often satisfactory.
7259
7260 @option{-I-} does not inhibit the use of the standard system directories
7261 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
7262 independent.
7263 @end table
7264
7265 @c man end
7266
7267 @node Spec Files
7268 @section Specifying subprocesses and the switches to pass to them
7269 @cindex Spec Files
7270
7271 @command{gcc} is a driver program.  It performs its job by invoking a
7272 sequence of other programs to do the work of compiling, assembling and
7273 linking.  GCC interprets its command-line parameters and uses these to
7274 deduce which programs it should invoke, and which command-line options
7275 it ought to place on their command lines.  This behavior is controlled
7276 by @dfn{spec strings}.  In most cases there is one spec string for each
7277 program that GCC can invoke, but a few programs have multiple spec
7278 strings to control their behavior.  The spec strings built into GCC can
7279 be overridden by using the @option{-specs=} command-line switch to specify
7280 a spec file.
7281
7282 @dfn{Spec files} are plaintext files that are used to construct spec
7283 strings.  They consist of a sequence of directives separated by blank
7284 lines.  The type of directive is determined by the first non-whitespace
7285 character on the line and it can be one of the following:
7286
7287 @table @code
7288 @item %@var{command}
7289 Issues a @var{command} to the spec file processor.  The commands that can
7290 appear here are:
7291
7292 @table @code
7293 @item %include <@var{file}>
7294 @cindex %include
7295 Search for @var{file} and insert its text at the current point in the
7296 specs file.
7297
7298 @item %include_noerr <@var{file}>
7299 @cindex %include_noerr
7300 Just like @samp{%include}, but do not generate an error message if the include
7301 file cannot be found.
7302
7303 @item %rename @var{old_name} @var{new_name}
7304 @cindex %rename
7305 Rename the spec string @var{old_name} to @var{new_name}.
7306
7307 @end table
7308
7309 @item *[@var{spec_name}]:
7310 This tells the compiler to create, override or delete the named spec
7311 string.  All lines after this directive up to the next directive or
7312 blank line are considered to be the text for the spec string.  If this
7313 results in an empty string then the spec will be deleted.  (Or, if the
7314 spec did not exist, then nothing will happened.)  Otherwise, if the spec
7315 does not currently exist a new spec will be created.  If the spec does
7316 exist then its contents will be overridden by the text of this
7317 directive, unless the first character of that text is the @samp{+}
7318 character, in which case the text will be appended to the spec.
7319
7320 @item [@var{suffix}]:
7321 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
7322 and up to the next directive or blank line are considered to make up the
7323 spec string for the indicated suffix.  When the compiler encounters an
7324 input file with the named suffix, it will processes the spec string in
7325 order to work out how to compile that file.  For example:
7326
7327 @smallexample
7328 .ZZ:
7329 z-compile -input %i
7330 @end smallexample
7331
7332 This says that any input file whose name ends in @samp{.ZZ} should be
7333 passed to the program @samp{z-compile}, which should be invoked with the
7334 command-line switch @option{-input} and with the result of performing the
7335 @samp{%i} substitution.  (See below.)
7336
7337 As an alternative to providing a spec string, the text that follows a
7338 suffix directive can be one of the following:
7339
7340 @table @code
7341 @item @@@var{language}
7342 This says that the suffix is an alias for a known @var{language}.  This is
7343 similar to using the @option{-x} command-line switch to GCC to specify a
7344 language explicitly.  For example:
7345
7346 @smallexample
7347 .ZZ:
7348 @@c++
7349 @end smallexample
7350
7351 Says that .ZZ files are, in fact, C++ source files.
7352
7353 @item #@var{name}
7354 This causes an error messages saying:
7355
7356 @smallexample
7357 @var{name} compiler not installed on this system.
7358 @end smallexample
7359 @end table
7360
7361 GCC already has an extensive list of suffixes built into it.
7362 This directive will add an entry to the end of the list of suffixes, but
7363 since the list is searched from the end backwards, it is effectively
7364 possible to override earlier entries using this technique.
7365
7366 @end table
7367
7368 GCC has the following spec strings built into it.  Spec files can
7369 override these strings or create their own.  Note that individual
7370 targets can also add their own spec strings to this list.
7371
7372 @smallexample
7373 asm          Options to pass to the assembler
7374 asm_final    Options to pass to the assembler post-processor
7375 cpp          Options to pass to the C preprocessor
7376 cc1          Options to pass to the C compiler
7377 cc1plus      Options to pass to the C++ compiler
7378 endfile      Object files to include at the end of the link
7379 link         Options to pass to the linker
7380 lib          Libraries to include on the command line to the linker
7381 libgcc       Decides which GCC support library to pass to the linker
7382 linker       Sets the name of the linker
7383 predefines   Defines to be passed to the C preprocessor
7384 signed_char  Defines to pass to CPP to say whether @code{char} is signed
7385              by default
7386 startfile    Object files to include at the start of the link
7387 @end smallexample
7388
7389 Here is a small example of a spec file:
7390
7391 @smallexample
7392 %rename lib                 old_lib
7393
7394 *lib:
7395 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
7396 @end smallexample
7397
7398 This example renames the spec called @samp{lib} to @samp{old_lib} and
7399 then overrides the previous definition of @samp{lib} with a new one.
7400 The new definition adds in some extra command-line options before
7401 including the text of the old definition.
7402
7403 @dfn{Spec strings} are a list of command-line options to be passed to their
7404 corresponding program.  In addition, the spec strings can contain
7405 @samp{%}-prefixed sequences to substitute variable text or to
7406 conditionally insert text into the command line.  Using these constructs
7407 it is possible to generate quite complex command lines.
7408
7409 Here is a table of all defined @samp{%}-sequences for spec
7410 strings.  Note that spaces are not generated automatically around the
7411 results of expanding these sequences.  Therefore you can concatenate them
7412 together or combine them with constant text in a single argument.
7413
7414 @table @code
7415 @item %%
7416 Substitute one @samp{%} into the program name or argument.
7417
7418 @item %i
7419 Substitute the name of the input file being processed.
7420
7421 @item %b
7422 Substitute the basename of the input file being processed.
7423 This is the substring up to (and not including) the last period
7424 and not including the directory.
7425
7426 @item %B
7427 This is the same as @samp{%b}, but include the file suffix (text after
7428 the last period).
7429
7430 @item %d
7431 Marks the argument containing or following the @samp{%d} as a
7432 temporary file name, so that that file will be deleted if GCC exits
7433 successfully.  Unlike @samp{%g}, this contributes no text to the
7434 argument.
7435
7436 @item %g@var{suffix}
7437 Substitute a file name that has suffix @var{suffix} and is chosen
7438 once per compilation, and mark the argument in the same way as
7439 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
7440 name is now chosen in a way that is hard to predict even when previously
7441 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
7442 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
7443 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
7444 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
7445 was simply substituted with a file name chosen once per compilation,
7446 without regard to any appended suffix (which was therefore treated
7447 just like ordinary text), making such attacks more likely to succeed.
7448
7449 @item %u@var{suffix}
7450 Like @samp{%g}, but generates a new temporary file name even if
7451 @samp{%u@var{suffix}} was already seen.
7452
7453 @item %U@var{suffix}
7454 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
7455 new one if there is no such last file name.  In the absence of any
7456 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
7457 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
7458 would involve the generation of two distinct file names, one
7459 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
7460 simply substituted with a file name chosen for the previous @samp{%u},
7461 without regard to any appended suffix.
7462
7463 @item %j@var{suffix}
7464 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
7465 writable, and if save-temps is off; otherwise, substitute the name
7466 of a temporary file, just like @samp{%u}.  This temporary file is not
7467 meant for communication between processes, but rather as a junk
7468 disposal mechanism.
7469
7470 @item %|@var{suffix}
7471 @itemx %m@var{suffix}
7472 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
7473 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
7474 all.  These are the two most common ways to instruct a program that it
7475 should read from standard input or write to standard output.  If you
7476 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
7477 construct: see for example @file{f/lang-specs.h}.
7478
7479 @item %.@var{SUFFIX}
7480 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
7481 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
7482 terminated by the next space or %.
7483
7484 @item %w
7485 Marks the argument containing or following the @samp{%w} as the
7486 designated output file of this compilation.  This puts the argument
7487 into the sequence of arguments that @samp{%o} will substitute later.
7488
7489 @item %o
7490 Substitutes the names of all the output files, with spaces
7491 automatically placed around them.  You should write spaces
7492 around the @samp{%o} as well or the results are undefined.
7493 @samp{%o} is for use in the specs for running the linker.
7494 Input files whose names have no recognized suffix are not compiled
7495 at all, but they are included among the output files, so they will
7496 be linked.
7497
7498 @item %O
7499 Substitutes the suffix for object files.  Note that this is
7500 handled specially when it immediately follows @samp{%g, %u, or %U},
7501 because of the need for those to form complete file names.  The
7502 handling is such that @samp{%O} is treated exactly as if it had already
7503 been substituted, except that @samp{%g, %u, and %U} do not currently
7504 support additional @var{suffix} characters following @samp{%O} as they would
7505 following, for example, @samp{.o}.
7506
7507 @item %p
7508 Substitutes the standard macro predefinitions for the
7509 current target machine.  Use this when running @code{cpp}.
7510
7511 @item %P
7512 Like @samp{%p}, but puts @samp{__} before and after the name of each
7513 predefined macro, except for macros that start with @samp{__} or with
7514 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
7515 C@.
7516
7517 @item %I
7518 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
7519 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
7520 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
7521 and @option{-imultilib} as necessary.
7522
7523 @item %s
7524 Current argument is the name of a library or startup file of some sort.
7525 Search for that file in a standard list of directories and substitute
7526 the full name found.
7527
7528 @item %e@var{str}
7529 Print @var{str} as an error message.  @var{str} is terminated by a newline.
7530 Use this when inconsistent options are detected.
7531
7532 @item %(@var{name})
7533 Substitute the contents of spec string @var{name} at this point.
7534
7535 @item %[@var{name}]
7536 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
7537
7538 @item %x@{@var{option}@}
7539 Accumulate an option for @samp{%X}.
7540
7541 @item %X
7542 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
7543 spec string.
7544
7545 @item %Y
7546 Output the accumulated assembler options specified by @option{-Wa}.
7547
7548 @item %Z
7549 Output the accumulated preprocessor options specified by @option{-Wp}.
7550
7551 @item %a
7552 Process the @code{asm} spec.  This is used to compute the
7553 switches to be passed to the assembler.
7554
7555 @item %A
7556 Process the @code{asm_final} spec.  This is a spec string for
7557 passing switches to an assembler post-processor, if such a program is
7558 needed.
7559
7560 @item %l
7561 Process the @code{link} spec.  This is the spec for computing the
7562 command line passed to the linker.  Typically it will make use of the
7563 @samp{%L %G %S %D and %E} sequences.
7564
7565 @item %D
7566 Dump out a @option{-L} option for each directory that GCC believes might
7567 contain startup files.  If the target supports multilibs then the
7568 current multilib directory will be prepended to each of these paths.
7569
7570 @item %L
7571 Process the @code{lib} spec.  This is a spec string for deciding which
7572 libraries should be included on the command line to the linker.
7573
7574 @item %G
7575 Process the @code{libgcc} spec.  This is a spec string for deciding
7576 which GCC support library should be included on the command line to the linker.
7577
7578 @item %S
7579 Process the @code{startfile} spec.  This is a spec for deciding which
7580 object files should be the first ones passed to the linker.  Typically
7581 this might be a file named @file{crt0.o}.
7582
7583 @item %E
7584 Process the @code{endfile} spec.  This is a spec string that specifies
7585 the last object files that will be passed to the linker.
7586
7587 @item %C
7588 Process the @code{cpp} spec.  This is used to construct the arguments
7589 to be passed to the C preprocessor.
7590
7591 @item %1
7592 Process the @code{cc1} spec.  This is used to construct the options to be
7593 passed to the actual C compiler (@samp{cc1}).
7594
7595 @item %2
7596 Process the @code{cc1plus} spec.  This is used to construct the options to be
7597 passed to the actual C++ compiler (@samp{cc1plus}).
7598
7599 @item %*
7600 Substitute the variable part of a matched option.  See below.
7601 Note that each comma in the substituted string is replaced by
7602 a single space.
7603
7604 @item %<@code{S}
7605 Remove all occurrences of @code{-S} from the command line.  Note---this
7606 command is position dependent.  @samp{%} commands in the spec string
7607 before this one will see @code{-S}, @samp{%} commands in the spec string
7608 after this one will not.
7609
7610 @item %:@var{function}(@var{args})
7611 Call the named function @var{function}, passing it @var{args}.
7612 @var{args} is first processed as a nested spec string, then split
7613 into an argument vector in the usual fashion.  The function returns
7614 a string which is processed as if it had appeared literally as part
7615 of the current spec.
7616
7617 The following built-in spec functions are provided:
7618
7619 @table @code
7620 @item @code{getenv}
7621 The @code{getenv} spec function takes two arguments: an environment
7622 variable name and a string.  If the environment variable is not
7623 defined, a fatal error is issued.  Otherwise, the return value is the
7624 value of the environment variable concatenated with the string.  For
7625 example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
7626
7627 @smallexample
7628 %:getenv(TOPDIR /include)
7629 @end smallexample
7630
7631 expands to @file{/path/to/top/include}.
7632
7633 @item @code{if-exists}
7634 The @code{if-exists} spec function takes one argument, an absolute
7635 pathname to a file.  If the file exists, @code{if-exists} returns the
7636 pathname.  Here is a small example of its usage:
7637
7638 @smallexample
7639 *startfile:
7640 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
7641 @end smallexample
7642
7643 @item @code{if-exists-else}
7644 The @code{if-exists-else} spec function is similar to the @code{if-exists}
7645 spec function, except that it takes two arguments.  The first argument is
7646 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
7647 returns the pathname.  If it does not exist, it returns the second argument.
7648 This way, @code{if-exists-else} can be used to select one file or another,
7649 based on the existence of the first.  Here is a small example of its usage:
7650
7651 @smallexample
7652 *startfile:
7653 crt0%O%s %:if-exists(crti%O%s) \
7654 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
7655 @end smallexample
7656
7657 @item @code{replace-outfile}
7658 The @code{replace-outfile} spec function takes two arguments.  It looks for the
7659 first argument in the outfiles array and replaces it with the second argument.  Here
7660 is a small example of its usage:
7661
7662 @smallexample
7663 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
7664 @end smallexample
7665
7666 @item @code{print-asm-header}
7667 The @code{print-asm-header} function takes no arguments and simply
7668 prints a banner like:
7669
7670 @smallexample
7671 Assember options
7672 ================
7673
7674 Use "-Wa,OPTION" to pass "OPTION" to the assembler.
7675 @end smallexample
7676
7677 It is used to separate compiler options from assembler options
7678 in the @option{--target-help} output.
7679 @end table
7680
7681 @item %@{@code{S}@}
7682 Substitutes the @code{-S} switch, if that switch was given to GCC@.
7683 If that switch was not specified, this substitutes nothing.  Note that
7684 the leading dash is omitted when specifying this option, and it is
7685 automatically inserted if the substitution is performed.  Thus the spec
7686 string @samp{%@{foo@}} would match the command-line option @option{-foo}
7687 and would output the command line option @option{-foo}.
7688
7689 @item %W@{@code{S}@}
7690 Like %@{@code{S}@} but mark last argument supplied within as a file to be
7691 deleted on failure.
7692
7693 @item %@{@code{S}*@}
7694 Substitutes all the switches specified to GCC whose names start
7695 with @code{-S}, but which also take an argument.  This is used for
7696 switches like @option{-o}, @option{-D}, @option{-I}, etc.
7697 GCC considers @option{-o foo} as being
7698 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
7699 text, including the space.  Thus two arguments would be generated.
7700
7701 @item %@{@code{S}*&@code{T}*@}
7702 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
7703 (the order of @code{S} and @code{T} in the spec is not significant).
7704 There can be any number of ampersand-separated variables; for each the
7705 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
7706
7707 @item %@{@code{S}:@code{X}@}
7708 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
7709
7710 @item %@{!@code{S}:@code{X}@}
7711 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
7712
7713 @item %@{@code{S}*:@code{X}@}
7714 Substitutes @code{X} if one or more switches whose names start with
7715 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
7716 once, no matter how many such switches appeared.  However, if @code{%*}
7717 appears somewhere in @code{X}, then @code{X} will be substituted once
7718 for each matching switch, with the @code{%*} replaced by the part of
7719 that switch that matched the @code{*}.
7720
7721 @item %@{.@code{S}:@code{X}@}
7722 Substitutes @code{X}, if processing a file with suffix @code{S}.
7723
7724 @item %@{!.@code{S}:@code{X}@}
7725 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
7726
7727 @item %@{,@code{S}:@code{X}@}
7728 Substitutes @code{X}, if processing a file for language @code{S}.
7729
7730 @item %@{!,@code{S}:@code{X}@}
7731 Substitutes @code{X}, if not processing a file for language @code{S}.
7732
7733 @item %@{@code{S}|@code{P}:@code{X}@}
7734 Substitutes @code{X} if either @code{-S} or @code{-P} was given to
7735 GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
7736 @code{*} sequences as well, although they have a stronger binding than
7737 the @samp{|}.  If @code{%*} appears in @code{X}, all of the
7738 alternatives must be starred, and only the first matching alternative
7739 is substituted.
7740
7741 For example, a spec string like this:
7742
7743 @smallexample
7744 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
7745 @end smallexample
7746
7747 will output the following command-line options from the following input
7748 command-line options:
7749
7750 @smallexample
7751 fred.c        -foo -baz
7752 jim.d         -bar -boggle
7753 -d fred.c     -foo -baz -boggle
7754 -d jim.d      -bar -baz -boggle
7755 @end smallexample
7756
7757 @item %@{S:X; T:Y; :D@}
7758
7759 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
7760 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
7761 be as many clauses as you need.  This may be combined with @code{.},
7762 @code{,}, @code{!}, @code{|}, and @code{*} as needed.
7763
7764
7765 @end table
7766
7767 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
7768 construct may contain other nested @samp{%} constructs or spaces, or
7769 even newlines.  They are processed as usual, as described above.
7770 Trailing white space in @code{X} is ignored.  White space may also
7771 appear anywhere on the left side of the colon in these constructs,
7772 except between @code{.} or @code{*} and the corresponding word.
7773
7774 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
7775 handled specifically in these constructs.  If another value of
7776 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
7777 @option{-W} switch is found later in the command line, the earlier
7778 switch value is ignored, except with @{@code{S}*@} where @code{S} is
7779 just one letter, which passes all matching options.
7780
7781 The character @samp{|} at the beginning of the predicate text is used to
7782 indicate that a command should be piped to the following command, but
7783 only if @option{-pipe} is specified.
7784
7785 It is built into GCC which switches take arguments and which do not.
7786 (You might think it would be useful to generalize this to allow each
7787 compiler's spec to say which switches take arguments.  But this cannot
7788 be done in a consistent fashion.  GCC cannot even decide which input
7789 files have been specified without knowing which switches take arguments,
7790 and it must know which input files to compile in order to tell which
7791 compilers to run).
7792
7793 GCC also knows implicitly that arguments starting in @option{-l} are to be
7794 treated as compiler output files, and passed to the linker in their
7795 proper position among the other output files.
7796
7797 @c man begin OPTIONS
7798
7799 @node Target Options
7800 @section Specifying Target Machine and Compiler Version
7801 @cindex target options
7802 @cindex cross compiling
7803 @cindex specifying machine version
7804 @cindex specifying compiler version and target machine
7805 @cindex compiler version, specifying
7806 @cindex target machine, specifying
7807
7808 The usual way to run GCC is to run the executable called @file{gcc}, or
7809 @file{<machine>-gcc} when cross-compiling, or
7810 @file{<machine>-gcc-<version>} to run a version other than the one that
7811 was installed last.  Sometimes this is inconvenient, so GCC provides
7812 options that will switch to another cross-compiler or version.
7813
7814 @table @gcctabopt
7815 @item -b @var{machine}
7816 @opindex b
7817 The argument @var{machine} specifies the target machine for compilation.
7818
7819 The value to use for @var{machine} is the same as was specified as the
7820 machine type when configuring GCC as a cross-compiler.  For
7821 example, if a cross-compiler was configured with @samp{configure
7822 arm-elf}, meaning to compile for an arm processor with elf binaries,
7823 then you would specify @option{-b arm-elf} to run that cross compiler.
7824 Because there are other options beginning with @option{-b}, the
7825 configuration must contain a hyphen.
7826
7827 @item -V @var{version}
7828 @opindex V
7829 The argument @var{version} specifies which version of GCC to run.
7830 This is useful when multiple versions are installed.  For example,
7831 @var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
7832 @end table
7833
7834 The @option{-V} and @option{-b} options work by running the
7835 @file{<machine>-gcc-<version>} executable, so there's no real reason to
7836 use them if you can just run that directly.
7837
7838 @node Submodel Options
7839 @section Hardware Models and Configurations
7840 @cindex submodel options
7841 @cindex specifying hardware config
7842 @cindex hardware models and configurations, specifying
7843 @cindex machine dependent options
7844
7845 Earlier we discussed the standard option @option{-b} which chooses among
7846 different installed compilers for completely different target
7847 machines, such as VAX vs.@: 68000 vs.@: 80386.
7848
7849 In addition, each of these target machine types can have its own
7850 special options, starting with @samp{-m}, to choose among various
7851 hardware models or configurations---for example, 68010 vs 68020,
7852 floating coprocessor or none.  A single installed version of the
7853 compiler can compile for any model or configuration, according to the
7854 options specified.
7855
7856 Some configurations of the compiler also support additional special
7857 options, usually for compatibility with other compilers on the same
7858 platform.
7859
7860 @c This list is ordered alphanumerically by subsection name.
7861 @c It should be the same order and spelling as these options are listed
7862 @c in Machine Dependent Options
7863
7864 @menu
7865 * ARC Options::
7866 * ARM Options::
7867 * AVR Options::
7868 * Blackfin Options::
7869 * CRIS Options::
7870 * CRX Options::
7871 * Darwin Options::
7872 * DEC Alpha Options::
7873 * DEC Alpha/VMS Options::
7874 * FRV Options::
7875 * GNU/Linux Options::
7876 * H8/300 Options::
7877 * HPPA Options::
7878 * i386 and x86-64 Options::
7879 * IA-64 Options::
7880 * M32C Options::
7881 * M32R/D Options::
7882 * M680x0 Options::
7883 * M68hc1x Options::
7884 * MCore Options::
7885 * MIPS Options::
7886 * MMIX Options::
7887 * MN10300 Options::
7888 * MT Options::
7889 * PDP-11 Options::
7890 * PowerPC Options::
7891 * RS/6000 and PowerPC Options::
7892 * S/390 and zSeries Options::
7893 * Score Options::
7894 * SH Options::
7895 * SPARC Options::
7896 * SPU Options::
7897 * System V Options::
7898 * TMS320C3x/C4x Options::
7899 * V850 Options::
7900 * VAX Options::
7901 * VxWorks Options::
7902 * x86-64 Options::
7903 * Xstormy16 Options::
7904 * Xtensa Options::
7905 * zSeries Options::
7906 @end menu
7907
7908 @node ARC Options
7909 @subsection ARC Options
7910 @cindex ARC Options
7911
7912 These options are defined for ARC implementations:
7913
7914 @table @gcctabopt
7915 @item -EL
7916 @opindex EL
7917 Compile code for little endian mode.  This is the default.
7918
7919 @item -EB
7920 @opindex EB
7921 Compile code for big endian mode.
7922
7923 @item -mmangle-cpu
7924 @opindex mmangle-cpu
7925 Prepend the name of the cpu to all public symbol names.
7926 In multiple-processor systems, there are many ARC variants with different
7927 instruction and register set characteristics.  This flag prevents code
7928 compiled for one cpu to be linked with code compiled for another.
7929 No facility exists for handling variants that are ``almost identical''.
7930 This is an all or nothing option.
7931
7932 @item -mcpu=@var{cpu}
7933 @opindex mcpu
7934 Compile code for ARC variant @var{cpu}.
7935 Which variants are supported depend on the configuration.
7936 All variants support @option{-mcpu=base}, this is the default.
7937
7938 @item -mtext=@var{text-section}
7939 @itemx -mdata=@var{data-section}
7940 @itemx -mrodata=@var{readonly-data-section}
7941 @opindex mtext
7942 @opindex mdata
7943 @opindex mrodata
7944 Put functions, data, and readonly data in @var{text-section},
7945 @var{data-section}, and @var{readonly-data-section} respectively
7946 by default.  This can be overridden with the @code{section} attribute.
7947 @xref{Variable Attributes}.
7948
7949 @end table
7950
7951 @node ARM Options
7952 @subsection ARM Options
7953 @cindex ARM options
7954
7955 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
7956 architectures:
7957
7958 @table @gcctabopt
7959 @item -mabi=@var{name}
7960 @opindex mabi
7961 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
7962 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
7963
7964 @item -mapcs-frame
7965 @opindex mapcs-frame
7966 Generate a stack frame that is compliant with the ARM Procedure Call
7967 Standard for all functions, even if this is not strictly necessary for
7968 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
7969 with this option will cause the stack frames not to be generated for
7970 leaf functions.  The default is @option{-mno-apcs-frame}.
7971
7972 @item -mapcs
7973 @opindex mapcs
7974 This is a synonym for @option{-mapcs-frame}.
7975
7976 @ignore
7977 @c not currently implemented
7978 @item -mapcs-stack-check
7979 @opindex mapcs-stack-check
7980 Generate code to check the amount of stack space available upon entry to
7981 every function (that actually uses some stack space).  If there is
7982 insufficient space available then either the function
7983 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
7984 called, depending upon the amount of stack space required.  The run time
7985 system is required to provide these functions.  The default is
7986 @option{-mno-apcs-stack-check}, since this produces smaller code.
7987
7988 @c not currently implemented
7989 @item -mapcs-float
7990 @opindex mapcs-float
7991 Pass floating point arguments using the float point registers.  This is
7992 one of the variants of the APCS@.  This option is recommended if the
7993 target hardware has a floating point unit or if a lot of floating point
7994 arithmetic is going to be performed by the code.  The default is
7995 @option{-mno-apcs-float}, since integer only code is slightly increased in
7996 size if @option{-mapcs-float} is used.
7997
7998 @c not currently implemented
7999 @item -mapcs-reentrant
8000 @opindex mapcs-reentrant
8001 Generate reentrant, position independent code.  The default is
8002 @option{-mno-apcs-reentrant}.
8003 @end ignore
8004
8005 @item -mthumb-interwork
8006 @opindex mthumb-interwork
8007 Generate code which supports calling between the ARM and Thumb
8008 instruction sets.  Without this option the two instruction sets cannot
8009 be reliably used inside one program.  The default is
8010 @option{-mno-thumb-interwork}, since slightly larger code is generated
8011 when @option{-mthumb-interwork} is specified.
8012
8013 @item -mno-sched-prolog
8014 @opindex mno-sched-prolog
8015 Prevent the reordering of instructions in the function prolog, or the
8016 merging of those instruction with the instructions in the function's
8017 body.  This means that all functions will start with a recognizable set
8018 of instructions (or in fact one of a choice from a small set of
8019 different function prologues), and this information can be used to
8020 locate the start if functions inside an executable piece of code.  The
8021 default is @option{-msched-prolog}.
8022
8023 @item -mhard-float
8024 @opindex mhard-float
8025 Generate output containing floating point instructions.  This is the
8026 default.
8027
8028 @item -msoft-float
8029 @opindex msoft-float
8030 Generate output containing library calls for floating point.
8031 @strong{Warning:} the requisite libraries are not available for all ARM
8032 targets.  Normally the facilities of the machine's usual C compiler are
8033 used, but this cannot be done directly in cross-compilation.  You must make
8034 your own arrangements to provide suitable library functions for
8035 cross-compilation.
8036
8037 @option{-msoft-float} changes the calling convention in the output file;
8038 therefore, it is only useful if you compile @emph{all} of a program with
8039 this option.  In particular, you need to compile @file{libgcc.a}, the
8040 library that comes with GCC, with @option{-msoft-float} in order for
8041 this to work.
8042
8043 @item -mfloat-abi=@var{name}
8044 @opindex mfloat-abi
8045 Specifies which ABI to use for floating point values.  Permissible values
8046 are: @samp{soft}, @samp{softfp} and @samp{hard}.
8047
8048 @samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
8049 and @option{-mhard-float} respectively.  @samp{softfp} allows the generation
8050 of floating point instructions, but still uses the soft-float calling
8051 conventions.
8052
8053 @item -mlittle-endian
8054 @opindex mlittle-endian
8055 Generate code for a processor running in little-endian mode.  This is
8056 the default for all standard configurations.
8057
8058 @item -mbig-endian
8059 @opindex mbig-endian
8060 Generate code for a processor running in big-endian mode; the default is
8061 to compile code for a little-endian processor.
8062
8063 @item -mwords-little-endian
8064 @opindex mwords-little-endian
8065 This option only applies when generating code for big-endian processors.
8066 Generate code for a little-endian word order but a big-endian byte
8067 order.  That is, a byte order of the form @samp{32107654}.  Note: this
8068 option should only be used if you require compatibility with code for
8069 big-endian ARM processors generated by versions of the compiler prior to
8070 2.8.
8071
8072 @item -mcpu=@var{name}
8073 @opindex mcpu
8074 This specifies the name of the target ARM processor.  GCC uses this name
8075 to determine what kind of instructions it can emit when generating
8076 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
8077 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
8078 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
8079 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
8080 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
8081 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
8082 @samp{arm8}, @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
8083 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
8084 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
8085 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
8086 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
8087 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
8088 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
8089 @samp{arm1156t2-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
8090 @samp{cortex-a8}, @samp{cortex-r4}, @samp{cortex-m3},
8091 @samp{xscale}, @samp{iwmmxt}, @samp{ep9312}.
8092
8093 @itemx -mtune=@var{name}
8094 @opindex mtune
8095 This option is very similar to the @option{-mcpu=} option, except that
8096 instead of specifying the actual target processor type, and hence
8097 restricting which instructions can be used, it specifies that GCC should
8098 tune the performance of the code as if the target were of the type
8099 specified in this option, but still choosing the instructions that it
8100 will generate based on the cpu specified by a @option{-mcpu=} option.
8101 For some ARM implementations better performance can be obtained by using
8102 this option.
8103
8104 @item -march=@var{name}
8105 @opindex march
8106 This specifies the name of the target ARM architecture.  GCC uses this
8107 name to determine what kind of instructions it can emit when generating
8108 assembly code.  This option can be used in conjunction with or instead
8109 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
8110 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
8111 @samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
8112 @samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv7}, @samp{armv7-a},
8113 @samp{armv7-r}, @samp{armv7-m}, @samp{iwmmxt}, @samp{ep9312}.
8114
8115 @item -mfpu=@var{name}
8116 @itemx -mfpe=@var{number}
8117 @itemx -mfp=@var{number}
8118 @opindex mfpu
8119 @opindex mfpe
8120 @opindex mfp
8121 This specifies what floating point hardware (or hardware emulation) is
8122 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
8123 @samp{fpe3}, @samp{maverick}, @samp{vfp}.  @option{-mfp} and @option{-mfpe}
8124 are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
8125 with older versions of GCC@.
8126
8127 If @option{-msoft-float} is specified this specifies the format of
8128 floating point values.
8129
8130 @item -mstructure-size-boundary=@var{n}
8131 @opindex mstructure-size-boundary
8132 The size of all structures and unions will be rounded up to a multiple
8133 of the number of bits set by this option.  Permissible values are 8, 32
8134 and 64.  The default value varies for different toolchains.  For the COFF
8135 targeted toolchain the default value is 8.  A value of 64 is only allowed
8136 if the underlying ABI supports it.
8137
8138 Specifying the larger number can produce faster, more efficient code, but
8139 can also increase the size of the program.  Different values are potentially
8140 incompatible.  Code compiled with one value cannot necessarily expect to
8141 work with code or libraries compiled with another value, if they exchange
8142 information using structures or unions.
8143
8144 @item -mabort-on-noreturn
8145 @opindex mabort-on-noreturn
8146 Generate a call to the function @code{abort} at the end of a
8147 @code{noreturn} function.  It will be executed if the function tries to
8148 return.
8149
8150 @item -mlong-calls
8151 @itemx -mno-long-calls
8152 @opindex mlong-calls
8153 @opindex mno-long-calls
8154 Tells the compiler to perform function calls by first loading the
8155 address of the function into a register and then performing a subroutine
8156 call on this register.  This switch is needed if the target function
8157 will lie outside of the 64 megabyte addressing range of the offset based
8158 version of subroutine call instruction.
8159
8160 Even if this switch is enabled, not all function calls will be turned
8161 into long calls.  The heuristic is that static functions, functions
8162 which have the @samp{short-call} attribute, functions that are inside
8163 the scope of a @samp{#pragma no_long_calls} directive and functions whose
8164 definitions have already been compiled within the current compilation
8165 unit, will not be turned into long calls.  The exception to this rule is
8166 that weak function definitions, functions with the @samp{long-call}
8167 attribute or the @samp{section} attribute, and functions that are within
8168 the scope of a @samp{#pragma long_calls} directive, will always be
8169 turned into long calls.
8170
8171 This feature is not enabled by default.  Specifying
8172 @option{-mno-long-calls} will restore the default behavior, as will
8173 placing the function calls within the scope of a @samp{#pragma
8174 long_calls_off} directive.  Note these switches have no effect on how
8175 the compiler generates code to handle function calls via function
8176 pointers.
8177
8178 @item -mnop-fun-dllimport
8179 @opindex mnop-fun-dllimport
8180 Disable support for the @code{dllimport} attribute.
8181
8182 @item -msingle-pic-base
8183 @opindex msingle-pic-base
8184 Treat the register used for PIC addressing as read-only, rather than
8185 loading it in the prologue for each function.  The run-time system is
8186 responsible for initializing this register with an appropriate value
8187 before execution begins.
8188
8189 @item -mpic-register=@var{reg}
8190 @opindex mpic-register
8191 Specify the register to be used for PIC addressing.  The default is R10
8192 unless stack-checking is enabled, when R9 is used.
8193
8194 @item -mcirrus-fix-invalid-insns
8195 @opindex mcirrus-fix-invalid-insns
8196 @opindex mno-cirrus-fix-invalid-insns
8197 Insert NOPs into the instruction stream to in order to work around
8198 problems with invalid Maverick instruction combinations.  This option
8199 is only valid if the @option{-mcpu=ep9312} option has been used to
8200 enable generation of instructions for the Cirrus Maverick floating
8201 point co-processor.  This option is not enabled by default, since the
8202 problem is only present in older Maverick implementations.  The default
8203 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
8204 switch.
8205
8206 @item -mpoke-function-name
8207 @opindex mpoke-function-name
8208 Write the name of each function into the text section, directly
8209 preceding the function prologue.  The generated code is similar to this:
8210
8211 @smallexample
8212      t0
8213          .ascii "arm_poke_function_name", 0
8214          .align
8215      t1
8216          .word 0xff000000 + (t1 - t0)
8217      arm_poke_function_name
8218          mov     ip, sp
8219          stmfd   sp!, @{fp, ip, lr, pc@}
8220          sub     fp, ip, #4
8221 @end smallexample
8222
8223 When performing a stack backtrace, code can inspect the value of
8224 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
8225 location @code{pc - 12} and the top 8 bits are set, then we know that
8226 there is a function name embedded immediately preceding this location
8227 and has length @code{((pc[-3]) & 0xff000000)}.
8228
8229 @item -mthumb
8230 @opindex mthumb
8231 Generate code for the Thumb instruction set.  The default is to
8232 use the 32-bit ARM instruction set.
8233 This option automatically enables either 16-bit Thumb-1 or
8234 mixed 16/32-bit Thumb-2 instructions based on the @option{-mcpu=@var{name}}
8235 and @option{-march=@var{name}} options.
8236
8237 @item -mtpcs-frame
8238 @opindex mtpcs-frame
8239 Generate a stack frame that is compliant with the Thumb Procedure Call
8240 Standard for all non-leaf functions.  (A leaf function is one that does
8241 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
8242
8243 @item -mtpcs-leaf-frame
8244 @opindex mtpcs-leaf-frame
8245 Generate a stack frame that is compliant with the Thumb Procedure Call
8246 Standard for all leaf functions.  (A leaf function is one that does
8247 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
8248
8249 @item -mcallee-super-interworking
8250 @opindex mcallee-super-interworking
8251 Gives all externally visible functions in the file being compiled an ARM
8252 instruction set header which switches to Thumb mode before executing the
8253 rest of the function.  This allows these functions to be called from
8254 non-interworking code.
8255
8256 @item -mcaller-super-interworking
8257 @opindex mcaller-super-interworking
8258 Allows calls via function pointers (including virtual functions) to
8259 execute correctly regardless of whether the target code has been
8260 compiled for interworking or not.  There is a small overhead in the cost
8261 of executing a function pointer if this option is enabled.
8262
8263 @item -mtp=@var{name}
8264 @opindex mtp
8265 Specify the access model for the thread local storage pointer.  The valid
8266 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
8267 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
8268 (supported in the arm6k architecture), and @option{auto}, which uses the
8269 best available method for the selected processor.  The default setting is
8270 @option{auto}.
8271
8272 @end table
8273
8274 @node AVR Options
8275 @subsection AVR Options
8276 @cindex AVR Options
8277
8278 These options are defined for AVR implementations:
8279
8280 @table @gcctabopt
8281 @item -mmcu=@var{mcu}
8282 @opindex mmcu
8283 Specify ATMEL AVR instruction set or MCU type.
8284
8285 Instruction set avr1 is for the minimal AVR core, not supported by the C
8286 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
8287 attiny11, attiny12, attiny15, attiny28).
8288
8289 Instruction set avr2 (default) is for the classic AVR core with up to
8290 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
8291 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
8292 at90c8534, at90s8535).
8293
8294 Instruction set avr3 is for the classic AVR core with up to 128K program
8295 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
8296
8297 Instruction set avr4 is for the enhanced AVR core with up to 8K program
8298 memory space (MCU types: atmega8, atmega83, atmega85).
8299
8300 Instruction set avr5 is for the enhanced AVR core with up to 128K program
8301 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
8302 atmega64, atmega128, at43usb355, at94k).
8303
8304 @item -msize
8305 @opindex msize
8306 Output instruction sizes to the asm file.
8307
8308 @item -minit-stack=@var{N}
8309 @opindex minit-stack
8310 Specify the initial stack address, which may be a symbol or numeric value,
8311 @samp{__stack} is the default.
8312
8313 @item -mno-interrupts
8314 @opindex mno-interrupts
8315 Generated code is not compatible with hardware interrupts.
8316 Code size will be smaller.
8317
8318 @item -mcall-prologues
8319 @opindex mcall-prologues
8320 Functions prologues/epilogues expanded as call to appropriate
8321 subroutines.  Code size will be smaller.
8322
8323 @item -mno-tablejump
8324 @opindex mno-tablejump
8325 Do not generate tablejump insns which sometimes increase code size.
8326
8327 @item -mtiny-stack
8328 @opindex mtiny-stack
8329 Change only the low 8 bits of the stack pointer.
8330
8331 @item -mint8
8332 @opindex mint8
8333 Assume int to be 8 bit integer.  This affects the sizes of all types: A
8334 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
8335 and long long will be 4 bytes.  Please note that this option does not
8336 comply to the C standards, but it will provide you with smaller code
8337 size.
8338 @end table
8339
8340 @node Blackfin Options
8341 @subsection Blackfin Options
8342 @cindex Blackfin Options
8343
8344 @table @gcctabopt
8345 @item -momit-leaf-frame-pointer
8346 @opindex momit-leaf-frame-pointer
8347 Don't keep the frame pointer in a register for leaf functions.  This
8348 avoids the instructions to save, set up and restore frame pointers and
8349 makes an extra register available in leaf functions.  The option
8350 @option{-fomit-frame-pointer} removes the frame pointer for all functions
8351 which might make debugging harder.
8352
8353 @item -mspecld-anomaly
8354 @opindex mspecld-anomaly
8355 When enabled, the compiler will ensure that the generated code does not
8356 contain speculative loads after jump instructions.  This option is enabled
8357 by default.
8358
8359 @item -mno-specld-anomaly
8360 @opindex mno-specld-anomaly
8361 Don't generate extra code to prevent speculative loads from occurring.
8362
8363 @item -mcsync-anomaly
8364 @opindex mcsync-anomaly
8365 When enabled, the compiler will ensure that the generated code does not
8366 contain CSYNC or SSYNC instructions too soon after conditional branches.
8367 This option is enabled by default.
8368
8369 @item -mno-csync-anomaly
8370 @opindex mno-csync-anomaly
8371 Don't generate extra code to prevent CSYNC or SSYNC instructions from
8372 occurring too soon after a conditional branch.
8373
8374 @item -mlow-64k
8375 @opindex mlow-64k
8376 When enabled, the compiler is free to take advantage of the knowledge that
8377 the entire program fits into the low 64k of memory.
8378
8379 @item -mno-low-64k
8380 @opindex mno-low-64k
8381 Assume that the program is arbitrarily large.  This is the default.
8382
8383 @item -mstack-check-l1
8384 @opindex mstack-check-l1
8385 Do stack checking using information placed into L1 scratchpad memory by the
8386 uClinux kernel.
8387
8388 @item -mid-shared-library
8389 @opindex mid-shared-library
8390 Generate code that supports shared libraries via the library ID method.
8391 This allows for execute in place and shared libraries in an environment
8392 without virtual memory management.  This option implies @option{-fPIC}.
8393
8394 @item -mno-id-shared-library
8395 @opindex mno-id-shared-library
8396 Generate code that doesn't assume ID based shared libraries are being used.
8397 This is the default.
8398
8399 @item -mleaf-id-shared-library
8400 @opindex mleaf-id-shared-library
8401 Generate code that supports shared libraries via the library ID method,
8402 but assumes that this library or executable won't link against any other
8403 ID shared libraries.  That allows the compiler to use faster code for jumps
8404 and calls.
8405
8406 @item -mno-leaf-id-shared-library
8407 @opindex mno-leaf-id-shared-library
8408 Do not assume that the code being compiled won't link against any ID shared
8409 libraries.  Slower code will be generated for jump and call insns.
8410
8411 @item -mshared-library-id=n
8412 @opindex mshared-library-id
8413 Specified the identification number of the ID based shared library being
8414 compiled.  Specifying a value of 0 will generate more compact code, specifying
8415 other values will force the allocation of that number to the current
8416 library but is no more space or time efficient than omitting this option.
8417
8418 @item -msep-data
8419 @opindex msep-data
8420 Generate code that allows the data segment to be located in a different
8421 area of memory from the text segment.  This allows for execute in place in
8422 an environment without virtual memory management by eliminating relocations
8423 against the text section.
8424
8425 @item -mno-sep-data
8426 @opindex mno-sep-data
8427 Generate code that assumes that the data segment follows the text segment.
8428 This is the default.
8429
8430 @item -mlong-calls
8431 @itemx -mno-long-calls
8432 @opindex mlong-calls
8433 @opindex mno-long-calls
8434 Tells the compiler to perform function calls by first loading the
8435 address of the function into a register and then performing a subroutine
8436 call on this register.  This switch is needed if the target function
8437 will lie outside of the 24 bit addressing range of the offset based
8438 version of subroutine call instruction.
8439
8440 This feature is not enabled by default.  Specifying
8441 @option{-mno-long-calls} will restore the default behavior.  Note these
8442 switches have no effect on how the compiler generates code to handle
8443 function calls via function pointers.
8444 @end table
8445
8446 @node CRIS Options
8447 @subsection CRIS Options
8448 @cindex CRIS Options
8449
8450 These options are defined specifically for the CRIS ports.
8451
8452 @table @gcctabopt
8453 @item -march=@var{architecture-type}
8454 @itemx -mcpu=@var{architecture-type}
8455 @opindex march
8456 @opindex mcpu
8457 Generate code for the specified architecture.  The choices for
8458 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
8459 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
8460 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
8461 @samp{v10}.
8462
8463 @item -mtune=@var{architecture-type}
8464 @opindex mtune
8465 Tune to @var{architecture-type} everything applicable about the generated
8466 code, except for the ABI and the set of available instructions.  The
8467 choices for @var{architecture-type} are the same as for
8468 @option{-march=@var{architecture-type}}.
8469
8470 @item -mmax-stack-frame=@var{n}
8471 @opindex mmax-stack-frame
8472 Warn when the stack frame of a function exceeds @var{n} bytes.
8473
8474 @item -melinux-stacksize=@var{n}
8475 @opindex melinux-stacksize
8476 Only available with the @samp{cris-axis-aout} target.  Arranges for
8477 indications in the program to the kernel loader that the stack of the
8478 program should be set to @var{n} bytes.
8479
8480 @item -metrax4
8481 @itemx -metrax100
8482 @opindex metrax4
8483 @opindex metrax100
8484 The options @option{-metrax4} and @option{-metrax100} are synonyms for
8485 @option{-march=v3} and @option{-march=v8} respectively.
8486
8487 @item -mmul-bug-workaround
8488 @itemx -mno-mul-bug-workaround
8489 @opindex mmul-bug-workaround
8490 @opindex mno-mul-bug-workaround
8491 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
8492 models where it applies.  This option is active by default.
8493
8494 @item -mpdebug
8495 @opindex mpdebug
8496 Enable CRIS-specific verbose debug-related information in the assembly
8497 code.  This option also has the effect to turn off the @samp{#NO_APP}
8498 formatted-code indicator to the assembler at the beginning of the
8499 assembly file.
8500
8501 @item -mcc-init
8502 @opindex mcc-init
8503 Do not use condition-code results from previous instruction; always emit
8504 compare and test instructions before use of condition codes.
8505
8506 @item -mno-side-effects
8507 @opindex mno-side-effects
8508 Do not emit instructions with side-effects in addressing modes other than
8509 post-increment.
8510
8511 @item -mstack-align
8512 @itemx -mno-stack-align
8513 @itemx -mdata-align
8514 @itemx -mno-data-align
8515 @itemx -mconst-align
8516 @itemx -mno-const-align
8517 @opindex mstack-align
8518 @opindex mno-stack-align
8519 @opindex mdata-align
8520 @opindex mno-data-align
8521 @opindex mconst-align
8522 @opindex mno-const-align
8523 These options (no-options) arranges (eliminate arrangements) for the
8524 stack-frame, individual data and constants to be aligned for the maximum
8525 single data access size for the chosen CPU model.  The default is to
8526 arrange for 32-bit alignment.  ABI details such as structure layout are
8527 not affected by these options.
8528
8529 @item -m32-bit
8530 @itemx -m16-bit
8531 @itemx -m8-bit
8532 @opindex m32-bit
8533 @opindex m16-bit
8534 @opindex m8-bit
8535 Similar to the stack- data- and const-align options above, these options
8536 arrange for stack-frame, writable data and constants to all be 32-bit,
8537 16-bit or 8-bit aligned.  The default is 32-bit alignment.
8538
8539 @item -mno-prologue-epilogue
8540 @itemx -mprologue-epilogue
8541 @opindex mno-prologue-epilogue
8542 @opindex mprologue-epilogue
8543 With @option{-mno-prologue-epilogue}, the normal function prologue and
8544 epilogue that sets up the stack-frame are omitted and no return
8545 instructions or return sequences are generated in the code.  Use this
8546 option only together with visual inspection of the compiled code: no
8547 warnings or errors are generated when call-saved registers must be saved,
8548 or storage for local variable needs to be allocated.
8549
8550 @item -mno-gotplt
8551 @itemx -mgotplt
8552 @opindex mno-gotplt
8553 @opindex mgotplt
8554 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
8555 instruction sequences that load addresses for functions from the PLT part
8556 of the GOT rather than (traditional on other architectures) calls to the
8557 PLT@.  The default is @option{-mgotplt}.
8558
8559 @item -maout
8560 @opindex maout
8561 Legacy no-op option only recognized with the cris-axis-aout target.
8562
8563 @item -melf
8564 @opindex melf
8565 Legacy no-op option only recognized with the cris-axis-elf and
8566 cris-axis-linux-gnu targets.
8567
8568 @item -melinux
8569 @opindex melinux
8570 Only recognized with the cris-axis-aout target, where it selects a
8571 GNU/linux-like multilib, include files and instruction set for
8572 @option{-march=v8}.
8573
8574 @item -mlinux
8575 @opindex mlinux
8576 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
8577
8578 @item -sim
8579 @opindex sim
8580 This option, recognized for the cris-axis-aout and cris-axis-elf arranges
8581 to link with input-output functions from a simulator library.  Code,
8582 initialized data and zero-initialized data are allocated consecutively.
8583
8584 @item -sim2
8585 @opindex sim2
8586 Like @option{-sim}, but pass linker options to locate initialized data at
8587 0x40000000 and zero-initialized data at 0x80000000.
8588 @end table
8589
8590 @node CRX Options
8591 @subsection CRX Options
8592 @cindex CRX Options
8593
8594 These options are defined specifically for the CRX ports.
8595
8596 @table @gcctabopt
8597
8598 @item -mmac
8599 @opindex mmac
8600 Enable the use of multiply-accumulate instructions. Disabled by default.
8601
8602 @item -mpush-args
8603 @opindex mpush-args
8604 Push instructions will be used to pass outgoing arguments when functions
8605 are called. Enabled by default.
8606 @end table
8607
8608 @node Darwin Options
8609 @subsection Darwin Options
8610 @cindex Darwin options
8611
8612 These options are defined for all architectures running the Darwin operating
8613 system.
8614
8615 FSF GCC on Darwin does not create ``fat'' object files; it will create
8616 an object file for the single architecture that it was built to
8617 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
8618 @option{-arch} options are used; it does so by running the compiler or
8619 linker multiple times and joining the results together with
8620 @file{lipo}.
8621
8622 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
8623 @samp{i686}) is determined by the flags that specify the ISA
8624 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
8625 @option{-force_cpusubtype_ALL} option can be used to override this.
8626
8627 The Darwin tools vary in their behavior when presented with an ISA
8628 mismatch.  The assembler, @file{as}, will only permit instructions to
8629 be used that are valid for the subtype of the file it is generating,
8630 so you cannot put 64-bit instructions in an @samp{ppc750} object file.
8631 The linker for shared libraries, @file{/usr/bin/libtool}, will fail
8632 and print an error if asked to create a shared library with a less
8633 restrictive subtype than its input files (for instance, trying to put
8634 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
8635 for executables, @file{ld}, will quietly give the executable the most
8636 restrictive subtype of any of its input files.
8637
8638 @table @gcctabopt
8639 @item -F@var{dir}
8640 @opindex F
8641 Add the framework directory @var{dir} to the head of the list of
8642 directories to be searched for header files.  These directories are
8643 interleaved with those specified by @option{-I} options and are
8644 scanned in a left-to-right order.
8645
8646 A framework directory is a directory with frameworks in it.  A
8647 framework is a directory with a @samp{"Headers"} and/or
8648 @samp{"PrivateHeaders"} directory contained directly in it that ends
8649 in @samp{".framework"}.  The name of a framework is the name of this
8650 directory excluding the @samp{".framework"}.  Headers associated with
8651 the framework are found in one of those two directories, with
8652 @samp{"Headers"} being searched first.  A subframework is a framework
8653 directory that is in a framework's @samp{"Frameworks"} directory.
8654 Includes of subframework headers can only appear in a header of a
8655 framework that contains the subframework, or in a sibling subframework
8656 header.  Two subframeworks are siblings if they occur in the same
8657 framework.  A subframework should not have the same name as a
8658 framework, a warning will be issued if this is violated.  Currently a
8659 subframework cannot have subframeworks, in the future, the mechanism
8660 may be extended to support this.  The standard frameworks can be found
8661 in @samp{"/System/Library/Frameworks"} and
8662 @samp{"/Library/Frameworks"}.  An example include looks like
8663 @code{#include <Framework/header.h>}, where @samp{Framework} denotes
8664 the name of the framework and header.h is found in the
8665 @samp{"PrivateHeaders"} or @samp{"Headers"} directory.
8666
8667 @item -iframework@var{dir}
8668 @opindex iframework
8669 Like @option{-F} except the directory is a treated as a system
8670 directory.  The main difference between this @option{-iframework} and
8671 @option{-F} is that with @option{-iframework} the compiler does not
8672 warn about constructs contained within header files found via
8673 @var{dir}.  This option is valid only for the C family of languages.
8674
8675 @item -gused
8676 @opindex gused
8677 Emit debugging information for symbols that are used.  For STABS
8678 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
8679 This is by default ON@.
8680
8681 @item -gfull
8682 @opindex gfull
8683 Emit debugging information for all symbols and types.
8684
8685 @item -mmacosx-version-min=@var{version}
8686 The earliest version of MacOS X that this executable will run on
8687 is @var{version}.  Typical values of @var{version} include @code{10.1},
8688 @code{10.2}, and @code{10.3.9}.
8689
8690 The default for this option is to make choices that seem to be most
8691 useful.
8692
8693 @item -mkernel
8694 @opindex mkernel
8695 Enable kernel development mode.  The @option{-mkernel} option sets
8696 @option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
8697 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
8698 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
8699 applicable.  This mode also sets @option{-mno-altivec},
8700 @option{-msoft-float}, @option{-fno-builtin} and
8701 @option{-mlong-branch} for PowerPC targets.
8702
8703 @item -mone-byte-bool
8704 @opindex mone-byte-bool
8705 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
8706 By default @samp{sizeof(bool)} is @samp{4} when compiling for
8707 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
8708 option has no effect on x86.
8709
8710 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
8711 to generate code that is not binary compatible with code generated
8712 without that switch.  Using this switch may require recompiling all
8713 other modules in a program, including system libraries.  Use this
8714 switch to conform to a non-default data model.
8715
8716 @item -mfix-and-continue
8717 @itemx -ffix-and-continue
8718 @itemx -findirect-data
8719 @opindex mfix-and-continue
8720 @opindex ffix-and-continue
8721 @opindex findirect-data
8722 Generate code suitable for fast turn around development.  Needed to
8723 enable gdb to dynamically load @code{.o} files into already running
8724 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
8725 are provided for backwards compatibility.
8726
8727 @item -all_load
8728 @opindex all_load
8729 Loads all members of static archive libraries.
8730 See man ld(1) for more information.
8731
8732 @item -arch_errors_fatal
8733 @opindex arch_errors_fatal
8734 Cause the errors having to do with files that have the wrong architecture
8735 to be fatal.
8736
8737 @item -bind_at_load
8738 @opindex bind_at_load
8739 Causes the output file to be marked such that the dynamic linker will
8740 bind all undefined references when the file is loaded or launched.
8741
8742 @item -bundle
8743 @opindex bundle
8744 Produce a Mach-o bundle format file.
8745 See man ld(1) for more information.
8746
8747 @item -bundle_loader @var{executable}
8748 @opindex bundle_loader
8749 This option specifies the @var{executable} that will be loading the build
8750 output file being linked.  See man ld(1) for more information.
8751
8752 @item -dynamiclib
8753 @opindex dynamiclib
8754 When passed this option, GCC will produce a dynamic library instead of
8755 an executable when linking, using the Darwin @file{libtool} command.
8756
8757 @item -force_cpusubtype_ALL
8758 @opindex force_cpusubtype_ALL
8759 This causes GCC's output file to have the @var{ALL} subtype, instead of
8760 one controlled by the @option{-mcpu} or @option{-march} option.
8761
8762 @item -allowable_client  @var{client_name}
8763 @itemx -client_name
8764 @itemx -compatibility_version
8765 @itemx -current_version
8766 @itemx -dead_strip
8767 @itemx -dependency-file
8768 @itemx -dylib_file
8769 @itemx -dylinker_install_name
8770 @itemx -dynamic
8771 @itemx -exported_symbols_list
8772 @itemx -filelist
8773 @itemx -flat_namespace
8774 @itemx -force_flat_namespace
8775 @itemx -headerpad_max_install_names
8776 @itemx -image_base
8777 @itemx -init
8778 @itemx -install_name
8779 @itemx -keep_private_externs
8780 @itemx -multi_module
8781 @itemx -multiply_defined
8782 @itemx -multiply_defined_unused
8783 @itemx -noall_load
8784 @itemx -no_dead_strip_inits_and_terms
8785 @itemx -nofixprebinding
8786 @itemx -nomultidefs
8787 @itemx -noprebind
8788 @itemx -noseglinkedit
8789 @itemx -pagezero_size
8790 @itemx -prebind
8791 @itemx -prebind_all_twolevel_modules
8792 @itemx -private_bundle
8793 @itemx -read_only_relocs
8794 @itemx -sectalign
8795 @itemx -sectobjectsymbols
8796 @itemx -whyload
8797 @itemx -seg1addr
8798 @itemx -sectcreate
8799 @itemx -sectobjectsymbols
8800 @itemx -sectorder
8801 @itemx -segaddr
8802 @itemx -segs_read_only_addr
8803 @itemx -segs_read_write_addr
8804 @itemx -seg_addr_table
8805 @itemx -seg_addr_table_filename
8806 @itemx -seglinkedit
8807 @itemx -segprot
8808 @itemx -segs_read_only_addr
8809 @itemx -segs_read_write_addr
8810 @itemx -single_module
8811 @itemx -static
8812 @itemx -sub_library
8813 @itemx -sub_umbrella
8814 @itemx -twolevel_namespace
8815 @itemx -umbrella
8816 @itemx -undefined
8817 @itemx -unexported_symbols_list
8818 @itemx -weak_reference_mismatches
8819 @itemx -whatsloaded
8820
8821 @opindex allowable_client
8822 @opindex client_name
8823 @opindex compatibility_version
8824 @opindex current_version
8825 @opindex dead_strip
8826 @opindex dependency-file
8827 @opindex dylib_file
8828 @opindex dylinker_install_name
8829 @opindex dynamic
8830 @opindex exported_symbols_list
8831 @opindex filelist
8832 @opindex flat_namespace
8833 @opindex force_flat_namespace
8834 @opindex headerpad_max_install_names
8835 @opindex image_base
8836 @opindex init
8837 @opindex install_name
8838 @opindex keep_private_externs
8839 @opindex multi_module
8840 @opindex multiply_defined
8841 @opindex multiply_defined_unused
8842 @opindex noall_load
8843 @opindex no_dead_strip_inits_and_terms
8844 @opindex nofixprebinding
8845 @opindex nomultidefs
8846 @opindex noprebind
8847 @opindex noseglinkedit
8848 @opindex pagezero_size
8849 @opindex prebind
8850 @opindex prebind_all_twolevel_modules
8851 @opindex private_bundle
8852 @opindex read_only_relocs
8853 @opindex sectalign
8854 @opindex sectobjectsymbols
8855 @opindex whyload
8856 @opindex seg1addr
8857 @opindex sectcreate
8858 @opindex sectobjectsymbols
8859 @opindex sectorder
8860 @opindex segaddr
8861 @opindex segs_read_only_addr
8862 @opindex segs_read_write_addr
8863 @opindex seg_addr_table
8864 @opindex seg_addr_table_filename
8865 @opindex seglinkedit
8866 @opindex segprot
8867 @opindex segs_read_only_addr
8868 @opindex segs_read_write_addr
8869 @opindex single_module
8870 @opindex static
8871 @opindex sub_library
8872 @opindex sub_umbrella
8873 @opindex twolevel_namespace
8874 @opindex umbrella
8875 @opindex undefined
8876 @opindex unexported_symbols_list
8877 @opindex weak_reference_mismatches
8878 @opindex whatsloaded
8879
8880 These options are passed to the Darwin linker.  The Darwin linker man page
8881 describes them in detail.
8882 @end table
8883
8884 @node DEC Alpha Options
8885 @subsection DEC Alpha Options
8886
8887 These @samp{-m} options are defined for the DEC Alpha implementations:
8888
8889 @table @gcctabopt
8890 @item -mno-soft-float
8891 @itemx -msoft-float
8892 @opindex mno-soft-float
8893 @opindex msoft-float
8894 Use (do not use) the hardware floating-point instructions for
8895 floating-point operations.  When @option{-msoft-float} is specified,
8896 functions in @file{libgcc.a} will be used to perform floating-point
8897 operations.  Unless they are replaced by routines that emulate the
8898 floating-point operations, or compiled in such a way as to call such
8899 emulations routines, these routines will issue floating-point
8900 operations.   If you are compiling for an Alpha without floating-point
8901 operations, you must ensure that the library is built so as not to call
8902 them.
8903
8904 Note that Alpha implementations without floating-point operations are
8905 required to have floating-point registers.
8906
8907 @item -mfp-reg
8908 @itemx -mno-fp-regs
8909 @opindex mfp-reg
8910 @opindex mno-fp-regs
8911 Generate code that uses (does not use) the floating-point register set.
8912 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
8913 register set is not used, floating point operands are passed in integer
8914 registers as if they were integers and floating-point results are passed
8915 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
8916 so any function with a floating-point argument or return value called by code
8917 compiled with @option{-mno-fp-regs} must also be compiled with that
8918 option.
8919
8920 A typical use of this option is building a kernel that does not use,
8921 and hence need not save and restore, any floating-point registers.
8922
8923 @item -mieee
8924 @opindex mieee
8925 The Alpha architecture implements floating-point hardware optimized for
8926 maximum performance.  It is mostly compliant with the IEEE floating
8927 point standard.  However, for full compliance, software assistance is
8928 required.  This option generates code fully IEEE compliant code
8929 @emph{except} that the @var{inexact-flag} is not maintained (see below).
8930 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
8931 defined during compilation.  The resulting code is less efficient but is
8932 able to correctly support denormalized numbers and exceptional IEEE
8933 values such as not-a-number and plus/minus infinity.  Other Alpha
8934 compilers call this option @option{-ieee_with_no_inexact}.
8935
8936 @item -mieee-with-inexact
8937 @opindex mieee-with-inexact
8938 This is like @option{-mieee} except the generated code also maintains
8939 the IEEE @var{inexact-flag}.  Turning on this option causes the
8940 generated code to implement fully-compliant IEEE math.  In addition to
8941 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
8942 macro.  On some Alpha implementations the resulting code may execute
8943 significantly slower than the code generated by default.  Since there is
8944 very little code that depends on the @var{inexact-flag}, you should
8945 normally not specify this option.  Other Alpha compilers call this
8946 option @option{-ieee_with_inexact}.
8947
8948 @item -mfp-trap-mode=@var{trap-mode}
8949 @opindex mfp-trap-mode
8950 This option controls what floating-point related traps are enabled.
8951 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
8952 The trap mode can be set to one of four values:
8953
8954 @table @samp
8955 @item n
8956 This is the default (normal) setting.  The only traps that are enabled
8957 are the ones that cannot be disabled in software (e.g., division by zero
8958 trap).
8959
8960 @item u
8961 In addition to the traps enabled by @samp{n}, underflow traps are enabled
8962 as well.
8963
8964 @item su
8965 Like @samp{u}, but the instructions are marked to be safe for software
8966 completion (see Alpha architecture manual for details).
8967
8968 @item sui
8969 Like @samp{su}, but inexact traps are enabled as well.
8970 @end table
8971
8972 @item -mfp-rounding-mode=@var{rounding-mode}
8973 @opindex mfp-rounding-mode
8974 Selects the IEEE rounding mode.  Other Alpha compilers call this option
8975 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
8976 of:
8977
8978 @table @samp
8979 @item n
8980 Normal IEEE rounding mode.  Floating point numbers are rounded towards
8981 the nearest machine number or towards the even machine number in case
8982 of a tie.
8983
8984 @item m
8985 Round towards minus infinity.
8986
8987 @item c
8988 Chopped rounding mode.  Floating point numbers are rounded towards zero.
8989
8990 @item d
8991 Dynamic rounding mode.  A field in the floating point control register
8992 (@var{fpcr}, see Alpha architecture reference manual) controls the
8993 rounding mode in effect.  The C library initializes this register for
8994 rounding towards plus infinity.  Thus, unless your program modifies the
8995 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
8996 @end table
8997
8998 @item -mtrap-precision=@var{trap-precision}
8999 @opindex mtrap-precision
9000 In the Alpha architecture, floating point traps are imprecise.  This
9001 means without software assistance it is impossible to recover from a
9002 floating trap and program execution normally needs to be terminated.
9003 GCC can generate code that can assist operating system trap handlers
9004 in determining the exact location that caused a floating point trap.
9005 Depending on the requirements of an application, different levels of
9006 precisions can be selected:
9007
9008 @table @samp
9009 @item p
9010 Program precision.  This option is the default and means a trap handler
9011 can only identify which program caused a floating point exception.
9012
9013 @item f
9014 Function precision.  The trap handler can determine the function that
9015 caused a floating point exception.
9016
9017 @item i
9018 Instruction precision.  The trap handler can determine the exact
9019 instruction that caused a floating point exception.
9020 @end table
9021
9022 Other Alpha compilers provide the equivalent options called
9023 @option{-scope_safe} and @option{-resumption_safe}.
9024
9025 @item -mieee-conformant
9026 @opindex mieee-conformant
9027 This option marks the generated code as IEEE conformant.  You must not
9028 use this option unless you also specify @option{-mtrap-precision=i} and either
9029 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
9030 is to emit the line @samp{.eflag 48} in the function prologue of the
9031 generated assembly file.  Under DEC Unix, this has the effect that
9032 IEEE-conformant math library routines will be linked in.
9033
9034 @item -mbuild-constants
9035 @opindex mbuild-constants
9036 Normally GCC examines a 32- or 64-bit integer constant to
9037 see if it can construct it from smaller constants in two or three
9038 instructions.  If it cannot, it will output the constant as a literal and
9039 generate code to load it from the data segment at runtime.
9040
9041 Use this option to require GCC to construct @emph{all} integer constants
9042 using code, even if it takes more instructions (the maximum is six).
9043
9044 You would typically use this option to build a shared library dynamic
9045 loader.  Itself a shared library, it must relocate itself in memory
9046 before it can find the variables and constants in its own data segment.
9047
9048 @item -malpha-as
9049 @itemx -mgas
9050 @opindex malpha-as
9051 @opindex mgas
9052 Select whether to generate code to be assembled by the vendor-supplied
9053 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
9054
9055 @item -mbwx
9056 @itemx -mno-bwx
9057 @itemx -mcix
9058 @itemx -mno-cix
9059 @itemx -mfix
9060 @itemx -mno-fix
9061 @itemx -mmax
9062 @itemx -mno-max
9063 @opindex mbwx
9064 @opindex mno-bwx
9065 @opindex mcix
9066 @opindex mno-cix
9067 @opindex mfix
9068 @opindex mno-fix
9069 @opindex mmax
9070 @opindex mno-max
9071 Indicate whether GCC should generate code to use the optional BWX,
9072 CIX, FIX and MAX instruction sets.  The default is to use the instruction
9073 sets supported by the CPU type specified via @option{-mcpu=} option or that
9074 of the CPU on which GCC was built if none was specified.
9075
9076 @item -mfloat-vax
9077 @itemx -mfloat-ieee
9078 @opindex mfloat-vax
9079 @opindex mfloat-ieee
9080 Generate code that uses (does not use) VAX F and G floating point
9081 arithmetic instead of IEEE single and double precision.
9082
9083 @item -mexplicit-relocs
9084 @itemx -mno-explicit-relocs
9085 @opindex mexplicit-relocs
9086 @opindex mno-explicit-relocs
9087 Older Alpha assemblers provided no way to generate symbol relocations
9088 except via assembler macros.  Use of these macros does not allow
9089 optimal instruction scheduling.  GNU binutils as of version 2.12
9090 supports a new syntax that allows the compiler to explicitly mark
9091 which relocations should apply to which instructions.  This option
9092 is mostly useful for debugging, as GCC detects the capabilities of
9093 the assembler when it is built and sets the default accordingly.
9094
9095 @item -msmall-data
9096 @itemx -mlarge-data
9097 @opindex msmall-data
9098 @opindex mlarge-data
9099 When @option{-mexplicit-relocs} is in effect, static data is
9100 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
9101 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
9102 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
9103 16-bit relocations off of the @code{$gp} register.  This limits the
9104 size of the small data area to 64KB, but allows the variables to be
9105 directly accessed via a single instruction.
9106
9107 The default is @option{-mlarge-data}.  With this option the data area
9108 is limited to just below 2GB@.  Programs that require more than 2GB of
9109 data must use @code{malloc} or @code{mmap} to allocate the data in the
9110 heap instead of in the program's data segment.
9111
9112 When generating code for shared libraries, @option{-fpic} implies
9113 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
9114
9115 @item -msmall-text
9116 @itemx -mlarge-text
9117 @opindex msmall-text
9118 @opindex mlarge-text
9119 When @option{-msmall-text} is used, the compiler assumes that the
9120 code of the entire program (or shared library) fits in 4MB, and is
9121 thus reachable with a branch instruction.  When @option{-msmall-data}
9122 is used, the compiler can assume that all local symbols share the
9123 same @code{$gp} value, and thus reduce the number of instructions
9124 required for a function call from 4 to 1.
9125
9126 The default is @option{-mlarge-text}.
9127
9128 @item -mcpu=@var{cpu_type}
9129 @opindex mcpu
9130 Set the instruction set and instruction scheduling parameters for
9131 machine type @var{cpu_type}.  You can specify either the @samp{EV}
9132 style name or the corresponding chip number.  GCC supports scheduling
9133 parameters for the EV4, EV5 and EV6 family of processors and will
9134 choose the default values for the instruction set from the processor
9135 you specify.  If you do not specify a processor type, GCC will default
9136 to the processor on which the compiler was built.
9137
9138 Supported values for @var{cpu_type} are
9139
9140 @table @samp
9141 @item ev4
9142 @itemx ev45
9143 @itemx 21064
9144 Schedules as an EV4 and has no instruction set extensions.
9145
9146 @item ev5
9147 @itemx 21164
9148 Schedules as an EV5 and has no instruction set extensions.
9149
9150 @item ev56
9151 @itemx 21164a
9152 Schedules as an EV5 and supports the BWX extension.
9153
9154 @item pca56
9155 @itemx 21164pc
9156 @itemx 21164PC
9157 Schedules as an EV5 and supports the BWX and MAX extensions.
9158
9159 @item ev6
9160 @itemx 21264
9161 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
9162
9163 @item ev67
9164 @itemx 21264a
9165 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
9166 @end table
9167
9168 @item -mtune=@var{cpu_type}
9169 @opindex mtune
9170 Set only the instruction scheduling parameters for machine type
9171 @var{cpu_type}.  The instruction set is not changed.
9172
9173 @item -mmemory-latency=@var{time}
9174 @opindex mmemory-latency
9175 Sets the latency the scheduler should assume for typical memory
9176 references as seen by the application.  This number is highly
9177 dependent on the memory access patterns used by the application
9178 and the size of the external cache on the machine.
9179
9180 Valid options for @var{time} are
9181
9182 @table @samp
9183 @item @var{number}
9184 A decimal number representing clock cycles.
9185
9186 @item L1
9187 @itemx L2
9188 @itemx L3
9189 @itemx main
9190 The compiler contains estimates of the number of clock cycles for
9191 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
9192 (also called Dcache, Scache, and Bcache), as well as to main memory.
9193 Note that L3 is only valid for EV5.
9194
9195 @end table
9196 @end table
9197
9198 @node DEC Alpha/VMS Options
9199 @subsection DEC Alpha/VMS Options
9200
9201 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
9202
9203 @table @gcctabopt
9204 @item -mvms-return-codes
9205 @opindex mvms-return-codes
9206 Return VMS condition codes from main.  The default is to return POSIX
9207 style condition (e.g.@ error) codes.
9208 @end table
9209
9210 @node FRV Options
9211 @subsection FRV Options
9212 @cindex FRV Options
9213
9214 @table @gcctabopt
9215 @item -mgpr-32
9216 @opindex mgpr-32
9217
9218 Only use the first 32 general purpose registers.
9219
9220 @item -mgpr-64
9221 @opindex mgpr-64
9222
9223 Use all 64 general purpose registers.
9224
9225 @item -mfpr-32
9226 @opindex mfpr-32
9227
9228 Use only the first 32 floating point registers.
9229
9230 @item -mfpr-64
9231 @opindex mfpr-64
9232
9233 Use all 64 floating point registers
9234
9235 @item -mhard-float
9236 @opindex mhard-float
9237
9238 Use hardware instructions for floating point operations.
9239
9240 @item -msoft-float
9241 @opindex msoft-float
9242
9243 Use library routines for floating point operations.
9244
9245 @item -malloc-cc
9246 @opindex malloc-cc
9247
9248 Dynamically allocate condition code registers.
9249
9250 @item -mfixed-cc
9251 @opindex mfixed-cc
9252
9253 Do not try to dynamically allocate condition code registers, only
9254 use @code{icc0} and @code{fcc0}.
9255
9256 @item -mdword
9257 @opindex mdword
9258
9259 Change ABI to use double word insns.
9260
9261 @item -mno-dword
9262 @opindex mno-dword
9263
9264 Do not use double word instructions.
9265
9266 @item -mdouble
9267 @opindex mdouble
9268
9269 Use floating point double instructions.
9270
9271 @item -mno-double
9272 @opindex mno-double
9273
9274 Do not use floating point double instructions.
9275
9276 @item -mmedia
9277 @opindex mmedia
9278
9279 Use media instructions.
9280
9281 @item -mno-media
9282 @opindex mno-media
9283
9284 Do not use media instructions.
9285
9286 @item -mmuladd
9287 @opindex mmuladd
9288
9289 Use multiply and add/subtract instructions.
9290
9291 @item -mno-muladd
9292 @opindex mno-muladd
9293
9294 Do not use multiply and add/subtract instructions.
9295
9296 @item -mfdpic
9297 @opindex mfdpic
9298
9299 Select the FDPIC ABI, that uses function descriptors to represent
9300 pointers to functions.  Without any PIC/PIE-related options, it
9301 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
9302 assumes GOT entries and small data are within a 12-bit range from the
9303 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
9304 are computed with 32 bits.
9305
9306 @item -minline-plt
9307 @opindex minline-plt
9308
9309 Enable inlining of PLT entries in function calls to functions that are
9310 not known to bind locally.  It has no effect without @option{-mfdpic}.
9311 It's enabled by default if optimizing for speed and compiling for
9312 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
9313 optimization option such as @option{-O3} or above is present in the
9314 command line.
9315
9316 @item -mTLS
9317 @opindex TLS
9318
9319 Assume a large TLS segment when generating thread-local code.
9320
9321 @item -mtls
9322 @opindex tls
9323
9324 Do not assume a large TLS segment when generating thread-local code.
9325
9326 @item -mgprel-ro
9327 @opindex mgprel-ro
9328
9329 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
9330 that is known to be in read-only sections.  It's enabled by default,
9331 except for @option{-fpic} or @option{-fpie}: even though it may help
9332 make the global offset table smaller, it trades 1 instruction for 4.
9333 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
9334 one of which may be shared by multiple symbols, and it avoids the need
9335 for a GOT entry for the referenced symbol, so it's more likely to be a
9336 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
9337
9338 @item -multilib-library-pic
9339 @opindex multilib-library-pic
9340
9341 Link with the (library, not FD) pic libraries.  It's implied by
9342 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
9343 @option{-fpic} without @option{-mfdpic}.  You should never have to use
9344 it explicitly.
9345
9346 @item -mlinked-fp
9347 @opindex mlinked-fp
9348
9349 Follow the EABI requirement of always creating a frame pointer whenever
9350 a stack frame is allocated.  This option is enabled by default and can
9351 be disabled with @option{-mno-linked-fp}.
9352
9353 @item -mlong-calls
9354 @opindex mlong-calls
9355
9356 Use indirect addressing to call functions outside the current
9357 compilation unit.  This allows the functions to be placed anywhere
9358 within the 32-bit address space.
9359
9360 @item -malign-labels
9361 @opindex malign-labels
9362
9363 Try to align labels to an 8-byte boundary by inserting nops into the
9364 previous packet.  This option only has an effect when VLIW packing
9365 is enabled.  It doesn't create new packets; it merely adds nops to
9366 existing ones.
9367
9368 @item -mlibrary-pic
9369 @opindex mlibrary-pic
9370
9371 Generate position-independent EABI code.
9372
9373 @item -macc-4
9374 @opindex macc-4
9375
9376 Use only the first four media accumulator registers.
9377
9378 @item -macc-8
9379 @opindex macc-8
9380
9381 Use all eight media accumulator registers.
9382
9383 @item -mpack
9384 @opindex mpack
9385
9386 Pack VLIW instructions.
9387
9388 @item -mno-pack
9389 @opindex mno-pack
9390
9391 Do not pack VLIW instructions.
9392
9393 @item -mno-eflags
9394 @opindex mno-eflags
9395
9396 Do not mark ABI switches in e_flags.
9397
9398 @item -mcond-move
9399 @opindex mcond-move
9400
9401 Enable the use of conditional-move instructions (default).
9402
9403 This switch is mainly for debugging the compiler and will likely be removed
9404 in a future version.
9405
9406 @item -mno-cond-move
9407 @opindex mno-cond-move
9408
9409 Disable the use of conditional-move instructions.
9410
9411 This switch is mainly for debugging the compiler and will likely be removed
9412 in a future version.
9413
9414 @item -mscc
9415 @opindex mscc
9416
9417 Enable the use of conditional set instructions (default).
9418
9419 This switch is mainly for debugging the compiler and will likely be removed
9420 in a future version.
9421
9422 @item -mno-scc
9423 @opindex mno-scc
9424
9425 Disable the use of conditional set instructions.
9426
9427 This switch is mainly for debugging the compiler and will likely be removed
9428 in a future version.
9429
9430 @item -mcond-exec
9431 @opindex mcond-exec
9432
9433 Enable the use of conditional execution (default).
9434
9435 This switch is mainly for debugging the compiler and will likely be removed
9436 in a future version.
9437
9438 @item -mno-cond-exec
9439 @opindex mno-cond-exec
9440
9441 Disable the use of conditional execution.
9442
9443 This switch is mainly for debugging the compiler and will likely be removed
9444 in a future version.
9445
9446 @item -mvliw-branch
9447 @opindex mvliw-branch
9448
9449 Run a pass to pack branches into VLIW instructions (default).
9450
9451 This switch is mainly for debugging the compiler and will likely be removed
9452 in a future version.
9453
9454 @item -mno-vliw-branch
9455 @opindex mno-vliw-branch
9456
9457 Do not run a pass to pack branches into VLIW instructions.
9458
9459 This switch is mainly for debugging the compiler and will likely be removed
9460 in a future version.
9461
9462 @item -mmulti-cond-exec
9463 @opindex mmulti-cond-exec
9464
9465 Enable optimization of @code{&&} and @code{||} in conditional execution
9466 (default).
9467
9468 This switch is mainly for debugging the compiler and will likely be removed
9469 in a future version.
9470
9471 @item -mno-multi-cond-exec
9472 @opindex mno-multi-cond-exec
9473
9474 Disable optimization of @code{&&} and @code{||} in conditional execution.
9475
9476 This switch is mainly for debugging the compiler and will likely be removed
9477 in a future version.
9478
9479 @item -mnested-cond-exec
9480 @opindex mnested-cond-exec
9481
9482 Enable nested conditional execution optimizations (default).
9483
9484 This switch is mainly for debugging the compiler and will likely be removed
9485 in a future version.
9486
9487 @item -mno-nested-cond-exec
9488 @opindex mno-nested-cond-exec
9489
9490 Disable nested conditional execution optimizations.
9491
9492 This switch is mainly for debugging the compiler and will likely be removed
9493 in a future version.
9494
9495 @item -moptimize-membar
9496 @opindex moptimize-membar
9497
9498 This switch removes redundant @code{membar} instructions from the
9499 compiler generated code.  It is enabled by default.
9500
9501 @item -mno-optimize-membar
9502 @opindex mno-optimize-membar
9503
9504 This switch disables the automatic removal of redundant @code{membar}
9505 instructions from the generated code.
9506
9507 @item -mtomcat-stats
9508 @opindex mtomcat-stats
9509
9510 Cause gas to print out tomcat statistics.
9511
9512 @item -mcpu=@var{cpu}
9513 @opindex mcpu
9514
9515 Select the processor type for which to generate code.  Possible values are
9516 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
9517 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
9518
9519 @end table
9520
9521 @node GNU/Linux Options
9522 @subsection GNU/Linux Options
9523
9524 These @samp{-m} options are defined for GNU/Linux targets:
9525
9526 @table @gcctabopt
9527 @item -mglibc
9528 @opindex mglibc
9529 Use the GNU C library instead of uClibc.  This is the default except
9530 on @samp{*-*-linux-*uclibc*} targets.
9531
9532 @item -muclibc
9533 @opindex muclibc
9534 Use uClibc instead of the GNU C library.  This is the default on
9535 @samp{*-*-linux-*uclibc*} targets.
9536 @end table
9537
9538 @node H8/300 Options
9539 @subsection H8/300 Options
9540
9541 These @samp{-m} options are defined for the H8/300 implementations:
9542
9543 @table @gcctabopt
9544 @item -mrelax
9545 @opindex mrelax
9546 Shorten some address references at link time, when possible; uses the
9547 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
9548 ld, Using ld}, for a fuller description.
9549
9550 @item -mh
9551 @opindex mh
9552 Generate code for the H8/300H@.
9553
9554 @item -ms
9555 @opindex ms
9556 Generate code for the H8S@.
9557
9558 @item -mn
9559 @opindex mn
9560 Generate code for the H8S and H8/300H in the normal mode.  This switch
9561 must be used either with @option{-mh} or @option{-ms}.
9562
9563 @item -ms2600
9564 @opindex ms2600
9565 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
9566
9567 @item -mint32
9568 @opindex mint32
9569 Make @code{int} data 32 bits by default.
9570
9571 @item -malign-300
9572 @opindex malign-300
9573 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9574 The default for the H8/300H and H8S is to align longs and floats on 4
9575 byte boundaries.
9576 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
9577 This option has no effect on the H8/300.
9578 @end table
9579
9580 @node HPPA Options
9581 @subsection HPPA Options
9582 @cindex HPPA Options
9583
9584 These @samp{-m} options are defined for the HPPA family of computers:
9585
9586 @table @gcctabopt
9587 @item -march=@var{architecture-type}
9588 @opindex march
9589 Generate code for the specified architecture.  The choices for
9590 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
9591 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
9592 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
9593 architecture option for your machine.  Code compiled for lower numbered
9594 architectures will run on higher numbered architectures, but not the
9595 other way around.
9596
9597 @item -mpa-risc-1-0
9598 @itemx -mpa-risc-1-1
9599 @itemx -mpa-risc-2-0
9600 @opindex mpa-risc-1-0
9601 @opindex mpa-risc-1-1
9602 @opindex mpa-risc-2-0
9603 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
9604
9605 @item -mbig-switch
9606 @opindex mbig-switch
9607 Generate code suitable for big switch tables.  Use this option only if
9608 the assembler/linker complain about out of range branches within a switch
9609 table.
9610
9611 @item -mjump-in-delay
9612 @opindex mjump-in-delay
9613 Fill delay slots of function calls with unconditional jump instructions
9614 by modifying the return pointer for the function call to be the target
9615 of the conditional jump.
9616
9617 @item -mdisable-fpregs
9618 @opindex mdisable-fpregs
9619 Prevent floating point registers from being used in any manner.  This is
9620 necessary for compiling kernels which perform lazy context switching of
9621 floating point registers.  If you use this option and attempt to perform
9622 floating point operations, the compiler will abort.
9623
9624 @item -mdisable-indexing
9625 @opindex mdisable-indexing
9626 Prevent the compiler from using indexing address modes.  This avoids some
9627 rather obscure problems when compiling MIG generated code under MACH@.
9628
9629 @item -mno-space-regs
9630 @opindex mno-space-regs
9631 Generate code that assumes the target has no space registers.  This allows
9632 GCC to generate faster indirect calls and use unscaled index address modes.
9633
9634 Such code is suitable for level 0 PA systems and kernels.
9635
9636 @item -mfast-indirect-calls
9637 @opindex mfast-indirect-calls
9638 Generate code that assumes calls never cross space boundaries.  This
9639 allows GCC to emit code which performs faster indirect calls.
9640
9641 This option will not work in the presence of shared libraries or nested
9642 functions.
9643
9644 @item -mfixed-range=@var{register-range}
9645 @opindex mfixed-range
9646 Generate code treating the given register range as fixed registers.
9647 A fixed register is one that the register allocator can not use.  This is
9648 useful when compiling kernel code.  A register range is specified as
9649 two registers separated by a dash.  Multiple register ranges can be
9650 specified separated by a comma.
9651
9652 @item -mlong-load-store
9653 @opindex mlong-load-store
9654 Generate 3-instruction load and store sequences as sometimes required by
9655 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
9656 the HP compilers.
9657
9658 @item -mportable-runtime
9659 @opindex mportable-runtime
9660 Use the portable calling conventions proposed by HP for ELF systems.
9661
9662 @item -mgas
9663 @opindex mgas
9664 Enable the use of assembler directives only GAS understands.
9665
9666 @item -mschedule=@var{cpu-type}
9667 @opindex mschedule
9668 Schedule code according to the constraints for the machine type
9669 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
9670 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
9671 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
9672 proper scheduling option for your machine.  The default scheduling is
9673 @samp{8000}.
9674
9675 @item -mlinker-opt
9676 @opindex mlinker-opt
9677 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
9678 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
9679 linkers in which they give bogus error messages when linking some programs.
9680
9681 @item -msoft-float
9682 @opindex msoft-float
9683 Generate output containing library calls for floating point.
9684 @strong{Warning:} the requisite libraries are not available for all HPPA
9685 targets.  Normally the facilities of the machine's usual C compiler are
9686 used, but this cannot be done directly in cross-compilation.  You must make
9687 your own arrangements to provide suitable library functions for
9688 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
9689 does provide software floating point support.
9690
9691 @option{-msoft-float} changes the calling convention in the output file;
9692 therefore, it is only useful if you compile @emph{all} of a program with
9693 this option.  In particular, you need to compile @file{libgcc.a}, the
9694 library that comes with GCC, with @option{-msoft-float} in order for
9695 this to work.
9696
9697 @item -msio
9698 @opindex msio
9699 Generate the predefine, @code{_SIO}, for server IO@.  The default is
9700 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
9701 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
9702 options are available under HP-UX and HI-UX@.
9703
9704 @item -mgnu-ld
9705 @opindex gnu-ld
9706 Use GNU ld specific options.  This passes @option{-shared} to ld when
9707 building a shared library.  It is the default when GCC is configured,
9708 explicitly or implicitly, with the GNU linker.  This option does not
9709 have any affect on which ld is called, it only changes what parameters
9710 are passed to that ld.  The ld that is called is determined by the
9711 @option{--with-ld} configure option, GCC's program search path, and
9712 finally by the user's @env{PATH}.  The linker used by GCC can be printed
9713 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
9714 on the 64 bit HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
9715
9716 @item -mhp-ld
9717 @opindex hp-ld
9718 Use HP ld specific options.  This passes @option{-b} to ld when building
9719 a shared library and passes @option{+Accept TypeMismatch} to ld on all
9720 links.  It is the default when GCC is configured, explicitly or
9721 implicitly, with the HP linker.  This option does not have any affect on
9722 which ld is called, it only changes what parameters are passed to that
9723 ld.  The ld that is called is determined by the @option{--with-ld}
9724 configure option, GCC's program search path, and finally by the user's
9725 @env{PATH}.  The linker used by GCC can be printed using @samp{which
9726 `gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
9727 HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
9728
9729 @item -mlong-calls
9730 @opindex mno-long-calls
9731 Generate code that uses long call sequences.  This ensures that a call
9732 is always able to reach linker generated stubs.  The default is to generate
9733 long calls only when the distance from the call site to the beginning
9734 of the function or translation unit, as the case may be, exceeds a
9735 predefined limit set by the branch type being used.  The limits for
9736 normal calls are 7,600,000 and 240,000 bytes, respectively for the
9737 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
9738 240,000 bytes.
9739
9740 Distances are measured from the beginning of functions when using the
9741 @option{-ffunction-sections} option, or when using the @option{-mgas}
9742 and @option{-mno-portable-runtime} options together under HP-UX with
9743 the SOM linker.
9744
9745 It is normally not desirable to use this option as it will degrade
9746 performance.  However, it may be useful in large applications,
9747 particularly when partial linking is used to build the application.
9748
9749 The types of long calls used depends on the capabilities of the
9750 assembler and linker, and the type of code being generated.  The
9751 impact on systems that support long absolute calls, and long pic
9752 symbol-difference or pc-relative calls should be relatively small.
9753 However, an indirect call is used on 32-bit ELF systems in pic code
9754 and it is quite long.
9755
9756 @item -munix=@var{unix-std}
9757 @opindex march
9758 Generate compiler predefines and select a startfile for the specified
9759 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
9760 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
9761 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
9762 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
9763 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
9764 and later.
9765
9766 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
9767 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
9768 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
9769 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
9770 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
9771 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
9772
9773 It is @emph{important} to note that this option changes the interfaces
9774 for various library routines.  It also affects the operational behavior
9775 of the C library.  Thus, @emph{extreme} care is needed in using this
9776 option.
9777
9778 Library code that is intended to operate with more than one UNIX
9779 standard must test, set and restore the variable @var{__xpg4_extended_mask}
9780 as appropriate.  Most GNU software doesn't provide this capability.
9781
9782 @item -nolibdld
9783 @opindex nolibdld
9784 Suppress the generation of link options to search libdld.sl when the
9785 @option{-static} option is specified on HP-UX 10 and later.
9786
9787 @item -static
9788 @opindex static
9789 The HP-UX implementation of setlocale in libc has a dependency on
9790 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9791 when the @option{-static} option is specified, special link options
9792 are needed to resolve this dependency.
9793
9794 On HP-UX 10 and later, the GCC driver adds the necessary options to
9795 link with libdld.sl when the @option{-static} option is specified.
9796 This causes the resulting binary to be dynamic.  On the 64-bit port,
9797 the linkers generate dynamic binaries by default in any case.  The
9798 @option{-nolibdld} option can be used to prevent the GCC driver from
9799 adding these link options.
9800
9801 @item -threads
9802 @opindex threads
9803 Add support for multithreading with the @dfn{dce thread} library
9804 under HP-UX@.  This option sets flags for both the preprocessor and
9805 linker.
9806 @end table
9807
9808 @node i386 and x86-64 Options
9809 @subsection Intel 386 and AMD x86-64 Options
9810 @cindex i386 Options
9811 @cindex x86-64 Options
9812 @cindex Intel 386 Options
9813 @cindex AMD x86-64 Options
9814
9815 These @samp{-m} options are defined for the i386 and x86-64 family of
9816 computers:
9817
9818 @table @gcctabopt
9819 @item -mtune=@var{cpu-type}
9820 @opindex mtune
9821 Tune to @var{cpu-type} everything applicable about the generated code, except
9822 for the ABI and the set of available instructions.  The choices for
9823 @var{cpu-type} are:
9824 @table @emph
9825 @item generic
9826 Produce code optimized for the most common IA32/AMD64/EM64T processors.
9827 If you know the CPU on which your code will run, then you should use
9828 the corresponding @option{-mtune} option instead of
9829 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
9830 of your application will have, then you should use this option.
9831
9832 As new processors are deployed in the marketplace, the behavior of this
9833 option will change.  Therefore, if you upgrade to a newer version of
9834 GCC, the code generated option will change to reflect the processors
9835 that were most common when that version of GCC was released.
9836
9837 There is no @option{-march=generic} option because @option{-march}
9838 indicates the instruction set the compiler can use, and there is no
9839 generic instruction set applicable to all processors.  In contrast,
9840 @option{-mtune} indicates the processor (or, in this case, collection of
9841 processors) for which the code is optimized.
9842 @item native
9843 This selects the CPU to tune for at compilation time by determining
9844 the processor type of the compiling machine.  Using @option{-mtune=native}
9845 will produce code optimized for the local machine under the constraints
9846 of the selected instruction set.  Using @option{-march=native} will
9847 enable all instruction subsets supported by the local machine (hence
9848 the result might not run on different machines).
9849 @item i386
9850 Original Intel's i386 CPU@.
9851 @item i486
9852 Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
9853 @item i586, pentium
9854 Intel Pentium CPU with no MMX support.
9855 @item pentium-mmx
9856 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
9857 @item pentiumpro
9858 Intel PentiumPro CPU@.
9859 @item i686
9860 Same as @code{generic}, but when used as @code{march} option, PentiumPro
9861 instruction set will be used, so the code will run on all i686 family chips.
9862 @item pentium2
9863 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
9864 @item pentium3, pentium3m
9865 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
9866 support.
9867 @item pentium-m
9868 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
9869 support.  Used by Centrino notebooks.
9870 @item pentium4, pentium4m
9871 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
9872 @item prescott
9873 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
9874 set support.
9875 @item nocona
9876 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
9877 SSE2 and SSE3 instruction set support.
9878 @item core2
9879 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
9880 instruction set support.
9881 @item k6
9882 AMD K6 CPU with MMX instruction set support.
9883 @item k6-2, k6-3
9884 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
9885 @item athlon, athlon-tbird
9886 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
9887 support.
9888 @item athlon-4, athlon-xp, athlon-mp
9889 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
9890 instruction set support.
9891 @item k8, opteron, athlon64, athlon-fx
9892 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
9893 MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
9894 @item k8-sse3, opteron-sse3, athlon64-sse3
9895 Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
9896 @item amdfam10, barcelona
9897 AMD Family 10 core based CPUs with x86-64 instruction set support.  (This
9898 supersets MMX, SSE, SSE2, SSE3, SSE4A, 3dNOW!, enhanced 3dNOW!, ABM and 64-bit
9899 instruction set extensions.)
9900 @item winchip-c6
9901 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
9902 set support.
9903 @item winchip2
9904 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
9905 instruction set support.
9906 @item c3
9907 Via C3 CPU with MMX and 3dNOW! instruction set support.  (No scheduling is
9908 implemented for this chip.)
9909 @item c3-2
9910 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
9911 implemented for this chip.)
9912 @item geode
9913 Embedded AMD CPU with MMX and 3dNOW! instruction set support.
9914 @end table
9915
9916 While picking a specific @var{cpu-type} will schedule things appropriately
9917 for that particular chip, the compiler will not generate any code that
9918 does not run on the i386 without the @option{-march=@var{cpu-type}} option
9919 being used.
9920
9921 @item -march=@var{cpu-type}
9922 @opindex march
9923 Generate instructions for the machine type @var{cpu-type}.  The choices
9924 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
9925 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
9926
9927 @item -mcpu=@var{cpu-type}
9928 @opindex mcpu
9929 A deprecated synonym for @option{-mtune}.
9930
9931 @item -m386
9932 @itemx -m486
9933 @itemx -mpentium
9934 @itemx -mpentiumpro
9935 @opindex m386
9936 @opindex m486
9937 @opindex mpentium
9938 @opindex mpentiumpro
9939 These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
9940 @option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
9941 These synonyms are deprecated.
9942
9943 @item -mfpmath=@var{unit}
9944 @opindex march
9945 Generate floating point arithmetics for selected unit @var{unit}.  The choices
9946 for @var{unit} are:
9947
9948 @table @samp
9949 @item 387
9950 Use the standard 387 floating point coprocessor present majority of chips and
9951 emulated otherwise.  Code compiled with this option will run almost everywhere.
9952 The temporary results are computed in 80bit precision instead of precision
9953 specified by the type resulting in slightly different results compared to most
9954 of other chips.  See @option{-ffloat-store} for more detailed description.
9955
9956 This is the default choice for i386 compiler.
9957
9958 @item sse
9959 Use scalar floating point instructions present in the SSE instruction set.
9960 This instruction set is supported by Pentium3 and newer chips, in the AMD line
9961 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
9962 instruction set supports only single precision arithmetics, thus the double and
9963 extended precision arithmetics is still done using 387.  Later version, present
9964 only in Pentium4 and the future AMD x86-64 chips supports double precision
9965 arithmetics too.
9966
9967 For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
9968 or @option{-msse2} switches to enable SSE extensions and make this option
9969 effective.  For the x86-64 compiler, these extensions are enabled by default.
9970
9971 The resulting code should be considerably faster in the majority of cases and avoid
9972 the numerical instability problems of 387 code, but may break some existing
9973 code that expects temporaries to be 80bit.
9974
9975 This is the default choice for the x86-64 compiler.
9976
9977 @item sse,387
9978 Attempt to utilize both instruction sets at once.  This effectively double the
9979 amount of available registers and on chips with separate execution units for
9980 387 and SSE the execution resources too.  Use this option with care, as it is
9981 still experimental, because the GCC register allocator does not model separate
9982 functional units well resulting in instable performance.
9983 @end table
9984
9985 @item -masm=@var{dialect}
9986 @opindex masm=@var{dialect}
9987 Output asm instructions using selected @var{dialect}.  Supported
9988 choices are @samp{intel} or @samp{att} (the default one).  Darwin does
9989 not support @samp{intel}.
9990
9991 @item -mieee-fp
9992 @itemx -mno-ieee-fp
9993 @opindex mieee-fp
9994 @opindex mno-ieee-fp
9995 Control whether or not the compiler uses IEEE floating point
9996 comparisons.  These handle correctly the case where the result of a
9997 comparison is unordered.
9998
9999 @item -msoft-float
10000 @opindex msoft-float
10001 Generate output containing library calls for floating point.
10002 @strong{Warning:} the requisite libraries are not part of GCC@.
10003 Normally the facilities of the machine's usual C compiler are used, but
10004 this can't be done directly in cross-compilation.  You must make your
10005 own arrangements to provide suitable library functions for
10006 cross-compilation.
10007
10008 On machines where a function returns floating point results in the 80387
10009 register stack, some floating point opcodes may be emitted even if
10010 @option{-msoft-float} is used.
10011
10012 @item -mno-fp-ret-in-387
10013 @opindex mno-fp-ret-in-387
10014 Do not use the FPU registers for return values of functions.
10015
10016 The usual calling convention has functions return values of types
10017 @code{float} and @code{double} in an FPU register, even if there
10018 is no FPU@.  The idea is that the operating system should emulate
10019 an FPU@.
10020
10021 The option @option{-mno-fp-ret-in-387} causes such values to be returned
10022 in ordinary CPU registers instead.
10023
10024 @item -mno-fancy-math-387
10025 @opindex mno-fancy-math-387
10026 Some 387 emulators do not support the @code{sin}, @code{cos} and
10027 @code{sqrt} instructions for the 387.  Specify this option to avoid
10028 generating those instructions.  This option is the default on FreeBSD,
10029 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
10030 indicates that the target cpu will always have an FPU and so the
10031 instruction will not need emulation.  As of revision 2.6.1, these
10032 instructions are not generated unless you also use the
10033 @option{-funsafe-math-optimizations} switch.
10034
10035 @item -malign-double
10036 @itemx -mno-align-double
10037 @opindex malign-double
10038 @opindex mno-align-double
10039 Control whether GCC aligns @code{double}, @code{long double}, and
10040 @code{long long} variables on a two word boundary or a one word
10041 boundary.  Aligning @code{double} variables on a two word boundary will
10042 produce code that runs somewhat faster on a @samp{Pentium} at the
10043 expense of more memory.
10044
10045 On x86-64, @option{-malign-double} is enabled by default.
10046
10047 @strong{Warning:} if you use the @option{-malign-double} switch,
10048 structures containing the above types will be aligned differently than
10049 the published application binary interface specifications for the 386
10050 and will not be binary compatible with structures in code compiled
10051 without that switch.
10052
10053 @item -m96bit-long-double
10054 @itemx -m128bit-long-double
10055 @opindex m96bit-long-double
10056 @opindex m128bit-long-double
10057 These switches control the size of @code{long double} type.  The i386
10058 application binary interface specifies the size to be 96 bits,
10059 so @option{-m96bit-long-double} is the default in 32 bit mode.
10060
10061 Modern architectures (Pentium and newer) would prefer @code{long double}
10062 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
10063 conforming to the ABI, this would not be possible.  So specifying a
10064 @option{-m128bit-long-double} will align @code{long double}
10065 to a 16 byte boundary by padding the @code{long double} with an additional
10066 32 bit zero.
10067
10068 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
10069 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
10070
10071 Notice that neither of these options enable any extra precision over the x87
10072 standard of 80 bits for a @code{long double}.
10073
10074 @strong{Warning:} if you override the default value for your target ABI, the
10075 structures and arrays containing @code{long double} variables will change
10076 their size as well as function calling convention for function taking
10077 @code{long double} will be modified.  Hence they will not be binary
10078 compatible with arrays or structures in code compiled without that switch.
10079
10080 @item -mmlarge-data-threshold=@var{number}
10081 @opindex mlarge-data-threshold=@var{number}
10082 When @option{-mcmodel=medium} is specified, the data greater than
10083 @var{threshold} are placed in large data section.  This value must be the
10084 same across all object linked into the binary and defaults to 65535.
10085
10086 @item -mrtd
10087 @opindex mrtd
10088 Use a different function-calling convention, in which functions that
10089 take a fixed number of arguments return with the @code{ret} @var{num}
10090 instruction, which pops their arguments while returning.  This saves one
10091 instruction in the caller since there is no need to pop the arguments
10092 there.
10093
10094 You can specify that an individual function is called with this calling
10095 sequence with the function attribute @samp{stdcall}.  You can also
10096 override the @option{-mrtd} option by using the function attribute
10097 @samp{cdecl}.  @xref{Function Attributes}.
10098
10099 @strong{Warning:} this calling convention is incompatible with the one
10100 normally used on Unix, so you cannot use it if you need to call
10101 libraries compiled with the Unix compiler.
10102
10103 Also, you must provide function prototypes for all functions that
10104 take variable numbers of arguments (including @code{printf});
10105 otherwise incorrect code will be generated for calls to those
10106 functions.
10107
10108 In addition, seriously incorrect code will result if you call a
10109 function with too many arguments.  (Normally, extra arguments are
10110 harmlessly ignored.)
10111
10112 @item -mregparm=@var{num}
10113 @opindex mregparm
10114 Control how many registers are used to pass integer arguments.  By
10115 default, no registers are used to pass arguments, and at most 3
10116 registers can be used.  You can control this behavior for a specific
10117 function by using the function attribute @samp{regparm}.
10118 @xref{Function Attributes}.
10119
10120 @strong{Warning:} if you use this switch, and
10121 @var{num} is nonzero, then you must build all modules with the same
10122 value, including any libraries.  This includes the system libraries and
10123 startup modules.
10124
10125 @item -msseregparm
10126 @opindex msseregparm
10127 Use SSE register passing conventions for float and double arguments
10128 and return values.  You can control this behavior for a specific
10129 function by using the function attribute @samp{sseregparm}.
10130 @xref{Function Attributes}.
10131
10132 @strong{Warning:} if you use this switch then you must build all
10133 modules with the same value, including any libraries.  This includes
10134 the system libraries and startup modules.
10135
10136 @item -mpc32
10137 @itemx -mpc64
10138 @itemx -mpc80
10139 @opindex mpc32
10140 @opindex mpc64
10141 @opindex mpc80
10142
10143 Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
10144 is specified, the significand of floating-point operations is rounded to 24
10145 bits (single precision), @option{-mpc64} rounds the significand of
10146 floating-point operations to 53 bits (double precision) and @option{-mpc80}
10147 rounds the significand of floating-point operations to 64 bits (extended
10148 double precision).  Note that a change of default precision control may
10149 affect the results returned by some of the mathematical functions.
10150
10151 @item -mstackrealign
10152 @opindex mstackrealign
10153 Realign the stack at entry.  On the Intel x86, the
10154 @option{-mstackrealign} option will generate an alternate prologue and
10155 epilogue that realigns the runtime stack.  This supports mixing legacy
10156 codes that keep a 4-byte aligned stack with modern codes that keep a
10157 16-byte stack for SSE compatibility.  The alternate prologue and
10158 epilogue are slower and bigger than the regular ones, and the
10159 alternate prologue requires an extra scratch register; this lowers the
10160 number of registers available if used in conjunction with the
10161 @code{regparm} attribute.  The @option{-mstackrealign} option is
10162 incompatible with the nested function prologue; this is considered a
10163 hard error.  See also the attribute @code{force_align_arg_pointer},
10164 applicable to individual functions.
10165
10166 @item -mpreferred-stack-boundary=@var{num}
10167 @opindex mpreferred-stack-boundary
10168 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
10169 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
10170 the default is 4 (16 bytes or 128 bits).
10171
10172 On Pentium and PentiumPro, @code{double} and @code{long double} values
10173 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
10174 suffer significant run time performance penalties.  On Pentium III, the
10175 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
10176 properly if it is not 16 byte aligned.
10177
10178 To ensure proper alignment of this values on the stack, the stack boundary
10179 must be as aligned as that required by any value stored on the stack.
10180 Further, every function must be generated such that it keeps the stack
10181 aligned.  Thus calling a function compiled with a higher preferred
10182 stack boundary from a function compiled with a lower preferred stack
10183 boundary will most likely misalign the stack.  It is recommended that
10184 libraries that use callbacks always use the default setting.
10185
10186 This extra alignment does consume extra stack space, and generally
10187 increases code size.  Code that is sensitive to stack space usage, such
10188 as embedded systems and operating system kernels, may want to reduce the
10189 preferred alignment to @option{-mpreferred-stack-boundary=2}.
10190
10191 @item -mmmx
10192 @itemx -mno-mmx
10193 @item -msse
10194 @itemx -mno-sse
10195 @item -msse2
10196 @itemx -mno-sse2
10197 @item -msse3
10198 @itemx -mno-sse3
10199 @item -mssse3
10200 @itemx -mno-ssse3
10201 @item -msse4a
10202 @item -mno-sse4a
10203 @item -m3dnow
10204 @itemx -mno-3dnow
10205 @item -mpopcnt
10206 @itemx -mno-popcnt
10207 @item -mabm
10208 @itemx -mno-abm
10209 @opindex mmmx
10210 @opindex mno-mmx
10211 @opindex msse
10212 @opindex mno-sse
10213 @opindex m3dnow
10214 @opindex mno-3dnow
10215 These switches enable or disable the use of instructions in the MMX,
10216 SSE, SSE2, SSE3, SSSE3, SSE4A, ABM or 3DNow! extended instruction sets.
10217 These extensions are also available as built-in functions: see
10218 @ref{X86 Built-in Functions}, for details of the functions enabled and
10219 disabled by these switches.
10220
10221 To have SSE/SSE2 instructions generated automatically from floating-point
10222 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
10223
10224 These options will enable GCC to use these extended instructions in
10225 generated code, even without @option{-mfpmath=sse}.  Applications which
10226 perform runtime CPU detection must compile separate files for each
10227 supported architecture, using the appropriate flags.  In particular,
10228 the file containing the CPU detection code should be compiled without
10229 these options.
10230
10231 @item -mcx16
10232 @opindex mcx16
10233 This option will enable GCC to use CMPXCHG16B instruction in generated code.
10234 CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword)
10235 data types.  This is useful for high resolution counters that could be updated
10236 by multiple processors (or cores).  This instruction is generated as part of
10237 atomic built-in functions: see @ref{Atomic Builtins} for details.
10238
10239 @item -msahf
10240 @opindex msahf
10241 This option will enable GCC to use SAHF instruction in generated 64-bit code.
10242 Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported
10243 by AMD64 until introduction of Pentium 4 G1 step in December 2005.  LAHF and
10244 SAHF are load and store instructions, respectively, for certain status flags.
10245 In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
10246 or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
10247
10248 @item -mpush-args
10249 @itemx -mno-push-args
10250 @opindex mpush-args
10251 @opindex mno-push-args
10252 Use PUSH operations to store outgoing parameters.  This method is shorter
10253 and usually equally fast as method using SUB/MOV operations and is enabled
10254 by default.  In some cases disabling it may improve performance because of
10255 improved scheduling and reduced dependencies.
10256
10257 @item -maccumulate-outgoing-args
10258 @opindex maccumulate-outgoing-args
10259 If enabled, the maximum amount of space required for outgoing arguments will be
10260 computed in the function prologue.  This is faster on most modern CPUs
10261 because of reduced dependencies, improved scheduling and reduced stack usage
10262 when preferred stack boundary is not equal to 2.  The drawback is a notable
10263 increase in code size.  This switch implies @option{-mno-push-args}.
10264
10265 @item -mthreads
10266 @opindex mthreads
10267 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
10268 on thread-safe exception handling must compile and link all code with the
10269 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
10270 @option{-D_MT}; when linking, it links in a special thread helper library
10271 @option{-lmingwthrd} which cleans up per thread exception handling data.
10272
10273 @item -mno-align-stringops
10274 @opindex mno-align-stringops
10275 Do not align destination of inlined string operations.  This switch reduces
10276 code size and improves performance in case the destination is already aligned,
10277 but GCC doesn't know about it.
10278
10279 @item -minline-all-stringops
10280 @opindex minline-all-stringops
10281 By default GCC inlines string operations only when destination is known to be
10282 aligned at least to 4 byte boundary.  This enables more inlining, increase code
10283 size, but may improve performance of code that depends on fast memcpy, strlen
10284 and memset for short lengths.
10285
10286 @item -minline-stringops-dynamically
10287 @opindex minline-stringops-dynamically
10288 For string operation of unknown size, inline runtime checks so for small
10289 blocks inline code is used, while for large blocks library call is used.
10290
10291 @item -mstringop-strategy=@var{alg}
10292 @opindex mstringop-strategy=@var{alg}
10293 Overwrite internal decision heuristic about particular algorithm to inline
10294 string operation with.  The allowed values are @code{rep_byte},
10295 @code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix
10296 of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for
10297 expanding inline loop, @code{libcall} for always expanding library call.
10298
10299 @item -momit-leaf-frame-pointer
10300 @opindex momit-leaf-frame-pointer
10301 Don't keep the frame pointer in a register for leaf functions.  This
10302 avoids the instructions to save, set up and restore frame pointers and
10303 makes an extra register available in leaf functions.  The option
10304 @option{-fomit-frame-pointer} removes the frame pointer for all functions
10305 which might make debugging harder.
10306
10307 @item -mtls-direct-seg-refs
10308 @itemx -mno-tls-direct-seg-refs
10309 @opindex mtls-direct-seg-refs
10310 Controls whether TLS variables may be accessed with offsets from the
10311 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
10312 or whether the thread base pointer must be added.  Whether or not this
10313 is legal depends on the operating system, and whether it maps the
10314 segment to cover the entire TLS area.
10315
10316 For systems that use GNU libc, the default is on.
10317 @end table
10318
10319 These @samp{-m} switches are supported in addition to the above
10320 on AMD x86-64 processors in 64-bit environments.
10321
10322 @table @gcctabopt
10323 @item -m32
10324 @itemx -m64
10325 @opindex m32
10326 @opindex m64
10327 Generate code for a 32-bit or 64-bit environment.
10328 The 32-bit environment sets int, long and pointer to 32 bits and
10329 generates code that runs on any i386 system.
10330 The 64-bit environment sets int to 32 bits and long and pointer
10331 to 64 bits and generates code for AMD's x86-64 architecture. For
10332 darwin only the -m64 option turns off the @option{-fno-pic} and
10333 @option{-mdynamic-no-pic} options.
10334
10335 @item -mno-red-zone
10336 @opindex no-red-zone
10337 Do not use a so called red zone for x86-64 code.  The red zone is mandated
10338 by the x86-64 ABI, it is a 128-byte area beyond the location of the
10339 stack pointer that will not be modified by signal or interrupt handlers
10340 and therefore can be used for temporary data without adjusting the stack
10341 pointer.  The flag @option{-mno-red-zone} disables this red zone.
10342
10343 @item -mcmodel=small
10344 @opindex mcmodel=small
10345 Generate code for the small code model: the program and its symbols must
10346 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
10347 Programs can be statically or dynamically linked.  This is the default
10348 code model.
10349
10350 @item -mcmodel=kernel
10351 @opindex mcmodel=kernel
10352 Generate code for the kernel code model.  The kernel runs in the
10353 negative 2 GB of the address space.
10354 This model has to be used for Linux kernel code.
10355
10356 @item -mcmodel=medium
10357 @opindex mcmodel=medium
10358 Generate code for the medium model: The program is linked in the lower 2
10359 GB of the address space but symbols can be located anywhere in the
10360 address space.  Programs can be statically or dynamically linked, but
10361 building of shared libraries are not supported with the medium model.
10362
10363 @item -mcmodel=large
10364 @opindex mcmodel=large
10365 Generate code for the large model: This model makes no assumptions
10366 about addresses and sizes of sections.
10367 @end table
10368
10369 @node IA-64 Options
10370 @subsection IA-64 Options
10371 @cindex IA-64 Options
10372
10373 These are the @samp{-m} options defined for the Intel IA-64 architecture.
10374
10375 @table @gcctabopt
10376 @item -mbig-endian
10377 @opindex mbig-endian
10378 Generate code for a big endian target.  This is the default for HP-UX@.
10379
10380 @item -mlittle-endian
10381 @opindex mlittle-endian
10382 Generate code for a little endian target.  This is the default for AIX5
10383 and GNU/Linux.
10384
10385 @item -mgnu-as
10386 @itemx -mno-gnu-as
10387 @opindex mgnu-as
10388 @opindex mno-gnu-as
10389 Generate (or don't) code for the GNU assembler.  This is the default.
10390 @c Also, this is the default if the configure option @option{--with-gnu-as}
10391 @c is used.
10392
10393 @item -mgnu-ld
10394 @itemx -mno-gnu-ld
10395 @opindex mgnu-ld
10396 @opindex mno-gnu-ld
10397 Generate (or don't) code for the GNU linker.  This is the default.
10398 @c Also, this is the default if the configure option @option{--with-gnu-ld}
10399 @c is used.
10400
10401 @item -mno-pic
10402 @opindex mno-pic
10403 Generate code that does not use a global pointer register.  The result
10404 is not position independent code, and violates the IA-64 ABI@.
10405
10406 @item -mvolatile-asm-stop
10407 @itemx -mno-volatile-asm-stop
10408 @opindex mvolatile-asm-stop
10409 @opindex mno-volatile-asm-stop
10410 Generate (or don't) a stop bit immediately before and after volatile asm
10411 statements.
10412
10413 @item -mregister-names
10414 @itemx -mno-register-names
10415 @opindex mregister-names
10416 @opindex mno-register-names
10417 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
10418 the stacked registers.  This may make assembler output more readable.
10419
10420 @item -mno-sdata
10421 @itemx -msdata
10422 @opindex mno-sdata
10423 @opindex msdata
10424 Disable (or enable) optimizations that use the small data section.  This may
10425 be useful for working around optimizer bugs.
10426
10427 @item -mconstant-gp
10428 @opindex mconstant-gp
10429 Generate code that uses a single constant global pointer value.  This is
10430 useful when compiling kernel code.
10431
10432 @item -mauto-pic
10433 @opindex mauto-pic
10434 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
10435 This is useful when compiling firmware code.
10436
10437 @item -minline-float-divide-min-latency
10438 @opindex minline-float-divide-min-latency
10439 Generate code for inline divides of floating point values
10440 using the minimum latency algorithm.
10441
10442 @item -minline-float-divide-max-throughput
10443 @opindex minline-float-divide-max-throughput
10444 Generate code for inline divides of floating point values
10445 using the maximum throughput algorithm.
10446
10447 @item -minline-int-divide-min-latency
10448 @opindex minline-int-divide-min-latency
10449 Generate code for inline divides of integer values
10450 using the minimum latency algorithm.
10451
10452 @item -minline-int-divide-max-throughput
10453 @opindex minline-int-divide-max-throughput
10454 Generate code for inline divides of integer values
10455 using the maximum throughput algorithm.
10456
10457 @item -minline-sqrt-min-latency
10458 @opindex minline-sqrt-min-latency
10459 Generate code for inline square roots
10460 using the minimum latency algorithm.
10461
10462 @item -minline-sqrt-max-throughput
10463 @opindex minline-sqrt-max-throughput
10464 Generate code for inline square roots
10465 using the maximum throughput algorithm.
10466
10467 @item -mno-dwarf2-asm
10468 @itemx -mdwarf2-asm
10469 @opindex mno-dwarf2-asm
10470 @opindex mdwarf2-asm
10471 Don't (or do) generate assembler code for the DWARF2 line number debugging
10472 info.  This may be useful when not using the GNU assembler.
10473
10474 @item -mearly-stop-bits
10475 @itemx -mno-early-stop-bits
10476 @opindex mearly-stop-bits
10477 @opindex mno-early-stop-bits
10478 Allow stop bits to be placed earlier than immediately preceding the
10479 instruction that triggered the stop bit.  This can improve instruction
10480 scheduling, but does not always do so.
10481
10482 @item -mfixed-range=@var{register-range}
10483 @opindex mfixed-range
10484 Generate code treating the given register range as fixed registers.
10485 A fixed register is one that the register allocator can not use.  This is
10486 useful when compiling kernel code.  A register range is specified as
10487 two registers separated by a dash.  Multiple register ranges can be
10488 specified separated by a comma.
10489
10490 @item -mtls-size=@var{tls-size}
10491 @opindex mtls-size
10492 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
10493 64.
10494
10495 @item -mtune=@var{cpu-type}
10496 @opindex mtune
10497 Tune the instruction scheduling for a particular CPU, Valid values are
10498 itanium, itanium1, merced, itanium2, and mckinley.
10499
10500 @item -mt
10501 @itemx -pthread
10502 @opindex mt
10503 @opindex pthread
10504 Add support for multithreading using the POSIX threads library.  This
10505 option sets flags for both the preprocessor and linker.  It does
10506 not affect the thread safety of object code produced by the compiler or
10507 that of libraries supplied with it.  These are HP-UX specific flags.
10508
10509 @item -milp32
10510 @itemx -mlp64
10511 @opindex milp32
10512 @opindex mlp64
10513 Generate code for a 32-bit or 64-bit environment.
10514 The 32-bit environment sets int, long and pointer to 32 bits.
10515 The 64-bit environment sets int to 32 bits and long and pointer
10516 to 64 bits.  These are HP-UX specific flags.
10517
10518 @item -mno-sched-br-data-spec
10519 @itemx -msched-br-data-spec
10520 @opindex mno-sched-br-data-spec
10521 @opindex msched-br-data-spec
10522 (Dis/En)able data speculative scheduling before reload.
10523 This will result in generation of the ld.a instructions and
10524 the corresponding check instructions (ld.c / chk.a).
10525 The default is 'disable'.
10526
10527 @item -msched-ar-data-spec
10528 @itemx -mno-sched-ar-data-spec
10529 @opindex msched-ar-data-spec
10530 @opindex mno-sched-ar-data-spec
10531 (En/Dis)able data speculative scheduling after reload.
10532 This will result in generation of the ld.a instructions and
10533 the corresponding check instructions (ld.c / chk.a).
10534 The default is 'enable'.
10535
10536 @item -mno-sched-control-spec
10537 @itemx -msched-control-spec
10538 @opindex mno-sched-control-spec
10539 @opindex msched-control-spec
10540 (Dis/En)able control speculative scheduling.  This feature is
10541 available only during region scheduling (i.e. before reload).
10542 This will result in generation of the ld.s instructions and
10543 the corresponding check instructions chk.s .
10544 The default is 'disable'.
10545
10546 @item -msched-br-in-data-spec
10547 @itemx -mno-sched-br-in-data-spec
10548 @opindex msched-br-in-data-spec
10549 @opindex mno-sched-br-in-data-spec
10550 (En/Dis)able speculative scheduling of the instructions that
10551 are dependent on the data speculative loads before reload.
10552 This is effective only with @option{-msched-br-data-spec} enabled.
10553 The default is 'enable'.
10554
10555 @item -msched-ar-in-data-spec
10556 @itemx -mno-sched-ar-in-data-spec
10557 @opindex msched-ar-in-data-spec
10558 @opindex mno-sched-ar-in-data-spec
10559 (En/Dis)able speculative scheduling of the instructions that
10560 are dependent on the data speculative loads after reload.
10561 This is effective only with @option{-msched-ar-data-spec} enabled.
10562 The default is 'enable'.
10563
10564 @item -msched-in-control-spec
10565 @itemx -mno-sched-in-control-spec
10566 @opindex msched-in-control-spec
10567 @opindex mno-sched-in-control-spec
10568 (En/Dis)able speculative scheduling of the instructions that
10569 are dependent on the control speculative loads.
10570 This is effective only with @option{-msched-control-spec} enabled.
10571 The default is 'enable'.
10572
10573 @item -msched-ldc
10574 @itemx -mno-sched-ldc
10575 @opindex msched-ldc
10576 @opindex mno-sched-ldc
10577 (En/Dis)able use of simple data speculation checks ld.c .
10578 If disabled, only chk.a instructions will be emitted to check
10579 data speculative loads.
10580 The default is 'enable'.
10581
10582 @item -mno-sched-control-ldc
10583 @itemx -msched-control-ldc
10584 @opindex mno-sched-control-ldc
10585 @opindex msched-control-ldc
10586 (Dis/En)able use of ld.c instructions to check control speculative loads.
10587 If enabled, in case of control speculative load with no speculatively
10588 scheduled dependent instructions this load will be emitted as ld.sa and
10589 ld.c will be used to check it.
10590 The default is 'disable'.
10591
10592 @item -mno-sched-spec-verbose
10593 @itemx -msched-spec-verbose
10594 @opindex mno-sched-spec-verbose
10595 @opindex msched-spec-verbose
10596 (Dis/En)able printing of the information about speculative motions.
10597
10598 @item -mno-sched-prefer-non-data-spec-insns
10599 @itemx -msched-prefer-non-data-spec-insns
10600 @opindex mno-sched-prefer-non-data-spec-insns
10601 @opindex msched-prefer-non-data-spec-insns
10602 If enabled, data speculative instructions will be chosen for schedule
10603 only if there are no other choices at the moment.  This will make
10604 the use of the data speculation much more conservative.
10605 The default is 'disable'.
10606
10607 @item -mno-sched-prefer-non-control-spec-insns
10608 @itemx -msched-prefer-non-control-spec-insns
10609 @opindex mno-sched-prefer-non-control-spec-insns
10610 @opindex msched-prefer-non-control-spec-insns
10611 If enabled, control speculative instructions will be chosen for schedule
10612 only if there are no other choices at the moment.  This will make
10613 the use of the control speculation much more conservative.
10614 The default is 'disable'.
10615
10616 @item -mno-sched-count-spec-in-critical-path
10617 @itemx -msched-count-spec-in-critical-path
10618 @opindex mno-sched-count-spec-in-critical-path
10619 @opindex msched-count-spec-in-critical-path
10620 If enabled, speculative dependencies will be considered during
10621 computation of the instructions priorities.  This will make the use of the
10622 speculation a bit more conservative.
10623 The default is 'disable'.
10624
10625 @end table
10626
10627 @node M32C Options
10628 @subsection M32C Options
10629 @cindex M32C options
10630
10631 @table @gcctabopt
10632 @item -mcpu=@var{name}
10633 @opindex mcpu=
10634 Select the CPU for which code is generated.  @var{name} may be one of
10635 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
10636 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
10637 the M32C/80 series.
10638
10639 @item -msim
10640 @opindex msim
10641 Specifies that the program will be run on the simulator.  This causes
10642 an alternate runtime library to be linked in which supports, for
10643 example, file I/O.  You must not use this option when generating
10644 programs that will run on real hardware; you must provide your own
10645 runtime library for whatever I/O functions are needed.
10646
10647 @item -memregs=@var{number}
10648 @opindex memregs=
10649 Specifies the number of memory-based pseudo-registers GCC will use
10650 during code generation.  These pseudo-registers will be used like real
10651 registers, so there is a tradeoff between GCC's ability to fit the
10652 code into available registers, and the performance penalty of using
10653 memory instead of registers.  Note that all modules in a program must
10654 be compiled with the same value for this option.  Because of that, you
10655 must not use this option with the default runtime libraries gcc
10656 builds.
10657
10658 @end table
10659
10660 @node M32R/D Options
10661 @subsection M32R/D Options
10662 @cindex M32R/D options
10663
10664 These @option{-m} options are defined for Renesas M32R/D architectures:
10665
10666 @table @gcctabopt
10667 @item -m32r2
10668 @opindex m32r2
10669 Generate code for the M32R/2@.
10670
10671 @item -m32rx
10672 @opindex m32rx
10673 Generate code for the M32R/X@.
10674
10675 @item -m32r
10676 @opindex m32r
10677 Generate code for the M32R@.  This is the default.
10678
10679 @item -mmodel=small
10680 @opindex mmodel=small
10681 Assume all objects live in the lower 16MB of memory (so that their addresses
10682 can be loaded with the @code{ld24} instruction), and assume all subroutines
10683 are reachable with the @code{bl} instruction.
10684 This is the default.
10685
10686 The addressability of a particular object can be set with the
10687 @code{model} attribute.
10688
10689 @item -mmodel=medium
10690 @opindex mmodel=medium
10691 Assume objects may be anywhere in the 32-bit address space (the compiler
10692 will generate @code{seth/add3} instructions to load their addresses), and
10693 assume all subroutines are reachable with the @code{bl} instruction.
10694
10695 @item -mmodel=large
10696 @opindex mmodel=large
10697 Assume objects may be anywhere in the 32-bit address space (the compiler
10698 will generate @code{seth/add3} instructions to load their addresses), and
10699 assume subroutines may not be reachable with the @code{bl} instruction
10700 (the compiler will generate the much slower @code{seth/add3/jl}
10701 instruction sequence).
10702
10703 @item -msdata=none
10704 @opindex msdata=none
10705 Disable use of the small data area.  Variables will be put into
10706 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
10707 @code{section} attribute has been specified).
10708 This is the default.
10709
10710 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
10711 Objects may be explicitly put in the small data area with the
10712 @code{section} attribute using one of these sections.
10713
10714 @item -msdata=sdata
10715 @opindex msdata=sdata
10716 Put small global and static data in the small data area, but do not
10717 generate special code to reference them.
10718
10719 @item -msdata=use
10720 @opindex msdata=use
10721 Put small global and static data in the small data area, and generate
10722 special instructions to reference them.
10723
10724 @item -G @var{num}
10725 @opindex G
10726 @cindex smaller data references
10727 Put global and static objects less than or equal to @var{num} bytes
10728 into the small data or bss sections instead of the normal data or bss
10729 sections.  The default value of @var{num} is 8.
10730 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
10731 for this option to have any effect.
10732
10733 All modules should be compiled with the same @option{-G @var{num}} value.
10734 Compiling with different values of @var{num} may or may not work; if it
10735 doesn't the linker will give an error message---incorrect code will not be
10736 generated.
10737
10738 @item -mdebug
10739 @opindex mdebug
10740 Makes the M32R specific code in the compiler display some statistics
10741 that might help in debugging programs.
10742
10743 @item -malign-loops
10744 @opindex malign-loops
10745 Align all loops to a 32-byte boundary.
10746
10747 @item -mno-align-loops
10748 @opindex mno-align-loops
10749 Do not enforce a 32-byte alignment for loops.  This is the default.
10750
10751 @item -missue-rate=@var{number}
10752 @opindex missue-rate=@var{number}
10753 Issue @var{number} instructions per cycle.  @var{number} can only be 1
10754 or 2.
10755
10756 @item -mbranch-cost=@var{number}
10757 @opindex mbranch-cost=@var{number}
10758 @var{number} can only be 1 or 2.  If it is 1 then branches will be
10759 preferred over conditional code, if it is 2, then the opposite will
10760 apply.
10761
10762 @item -mflush-trap=@var{number}
10763 @opindex mflush-trap=@var{number}
10764 Specifies the trap number to use to flush the cache.  The default is
10765 12.  Valid numbers are between 0 and 15 inclusive.
10766
10767 @item -mno-flush-trap
10768 @opindex mno-flush-trap
10769 Specifies that the cache cannot be flushed by using a trap.
10770
10771 @item -mflush-func=@var{name}
10772 @opindex mflush-func=@var{name}
10773 Specifies the name of the operating system function to call to flush
10774 the cache.  The default is @emph{_flush_cache}, but a function call
10775 will only be used if a trap is not available.
10776
10777 @item -mno-flush-func
10778 @opindex mno-flush-func
10779 Indicates that there is no OS function for flushing the cache.
10780
10781 @end table
10782
10783 @node M680x0 Options
10784 @subsection M680x0 Options
10785 @cindex M680x0 options
10786
10787 These are the @samp{-m} options defined for M680x0 and ColdFire processors.
10788 The default settings depend on which architecture was selected when
10789 the compiler was configured; the defaults for the most common choices
10790 are given below.
10791
10792 @table @gcctabopt
10793 @item -march=@var{arch}
10794 @opindex march
10795 Generate code for a specific M680x0 or ColdFire instruction set
10796 architecture.  Permissible values of @var{arch} for M680x0
10797 architectures are: @samp{68000}, @samp{68010}, @samp{68020},
10798 @samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
10799 architectures are selected according to Freescale's ISA classification
10800 and the permissible values are: @samp{isaa}, @samp{isaaplus},
10801 @samp{isab} and @samp{isac}.
10802
10803 gcc defines a macro @samp{__mcf@var{arch}__} whenever it is generating
10804 code for a ColdFire target.  The @var{arch} in this macro is one of the
10805 @option{-march} arguments given above.
10806
10807 When used together, @option{-march} and @option{-mtune} select code
10808 that runs on a family of similar processors but that is optimized
10809 for a particular microarchitecture.
10810
10811 @item -mcpu=@var{cpu}
10812 @opindex mcpu
10813 Generate code for a specific M680x0 or ColdFire processor.
10814 The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
10815 @samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
10816 and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
10817 below, which also classifies the CPUs into families:
10818
10819 @multitable @columnfractions 0.20 0.80
10820 @item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
10821 @item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
10822 @item @samp{5206e} @tab @samp{5206e}
10823 @item @samp{5208} @tab @samp{5207} @samp{5208}
10824 @item @samp{5211a} @tab @samp{5210a} @samp{5211a}
10825 @item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
10826 @item @samp{5216} @tab @samp{5214} @samp{5216}
10827 @item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
10828 @item @samp{5225} @tab @samp{5224} @samp{5225}
10829 @item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
10830 @item @samp{5249} @tab @samp{5249}
10831 @item @samp{5250} @tab @samp{5250}
10832 @item @samp{5271} @tab @samp{5270} @samp{5271}
10833 @item @samp{5272} @tab @samp{5272}
10834 @item @samp{5275} @tab @samp{5274} @samp{5275}
10835 @item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
10836 @item @samp{5307} @tab @samp{5307}
10837 @item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
10838 @item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
10839 @item @samp{5407} @tab @samp{5407}
10840 @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}
10841 @end multitable
10842
10843 @option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
10844 @var{arch} is compatible with @var{cpu}.  Other combinations of
10845 @option{-mcpu} and @option{-march} are rejected.
10846
10847 gcc defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
10848 @var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
10849 where the value of @var{family} is given by the table above.
10850
10851 @item -mtune=@var{tune}
10852 @opindex mtune
10853 Tune the code for a particular microarchitecture, within the
10854 constraints set by @option{-march} and @option{-mcpu}.
10855 The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
10856 @samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
10857 and @samp{cpu32}.  The ColdFire microarchitectures
10858 are: @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
10859
10860 You can also use @option{-mtune=68020-40} for code that needs
10861 to run relatively well on 68020, 68030 and 68040 targets.
10862 @option{-mtune=68020-60} is similar but includes 68060 targets
10863 as well.  These two options select the same tuning decisions as
10864 @option{-m68020-40} and @option{-m68020-60} respectively.
10865
10866 gcc defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
10867 when tuning for 680x0 architecture @var{arch}.  It also defines
10868 @samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
10869 option is used.  If gcc is tuning for a range of architectures,
10870 as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
10871 it defines the macros for every architecture in the range.
10872
10873 gcc also defines the macro @samp{__m@var{uarch}__} when tuning for
10874 ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
10875 of the arguments given above.
10876
10877 @item -m68000
10878 @itemx -mc68000
10879 @opindex m68000
10880 @opindex mc68000
10881 Generate output for a 68000.  This is the default
10882 when the compiler is configured for 68000-based systems.
10883 It is equivalent to @option{-march=68000}.
10884
10885 Use this option for microcontrollers with a 68000 or EC000 core,
10886 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
10887
10888 @item -m68010
10889 @opindex m68010
10890 Generate output for a 68010.  This is the default
10891 when the compiler is configured for 68010-based systems.
10892 It is equivalent to @option{-march=68010}.
10893
10894 @item -m68020
10895 @itemx -mc68020
10896 @opindex m68020
10897 @opindex mc68020
10898 Generate output for a 68020.  This is the default
10899 when the compiler is configured for 68020-based systems.
10900 It is equivalent to @option{-march=68020}.
10901
10902 @item -m68030
10903 @opindex m68030
10904 Generate output for a 68030.  This is the default when the compiler is
10905 configured for 68030-based systems.  It is equivalent to
10906 @option{-march=68030}.
10907
10908 @item -m68040
10909 @opindex m68040
10910 Generate output for a 68040.  This is the default when the compiler is
10911 configured for 68040-based systems.  It is equivalent to
10912 @option{-march=68040}.
10913
10914 This option inhibits the use of 68881/68882 instructions that have to be
10915 emulated by software on the 68040.  Use this option if your 68040 does not
10916 have code to emulate those instructions.
10917
10918 @item -m68060
10919 @opindex m68060
10920 Generate output for a 68060.  This is the default when the compiler is
10921 configured for 68060-based systems.  It is equivalent to
10922 @option{-march=68060}.
10923
10924 This option inhibits the use of 68020 and 68881/68882 instructions that
10925 have to be emulated by software on the 68060.  Use this option if your 68060
10926 does not have code to emulate those instructions.
10927
10928 @item -mcpu32
10929 @opindex mcpu32
10930 Generate output for a CPU32.  This is the default
10931 when the compiler is configured for CPU32-based systems.
10932 It is equivalent to @option{-march=cpu32}.
10933
10934 Use this option for microcontrollers with a
10935 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
10936 68336, 68340, 68341, 68349 and 68360.
10937
10938 @item -m5200
10939 @opindex m5200
10940 Generate output for a 520X ColdFire CPU.  This is the default
10941 when the compiler is configured for 520X-based systems.
10942 It is equivalent to @option{-mcpu=5206}, and is now deprecated
10943 in favor of that option.
10944
10945 Use this option for microcontroller with a 5200 core, including
10946 the MCF5202, MCF5203, MCF5204 and MCF5206.
10947
10948 @item -m5206e
10949 @opindex m5206e
10950 Generate output for a 5206e ColdFire CPU.  The option is now
10951 deprecated in favor of the equivalent @option{-mcpu=5206e}.
10952
10953 @item -m528x
10954 @opindex m528x
10955 Generate output for a member of the ColdFire 528X family.
10956 The option is now deprecated in favor of the equivalent
10957 @option{-mcpu=528x}.
10958
10959 @item -m5307
10960 @opindex m5307
10961 Generate output for a ColdFire 5307 CPU.  The option is now deprecated
10962 in favor of the equivalent @option{-mcpu=5307}.
10963
10964 @item -m5407
10965 @opindex m5407
10966 Generate output for a ColdFire 5407 CPU.  The option is now deprecated
10967 in favor of the equivalent @option{-mcpu=5407}.
10968
10969 @item -mcfv4e
10970 @opindex mcfv4e
10971 Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
10972 This includes use of hardware floating point instructions.
10973 The option is equivalent to @option{-mcpu=547x}, and is now
10974 deprecated in favor of that option.
10975
10976 @item -m68020-40
10977 @opindex m68020-40
10978 Generate output for a 68040, without using any of the new instructions.
10979 This results in code which can run relatively efficiently on either a
10980 68020/68881 or a 68030 or a 68040.  The generated code does use the
10981 68881 instructions that are emulated on the 68040.
10982
10983 The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
10984
10985 @item -m68020-60
10986 @opindex m68020-60
10987 Generate output for a 68060, without using any of the new instructions.
10988 This results in code which can run relatively efficiently on either a
10989 68020/68881 or a 68030 or a 68040.  The generated code does use the
10990 68881 instructions that are emulated on the 68060.
10991
10992 The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
10993
10994 @item -mhard-float
10995 @itemx -m68881
10996 @opindex mhard-float
10997 @opindex m68881
10998 Generate floating-point instructions.  This is the default for 68020
10999 and above, and for ColdFire devices that have an FPU.  It defines the
11000 macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
11001 on ColdFire targets.
11002
11003 @item -msoft-float
11004 @opindex msoft-float
11005 Do not generate floating-point instructions; use library calls instead.
11006 This is the default for 68000, 68010, and 68832 targets.  It is also
11007 the default for ColdFire devices that have no FPU.
11008
11009 @item -mdiv
11010 @itemx -mno-div
11011 @opindex mdiv
11012 @opindex mno-div
11013 Generate (do not generate) ColdFire hardware divide and remainder
11014 instructions.  If @option{-march} is used without @option{-mcpu},
11015 the default is ``on'' for ColdFire architectures and ``off'' for M680x0
11016 architectures.  Otherwise, the default is taken from the target CPU
11017 (either the default CPU, or the one specified by @option{-mcpu}).  For
11018 example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
11019 @option{-mcpu=5206e}.
11020
11021 gcc defines the macro @samp{__mcfhwdiv__} when this option is enabled.
11022
11023 @item -mshort
11024 @opindex mshort
11025 Consider type @code{int} to be 16 bits wide, like @code{short int}.
11026 Additionally, parameters passed on the stack are also aligned to a
11027 16-bit boundary even on targets whose API mandates promotion to 32-bit.
11028
11029 @item -mno-short
11030 @opindex mno-short
11031 Do not consider type @code{int} to be 16 bits wide.  This is the default.
11032
11033 @item -mnobitfield
11034 @itemx -mno-bitfield
11035 @opindex mnobitfield
11036 @opindex mno-bitfield
11037 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
11038 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
11039
11040 @item -mbitfield
11041 @opindex mbitfield
11042 Do use the bit-field instructions.  The @option{-m68020} option implies
11043 @option{-mbitfield}.  This is the default if you use a configuration
11044 designed for a 68020.
11045
11046 @item -mrtd
11047 @opindex mrtd
11048 Use a different function-calling convention, in which functions
11049 that take a fixed number of arguments return with the @code{rtd}
11050 instruction, which pops their arguments while returning.  This
11051 saves one instruction in the caller since there is no need to pop
11052 the arguments there.
11053
11054 This calling convention is incompatible with the one normally
11055 used on Unix, so you cannot use it if you need to call libraries
11056 compiled with the Unix compiler.
11057
11058 Also, you must provide function prototypes for all functions that
11059 take variable numbers of arguments (including @code{printf});
11060 otherwise incorrect code will be generated for calls to those
11061 functions.
11062
11063 In addition, seriously incorrect code will result if you call a
11064 function with too many arguments.  (Normally, extra arguments are
11065 harmlessly ignored.)
11066
11067 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
11068 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
11069
11070 @item -mno-rtd
11071 @opindex mno-rtd
11072 Do not use the calling conventions selected by @option{-mrtd}.
11073 This is the default.
11074
11075 @item -malign-int
11076 @itemx -mno-align-int
11077 @opindex malign-int
11078 @opindex mno-align-int
11079 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
11080 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
11081 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
11082 Aligning variables on 32-bit boundaries produces code that runs somewhat
11083 faster on processors with 32-bit busses at the expense of more memory.
11084
11085 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
11086 align structures containing the above types  differently than
11087 most published application binary interface specifications for the m68k.
11088
11089 @item -mpcrel
11090 @opindex mpcrel
11091 Use the pc-relative addressing mode of the 68000 directly, instead of
11092 using a global offset table.  At present, this option implies @option{-fpic},
11093 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
11094 not presently supported with @option{-mpcrel}, though this could be supported for
11095 68020 and higher processors.
11096
11097 @item -mno-strict-align
11098 @itemx -mstrict-align
11099 @opindex mno-strict-align
11100 @opindex mstrict-align
11101 Do not (do) assume that unaligned memory references will be handled by
11102 the system.
11103
11104 @item -msep-data
11105 Generate code that allows the data segment to be located in a different
11106 area of memory from the text segment.  This allows for execute in place in
11107 an environment without virtual memory management.  This option implies
11108 @option{-fPIC}.
11109
11110 @item -mno-sep-data
11111 Generate code that assumes that the data segment follows the text segment.
11112 This is the default.
11113
11114 @item -mid-shared-library
11115 Generate code that supports shared libraries via the library ID method.
11116 This allows for execute in place and shared libraries in an environment
11117 without virtual memory management.  This option implies @option{-fPIC}.
11118
11119 @item -mno-id-shared-library
11120 Generate code that doesn't assume ID based shared libraries are being used.
11121 This is the default.
11122
11123 @item -mshared-library-id=n
11124 Specified the identification number of the ID based shared library being
11125 compiled.  Specifying a value of 0 will generate more compact code, specifying
11126 other values will force the allocation of that number to the current
11127 library but is no more space or time efficient than omitting this option.
11128
11129 @end table
11130
11131 @node M68hc1x Options
11132 @subsection M68hc1x Options
11133 @cindex M68hc1x options
11134
11135 These are the @samp{-m} options defined for the 68hc11 and 68hc12
11136 microcontrollers.  The default values for these options depends on
11137 which style of microcontroller was selected when the compiler was configured;
11138 the defaults for the most common choices are given below.
11139
11140 @table @gcctabopt
11141 @item -m6811
11142 @itemx -m68hc11
11143 @opindex m6811
11144 @opindex m68hc11
11145 Generate output for a 68HC11.  This is the default
11146 when the compiler is configured for 68HC11-based systems.
11147
11148 @item -m6812
11149 @itemx -m68hc12
11150 @opindex m6812
11151 @opindex m68hc12
11152 Generate output for a 68HC12.  This is the default
11153 when the compiler is configured for 68HC12-based systems.
11154
11155 @item -m68S12
11156 @itemx -m68hcs12
11157 @opindex m68S12
11158 @opindex m68hcs12
11159 Generate output for a 68HCS12.
11160
11161 @item -mauto-incdec
11162 @opindex mauto-incdec
11163 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
11164 addressing modes.
11165
11166 @item -minmax
11167 @itemx -nominmax
11168 @opindex minmax
11169 @opindex mnominmax
11170 Enable the use of 68HC12 min and max instructions.
11171
11172 @item -mlong-calls
11173 @itemx -mno-long-calls
11174 @opindex mlong-calls
11175 @opindex mno-long-calls
11176 Treat all calls as being far away (near).  If calls are assumed to be
11177 far away, the compiler will use the @code{call} instruction to
11178 call a function and the @code{rtc} instruction for returning.
11179
11180 @item -mshort
11181 @opindex mshort
11182 Consider type @code{int} to be 16 bits wide, like @code{short int}.
11183
11184 @item -msoft-reg-count=@var{count}
11185 @opindex msoft-reg-count
11186 Specify the number of pseudo-soft registers which are used for the
11187 code generation.  The maximum number is 32.  Using more pseudo-soft
11188 register may or may not result in better code depending on the program.
11189 The default is 4 for 68HC11 and 2 for 68HC12.
11190
11191 @end table
11192
11193 @node MCore Options
11194 @subsection MCore Options
11195 @cindex MCore options
11196
11197 These are the @samp{-m} options defined for the Motorola M*Core
11198 processors.
11199
11200 @table @gcctabopt
11201
11202 @item -mhardlit
11203 @itemx -mno-hardlit
11204 @opindex mhardlit
11205 @opindex mno-hardlit
11206 Inline constants into the code stream if it can be done in two
11207 instructions or less.
11208
11209 @item -mdiv
11210 @itemx -mno-div
11211 @opindex mdiv
11212 @opindex mno-div
11213 Use the divide instruction.  (Enabled by default).
11214
11215 @item -mrelax-immediate
11216 @itemx -mno-relax-immediate
11217 @opindex mrelax-immediate
11218 @opindex mno-relax-immediate
11219 Allow arbitrary sized immediates in bit operations.
11220
11221 @item -mwide-bitfields
11222 @itemx -mno-wide-bitfields
11223 @opindex mwide-bitfields
11224 @opindex mno-wide-bitfields
11225 Always treat bit-fields as int-sized.
11226
11227 @item -m4byte-functions
11228 @itemx -mno-4byte-functions
11229 @opindex m4byte-functions
11230 @opindex mno-4byte-functions
11231 Force all functions to be aligned to a four byte boundary.
11232
11233 @item -mcallgraph-data
11234 @itemx -mno-callgraph-data
11235 @opindex mcallgraph-data
11236 @opindex mno-callgraph-data
11237 Emit callgraph information.
11238
11239 @item -mslow-bytes
11240 @itemx -mno-slow-bytes
11241 @opindex mslow-bytes
11242 @opindex mno-slow-bytes
11243 Prefer word access when reading byte quantities.
11244
11245 @item -mlittle-endian
11246 @itemx -mbig-endian
11247 @opindex mlittle-endian
11248 @opindex mbig-endian
11249 Generate code for a little endian target.
11250
11251 @item -m210
11252 @itemx -m340
11253 @opindex m210
11254 @opindex m340
11255 Generate code for the 210 processor.
11256 @end table
11257
11258 @node MIPS Options
11259 @subsection MIPS Options
11260 @cindex MIPS options
11261
11262 @table @gcctabopt
11263
11264 @item -EB
11265 @opindex EB
11266 Generate big-endian code.
11267
11268 @item -EL
11269 @opindex EL
11270 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
11271 configurations.
11272
11273 @item -march=@var{arch}
11274 @opindex march
11275 Generate code that will run on @var{arch}, which can be the name of a
11276 generic MIPS ISA, or the name of a particular processor.
11277 The ISA names are:
11278 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
11279 @samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
11280 The processor names are:
11281 @samp{4kc}, @samp{4km}, @samp{4kp},
11282 @samp{4kec}, @samp{4kem}, @samp{4kep},
11283 @samp{5kc}, @samp{5kf},
11284 @samp{20kc},
11285 @samp{24kc}, @samp{24kf}, @samp{24kx},
11286 @samp{24kec}, @samp{24kef}, @samp{24kex},
11287 @samp{34kc}, @samp{34kf}, @samp{34kx},
11288 @samp{74kc}, @samp{74kf}, @samp{74kx},
11289 @samp{m4k},
11290 @samp{orion},
11291 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
11292 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
11293 @samp{rm7000}, @samp{rm9000},
11294 @samp{sb1},
11295 @samp{sr71000},
11296 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
11297 @samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
11298 The special value @samp{from-abi} selects the
11299 most compatible architecture for the selected ABI (that is,
11300 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
11301
11302 In processor names, a final @samp{000} can be abbreviated as @samp{k}
11303 (for example, @samp{-march=r2k}).  Prefixes are optional, and
11304 @samp{vr} may be written @samp{r}.
11305
11306 GCC defines two macros based on the value of this option.  The first
11307 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
11308 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
11309 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
11310 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
11311 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
11312
11313 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
11314 above.  In other words, it will have the full prefix and will not
11315 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
11316 the macro names the resolved architecture (either @samp{"mips1"} or
11317 @samp{"mips3"}).  It names the default architecture when no
11318 @option{-march} option is given.
11319
11320 @item -mtune=@var{arch}
11321 @opindex mtune
11322 Optimize for @var{arch}.  Among other things, this option controls
11323 the way instructions are scheduled, and the perceived cost of arithmetic
11324 operations.  The list of @var{arch} values is the same as for
11325 @option{-march}.
11326
11327 When this option is not used, GCC will optimize for the processor
11328 specified by @option{-march}.  By using @option{-march} and
11329 @option{-mtune} together, it is possible to generate code that will
11330 run on a family of processors, but optimize the code for one
11331 particular member of that family.
11332
11333 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
11334 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
11335 @samp{-march} ones described above.
11336
11337 @item -mips1
11338 @opindex mips1
11339 Equivalent to @samp{-march=mips1}.
11340
11341 @item -mips2
11342 @opindex mips2
11343 Equivalent to @samp{-march=mips2}.
11344
11345 @item -mips3
11346 @opindex mips3
11347 Equivalent to @samp{-march=mips3}.
11348
11349 @item -mips4
11350 @opindex mips4
11351 Equivalent to @samp{-march=mips4}.
11352
11353 @item -mips32
11354 @opindex mips32
11355 Equivalent to @samp{-march=mips32}.
11356
11357 @item -mips32r2
11358 @opindex mips32r2
11359 Equivalent to @samp{-march=mips32r2}.
11360
11361 @item -mips64
11362 @opindex mips64
11363 Equivalent to @samp{-march=mips64}.
11364
11365 @item -mips16
11366 @itemx -mno-mips16
11367 @opindex mips16
11368 @opindex mno-mips16
11369 Generate (do not generate) MIPS16 code.  If GCC is targetting a
11370 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
11371
11372 @item -mabi=32
11373 @itemx -mabi=o64
11374 @itemx -mabi=n32
11375 @itemx -mabi=64
11376 @itemx -mabi=eabi
11377 @opindex mabi=32
11378 @opindex mabi=o64
11379 @opindex mabi=n32
11380 @opindex mabi=64
11381 @opindex mabi=eabi
11382 Generate code for the given ABI@.
11383
11384 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
11385 generates 64-bit code when you select a 64-bit architecture, but you
11386 can use @option{-mgp32} to get 32-bit code instead.
11387
11388 For information about the O64 ABI, see
11389 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
11390
11391 GCC supports a variant of the o32 ABI in which floating-point registers
11392 are 64 rather than 32 bits wide.  You can select this combination with
11393 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @samp{mthc1}
11394 and @samp{mfhc1} instructions and is therefore only supported for
11395 MIPS32R2 processors.
11396
11397 The register assignments for arguments and return values remain the
11398 same, but each scalar value is passed in a single 64-bit register
11399 rather than a pair of 32-bit registers.  For example, scalar
11400 floating-point values are returned in @samp{$f0} only, not a
11401 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
11402 remains the same, but all 64 bits are saved.
11403
11404 @item -mabicalls
11405 @itemx -mno-abicalls
11406 @opindex mabicalls
11407 @opindex mno-abicalls
11408 Generate (do not generate) code that is suitable for SVR4-style
11409 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
11410 systems.
11411
11412 @item -mshared
11413 @itemx -mno-shared
11414 Generate (do not generate) code that is fully position-independent,
11415 and that can therefore be linked into shared libraries.  This option
11416 only affects @option{-mabicalls}.
11417
11418 All @option{-mabicalls} code has traditionally been position-independent,
11419 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
11420 as an extension, the GNU toolchain allows executables to use absolute
11421 accesses for locally-binding symbols.  It can also use shorter GP
11422 initialization sequences and generate direct calls to locally-defined
11423 functions.  This mode is selected by @option{-mno-shared}.
11424
11425 @option{-mno-shared} depends on binutils 2.16 or higher and generates
11426 objects that can only be linked by the GNU linker.  However, the option
11427 does not affect the ABI of the final executable; it only affects the ABI
11428 of relocatable objects.  Using @option{-mno-shared} will generally make
11429 executables both smaller and quicker.
11430
11431 @option{-mshared} is the default.
11432
11433 @item -mxgot
11434 @itemx -mno-xgot
11435 @opindex mxgot
11436 @opindex mno-xgot
11437 Lift (do not lift) the usual restrictions on the size of the global
11438 offset table.
11439
11440 GCC normally uses a single instruction to load values from the GOT@.
11441 While this is relatively efficient, it will only work if the GOT
11442 is smaller than about 64k.  Anything larger will cause the linker
11443 to report an error such as:
11444
11445 @cindex relocation truncated to fit (MIPS)
11446 @smallexample
11447 relocation truncated to fit: R_MIPS_GOT16 foobar
11448 @end smallexample
11449
11450 If this happens, you should recompile your code with @option{-mxgot}.
11451 It should then work with very large GOTs, although it will also be
11452 less efficient, since it will take three instructions to fetch the
11453 value of a global symbol.
11454
11455 Note that some linkers can create multiple GOTs.  If you have such a
11456 linker, you should only need to use @option{-mxgot} when a single object
11457 file accesses more than 64k's worth of GOT entries.  Very few do.
11458
11459 These options have no effect unless GCC is generating position
11460 independent code.
11461
11462 @item -mgp32
11463 @opindex mgp32
11464 Assume that general-purpose registers are 32 bits wide.
11465
11466 @item -mgp64
11467 @opindex mgp64
11468 Assume that general-purpose registers are 64 bits wide.
11469
11470 @item -mfp32
11471 @opindex mfp32
11472 Assume that floating-point registers are 32 bits wide.
11473
11474 @item -mfp64
11475 @opindex mfp64
11476 Assume that floating-point registers are 64 bits wide.
11477
11478 @item -mhard-float
11479 @opindex mhard-float
11480 Use floating-point coprocessor instructions.
11481
11482 @item -msoft-float
11483 @opindex msoft-float
11484 Do not use floating-point coprocessor instructions.  Implement
11485 floating-point calculations using library calls instead.
11486
11487 @item -msingle-float
11488 @opindex msingle-float
11489 Assume that the floating-point coprocessor only supports single-precision
11490 operations.
11491
11492 @item -mdouble-float
11493 @opindex mdouble-float
11494 Assume that the floating-point coprocessor supports double-precision
11495 operations.  This is the default.
11496
11497 @item -mdsp
11498 @itemx -mno-dsp
11499 @opindex mdsp
11500 @opindex mno-dsp
11501 Use (do not use) the MIPS DSP ASE.  @xref{MIPS DSP Built-in Functions}.
11502
11503 @item -mdspr2
11504 @itemx -mno-dspr2
11505 @opindex mdspr2
11506 @opindex mno-dspr2
11507 Use (do not use) the MIPS DSP ASE REV 2.  @xref{MIPS DSP Built-in Functions}.
11508 The option @option{-mdspr2} implies @option{-mdsp}.
11509
11510 @item -mpaired-single
11511 @itemx -mno-paired-single
11512 @opindex mpaired-single
11513 @opindex mno-paired-single
11514 Use (do not use) paired-single floating-point instructions.
11515 @xref{MIPS Paired-Single Support}.  This option can only be used
11516 when generating 64-bit code and requires hardware floating-point
11517 support to be enabled.
11518
11519 @item -mdmx
11520 @itemx -mno-mdmx
11521 @opindex mdmx
11522 @opindex mno-mdmx
11523 Use (do not use) MIPS Digital Media Extension instructions.
11524 This option can only be used when generating 64-bit code and requires
11525 hardware floating-point support to be enabled.
11526
11527 @item -mips3d
11528 @itemx -mno-mips3d
11529 @opindex mips3d
11530 @opindex mno-mips3d
11531 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
11532 The option @option{-mips3d} implies @option{-mpaired-single}.
11533
11534 @item -mmt
11535 @itemx -mno-mt
11536 @opindex mmt
11537 @opindex mno-mt
11538 Use (do not use) MT Multithreading instructions.
11539
11540 @item -mlong64
11541 @opindex mlong64
11542 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
11543 an explanation of the default and the way that the pointer size is
11544 determined.
11545
11546 @item -mlong32
11547 @opindex mlong32
11548 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
11549
11550 The default size of @code{int}s, @code{long}s and pointers depends on
11551 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
11552 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
11553 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
11554 or the same size as integer registers, whichever is smaller.
11555
11556 @item -msym32
11557 @itemx -mno-sym32
11558 @opindex msym32
11559 @opindex mno-sym32
11560 Assume (do not assume) that all symbols have 32-bit values, regardless
11561 of the selected ABI@.  This option is useful in combination with
11562 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
11563 to generate shorter and faster references to symbolic addresses.
11564
11565 @item -G @var{num}
11566 @opindex G
11567 @cindex smaller data references (MIPS)
11568 @cindex gp-relative references (MIPS)
11569 Put global and static items less than or equal to @var{num} bytes into
11570 the small data or bss section instead of the normal data or bss section.
11571 This allows the data to be accessed using a single instruction.
11572
11573 All modules should be compiled with the same @option{-G @var{num}}
11574 value.
11575
11576 @item -membedded-data
11577 @itemx -mno-embedded-data
11578 @opindex membedded-data
11579 @opindex mno-embedded-data
11580 Allocate variables to the read-only data section first if possible, then
11581 next in the small data section if possible, otherwise in data.  This gives
11582 slightly slower code than the default, but reduces the amount of RAM required
11583 when executing, and thus may be preferred for some embedded systems.
11584
11585 @item -muninit-const-in-rodata
11586 @itemx -mno-uninit-const-in-rodata
11587 @opindex muninit-const-in-rodata
11588 @opindex mno-uninit-const-in-rodata
11589 Put uninitialized @code{const} variables in the read-only data section.
11590 This option is only meaningful in conjunction with @option{-membedded-data}.
11591
11592 @item -msplit-addresses
11593 @itemx -mno-split-addresses
11594 @opindex msplit-addresses
11595 @opindex mno-split-addresses
11596 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
11597 relocation operators.  This option has been superseded by
11598 @option{-mexplicit-relocs} but is retained for backwards compatibility.
11599
11600 @item -mexplicit-relocs
11601 @itemx -mno-explicit-relocs
11602 @opindex mexplicit-relocs
11603 @opindex mno-explicit-relocs
11604 Use (do not use) assembler relocation operators when dealing with symbolic
11605 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
11606 is to use assembler macros instead.
11607
11608 @option{-mexplicit-relocs} is the default if GCC was configured
11609 to use an assembler that supports relocation operators.
11610
11611 @item -mcheck-zero-division
11612 @itemx -mno-check-zero-division
11613 @opindex mcheck-zero-division
11614 @opindex mno-check-zero-division
11615 Trap (do not trap) on integer division by zero.
11616
11617 The default is @option{-mcheck-zero-division}.
11618
11619 @item -mdivide-traps
11620 @itemx -mdivide-breaks
11621 @opindex mdivide-traps
11622 @opindex mdivide-breaks
11623 MIPS systems check for division by zero by generating either a
11624 conditional trap or a break instruction.  Using traps results in
11625 smaller code, but is only supported on MIPS II and later.  Also, some
11626 versions of the Linux kernel have a bug that prevents trap from
11627 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
11628 allow conditional traps on architectures that support them and
11629 @option{-mdivide-breaks} to force the use of breaks.
11630
11631 The default is usually @option{-mdivide-traps}, but this can be
11632 overridden at configure time using @option{--with-divide=breaks}.
11633 Divide-by-zero checks can be completely disabled using
11634 @option{-mno-check-zero-division}.
11635
11636 @item -mmemcpy
11637 @itemx -mno-memcpy
11638 @opindex mmemcpy
11639 @opindex mno-memcpy
11640 Force (do not force) the use of @code{memcpy()} for non-trivial block
11641 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
11642 most constant-sized copies.
11643
11644 @item -mlong-calls
11645 @itemx -mno-long-calls
11646 @opindex mlong-calls
11647 @opindex mno-long-calls
11648 Disable (do not disable) use of the @code{jal} instruction.  Calling
11649 functions using @code{jal} is more efficient but requires the caller
11650 and callee to be in the same 256 megabyte segment.
11651
11652 This option has no effect on abicalls code.  The default is
11653 @option{-mno-long-calls}.
11654
11655 @item -mmad
11656 @itemx -mno-mad
11657 @opindex mmad
11658 @opindex mno-mad
11659 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
11660 instructions, as provided by the R4650 ISA@.
11661
11662 @item -mfused-madd
11663 @itemx -mno-fused-madd
11664 @opindex mfused-madd
11665 @opindex mno-fused-madd
11666 Enable (disable) use of the floating point multiply-accumulate
11667 instructions, when they are available.  The default is
11668 @option{-mfused-madd}.
11669
11670 When multiply-accumulate instructions are used, the intermediate
11671 product is calculated to infinite precision and is not subject to
11672 the FCSR Flush to Zero bit.  This may be undesirable in some
11673 circumstances.
11674
11675 @item -nocpp
11676 @opindex nocpp
11677 Tell the MIPS assembler to not run its preprocessor over user
11678 assembler files (with a @samp{.s} suffix) when assembling them.
11679
11680 @item -mfix-r4000
11681 @itemx -mno-fix-r4000
11682 @opindex mfix-r4000
11683 @opindex mno-fix-r4000
11684 Work around certain R4000 CPU errata:
11685 @itemize @minus
11686 @item
11687 A double-word or a variable shift may give an incorrect result if executed
11688 immediately after starting an integer division.
11689 @item
11690 A double-word or a variable shift may give an incorrect result if executed
11691 while an integer multiplication is in progress.
11692 @item
11693 An integer division may give an incorrect result if started in a delay slot
11694 of a taken branch or a jump.
11695 @end itemize
11696
11697 @item -mfix-r4400
11698 @itemx -mno-fix-r4400
11699 @opindex mfix-r4400
11700 @opindex mno-fix-r4400
11701 Work around certain R4400 CPU errata:
11702 @itemize @minus
11703 @item
11704 A double-word or a variable shift may give an incorrect result if executed
11705 immediately after starting an integer division.
11706 @end itemize
11707
11708 @item -mfix-vr4120
11709 @itemx -mno-fix-vr4120
11710 @opindex mfix-vr4120
11711 Work around certain VR4120 errata:
11712 @itemize @minus
11713 @item
11714 @code{dmultu} does not always produce the correct result.
11715 @item
11716 @code{div} and @code{ddiv} do not always produce the correct result if one
11717 of the operands is negative.
11718 @end itemize
11719 The workarounds for the division errata rely on special functions in
11720 @file{libgcc.a}.  At present, these functions are only provided by
11721 the @code{mips64vr*-elf} configurations.
11722
11723 Other VR4120 errata require a nop to be inserted between certain pairs of
11724 instructions.  These errata are handled by the assembler, not by GCC itself.
11725
11726 @item -mfix-vr4130
11727 @opindex mfix-vr4130
11728 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
11729 workarounds are implemented by the assembler rather than by GCC,
11730 although GCC will avoid using @code{mflo} and @code{mfhi} if the
11731 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
11732 instructions are available instead.
11733
11734 @item -mfix-sb1
11735 @itemx -mno-fix-sb1
11736 @opindex mfix-sb1
11737 Work around certain SB-1 CPU core errata.
11738 (This flag currently works around the SB-1 revision 2
11739 ``F1'' and ``F2'' floating point errata.)
11740
11741 @item -mflush-func=@var{func}
11742 @itemx -mno-flush-func
11743 @opindex mflush-func
11744 Specifies the function to call to flush the I and D caches, or to not
11745 call any such function.  If called, the function must take the same
11746 arguments as the common @code{_flush_func()}, that is, the address of the
11747 memory range for which the cache is being flushed, the size of the
11748 memory range, and the number 3 (to flush both caches).  The default
11749 depends on the target GCC was configured for, but commonly is either
11750 @samp{_flush_func} or @samp{__cpu_flush}.
11751
11752 @item -mbranch-likely
11753 @itemx -mno-branch-likely
11754 @opindex mbranch-likely
11755 @opindex mno-branch-likely
11756 Enable or disable use of Branch Likely instructions, regardless of the
11757 default for the selected architecture.  By default, Branch Likely
11758 instructions may be generated if they are supported by the selected
11759 architecture.  An exception is for the MIPS32 and MIPS64 architectures
11760 and processors which implement those architectures; for those, Branch
11761 Likely instructions will not be generated by default because the MIPS32
11762 and MIPS64 architectures specifically deprecate their use.
11763
11764 @item -mfp-exceptions
11765 @itemx -mno-fp-exceptions
11766 @opindex mfp-exceptions
11767 Specifies whether FP exceptions are enabled.  This affects how we schedule
11768 FP instructions for some processors.  The default is that FP exceptions are
11769 enabled.
11770
11771 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
11772 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
11773 FP pipe.
11774
11775 @item -mvr4130-align
11776 @itemx -mno-vr4130-align
11777 @opindex mvr4130-align
11778 The VR4130 pipeline is two-way superscalar, but can only issue two
11779 instructions together if the first one is 8-byte aligned.  When this
11780 option is enabled, GCC will align pairs of instructions that it
11781 thinks should execute in parallel.
11782
11783 This option only has an effect when optimizing for the VR4130.
11784 It normally makes code faster, but at the expense of making it bigger.
11785 It is enabled by default at optimization level @option{-O3}.
11786 @end table
11787
11788 @node MMIX Options
11789 @subsection MMIX Options
11790 @cindex MMIX Options
11791
11792 These options are defined for the MMIX:
11793
11794 @table @gcctabopt
11795 @item -mlibfuncs
11796 @itemx -mno-libfuncs
11797 @opindex mlibfuncs
11798 @opindex mno-libfuncs
11799 Specify that intrinsic library functions are being compiled, passing all
11800 values in registers, no matter the size.
11801
11802 @item -mepsilon
11803 @itemx -mno-epsilon
11804 @opindex mepsilon
11805 @opindex mno-epsilon
11806 Generate floating-point comparison instructions that compare with respect
11807 to the @code{rE} epsilon register.
11808
11809 @item -mabi=mmixware
11810 @itemx -mabi=gnu
11811 @opindex mabi-mmixware
11812 @opindex mabi=gnu
11813 Generate code that passes function parameters and return values that (in
11814 the called function) are seen as registers @code{$0} and up, as opposed to
11815 the GNU ABI which uses global registers @code{$231} and up.
11816
11817 @item -mzero-extend
11818 @itemx -mno-zero-extend
11819 @opindex mzero-extend
11820 @opindex mno-zero-extend
11821 When reading data from memory in sizes shorter than 64 bits, use (do not
11822 use) zero-extending load instructions by default, rather than
11823 sign-extending ones.
11824
11825 @item -mknuthdiv
11826 @itemx -mno-knuthdiv
11827 @opindex mknuthdiv
11828 @opindex mno-knuthdiv
11829 Make the result of a division yielding a remainder have the same sign as
11830 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
11831 remainder follows the sign of the dividend.  Both methods are
11832 arithmetically valid, the latter being almost exclusively used.
11833
11834 @item -mtoplevel-symbols
11835 @itemx -mno-toplevel-symbols
11836 @opindex mtoplevel-symbols
11837 @opindex mno-toplevel-symbols
11838 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
11839 code can be used with the @code{PREFIX} assembly directive.
11840
11841 @item -melf
11842 @opindex melf
11843 Generate an executable in the ELF format, rather than the default
11844 @samp{mmo} format used by the @command{mmix} simulator.
11845
11846 @item -mbranch-predict
11847 @itemx -mno-branch-predict
11848 @opindex mbranch-predict
11849 @opindex mno-branch-predict
11850 Use (do not use) the probable-branch instructions, when static branch
11851 prediction indicates a probable branch.
11852
11853 @item -mbase-addresses
11854 @itemx -mno-base-addresses
11855 @opindex mbase-addresses
11856 @opindex mno-base-addresses
11857 Generate (do not generate) code that uses @emph{base addresses}.  Using a
11858 base address automatically generates a request (handled by the assembler
11859 and the linker) for a constant to be set up in a global register.  The
11860 register is used for one or more base address requests within the range 0
11861 to 255 from the value held in the register.  The generally leads to short
11862 and fast code, but the number of different data items that can be
11863 addressed is limited.  This means that a program that uses lots of static
11864 data may require @option{-mno-base-addresses}.
11865
11866 @item -msingle-exit
11867 @itemx -mno-single-exit
11868 @opindex msingle-exit
11869 @opindex mno-single-exit
11870 Force (do not force) generated code to have a single exit point in each
11871 function.
11872 @end table
11873
11874 @node MN10300 Options
11875 @subsection MN10300 Options
11876 @cindex MN10300 options
11877
11878 These @option{-m} options are defined for Matsushita MN10300 architectures:
11879
11880 @table @gcctabopt
11881 @item -mmult-bug
11882 @opindex mmult-bug
11883 Generate code to avoid bugs in the multiply instructions for the MN10300
11884 processors.  This is the default.
11885
11886 @item -mno-mult-bug
11887 @opindex mno-mult-bug
11888 Do not generate code to avoid bugs in the multiply instructions for the
11889 MN10300 processors.
11890
11891 @item -mam33
11892 @opindex mam33
11893 Generate code which uses features specific to the AM33 processor.
11894
11895 @item -mno-am33
11896 @opindex mno-am33
11897 Do not generate code which uses features specific to the AM33 processor.  This
11898 is the default.
11899
11900 @item -mreturn-pointer-on-d0
11901 @opindex mreturn-pointer-on-d0
11902 When generating a function which returns a pointer, return the pointer
11903 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
11904 only in a0, and attempts to call such functions without a prototype
11905 would result in errors.  Note that this option is on by default; use
11906 @option{-mno-return-pointer-on-d0} to disable it.
11907
11908 @item -mno-crt0
11909 @opindex mno-crt0
11910 Do not link in the C run-time initialization object file.
11911
11912 @item -mrelax
11913 @opindex mrelax
11914 Indicate to the linker that it should perform a relaxation optimization pass
11915 to shorten branches, calls and absolute memory addresses.  This option only
11916 has an effect when used on the command line for the final link step.
11917
11918 This option makes symbolic debugging impossible.
11919 @end table
11920
11921 @node MT Options
11922 @subsection MT Options
11923 @cindex MT options
11924
11925 These @option{-m} options are defined for Morpho MT architectures:
11926
11927 @table @gcctabopt
11928
11929 @item -march=@var{cpu-type}
11930 @opindex march
11931 Generate code that will run on @var{cpu-type}, which is the name of a system
11932 representing a certain processor type.  Possible values for
11933 @var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002},
11934 @samp{ms1-16-003} and @samp{ms2}.
11935
11936 When this option is not used, the default is @option{-march=ms1-16-002}.
11937
11938 @item -mbacc
11939 @opindex mbacc
11940 Use byte loads and stores when generating code.
11941
11942 @item -mno-bacc
11943 @opindex mno-bacc
11944 Do not use byte loads and stores when generating code.
11945
11946 @item -msim
11947 @opindex msim
11948 Use simulator runtime
11949
11950 @item -mno-crt0
11951 @opindex mno-crt0
11952 Do not link in the C run-time initialization object file
11953 @file{crti.o}.  Other run-time initialization and termination files
11954 such as @file{startup.o} and @file{exit.o} are still included on the
11955 linker command line.
11956
11957 @end table
11958
11959 @node PDP-11 Options
11960 @subsection PDP-11 Options
11961 @cindex PDP-11 Options
11962
11963 These options are defined for the PDP-11:
11964
11965 @table @gcctabopt
11966 @item -mfpu
11967 @opindex mfpu
11968 Use hardware FPP floating point.  This is the default.  (FIS floating
11969 point on the PDP-11/40 is not supported.)
11970
11971 @item -msoft-float
11972 @opindex msoft-float
11973 Do not use hardware floating point.
11974
11975 @item -mac0
11976 @opindex mac0
11977 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
11978
11979 @item -mno-ac0
11980 @opindex mno-ac0
11981 Return floating-point results in memory.  This is the default.
11982
11983 @item -m40
11984 @opindex m40
11985 Generate code for a PDP-11/40.
11986
11987 @item -m45
11988 @opindex m45
11989 Generate code for a PDP-11/45.  This is the default.
11990
11991 @item -m10
11992 @opindex m10
11993 Generate code for a PDP-11/10.
11994
11995 @item -mbcopy-builtin
11996 @opindex bcopy-builtin
11997 Use inline @code{movmemhi} patterns for copying memory.  This is the
11998 default.
11999
12000 @item -mbcopy
12001 @opindex mbcopy
12002 Do not use inline @code{movmemhi} patterns for copying memory.
12003
12004 @item -mint16
12005 @itemx -mno-int32
12006 @opindex mint16
12007 @opindex mno-int32
12008 Use 16-bit @code{int}.  This is the default.
12009
12010 @item -mint32
12011 @itemx -mno-int16
12012 @opindex mint32
12013 @opindex mno-int16
12014 Use 32-bit @code{int}.
12015
12016 @item -mfloat64
12017 @itemx -mno-float32
12018 @opindex mfloat64
12019 @opindex mno-float32
12020 Use 64-bit @code{float}.  This is the default.
12021
12022 @item -mfloat32
12023 @itemx -mno-float64
12024 @opindex mfloat32
12025 @opindex mno-float64
12026 Use 32-bit @code{float}.
12027
12028 @item -mabshi
12029 @opindex mabshi
12030 Use @code{abshi2} pattern.  This is the default.
12031
12032 @item -mno-abshi
12033 @opindex mno-abshi
12034 Do not use @code{abshi2} pattern.
12035
12036 @item -mbranch-expensive
12037 @opindex mbranch-expensive
12038 Pretend that branches are expensive.  This is for experimenting with
12039 code generation only.
12040
12041 @item -mbranch-cheap
12042 @opindex mbranch-cheap
12043 Do not pretend that branches are expensive.  This is the default.
12044
12045 @item -msplit
12046 @opindex msplit
12047 Generate code for a system with split I&D@.
12048
12049 @item -mno-split
12050 @opindex mno-split
12051 Generate code for a system without split I&D@.  This is the default.
12052
12053 @item -munix-asm
12054 @opindex munix-asm
12055 Use Unix assembler syntax.  This is the default when configured for
12056 @samp{pdp11-*-bsd}.
12057
12058 @item -mdec-asm
12059 @opindex mdec-asm
12060 Use DEC assembler syntax.  This is the default when configured for any
12061 PDP-11 target other than @samp{pdp11-*-bsd}.
12062 @end table
12063
12064 @node PowerPC Options
12065 @subsection PowerPC Options
12066 @cindex PowerPC options
12067
12068 These are listed under @xref{RS/6000 and PowerPC Options}.
12069
12070 @node RS/6000 and PowerPC Options
12071 @subsection IBM RS/6000 and PowerPC Options
12072 @cindex RS/6000 and PowerPC Options
12073 @cindex IBM RS/6000 and PowerPC Options
12074
12075 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
12076 @table @gcctabopt
12077 @item -mpower
12078 @itemx -mno-power
12079 @itemx -mpower2
12080 @itemx -mno-power2
12081 @itemx -mpowerpc
12082 @itemx -mno-powerpc
12083 @itemx -mpowerpc-gpopt
12084 @itemx -mno-powerpc-gpopt
12085 @itemx -mpowerpc-gfxopt
12086 @itemx -mno-powerpc-gfxopt
12087 @itemx -mpowerpc64
12088 @itemx -mno-powerpc64
12089 @itemx -mmfcrf
12090 @itemx -mno-mfcrf
12091 @itemx -mpopcntb
12092 @itemx -mno-popcntb
12093 @itemx -mfprnd
12094 @itemx -mno-fprnd
12095 @itemx -mcmpb
12096 @itemx -mno-cmpb
12097 @itemx -mmfpgpr
12098 @itemx -mno-mfpgpr
12099 @itemx -mdfp
12100 @itemx -mno-dfp
12101 @opindex mpower
12102 @opindex mno-power
12103 @opindex mpower2
12104 @opindex mno-power2
12105 @opindex mpowerpc
12106 @opindex mno-powerpc
12107 @opindex mpowerpc-gpopt
12108 @opindex mno-powerpc-gpopt
12109 @opindex mpowerpc-gfxopt
12110 @opindex mno-powerpc-gfxopt
12111 @opindex mpowerpc64
12112 @opindex mno-powerpc64
12113 @opindex mmfcrf
12114 @opindex mno-mfcrf
12115 @opindex mpopcntb
12116 @opindex mno-popcntb
12117 @opindex mfprnd
12118 @opindex mno-fprnd
12119 @opindex mcmpb
12120 @opindex mno-cmpb
12121 @opindex mmfpgpr
12122 @opindex mno-mfpgpr
12123 @opindex mdfp
12124 @opindex mno-dfp
12125 GCC supports two related instruction set architectures for the
12126 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
12127 instructions supported by the @samp{rios} chip set used in the original
12128 RS/6000 systems and the @dfn{PowerPC} instruction set is the
12129 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
12130 the IBM 4xx, 6xx, and follow-on microprocessors.
12131
12132 Neither architecture is a subset of the other.  However there is a
12133 large common subset of instructions supported by both.  An MQ
12134 register is included in processors supporting the POWER architecture.
12135
12136 You use these options to specify which instructions are available on the
12137 processor you are using.  The default value of these options is
12138 determined when configuring GCC@.  Specifying the
12139 @option{-mcpu=@var{cpu_type}} overrides the specification of these
12140 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
12141 rather than the options listed above.
12142
12143 The @option{-mpower} option allows GCC to generate instructions that
12144 are found only in the POWER architecture and to use the MQ register.
12145 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
12146 to generate instructions that are present in the POWER2 architecture but
12147 not the original POWER architecture.
12148
12149 The @option{-mpowerpc} option allows GCC to generate instructions that
12150 are found only in the 32-bit subset of the PowerPC architecture.
12151 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
12152 GCC to use the optional PowerPC architecture instructions in the
12153 General Purpose group, including floating-point square root.  Specifying
12154 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
12155 use the optional PowerPC architecture instructions in the Graphics
12156 group, including floating-point select.
12157
12158 The @option{-mmfcrf} option allows GCC to generate the move from
12159 condition register field instruction implemented on the POWER4
12160 processor and other processors that support the PowerPC V2.01
12161 architecture.
12162 The @option{-mpopcntb} option allows GCC to generate the popcount and
12163 double precision FP reciprocal estimate instruction implemented on the
12164 POWER5 processor and other processors that support the PowerPC V2.02
12165 architecture.
12166 The @option{-mfprnd} option allows GCC to generate the FP round to
12167 integer instructions implemented on the POWER5+ processor and other
12168 processors that support the PowerPC V2.03 architecture.
12169 The @option{-mcmpb} option allows GCC to generate the compare bytes
12170 instruction implemented on the POWER6 processor and other processors
12171 that support the PowerPC V2.05 architecture.
12172 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
12173 general purpose register instructions implemented on the POWER6X
12174 processor and other processors that support the extended PowerPC V2.05
12175 architecture.
12176 The @option{-mdfp} option allows GCC to generate the decimal floating
12177 point instructions implemented on some POWER processors.
12178
12179 The @option{-mpowerpc64} option allows GCC to generate the additional
12180 64-bit instructions that are found in the full PowerPC64 architecture
12181 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
12182 @option{-mno-powerpc64}.
12183
12184 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
12185 will use only the instructions in the common subset of both
12186 architectures plus some special AIX common-mode calls, and will not use
12187 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
12188 permits GCC to use any instruction from either architecture and to
12189 allow use of the MQ register; specify this for the Motorola MPC601.
12190
12191 @item -mnew-mnemonics
12192 @itemx -mold-mnemonics
12193 @opindex mnew-mnemonics
12194 @opindex mold-mnemonics
12195 Select which mnemonics to use in the generated assembler code.  With
12196 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
12197 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
12198 assembler mnemonics defined for the POWER architecture.  Instructions
12199 defined in only one architecture have only one mnemonic; GCC uses that
12200 mnemonic irrespective of which of these options is specified.
12201
12202 GCC defaults to the mnemonics appropriate for the architecture in
12203 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
12204 value of these option.  Unless you are building a cross-compiler, you
12205 should normally not specify either @option{-mnew-mnemonics} or
12206 @option{-mold-mnemonics}, but should instead accept the default.
12207
12208 @item -mcpu=@var{cpu_type}
12209 @opindex mcpu
12210 Set architecture type, register usage, choice of mnemonics, and
12211 instruction scheduling parameters for machine type @var{cpu_type}.
12212 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
12213 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
12214 @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
12215 @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
12216 @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
12217 @samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3},
12218 @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
12219 @samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
12220 @samp{power6x}, @samp{common}, @samp{powerpc}, @samp{powerpc64},
12221 @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
12222
12223 @option{-mcpu=common} selects a completely generic processor.  Code
12224 generated under this option will run on any POWER or PowerPC processor.
12225 GCC will use only the instructions in the common subset of both
12226 architectures, and will not use the MQ register.  GCC assumes a generic
12227 processor model for scheduling purposes.
12228
12229 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
12230 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
12231 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
12232 types, with an appropriate, generic processor model assumed for
12233 scheduling purposes.
12234
12235 The other options specify a specific processor.  Code generated under
12236 those options will run best on that processor, and may not run at all on
12237 others.
12238
12239 The @option{-mcpu} options automatically enable or disable the
12240 following options:
12241
12242 @gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
12243 -mnew-mnemonics  -mpopcntb  -mpower  -mpower2  -mpowerpc64 @gol
12244 -mpowerpc-gpopt  -mpowerpc-gfxopt  -mstring  -mmulhw  -mdlmzb  -mmfpgpr}
12245
12246 The particular options set for any particular CPU will vary between
12247 compiler versions, depending on what setting seems to produce optimal
12248 code for that CPU; it doesn't necessarily reflect the actual hardware's
12249 capabilities.  If you wish to set an individual option to a particular
12250 value, you may specify it after the @option{-mcpu} option, like
12251 @samp{-mcpu=970 -mno-altivec}.
12252
12253 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
12254 not enabled or disabled by the @option{-mcpu} option at present because
12255 AIX does not have full support for these options.  You may still
12256 enable or disable them individually if you're sure it'll work in your
12257 environment.
12258
12259 @item -mtune=@var{cpu_type}
12260 @opindex mtune
12261 Set the instruction scheduling parameters for machine type
12262 @var{cpu_type}, but do not set the architecture type, register usage, or
12263 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
12264 values for @var{cpu_type} are used for @option{-mtune} as for
12265 @option{-mcpu}.  If both are specified, the code generated will use the
12266 architecture, registers, and mnemonics set by @option{-mcpu}, but the
12267 scheduling parameters set by @option{-mtune}.
12268
12269 @item -mswdiv
12270 @itemx -mno-swdiv
12271 @opindex mswdiv
12272 @opindex mno-swdiv
12273 Generate code to compute division as reciprocal estimate and iterative
12274 refinement, creating opportunities for increased throughput.  This
12275 feature requires: optional PowerPC Graphics instruction set for single
12276 precision and FRE instruction for double precision, assuming divides
12277 cannot generate user-visible traps, and the domain values not include
12278 Infinities, denormals or zero denominator.
12279
12280 @item -maltivec
12281 @itemx -mno-altivec
12282 @opindex maltivec
12283 @opindex mno-altivec
12284 Generate code that uses (does not use) AltiVec instructions, and also
12285 enable the use of built-in functions that allow more direct access to
12286 the AltiVec instruction set.  You may also need to set
12287 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
12288 enhancements.
12289
12290 @item -mvrsave
12291 @item -mno-vrsave
12292 @opindex mvrsave
12293 @opindex mno-vrsave
12294 Generate VRSAVE instructions when generating AltiVec code.
12295
12296 @item -msecure-plt
12297 @opindex msecure-plt
12298 Generate code that allows ld and ld.so to build executables and shared
12299 libraries with non-exec .plt and .got sections.  This is a PowerPC
12300 32-bit SYSV ABI option.
12301
12302 @item -mbss-plt
12303 @opindex mbss-plt
12304 Generate code that uses a BSS .plt section that ld.so fills in, and
12305 requires .plt and .got sections that are both writable and executable.
12306 This is a PowerPC 32-bit SYSV ABI option.
12307
12308 @item -misel
12309 @itemx -mno-isel
12310 @opindex misel
12311 @opindex mno-isel
12312 This switch enables or disables the generation of ISEL instructions.
12313
12314 @item -misel=@var{yes/no}
12315 This switch has been deprecated.  Use @option{-misel} and
12316 @option{-mno-isel} instead.
12317
12318 @item -mspe
12319 @itemx -mno-spe
12320 @opindex mspe
12321 @opindex mno-spe
12322 This switch enables or disables the generation of SPE simd
12323 instructions.
12324
12325 @item -mspe=@var{yes/no}
12326 This option has been deprecated.  Use @option{-mspe} and
12327 @option{-mno-spe} instead.
12328
12329 @item -mfloat-gprs=@var{yes/single/double/no}
12330 @itemx -mfloat-gprs
12331 @opindex mfloat-gprs
12332 This switch enables or disables the generation of floating point
12333 operations on the general purpose registers for architectures that
12334 support it.
12335
12336 The argument @var{yes} or @var{single} enables the use of
12337 single-precision floating point operations.
12338
12339 The argument @var{double} enables the use of single and
12340 double-precision floating point operations.
12341
12342 The argument @var{no} disables floating point operations on the
12343 general purpose registers.
12344
12345 This option is currently only available on the MPC854x.
12346
12347 @item -m32
12348 @itemx -m64
12349 @opindex m32
12350 @opindex m64
12351 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
12352 targets (including GNU/Linux).  The 32-bit environment sets int, long
12353 and pointer to 32 bits and generates code that runs on any PowerPC
12354 variant.  The 64-bit environment sets int to 32 bits and long and
12355 pointer to 64 bits, and generates code for PowerPC64, as for
12356 @option{-mpowerpc64}.
12357
12358 @item -mfull-toc
12359 @itemx -mno-fp-in-toc
12360 @itemx -mno-sum-in-toc
12361 @itemx -mminimal-toc
12362 @opindex mfull-toc
12363 @opindex mno-fp-in-toc
12364 @opindex mno-sum-in-toc
12365 @opindex mminimal-toc
12366 Modify generation of the TOC (Table Of Contents), which is created for
12367 every executable file.  The @option{-mfull-toc} option is selected by
12368 default.  In that case, GCC will allocate at least one TOC entry for
12369 each unique non-automatic variable reference in your program.  GCC
12370 will also place floating-point constants in the TOC@.  However, only
12371 16,384 entries are available in the TOC@.
12372
12373 If you receive a linker error message that saying you have overflowed
12374 the available TOC space, you can reduce the amount of TOC space used
12375 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
12376 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
12377 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
12378 generate code to calculate the sum of an address and a constant at
12379 run-time instead of putting that sum into the TOC@.  You may specify one
12380 or both of these options.  Each causes GCC to produce very slightly
12381 slower and larger code at the expense of conserving TOC space.
12382
12383 If you still run out of space in the TOC even when you specify both of
12384 these options, specify @option{-mminimal-toc} instead.  This option causes
12385 GCC to make only one TOC entry for every file.  When you specify this
12386 option, GCC will produce code that is slower and larger but which
12387 uses extremely little TOC space.  You may wish to use this option
12388 only on files that contain less frequently executed code.
12389
12390 @item -maix64
12391 @itemx -maix32
12392 @opindex maix64
12393 @opindex maix32
12394 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
12395 @code{long} type, and the infrastructure needed to support them.
12396 Specifying @option{-maix64} implies @option{-mpowerpc64} and
12397 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
12398 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
12399
12400 @item -mxl-compat
12401 @itemx -mno-xl-compat
12402 @opindex mxl-compat
12403 @opindex mno-xl-compat
12404 Produce code that conforms more closely to IBM XL compiler semantics
12405 when using AIX-compatible ABI.  Pass floating-point arguments to
12406 prototyped functions beyond the register save area (RSA) on the stack
12407 in addition to argument FPRs.  Do not assume that most significant
12408 double in 128-bit long double value is properly rounded when comparing
12409 values and converting to double.  Use XL symbol names for long double
12410 support routines.
12411
12412 The AIX calling convention was extended but not initially documented to
12413 handle an obscure K&R C case of calling a function that takes the
12414 address of its arguments with fewer arguments than declared.  IBM XL
12415 compilers access floating point arguments which do not fit in the
12416 RSA from the stack when a subroutine is compiled without
12417 optimization.  Because always storing floating-point arguments on the
12418 stack is inefficient and rarely needed, this option is not enabled by
12419 default and only is necessary when calling subroutines compiled by IBM
12420 XL compilers without optimization.
12421
12422 @item -mpe
12423 @opindex mpe
12424 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
12425 application written to use message passing with special startup code to
12426 enable the application to run.  The system must have PE installed in the
12427 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
12428 must be overridden with the @option{-specs=} option to specify the
12429 appropriate directory location.  The Parallel Environment does not
12430 support threads, so the @option{-mpe} option and the @option{-pthread}
12431 option are incompatible.
12432
12433 @item -malign-natural
12434 @itemx -malign-power
12435 @opindex malign-natural
12436 @opindex malign-power
12437 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
12438 @option{-malign-natural} overrides the ABI-defined alignment of larger
12439 types, such as floating-point doubles, on their natural size-based boundary.
12440 The option @option{-malign-power} instructs GCC to follow the ABI-specified
12441 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
12442
12443 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
12444 is not supported.
12445
12446 @item -msoft-float
12447 @itemx -mhard-float
12448 @opindex msoft-float
12449 @opindex mhard-float
12450 Generate code that does not use (uses) the floating-point register set.
12451 Software floating point emulation is provided if you use the
12452 @option{-msoft-float} option, and pass the option to GCC when linking.
12453
12454 @item -mmultiple
12455 @itemx -mno-multiple
12456 @opindex mmultiple
12457 @opindex mno-multiple
12458 Generate code that uses (does not use) the load multiple word
12459 instructions and the store multiple word instructions.  These
12460 instructions are generated by default on POWER systems, and not
12461 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
12462 endian PowerPC systems, since those instructions do not work when the
12463 processor is in little endian mode.  The exceptions are PPC740 and
12464 PPC750 which permit the instructions usage in little endian mode.
12465
12466 @item -mstring
12467 @itemx -mno-string
12468 @opindex mstring
12469 @opindex mno-string
12470 Generate code that uses (does not use) the load string instructions
12471 and the store string word instructions to save multiple registers and
12472 do small block moves.  These instructions are generated by default on
12473 POWER systems, and not generated on PowerPC systems.  Do not use
12474 @option{-mstring} on little endian PowerPC systems, since those
12475 instructions do not work when the processor is in little endian mode.
12476 The exceptions are PPC740 and PPC750 which permit the instructions
12477 usage in little endian mode.
12478
12479 @item -mupdate
12480 @itemx -mno-update
12481 @opindex mupdate
12482 @opindex mno-update
12483 Generate code that uses (does not use) the load or store instructions
12484 that update the base register to the address of the calculated memory
12485 location.  These instructions are generated by default.  If you use
12486 @option{-mno-update}, there is a small window between the time that the
12487 stack pointer is updated and the address of the previous frame is
12488 stored, which means code that walks the stack frame across interrupts or
12489 signals may get corrupted data.
12490
12491 @item -mfused-madd
12492 @itemx -mno-fused-madd
12493 @opindex mfused-madd
12494 @opindex mno-fused-madd
12495 Generate code that uses (does not use) the floating point multiply and
12496 accumulate instructions.  These instructions are generated by default if
12497 hardware floating is used.
12498
12499 @item -mmulhw
12500 @itemx -mno-mulhw
12501 @opindex mmulhw
12502 @opindex mno-mulhw
12503 Generate code that uses (does not use) the half-word multiply and
12504 multiply-accumulate instructions on the IBM 405 and 440 processors.
12505 These instructions are generated by default when targetting those
12506 processors.
12507
12508 @item -mdlmzb
12509 @itemx -mno-dlmzb
12510 @opindex mdlmzb
12511 @opindex mno-dlmzb
12512 Generate code that uses (does not use) the string-search @samp{dlmzb}
12513 instruction on the IBM 405 and 440 processors.  This instruction is
12514 generated by default when targetting those processors.
12515
12516 @item -mno-bit-align
12517 @itemx -mbit-align
12518 @opindex mno-bit-align
12519 @opindex mbit-align
12520 On System V.4 and embedded PowerPC systems do not (do) force structures
12521 and unions that contain bit-fields to be aligned to the base type of the
12522 bit-field.
12523
12524 For example, by default a structure containing nothing but 8
12525 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
12526 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
12527 the structure would be aligned to a 1 byte boundary and be one byte in
12528 size.
12529
12530 @item -mno-strict-align
12531 @itemx -mstrict-align
12532 @opindex mno-strict-align
12533 @opindex mstrict-align
12534 On System V.4 and embedded PowerPC systems do not (do) assume that
12535 unaligned memory references will be handled by the system.
12536
12537 @item -mrelocatable
12538 @itemx -mno-relocatable
12539 @opindex mrelocatable
12540 @opindex mno-relocatable
12541 On embedded PowerPC systems generate code that allows (does not allow)
12542 the program to be relocated to a different address at runtime.  If you
12543 use @option{-mrelocatable} on any module, all objects linked together must
12544 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
12545
12546 @item -mrelocatable-lib
12547 @itemx -mno-relocatable-lib
12548 @opindex mrelocatable-lib
12549 @opindex mno-relocatable-lib
12550 On embedded PowerPC systems generate code that allows (does not allow)
12551 the program to be relocated to a different address at runtime.  Modules
12552 compiled with @option{-mrelocatable-lib} can be linked with either modules
12553 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
12554 with modules compiled with the @option{-mrelocatable} options.
12555
12556 @item -mno-toc
12557 @itemx -mtoc
12558 @opindex mno-toc
12559 @opindex mtoc
12560 On System V.4 and embedded PowerPC systems do not (do) assume that
12561 register 2 contains a pointer to a global area pointing to the addresses
12562 used in the program.
12563
12564 @item -mlittle
12565 @itemx -mlittle-endian
12566 @opindex mlittle
12567 @opindex mlittle-endian
12568 On System V.4 and embedded PowerPC systems compile code for the
12569 processor in little endian mode.  The @option{-mlittle-endian} option is
12570 the same as @option{-mlittle}.
12571
12572 @item -mbig
12573 @itemx -mbig-endian
12574 @opindex mbig
12575 @opindex mbig-endian
12576 On System V.4 and embedded PowerPC systems compile code for the
12577 processor in big endian mode.  The @option{-mbig-endian} option is
12578 the same as @option{-mbig}.
12579
12580 @item -mdynamic-no-pic
12581 @opindex mdynamic-no-pic
12582 On Darwin and Mac OS X systems, compile code so that it is not
12583 relocatable, but that its external references are relocatable.  The
12584 resulting code is suitable for applications, but not shared
12585 libraries.
12586
12587 @item -mprioritize-restricted-insns=@var{priority}
12588 @opindex mprioritize-restricted-insns
12589 This option controls the priority that is assigned to
12590 dispatch-slot restricted instructions during the second scheduling
12591 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
12592 @var{no/highest/second-highest} priority to dispatch slot restricted
12593 instructions.
12594
12595 @item -msched-costly-dep=@var{dependence_type}
12596 @opindex msched-costly-dep
12597 This option controls which dependences are considered costly
12598 by the target during instruction scheduling.  The argument
12599 @var{dependence_type} takes one of the following values:
12600 @var{no}: no dependence is costly,
12601 @var{all}: all dependences are costly,
12602 @var{true_store_to_load}: a true dependence from store to load is costly,
12603 @var{store_to_load}: any dependence from store to load is costly,
12604 @var{number}: any dependence which latency >= @var{number} is costly.
12605
12606 @item -minsert-sched-nops=@var{scheme}
12607 @opindex minsert-sched-nops
12608 This option controls which nop insertion scheme will be used during
12609 the second scheduling pass.  The argument @var{scheme} takes one of the
12610 following values:
12611 @var{no}: Don't insert nops.
12612 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
12613 according to the scheduler's grouping.
12614 @var{regroup_exact}: Insert nops to force costly dependent insns into
12615 separate groups.  Insert exactly as many nops as needed to force an insn
12616 to a new group, according to the estimated processor grouping.
12617 @var{number}: Insert nops to force costly dependent insns into
12618 separate groups.  Insert @var{number} nops to force an insn to a new group.
12619
12620 @item -mcall-sysv
12621 @opindex mcall-sysv
12622 On System V.4 and embedded PowerPC systems compile code using calling
12623 conventions that adheres to the March 1995 draft of the System V
12624 Application Binary Interface, PowerPC processor supplement.  This is the
12625 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
12626
12627 @item -mcall-sysv-eabi
12628 @opindex mcall-sysv-eabi
12629 Specify both @option{-mcall-sysv} and @option{-meabi} options.
12630
12631 @item -mcall-sysv-noeabi
12632 @opindex mcall-sysv-noeabi
12633 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
12634
12635 @item -mcall-solaris
12636 @opindex mcall-solaris
12637 On System V.4 and embedded PowerPC systems compile code for the Solaris
12638 operating system.
12639
12640 @item -mcall-linux
12641 @opindex mcall-linux
12642 On System V.4 and embedded PowerPC systems compile code for the
12643 Linux-based GNU system.
12644
12645 @item -mcall-gnu
12646 @opindex mcall-gnu
12647 On System V.4 and embedded PowerPC systems compile code for the
12648 Hurd-based GNU system.
12649
12650 @item -mcall-netbsd
12651 @opindex mcall-netbsd
12652 On System V.4 and embedded PowerPC systems compile code for the
12653 NetBSD operating system.
12654
12655 @item -maix-struct-return
12656 @opindex maix-struct-return
12657 Return all structures in memory (as specified by the AIX ABI)@.
12658
12659 @item -msvr4-struct-return
12660 @opindex msvr4-struct-return
12661 Return structures smaller than 8 bytes in registers (as specified by the
12662 SVR4 ABI)@.
12663
12664 @item -mabi=@var{abi-type}
12665 @opindex mabi
12666 Extend the current ABI with a particular extension, or remove such extension.
12667 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
12668 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
12669
12670 @item -mabi=spe
12671 @opindex mabi=spe
12672 Extend the current ABI with SPE ABI extensions.  This does not change
12673 the default ABI, instead it adds the SPE ABI extensions to the current
12674 ABI@.
12675
12676 @item -mabi=no-spe
12677 @opindex mabi=no-spe
12678 Disable Booke SPE ABI extensions for the current ABI@.
12679
12680 @item -mabi=ibmlongdouble
12681 @opindex mabi=ibmlongdouble
12682 Change the current ABI to use IBM extended precision long double.
12683 This is a PowerPC 32-bit SYSV ABI option.
12684
12685 @item -mabi=ieeelongdouble
12686 @opindex mabi=ieeelongdouble
12687 Change the current ABI to use IEEE extended precision long double.
12688 This is a PowerPC 32-bit Linux ABI option.
12689
12690 @item -mprototype
12691 @itemx -mno-prototype
12692 @opindex mprototype
12693 @opindex mno-prototype
12694 On System V.4 and embedded PowerPC systems assume that all calls to
12695 variable argument functions are properly prototyped.  Otherwise, the
12696 compiler must insert an instruction before every non prototyped call to
12697 set or clear bit 6 of the condition code register (@var{CR}) to
12698 indicate whether floating point values were passed in the floating point
12699 registers in case the function takes a variable arguments.  With
12700 @option{-mprototype}, only calls to prototyped variable argument functions
12701 will set or clear the bit.
12702
12703 @item -msim
12704 @opindex msim
12705 On embedded PowerPC systems, assume that the startup module is called
12706 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
12707 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
12708 configurations.
12709
12710 @item -mmvme
12711 @opindex mmvme
12712 On embedded PowerPC systems, assume that the startup module is called
12713 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
12714 @file{libc.a}.
12715
12716 @item -mads
12717 @opindex mads
12718 On embedded PowerPC systems, assume that the startup module is called
12719 @file{crt0.o} and the standard C libraries are @file{libads.a} and
12720 @file{libc.a}.
12721
12722 @item -myellowknife
12723 @opindex myellowknife
12724 On embedded PowerPC systems, assume that the startup module is called
12725 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
12726 @file{libc.a}.
12727
12728 @item -mvxworks
12729 @opindex mvxworks
12730 On System V.4 and embedded PowerPC systems, specify that you are
12731 compiling for a VxWorks system.
12732
12733 @item -mwindiss
12734 @opindex mwindiss
12735 Specify that you are compiling for the WindISS simulation environment.
12736
12737 @item -memb
12738 @opindex memb
12739 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
12740 header to indicate that @samp{eabi} extended relocations are used.
12741
12742 @item -meabi
12743 @itemx -mno-eabi
12744 @opindex meabi
12745 @opindex mno-eabi
12746 On System V.4 and embedded PowerPC systems do (do not) adhere to the
12747 Embedded Applications Binary Interface (eabi) which is a set of
12748 modifications to the System V.4 specifications.  Selecting @option{-meabi}
12749 means that the stack is aligned to an 8 byte boundary, a function
12750 @code{__eabi} is called to from @code{main} to set up the eabi
12751 environment, and the @option{-msdata} option can use both @code{r2} and
12752 @code{r13} to point to two separate small data areas.  Selecting
12753 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
12754 do not call an initialization function from @code{main}, and the
12755 @option{-msdata} option will only use @code{r13} to point to a single
12756 small data area.  The @option{-meabi} option is on by default if you
12757 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
12758
12759 @item -msdata=eabi
12760 @opindex msdata=eabi
12761 On System V.4 and embedded PowerPC systems, put small initialized
12762 @code{const} global and static data in the @samp{.sdata2} section, which
12763 is pointed to by register @code{r2}.  Put small initialized
12764 non-@code{const} global and static data in the @samp{.sdata} section,
12765 which is pointed to by register @code{r13}.  Put small uninitialized
12766 global and static data in the @samp{.sbss} section, which is adjacent to
12767 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
12768 incompatible with the @option{-mrelocatable} option.  The
12769 @option{-msdata=eabi} option also sets the @option{-memb} option.
12770
12771 @item -msdata=sysv
12772 @opindex msdata=sysv
12773 On System V.4 and embedded PowerPC systems, put small global and static
12774 data in the @samp{.sdata} section, which is pointed to by register
12775 @code{r13}.  Put small uninitialized global and static data in the
12776 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
12777 The @option{-msdata=sysv} option is incompatible with the
12778 @option{-mrelocatable} option.
12779
12780 @item -msdata=default
12781 @itemx -msdata
12782 @opindex msdata=default
12783 @opindex msdata
12784 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
12785 compile code the same as @option{-msdata=eabi}, otherwise compile code the
12786 same as @option{-msdata=sysv}.
12787
12788 @item -msdata-data
12789 @opindex msdata-data
12790 On System V.4 and embedded PowerPC systems, put small global
12791 data in the @samp{.sdata} section.  Put small uninitialized global
12792 data in the @samp{.sbss} section.  Do not use register @code{r13}
12793 to address small data however.  This is the default behavior unless
12794 other @option{-msdata} options are used.
12795
12796 @item -msdata=none
12797 @itemx -mno-sdata
12798 @opindex msdata=none
12799 @opindex mno-sdata
12800 On embedded PowerPC systems, put all initialized global and static data
12801 in the @samp{.data} section, and all uninitialized data in the
12802 @samp{.bss} section.
12803
12804 @item -G @var{num}
12805 @opindex G
12806 @cindex smaller data references (PowerPC)
12807 @cindex .sdata/.sdata2 references (PowerPC)
12808 On embedded PowerPC systems, put global and static items less than or
12809 equal to @var{num} bytes into the small data or bss sections instead of
12810 the normal data or bss section.  By default, @var{num} is 8.  The
12811 @option{-G @var{num}} switch is also passed to the linker.
12812 All modules should be compiled with the same @option{-G @var{num}} value.
12813
12814 @item -mregnames
12815 @itemx -mno-regnames
12816 @opindex mregnames
12817 @opindex mno-regnames
12818 On System V.4 and embedded PowerPC systems do (do not) emit register
12819 names in the assembly language output using symbolic forms.
12820
12821 @item -mlongcall
12822 @itemx -mno-longcall
12823 @opindex mlongcall
12824 @opindex mno-longcall
12825 By default assume that all calls are far away so that a longer more
12826 expensive calling sequence is required.  This is required for calls
12827 further than 32 megabytes (33,554,432 bytes) from the current location.
12828 A short call will be generated if the compiler knows
12829 the call cannot be that far away.  This setting can be overridden by
12830 the @code{shortcall} function attribute, or by @code{#pragma
12831 longcall(0)}.
12832
12833 Some linkers are capable of detecting out-of-range calls and generating
12834 glue code on the fly.  On these systems, long calls are unnecessary and
12835 generate slower code.  As of this writing, the AIX linker can do this,
12836 as can the GNU linker for PowerPC/64.  It is planned to add this feature
12837 to the GNU linker for 32-bit PowerPC systems as well.
12838
12839 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
12840 callee, L42'', plus a ``branch island'' (glue code).  The two target
12841 addresses represent the callee and the ``branch island''.  The
12842 Darwin/PPC linker will prefer the first address and generate a ``bl
12843 callee'' if the PPC ``bl'' instruction will reach the callee directly;
12844 otherwise, the linker will generate ``bl L42'' to call the ``branch
12845 island''.  The ``branch island'' is appended to the body of the
12846 calling function; it computes the full 32-bit address of the callee
12847 and jumps to it.
12848
12849 On Mach-O (Darwin) systems, this option directs the compiler emit to
12850 the glue for every direct call, and the Darwin linker decides whether
12851 to use or discard it.
12852
12853 In the future, we may cause GCC to ignore all longcall specifications
12854 when the linker is known to generate glue.
12855
12856 @item -pthread
12857 @opindex pthread
12858 Adds support for multithreading with the @dfn{pthreads} library.
12859 This option sets flags for both the preprocessor and linker.
12860
12861 @end table
12862
12863 @node S/390 and zSeries Options
12864 @subsection S/390 and zSeries Options
12865 @cindex S/390 and zSeries Options
12866
12867 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
12868
12869 @table @gcctabopt
12870 @item -mhard-float
12871 @itemx -msoft-float
12872 @opindex mhard-float
12873 @opindex msoft-float
12874 Use (do not use) the hardware floating-point instructions and registers
12875 for floating-point operations.  When @option{-msoft-float} is specified,
12876 functions in @file{libgcc.a} will be used to perform floating-point
12877 operations.  When @option{-mhard-float} is specified, the compiler
12878 generates IEEE floating-point instructions.  This is the default.
12879
12880 @item -mlong-double-64
12881 @itemx -mlong-double-128
12882 @opindex mlong-double-64
12883 @opindex mlong-double-128
12884 These switches control the size of @code{long double} type. A size
12885 of 64bit makes the @code{long double} type equivalent to the @code{double}
12886 type. This is the default.
12887
12888 @item -mbackchain
12889 @itemx -mno-backchain
12890 @opindex mbackchain
12891 @opindex mno-backchain
12892 Store (do not store) the address of the caller's frame as backchain pointer
12893 into the callee's stack frame.
12894 A backchain may be needed to allow debugging using tools that do not understand
12895 DWARF-2 call frame information.
12896 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
12897 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
12898 the backchain is placed into the topmost word of the 96/160 byte register
12899 save area.
12900
12901 In general, code compiled with @option{-mbackchain} is call-compatible with
12902 code compiled with @option{-mmo-backchain}; however, use of the backchain
12903 for debugging purposes usually requires that the whole binary is built with
12904 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
12905 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
12906 to build a linux kernel use @option{-msoft-float}.
12907
12908 The default is to not maintain the backchain.
12909
12910 @item -mpacked-stack
12911 @item -mno-packed-stack
12912 @opindex mpacked-stack
12913 @opindex mno-packed-stack
12914 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
12915 specified, the compiler uses the all fields of the 96/160 byte register save
12916 area only for their default purpose; unused fields still take up stack space.
12917 When @option{-mpacked-stack} is specified, register save slots are densely
12918 packed at the top of the register save area; unused space is reused for other
12919 purposes, allowing for more efficient use of the available stack space.
12920 However, when @option{-mbackchain} is also in effect, the topmost word of
12921 the save area is always used to store the backchain, and the return address
12922 register is always saved two words below the backchain.
12923
12924 As long as the stack frame backchain is not used, code generated with
12925 @option{-mpacked-stack} is call-compatible with code generated with
12926 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
12927 S/390 or zSeries generated code that uses the stack frame backchain at run
12928 time, not just for debugging purposes.  Such code is not call-compatible
12929 with code compiled with @option{-mpacked-stack}.  Also, note that the
12930 combination of @option{-mbackchain},
12931 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
12932 to build a linux kernel use @option{-msoft-float}.
12933
12934 The default is to not use the packed stack layout.
12935
12936 @item -msmall-exec
12937 @itemx -mno-small-exec
12938 @opindex msmall-exec
12939 @opindex mno-small-exec
12940 Generate (or do not generate) code using the @code{bras} instruction
12941 to do subroutine calls.
12942 This only works reliably if the total executable size does not
12943 exceed 64k.  The default is to use the @code{basr} instruction instead,
12944 which does not have this limitation.
12945
12946 @item -m64
12947 @itemx -m31
12948 @opindex m64
12949 @opindex m31
12950 When @option{-m31} is specified, generate code compliant to the
12951 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
12952 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
12953 particular to generate 64-bit instructions.  For the @samp{s390}
12954 targets, the default is @option{-m31}, while the @samp{s390x}
12955 targets default to @option{-m64}.
12956
12957 @item -mzarch
12958 @itemx -mesa
12959 @opindex mzarch
12960 @opindex mesa
12961 When @option{-mzarch} is specified, generate code using the
12962 instructions available on z/Architecture.
12963 When @option{-mesa} is specified, generate code using the
12964 instructions available on ESA/390.  Note that @option{-mesa} is
12965 not possible with @option{-m64}.
12966 When generating code compliant to the GNU/Linux for S/390 ABI,
12967 the default is @option{-mesa}.  When generating code compliant
12968 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
12969
12970 @item -mmvcle
12971 @itemx -mno-mvcle
12972 @opindex mmvcle
12973 @opindex mno-mvcle
12974 Generate (or do not generate) code using the @code{mvcle} instruction
12975 to perform block moves.  When @option{-mno-mvcle} is specified,
12976 use a @code{mvc} loop instead.  This is the default unless optimizing for
12977 size.
12978
12979 @item -mdebug
12980 @itemx -mno-debug
12981 @opindex mdebug
12982 @opindex mno-debug
12983 Print (or do not print) additional debug information when compiling.
12984 The default is to not print debug information.
12985
12986 @item -march=@var{cpu-type}
12987 @opindex march
12988 Generate code that will run on @var{cpu-type}, which is the name of a system
12989 representing a certain processor type.  Possible values for
12990 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
12991 When generating code using the instructions available on z/Architecture,
12992 the default is @option{-march=z900}.  Otherwise, the default is
12993 @option{-march=g5}.
12994
12995 @item -mtune=@var{cpu-type}
12996 @opindex mtune
12997 Tune to @var{cpu-type} everything applicable about the generated code,
12998 except for the ABI and the set of available instructions.
12999 The list of @var{cpu-type} values is the same as for @option{-march}.
13000 The default is the value used for @option{-march}.
13001
13002 @item -mtpf-trace
13003 @itemx -mno-tpf-trace
13004 @opindex mtpf-trace
13005 @opindex mno-tpf-trace
13006 Generate code that adds (does not add) in TPF OS specific branches to trace
13007 routines in the operating system.  This option is off by default, even
13008 when compiling for the TPF OS@.
13009
13010 @item -mfused-madd
13011 @itemx -mno-fused-madd
13012 @opindex mfused-madd
13013 @opindex mno-fused-madd
13014 Generate code that uses (does not use) the floating point multiply and
13015 accumulate instructions.  These instructions are generated by default if
13016 hardware floating point is used.
13017
13018 @item -mwarn-framesize=@var{framesize}
13019 @opindex mwarn-framesize
13020 Emit a warning if the current function exceeds the given frame size.  Because
13021 this is a compile time check it doesn't need to be a real problem when the program
13022 runs.  It is intended to identify functions which most probably cause
13023 a stack overflow.  It is useful to be used in an environment with limited stack
13024 size e.g.@: the linux kernel.
13025
13026 @item -mwarn-dynamicstack
13027 @opindex mwarn-dynamicstack
13028 Emit a warning if the function calls alloca or uses dynamically
13029 sized arrays.  This is generally a bad idea with a limited stack size.
13030
13031 @item -mstack-guard=@var{stack-guard}
13032 @item -mstack-size=@var{stack-size}
13033 @opindex mstack-guard
13034 @opindex mstack-size
13035 If these options are provided the s390 back end emits additional instructions in
13036 the function prologue which trigger a trap if the stack size is @var{stack-guard}
13037 bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
13038 If the @var{stack-guard} option is omitted the smallest power of 2 larger than
13039 the frame size of the compiled function is chosen.
13040 These options are intended to be used to help debugging stack overflow problems.
13041 The additionally emitted code causes only little overhead and hence can also be
13042 used in production like systems without greater performance degradation.  The given
13043 values have to be exact powers of 2 and @var{stack-size} has to be greater than
13044 @var{stack-guard} without exceeding 64k.
13045 In order to be efficient the extra code makes the assumption that the stack starts
13046 at an address aligned to the value given by @var{stack-size}.
13047 The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
13048 @end table
13049
13050 @node Score Options
13051 @subsection Score Options
13052 @cindex Score Options
13053
13054 These options are defined for Score implementations:
13055
13056 @table @gcctabopt
13057 @item -meb
13058 @opindex meb
13059 Compile code for big endian mode.  This is the default.
13060
13061 @item -mel
13062 @opindex mel
13063 Compile code for little endian mode. 
13064
13065 @item -mnhwloop
13066 @opindex mnhwloop
13067 Disable generate bcnz instruction.
13068
13069 @item -muls
13070 @opindex muls
13071 Enable generate unaligned load and store instruction.
13072
13073 @item -mmac
13074 @opindex mmac
13075 Enable the use of multiply-accumulate instructions. Disabled by default. 
13076
13077 @item -mscore5
13078 @opindex mscore5
13079 Specify the SCORE5 as the target architecture.
13080
13081 @item -mscore5u
13082 @opindex mscore5u
13083 Specify the SCORE5U of the target architecture.
13084
13085 @item -mscore7
13086 @opindex mscore7
13087 Specify the SCORE7 as the target architecture. This is the default.
13088
13089 @item -mscore7d
13090 @opindex mscore7d
13091 Specify the SCORE7D as the target architecture.
13092 @end table
13093
13094 @node SH Options
13095 @subsection SH Options
13096
13097 These @samp{-m} options are defined for the SH implementations:
13098
13099 @table @gcctabopt
13100 @item -m1
13101 @opindex m1
13102 Generate code for the SH1.
13103
13104 @item -m2
13105 @opindex m2
13106 Generate code for the SH2.
13107
13108 @item -m2e
13109 Generate code for the SH2e.
13110
13111 @item -m3
13112 @opindex m3
13113 Generate code for the SH3.
13114
13115 @item -m3e
13116 @opindex m3e
13117 Generate code for the SH3e.
13118
13119 @item -m4-nofpu
13120 @opindex m4-nofpu
13121 Generate code for the SH4 without a floating-point unit.
13122
13123 @item -m4-single-only
13124 @opindex m4-single-only
13125 Generate code for the SH4 with a floating-point unit that only
13126 supports single-precision arithmetic.
13127
13128 @item -m4-single
13129 @opindex m4-single
13130 Generate code for the SH4 assuming the floating-point unit is in
13131 single-precision mode by default.
13132
13133 @item -m4
13134 @opindex m4
13135 Generate code for the SH4.
13136
13137 @item -m4a-nofpu
13138 @opindex m4a-nofpu
13139 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
13140 floating-point unit is not used.
13141
13142 @item -m4a-single-only
13143 @opindex m4a-single-only
13144 Generate code for the SH4a, in such a way that no double-precision
13145 floating point operations are used.
13146
13147 @item -m4a-single
13148 @opindex m4a-single
13149 Generate code for the SH4a assuming the floating-point unit is in
13150 single-precision mode by default.
13151
13152 @item -m4a
13153 @opindex m4a
13154 Generate code for the SH4a.
13155
13156 @item -m4al
13157 @opindex m4al
13158 Same as @option{-m4a-nofpu}, except that it implicitly passes
13159 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
13160 instructions at the moment.
13161
13162 @item -mb
13163 @opindex mb
13164 Compile code for the processor in big endian mode.
13165
13166 @item -ml
13167 @opindex ml
13168 Compile code for the processor in little endian mode.
13169
13170 @item -mdalign
13171 @opindex mdalign
13172 Align doubles at 64-bit boundaries.  Note that this changes the calling
13173 conventions, and thus some functions from the standard C library will
13174 not work unless you recompile it first with @option{-mdalign}.
13175
13176 @item -mrelax
13177 @opindex mrelax
13178 Shorten some address references at link time, when possible; uses the
13179 linker option @option{-relax}.
13180
13181 @item -mbigtable
13182 @opindex mbigtable
13183 Use 32-bit offsets in @code{switch} tables.  The default is to use
13184 16-bit offsets.
13185
13186 @item -mfmovd
13187 @opindex mfmovd
13188 Enable the use of the instruction @code{fmovd}.
13189
13190 @item -mhitachi
13191 @opindex mhitachi
13192 Comply with the calling conventions defined by Renesas.
13193
13194 @item -mrenesas
13195 @opindex mhitachi
13196 Comply with the calling conventions defined by Renesas.
13197
13198 @item -mno-renesas
13199 @opindex mhitachi
13200 Comply with the calling conventions defined for GCC before the Renesas
13201 conventions were available.  This option is the default for all
13202 targets of the SH toolchain except for @samp{sh-symbianelf}.
13203
13204 @item -mnomacsave
13205 @opindex mnomacsave
13206 Mark the @code{MAC} register as call-clobbered, even if
13207 @option{-mhitachi} is given.
13208
13209 @item -mieee
13210 @opindex mieee
13211 Increase IEEE-compliance of floating-point code.
13212 At the moment, this is equivalent to @option{-fno-finite-math-only}.
13213 When generating 16 bit SH opcodes, getting IEEE-conforming results for
13214 comparisons of NANs / infinities incurs extra overhead in every
13215 floating point comparison, therefore the default is set to
13216 @option{-ffinite-math-only}.
13217
13218 @item -minline-ic_invalidate
13219 @opindex minline-ic_invalidate
13220 Inline code to invalidate instruction cache entries after setting up
13221 nested function trampolines.
13222 This option has no effect if -musermode is in effect and the selected
13223 code generation option (e.g. -m4) does not allow the use of the icbi
13224 instruction.
13225 If the selected code generation option does not allow the use of the icbi
13226 instruction, and -musermode is not in effect, the inlined code will
13227 manipulate the instruction cache address array directly with an associative
13228 write.  This not only requires privileged mode, but it will also
13229 fail if the cache line had been mapped via the TLB and has become unmapped.
13230
13231 @item -misize
13232 @opindex misize
13233 Dump instruction size and location in the assembly code.
13234
13235 @item -mpadstruct
13236 @opindex mpadstruct
13237 This option is deprecated.  It pads structures to multiple of 4 bytes,
13238 which is incompatible with the SH ABI@.
13239
13240 @item -mspace
13241 @opindex mspace
13242 Optimize for space instead of speed.  Implied by @option{-Os}.
13243
13244 @item -mprefergot
13245 @opindex mprefergot
13246 When generating position-independent code, emit function calls using
13247 the Global Offset Table instead of the Procedure Linkage Table.
13248
13249 @item -musermode
13250 @opindex musermode
13251 Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
13252 if the inlined code would not work in user mode.
13253 This is the default when the target is @code{sh-*-linux*}.
13254
13255 @item -multcost=@var{number}
13256 @opindex multcost=@var{number}
13257 Set the cost to assume for a multiply insn.
13258
13259 @item -mdiv=@var{strategy}
13260 @opindex mdiv=@var{strategy}
13261 Set the division strategy to use for SHmedia code.  @var{strategy} must be
13262 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
13263 inv:call2, inv:fp .
13264 "fp" performs the operation in floating point.  This has a very high latency,
13265 but needs only a few instructions, so it might be a good choice if
13266 your code has enough easily exploitable ILP to allow the compiler to
13267 schedule the floating point instructions together with other instructions.
13268 Division by zero causes a floating point exception.
13269 "inv" uses integer operations to calculate the inverse of the divisor,
13270 and then multiplies the dividend with the inverse.  This strategy allows
13271 cse and hoisting of the inverse calculation.  Division by zero calculates
13272 an unspecified result, but does not trap.
13273 "inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
13274 have been found, or if the entire operation has been hoisted to the same
13275 place, the last stages of the inverse calculation are intertwined with the
13276 final multiply to reduce the overall latency, at the expense of using a few
13277 more instructions, and thus offering fewer scheduling opportunities with
13278 other code.
13279 "call" calls a library function that usually implements the inv:minlat
13280 strategy.
13281 This gives high code density for m5-*media-nofpu compilations.
13282 "call2" uses a different entry point of the same library function, where it
13283 assumes that a pointer to a lookup table has already been set up, which
13284 exposes the pointer load to cse / code hoisting optimizations.
13285 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
13286 code generation, but if the code stays unoptimized, revert to the "call",
13287 "call2", or "fp" strategies, respectively.  Note that the
13288 potentially-trapping side effect of division by zero is carried by a
13289 separate instruction, so it is possible that all the integer instructions
13290 are hoisted out, but the marker for the side effect stays where it is.
13291 A recombination to fp operations or a call is not possible in that case.
13292 "inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
13293 that the inverse calculation was nor separated from the multiply, they speed
13294 up division where the dividend fits into 20 bits (plus sign where applicable),
13295 by inserting a test to skip a number of operations in this case; this test
13296 slows down the case of larger dividends.  inv20u assumes the case of a such
13297 a small dividend to be unlikely, and inv20l assumes it to be likely.
13298
13299 @item -mdivsi3_libfunc=@var{name}
13300 @opindex mdivsi3_libfunc=@var{name}
13301 Set the name of the library function used for 32 bit signed division to
13302 @var{name}.  This only affect the name used in the call and inv:call
13303 division strategies, and the compiler will still expect the same
13304 sets of input/output/clobbered registers as if this option was not present.
13305
13306 @item -madjust-unroll
13307 @opindex madjust-unroll
13308 Throttle unrolling to avoid thrashing target registers.
13309 This option only has an effect if the gcc code base supports the
13310 TARGET_ADJUST_UNROLL_MAX target hook.
13311
13312 @item -mindexed-addressing
13313 @opindex mindexed-addressing
13314 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
13315 This is only safe if the hardware and/or OS implement 32 bit wrap-around
13316 semantics for the indexed addressing mode.  The architecture allows the
13317 implementation of processors with 64 bit MMU, which the OS could use to
13318 get 32 bit addressing, but since no current hardware implementation supports
13319 this or any other way to make the indexed addressing mode safe to use in
13320 the 32 bit ABI, the default is -mno-indexed-addressing.
13321
13322 @item -mgettrcost=@var{number}
13323 @opindex mgettrcost=@var{number}
13324 Set the cost assumed for the gettr instruction to @var{number}.
13325 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
13326
13327 @item -mpt-fixed
13328 @opindex mpt-fixed
13329 Assume pt* instructions won't trap.  This will generally generate better
13330 scheduled code, but is unsafe on current hardware.  The current architecture
13331 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
13332 This has the unintentional effect of making it unsafe to schedule ptabs /
13333 ptrel before a branch, or hoist it out of a loop.  For example,
13334 __do_global_ctors, a part of libgcc that runs constructors at program
13335 startup, calls functions in a list which is delimited by @minus{}1.  With the
13336 -mpt-fixed option, the ptabs will be done before testing against @minus{}1.
13337 That means that all the constructors will be run a bit quicker, but when
13338 the loop comes to the end of the list, the program crashes because ptabs
13339 loads @minus{}1 into a target register.  Since this option is unsafe for any
13340 hardware implementing the current architecture specification, the default
13341 is -mno-pt-fixed.  Unless the user specifies a specific cost with
13342 @option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
13343 this deters register allocation using target registers for storing
13344 ordinary integers.
13345
13346 @item -minvalid-symbols
13347 @opindex minvalid-symbols
13348 Assume symbols might be invalid.  Ordinary function symbols generated by
13349 the compiler will always be valid to load with movi/shori/ptabs or
13350 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
13351 to generate symbols that will cause ptabs / ptrel to trap.
13352 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
13353 It will then prevent cross-basic-block cse, hoisting and most scheduling
13354 of symbol loads.  The default is @option{-mno-invalid-symbols}.
13355 @end table
13356
13357 @node SPARC Options
13358 @subsection SPARC Options
13359 @cindex SPARC options
13360
13361 These @samp{-m} options are supported on the SPARC:
13362
13363 @table @gcctabopt
13364 @item -mno-app-regs
13365 @itemx -mapp-regs
13366 @opindex mno-app-regs
13367 @opindex mapp-regs
13368 Specify @option{-mapp-regs} to generate output using the global registers
13369 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
13370 is the default.
13371
13372 To be fully SVR4 ABI compliant at the cost of some performance loss,
13373 specify @option{-mno-app-regs}.  You should compile libraries and system
13374 software with this option.
13375
13376 @item -mfpu
13377 @itemx -mhard-float
13378 @opindex mfpu
13379 @opindex mhard-float
13380 Generate output containing floating point instructions.  This is the
13381 default.
13382
13383 @item -mno-fpu
13384 @itemx -msoft-float
13385 @opindex mno-fpu
13386 @opindex msoft-float
13387 Generate output containing library calls for floating point.
13388 @strong{Warning:} the requisite libraries are not available for all SPARC
13389 targets.  Normally the facilities of the machine's usual C compiler are
13390 used, but this cannot be done directly in cross-compilation.  You must make
13391 your own arrangements to provide suitable library functions for
13392 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
13393 @samp{sparclite-*-*} do provide software floating point support.
13394
13395 @option{-msoft-float} changes the calling convention in the output file;
13396 therefore, it is only useful if you compile @emph{all} of a program with
13397 this option.  In particular, you need to compile @file{libgcc.a}, the
13398 library that comes with GCC, with @option{-msoft-float} in order for
13399 this to work.
13400
13401 @item -mhard-quad-float
13402 @opindex mhard-quad-float
13403 Generate output containing quad-word (long double) floating point
13404 instructions.
13405
13406 @item -msoft-quad-float
13407 @opindex msoft-quad-float
13408 Generate output containing library calls for quad-word (long double)
13409 floating point instructions.  The functions called are those specified
13410 in the SPARC ABI@.  This is the default.
13411
13412 As of this writing, there are no SPARC implementations that have hardware
13413 support for the quad-word floating point instructions.  They all invoke
13414 a trap handler for one of these instructions, and then the trap handler
13415 emulates the effect of the instruction.  Because of the trap handler overhead,
13416 this is much slower than calling the ABI library routines.  Thus the
13417 @option{-msoft-quad-float} option is the default.
13418
13419 @item -mno-unaligned-doubles
13420 @itemx -munaligned-doubles
13421 @opindex mno-unaligned-doubles
13422 @opindex munaligned-doubles
13423 Assume that doubles have 8 byte alignment.  This is the default.
13424
13425 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
13426 alignment only if they are contained in another type, or if they have an
13427 absolute address.  Otherwise, it assumes they have 4 byte alignment.
13428 Specifying this option avoids some rare compatibility problems with code
13429 generated by other compilers.  It is not the default because it results
13430 in a performance loss, especially for floating point code.
13431
13432 @item -mno-faster-structs
13433 @itemx -mfaster-structs
13434 @opindex mno-faster-structs
13435 @opindex mfaster-structs
13436 With @option{-mfaster-structs}, the compiler assumes that structures
13437 should have 8 byte alignment.  This enables the use of pairs of
13438 @code{ldd} and @code{std} instructions for copies in structure
13439 assignment, in place of twice as many @code{ld} and @code{st} pairs.
13440 However, the use of this changed alignment directly violates the SPARC
13441 ABI@.  Thus, it's intended only for use on targets where the developer
13442 acknowledges that their resulting code will not be directly in line with
13443 the rules of the ABI@.
13444
13445 @item -mimpure-text
13446 @opindex mimpure-text
13447 @option{-mimpure-text}, used in addition to @option{-shared}, tells
13448 the compiler to not pass @option{-z text} to the linker when linking a
13449 shared object.  Using this option, you can link position-dependent
13450 code into a shared object.
13451
13452 @option{-mimpure-text} suppresses the ``relocations remain against
13453 allocatable but non-writable sections'' linker error message.
13454 However, the necessary relocations will trigger copy-on-write, and the
13455 shared object is not actually shared across processes.  Instead of
13456 using @option{-mimpure-text}, you should compile all source code with
13457 @option{-fpic} or @option{-fPIC}.
13458
13459 This option is only available on SunOS and Solaris.
13460
13461 @item -mcpu=@var{cpu_type}
13462 @opindex mcpu
13463 Set the instruction set, register set, and instruction scheduling parameters
13464 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
13465 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
13466 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
13467 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
13468 @samp{ultrasparc3}, and @samp{niagara}.
13469
13470 Default instruction scheduling parameters are used for values that select
13471 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
13472 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
13473
13474 Here is a list of each supported architecture and their supported
13475 implementations.
13476
13477 @smallexample
13478     v7:             cypress
13479     v8:             supersparc, hypersparc
13480     sparclite:      f930, f934, sparclite86x
13481     sparclet:       tsc701
13482     v9:             ultrasparc, ultrasparc3, niagara
13483 @end smallexample
13484
13485 By default (unless configured otherwise), GCC generates code for the V7
13486 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
13487 additionally optimizes it for the Cypress CY7C602 chip, as used in the
13488 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
13489 SPARCStation 1, 2, IPX etc.
13490
13491 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
13492 architecture.  The only difference from V7 code is that the compiler emits
13493 the integer multiply and integer divide instructions which exist in SPARC-V8
13494 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
13495 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
13496 2000 series.
13497
13498 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
13499 the SPARC architecture.  This adds the integer multiply, integer divide step
13500 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
13501 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
13502 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
13503 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
13504 MB86934 chip, which is the more recent SPARClite with FPU@.
13505
13506 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
13507 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
13508 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
13509 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
13510 optimizes it for the TEMIC SPARClet chip.
13511
13512 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
13513 architecture.  This adds 64-bit integer and floating-point move instructions,
13514 3 additional floating-point condition code registers and conditional move
13515 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
13516 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
13517 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
13518 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
13519 @option{-mcpu=niagara}, the compiler additionally optimizes it for
13520 Sun UltraSPARC T1 chips.
13521
13522 @item -mtune=@var{cpu_type}
13523 @opindex mtune
13524 Set the instruction scheduling parameters for machine type
13525 @var{cpu_type}, but do not set the instruction set or register set that the
13526 option @option{-mcpu=@var{cpu_type}} would.
13527
13528 The same values for @option{-mcpu=@var{cpu_type}} can be used for
13529 @option{-mtune=@var{cpu_type}}, but the only useful values are those
13530 that select a particular cpu implementation.  Those are @samp{cypress},
13531 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
13532 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
13533 @samp{ultrasparc3}, and @samp{niagara}.
13534
13535 @item -mv8plus
13536 @itemx -mno-v8plus
13537 @opindex mv8plus
13538 @opindex mno-v8plus
13539 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
13540 difference from the V8 ABI is that the global and out registers are
13541 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
13542 mode for all SPARC-V9 processors.
13543
13544 @item -mvis
13545 @itemx -mno-vis
13546 @opindex mvis
13547 @opindex mno-vis
13548 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
13549 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
13550 @end table
13551
13552 These @samp{-m} options are supported in addition to the above
13553 on SPARC-V9 processors in 64-bit environments:
13554
13555 @table @gcctabopt
13556 @item -mlittle-endian
13557 @opindex mlittle-endian
13558 Generate code for a processor running in little-endian mode.  It is only
13559 available for a few configurations and most notably not on Solaris and Linux.
13560
13561 @item -m32
13562 @itemx -m64
13563 @opindex m32
13564 @opindex m64
13565 Generate code for a 32-bit or 64-bit environment.
13566 The 32-bit environment sets int, long and pointer to 32 bits.
13567 The 64-bit environment sets int to 32 bits and long and pointer
13568 to 64 bits.
13569
13570 @item -mcmodel=medlow
13571 @opindex mcmodel=medlow
13572 Generate code for the Medium/Low code model: 64-bit addresses, programs
13573 must be linked in the low 32 bits of memory.  Programs can be statically
13574 or dynamically linked.
13575
13576 @item -mcmodel=medmid
13577 @opindex mcmodel=medmid
13578 Generate code for the Medium/Middle code model: 64-bit addresses, programs
13579 must be linked in the low 44 bits of memory, the text and data segments must
13580 be less than 2GB in size and the data segment must be located within 2GB of
13581 the text segment.
13582
13583 @item -mcmodel=medany
13584 @opindex mcmodel=medany
13585 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
13586 may be linked anywhere in memory, the text and data segments must be less
13587 than 2GB in size and the data segment must be located within 2GB of the
13588 text segment.
13589
13590 @item -mcmodel=embmedany
13591 @opindex mcmodel=embmedany
13592 Generate code for the Medium/Anywhere code model for embedded systems:
13593 64-bit addresses, the text and data segments must be less than 2GB in
13594 size, both starting anywhere in memory (determined at link time).  The
13595 global register %g4 points to the base of the data segment.  Programs
13596 are statically linked and PIC is not supported.
13597
13598 @item -mstack-bias
13599 @itemx -mno-stack-bias
13600 @opindex mstack-bias
13601 @opindex mno-stack-bias
13602 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
13603 frame pointer if present, are offset by @minus{}2047 which must be added back
13604 when making stack frame references.  This is the default in 64-bit mode.
13605 Otherwise, assume no such offset is present.
13606 @end table
13607
13608 These switches are supported in addition to the above on Solaris:
13609
13610 @table @gcctabopt
13611 @item -threads
13612 @opindex threads
13613 Add support for multithreading using the Solaris threads library.  This
13614 option sets flags for both the preprocessor and linker.  This option does
13615 not affect the thread safety of object code produced by the compiler or
13616 that of libraries supplied with it.
13617
13618 @item -pthreads
13619 @opindex pthreads
13620 Add support for multithreading using the POSIX threads library.  This
13621 option sets flags for both the preprocessor and linker.  This option does
13622 not affect the thread safety of object code produced  by the compiler or
13623 that of libraries supplied with it.
13624
13625 @item -pthread
13626 @opindex pthread
13627 This is a synonym for @option{-pthreads}.
13628 @end table
13629
13630 @node SPU Options
13631 @subsection SPU Options
13632 @cindex SPU options
13633
13634 These @samp{-m} options are supported on the SPU:
13635
13636 @table @gcctabopt
13637 @item -mwarn-reloc
13638 @itemx -merror-reloc
13639 @opindex mwarn-reloc
13640 @opindex merror-reloc
13641
13642 The loader for SPU does not handle dynamic relocations.  By default, GCC
13643 will give an error when it generates code that requires a dynamic
13644 relocation.  @option{-mno-error-reloc} disables the error,
13645 @option{-mwarn-reloc} will generate a warning instead.
13646
13647 @item -msafe-dma
13648 @itemx -munsafe-dma
13649 @opindex msafe-dma
13650 @opindex munsafe-dma
13651
13652 Instructions which initiate or test completion of DMA must not be
13653 reordered with respect to loads and stores of the memory which is being
13654 accessed.  Users typically address this problem using the volatile
13655 keyword, but that can lead to inefficient code in places where the
13656 memory is known to not change.  Rather than mark the memory as volatile
13657 we treat the DMA instructions as potentially effecting all memory.  With
13658 @option{-munsafe-dma} users must use the volatile keyword to protect
13659 memory accesses.
13660
13661 @item -mbranch-hints
13662 @opindex mbranch-hints
13663
13664 By default, GCC will generate a branch hint instruction to avoid
13665 pipeline stalls for always taken or probably taken branches.  A hint
13666 will not be generated closer than 8 instructions away from its branch.
13667 There is little reason to disable them, except for debugging purposes,
13668 or to make an object a little bit smaller.
13669
13670 @item -msmall-mem
13671 @itemx -mlarge-mem
13672 @opindex msmall-mem
13673 @opindex mlarge-mem
13674
13675 By default, GCC generates code assuming that addresses are never larger
13676 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
13677 a full 32 bit address.
13678
13679 @item -mstdmain
13680 @opindex mstdmain
13681
13682 By default, GCC links against startup code that assumes the SPU-style
13683 main function interface (which has an unconventional parameter list).
13684 With @option{-mstdmain}, GCC will link your program against startup
13685 code that assumes a C99-style interface to @code{main}, including a
13686 local copy of @code{argv} strings.
13687
13688 @item -mfixed-range=@var{register-range}
13689 @opindex mfixed-range
13690 Generate code treating the given register range as fixed registers.
13691 A fixed register is one that the register allocator can not use.  This is
13692 useful when compiling kernel code.  A register range is specified as
13693 two registers separated by a dash.  Multiple register ranges can be
13694 specified separated by a comma.
13695
13696 @end table
13697
13698 @node System V Options
13699 @subsection Options for System V
13700
13701 These additional options are available on System V Release 4 for
13702 compatibility with other compilers on those systems:
13703
13704 @table @gcctabopt
13705 @item -G
13706 @opindex G
13707 Create a shared object.
13708 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
13709
13710 @item -Qy
13711 @opindex Qy
13712 Identify the versions of each tool used by the compiler, in a
13713 @code{.ident} assembler directive in the output.
13714
13715 @item -Qn
13716 @opindex Qn
13717 Refrain from adding @code{.ident} directives to the output file (this is
13718 the default).
13719
13720 @item -YP,@var{dirs}
13721 @opindex YP
13722 Search the directories @var{dirs}, and no others, for libraries
13723 specified with @option{-l}.
13724
13725 @item -Ym,@var{dir}
13726 @opindex Ym
13727 Look in the directory @var{dir} to find the M4 preprocessor.
13728 The assembler uses this option.
13729 @c This is supposed to go with a -Yd for predefined M4 macro files, but
13730 @c the generic assembler that comes with Solaris takes just -Ym.
13731 @end table
13732
13733 @node TMS320C3x/C4x Options
13734 @subsection TMS320C3x/C4x Options
13735 @cindex TMS320C3x/C4x Options
13736
13737 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
13738
13739 @table @gcctabopt
13740
13741 @item -mcpu=@var{cpu_type}
13742 @opindex mcpu
13743 Set the instruction set, register set, and instruction scheduling
13744 parameters for machine type @var{cpu_type}.  Supported values for
13745 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
13746 @samp{c44}.  The default is @samp{c40} to generate code for the
13747 TMS320C40.
13748
13749 @item -mbig-memory
13750 @itemx -mbig
13751 @itemx -msmall-memory
13752 @itemx -msmall
13753 @opindex mbig-memory
13754 @opindex mbig
13755 @opindex msmall-memory
13756 @opindex msmall
13757 Generates code for the big or small memory model.  The small memory
13758 model assumed that all data fits into one 64K word page.  At run-time
13759 the data page (DP) register must be set to point to the 64K page
13760 containing the .bss and .data program sections.  The big memory model is
13761 the default and requires reloading of the DP register for every direct
13762 memory access.
13763
13764 @item -mbk
13765 @itemx -mno-bk
13766 @opindex mbk
13767 @opindex mno-bk
13768 Allow (disallow) allocation of general integer operands into the block
13769 count register BK@.
13770
13771 @item -mdb
13772 @itemx -mno-db
13773 @opindex mdb
13774 @opindex mno-db
13775 Enable (disable) generation of code using decrement and branch,
13776 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
13777 on the safe side, this is disabled for the C3x, since the maximum
13778 iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
13779 @math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
13780 that it can utilize the decrement and branch instruction, but will give
13781 up if there is more than one memory reference in the loop.  Thus a loop
13782 where the loop counter is decremented can generate slightly more
13783 efficient code, in cases where the RPTB instruction cannot be utilized.
13784
13785 @item -mdp-isr-reload
13786 @itemx -mparanoid
13787 @opindex mdp-isr-reload
13788 @opindex mparanoid
13789 Force the DP register to be saved on entry to an interrupt service
13790 routine (ISR), reloaded to point to the data section, and restored on
13791 exit from the ISR@.  This should not be required unless someone has
13792 violated the small memory model by modifying the DP register, say within
13793 an object library.
13794
13795 @item -mmpyi
13796 @itemx -mno-mpyi
13797 @opindex mmpyi
13798 @opindex mno-mpyi
13799 For the C3x use the 24-bit MPYI instruction for integer multiplies
13800 instead of a library call to guarantee 32-bit results.  Note that if one
13801 of the operands is a constant, then the multiplication will be performed
13802 using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
13803 then squaring operations are performed inline instead of a library call.
13804
13805 @item -mfast-fix
13806 @itemx -mno-fast-fix
13807 @opindex mfast-fix
13808 @opindex mno-fast-fix
13809 The C3x/C4x FIX instruction to convert a floating point value to an
13810 integer value chooses the nearest integer less than or equal to the
13811 floating point value rather than to the nearest integer.  Thus if the
13812 floating point number is negative, the result will be incorrectly
13813 truncated an additional code is necessary to detect and correct this
13814 case.  This option can be used to disable generation of the additional
13815 code required to correct the result.
13816
13817 @item -mrptb
13818 @itemx -mno-rptb
13819 @opindex mrptb
13820 @opindex mno-rptb
13821 Enable (disable) generation of repeat block sequences using the RPTB
13822 instruction for zero overhead looping.  The RPTB construct is only used
13823 for innermost loops that do not call functions or jump across the loop
13824 boundaries.  There is no advantage having nested RPTB loops due to the
13825 overhead required to save and restore the RC, RS, and RE registers.
13826 This is enabled by default with @option{-O2}.
13827
13828 @item -mrpts=@var{count}
13829 @itemx -mno-rpts
13830 @opindex mrpts
13831 @opindex mno-rpts
13832 Enable (disable) the use of the single instruction repeat instruction
13833 RPTS@.  If a repeat block contains a single instruction, and the loop
13834 count can be guaranteed to be less than the value @var{count}, GCC will
13835 emit a RPTS instruction instead of a RPTB@.  If no value is specified,
13836 then a RPTS will be emitted even if the loop count cannot be determined
13837 at compile time.  Note that the repeated instruction following RPTS does
13838 not have to be reloaded from memory each iteration, thus freeing up the
13839 CPU buses for operands.  However, since interrupts are blocked by this
13840 instruction, it is disabled by default.
13841
13842 @item -mloop-unsigned
13843 @itemx -mno-loop-unsigned
13844 @opindex mloop-unsigned
13845 @opindex mno-loop-unsigned
13846 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
13847 is @math{2^{31} + 1} since these instructions test if the iteration count is
13848 negative to terminate the loop.  If the iteration count is unsigned
13849 there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
13850 exceeded.  This switch allows an unsigned iteration count.
13851
13852 @item -mti
13853 @opindex mti
13854 Try to emit an assembler syntax that the TI assembler (asm30) is happy
13855 with.  This also enforces compatibility with the API employed by the TI
13856 C3x C compiler.  For example, long doubles are passed as structures
13857 rather than in floating point registers.
13858
13859 @item -mregparm
13860 @itemx -mmemparm
13861 @opindex mregparm
13862 @opindex mmemparm
13863 Generate code that uses registers (stack) for passing arguments to functions.
13864 By default, arguments are passed in registers where possible rather
13865 than by pushing arguments on to the stack.
13866
13867 @item -mparallel-insns
13868 @itemx -mno-parallel-insns
13869 @opindex mparallel-insns
13870 @opindex mno-parallel-insns
13871 Allow the generation of parallel instructions.  This is enabled by
13872 default with @option{-O2}.
13873
13874 @item -mparallel-mpy
13875 @itemx -mno-parallel-mpy
13876 @opindex mparallel-mpy
13877 @opindex mno-parallel-mpy
13878 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
13879 provided @option{-mparallel-insns} is also specified.  These instructions have
13880 tight register constraints which can pessimize the code generation
13881 of large functions.
13882
13883 @end table
13884
13885 @node V850 Options
13886 @subsection V850 Options
13887 @cindex V850 Options
13888
13889 These @samp{-m} options are defined for V850 implementations:
13890
13891 @table @gcctabopt
13892 @item -mlong-calls
13893 @itemx -mno-long-calls
13894 @opindex mlong-calls
13895 @opindex mno-long-calls
13896 Treat all calls as being far away (near).  If calls are assumed to be
13897 far away, the compiler will always load the functions address up into a
13898 register, and call indirect through the pointer.
13899
13900 @item -mno-ep
13901 @itemx -mep
13902 @opindex mno-ep
13903 @opindex mep
13904 Do not optimize (do optimize) basic blocks that use the same index
13905 pointer 4 or more times to copy pointer into the @code{ep} register, and
13906 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
13907 option is on by default if you optimize.
13908
13909 @item -mno-prolog-function
13910 @itemx -mprolog-function
13911 @opindex mno-prolog-function
13912 @opindex mprolog-function
13913 Do not use (do use) external functions to save and restore registers
13914 at the prologue and epilogue of a function.  The external functions
13915 are slower, but use less code space if more than one function saves
13916 the same number of registers.  The @option{-mprolog-function} option
13917 is on by default if you optimize.
13918
13919 @item -mspace
13920 @opindex mspace
13921 Try to make the code as small as possible.  At present, this just turns
13922 on the @option{-mep} and @option{-mprolog-function} options.
13923
13924 @item -mtda=@var{n}
13925 @opindex mtda
13926 Put static or global variables whose size is @var{n} bytes or less into
13927 the tiny data area that register @code{ep} points to.  The tiny data
13928 area can hold up to 256 bytes in total (128 bytes for byte references).
13929
13930 @item -msda=@var{n}
13931 @opindex msda
13932 Put static or global variables whose size is @var{n} bytes or less into
13933 the small data area that register @code{gp} points to.  The small data
13934 area can hold up to 64 kilobytes.
13935
13936 @item -mzda=@var{n}
13937 @opindex mzda
13938 Put static or global variables whose size is @var{n} bytes or less into
13939 the first 32 kilobytes of memory.
13940
13941 @item -mv850
13942 @opindex mv850
13943 Specify that the target processor is the V850.
13944
13945 @item -mbig-switch
13946 @opindex mbig-switch
13947 Generate code suitable for big switch tables.  Use this option only if
13948 the assembler/linker complain about out of range branches within a switch
13949 table.
13950
13951 @item -mapp-regs
13952 @opindex mapp-regs
13953 This option will cause r2 and r5 to be used in the code generated by
13954 the compiler.  This setting is the default.
13955
13956 @item -mno-app-regs
13957 @opindex mno-app-regs
13958 This option will cause r2 and r5 to be treated as fixed registers.
13959
13960 @item -mv850e1
13961 @opindex mv850e1
13962 Specify that the target processor is the V850E1.  The preprocessor
13963 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
13964 this option is used.
13965
13966 @item -mv850e
13967 @opindex mv850e
13968 Specify that the target processor is the V850E@.  The preprocessor
13969 constant @samp{__v850e__} will be defined if this option is used.
13970
13971 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
13972 are defined then a default target processor will be chosen and the
13973 relevant @samp{__v850*__} preprocessor constant will be defined.
13974
13975 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
13976 defined, regardless of which processor variant is the target.
13977
13978 @item -mdisable-callt
13979 @opindex mdisable-callt
13980 This option will suppress generation of the CALLT instruction for the
13981 v850e and v850e1 flavors of the v850 architecture.  The default is
13982 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
13983
13984 @end table
13985
13986 @node VAX Options
13987 @subsection VAX Options
13988 @cindex VAX options
13989
13990 These @samp{-m} options are defined for the VAX:
13991
13992 @table @gcctabopt
13993 @item -munix
13994 @opindex munix
13995 Do not output certain jump instructions (@code{aobleq} and so on)
13996 that the Unix assembler for the VAX cannot handle across long
13997 ranges.
13998
13999 @item -mgnu
14000 @opindex mgnu
14001 Do output those jump instructions, on the assumption that you
14002 will assemble with the GNU assembler.
14003
14004 @item -mg
14005 @opindex mg
14006 Output code for g-format floating point numbers instead of d-format.
14007 @end table
14008
14009 @node VxWorks Options
14010 @subsection VxWorks Options
14011 @cindex VxWorks Options
14012
14013 The options in this section are defined for all VxWorks targets.
14014 Options specific to the target hardware are listed with the other
14015 options for that target.
14016
14017 @table @gcctabopt
14018 @item -mrtp
14019 @opindex mrtp
14020 GCC can generate code for both VxWorks kernels and real time processes
14021 (RTPs).  This option switches from the former to the latter.  It also
14022 defines the preprocessor macro @code{__RTP__}.
14023
14024 @item -non-static
14025 @opindex non-static
14026 Link an RTP executable against shared libraries rather than static
14027 libraries.  The options @option{-static} and @option{-shared} can
14028 also be used for RTPs (@pxref{Link Options}); @option{-static}
14029 is the default.
14030
14031 @item -Bstatic
14032 @itemx -Bdynamic
14033 @opindex Bstatic
14034 @opindex Bdynamic
14035 These options are passed down to the linker.  They are defined for
14036 compatibility with Diab.
14037
14038 @item -Xbind-lazy
14039 @opindex Xbind-lazy
14040 Enable lazy binding of function calls.  This option is equivalent to
14041 @option{-Wl,-z,now} and is defined for compatibility with Diab.
14042
14043 @item -Xbind-now
14044 @opindex Xbind-now
14045 Disable lazy binding of function calls.  This option is the default and
14046 is defined for compatibility with Diab.
14047 @end table
14048
14049 @node x86-64 Options
14050 @subsection x86-64 Options
14051 @cindex x86-64 options
14052
14053 These are listed under @xref{i386 and x86-64 Options}.
14054
14055 @node Xstormy16 Options
14056 @subsection Xstormy16 Options
14057 @cindex Xstormy16 Options
14058
14059 These options are defined for Xstormy16:
14060
14061 @table @gcctabopt
14062 @item -msim
14063 @opindex msim
14064 Choose startup files and linker script suitable for the simulator.
14065 @end table
14066
14067 @node Xtensa Options
14068 @subsection Xtensa Options
14069 @cindex Xtensa Options
14070
14071 These options are supported for Xtensa targets:
14072
14073 @table @gcctabopt
14074 @item -mconst16
14075 @itemx -mno-const16
14076 @opindex mconst16
14077 @opindex mno-const16
14078 Enable or disable use of @code{CONST16} instructions for loading
14079 constant values.  The @code{CONST16} instruction is currently not a
14080 standard option from Tensilica.  When enabled, @code{CONST16}
14081 instructions are always used in place of the standard @code{L32R}
14082 instructions.  The use of @code{CONST16} is enabled by default only if
14083 the @code{L32R} instruction is not available.
14084
14085 @item -mfused-madd
14086 @itemx -mno-fused-madd
14087 @opindex mfused-madd
14088 @opindex mno-fused-madd
14089 Enable or disable use of fused multiply/add and multiply/subtract
14090 instructions in the floating-point option.  This has no effect if the
14091 floating-point option is not also enabled.  Disabling fused multiply/add
14092 and multiply/subtract instructions forces the compiler to use separate
14093 instructions for the multiply and add/subtract operations.  This may be
14094 desirable in some cases where strict IEEE 754-compliant results are
14095 required: the fused multiply add/subtract instructions do not round the
14096 intermediate result, thereby producing results with @emph{more} bits of
14097 precision than specified by the IEEE standard.  Disabling fused multiply
14098 add/subtract instructions also ensures that the program output is not
14099 sensitive to the compiler's ability to combine multiply and add/subtract
14100 operations.
14101
14102 @item -mtext-section-literals
14103 @itemx -mno-text-section-literals
14104 @opindex mtext-section-literals
14105 @opindex mno-text-section-literals
14106 Control the treatment of literal pools.  The default is
14107 @option{-mno-text-section-literals}, which places literals in a separate
14108 section in the output file.  This allows the literal pool to be placed
14109 in a data RAM/ROM, and it also allows the linker to combine literal
14110 pools from separate object files to remove redundant literals and
14111 improve code size.  With @option{-mtext-section-literals}, the literals
14112 are interspersed in the text section in order to keep them as close as
14113 possible to their references.  This may be necessary for large assembly
14114 files.
14115
14116 @item -mtarget-align
14117 @itemx -mno-target-align
14118 @opindex mtarget-align
14119 @opindex mno-target-align
14120 When this option is enabled, GCC instructs the assembler to
14121 automatically align instructions to reduce branch penalties at the
14122 expense of some code density.  The assembler attempts to widen density
14123 instructions to align branch targets and the instructions following call
14124 instructions.  If there are not enough preceding safe density
14125 instructions to align a target, no widening will be performed.  The
14126 default is @option{-mtarget-align}.  These options do not affect the
14127 treatment of auto-aligned instructions like @code{LOOP}, which the
14128 assembler will always align, either by widening density instructions or
14129 by inserting no-op instructions.
14130
14131 @item -mlongcalls
14132 @itemx -mno-longcalls
14133 @opindex mlongcalls
14134 @opindex mno-longcalls
14135 When this option is enabled, GCC instructs the assembler to translate
14136 direct calls to indirect calls unless it can determine that the target
14137 of a direct call is in the range allowed by the call instruction.  This
14138 translation typically occurs for calls to functions in other source
14139 files.  Specifically, the assembler translates a direct @code{CALL}
14140 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
14141 The default is @option{-mno-longcalls}.  This option should be used in
14142 programs where the call target can potentially be out of range.  This
14143 option is implemented in the assembler, not the compiler, so the
14144 assembly code generated by GCC will still show direct call
14145 instructions---look at the disassembled object code to see the actual
14146 instructions.  Note that the assembler will use an indirect call for
14147 every cross-file call, not just those that really will be out of range.
14148 @end table
14149
14150 @node zSeries Options
14151 @subsection zSeries Options
14152 @cindex zSeries options
14153
14154 These are listed under @xref{S/390 and zSeries Options}.
14155
14156 @node Code Gen Options
14157 @section Options for Code Generation Conventions
14158 @cindex code generation conventions
14159 @cindex options, code generation
14160 @cindex run-time options
14161
14162 These machine-independent options control the interface conventions
14163 used in code generation.
14164
14165 Most of them have both positive and negative forms; the negative form
14166 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
14167 one of the forms is listed---the one which is not the default.  You
14168 can figure out the other form by either removing @samp{no-} or adding
14169 it.
14170
14171 @table @gcctabopt
14172 @item -fbounds-check
14173 @opindex fbounds-check
14174 For front-ends that support it, generate additional code to check that
14175 indices used to access arrays are within the declared range.  This is
14176 currently only supported by the Java and Fortran front-ends, where
14177 this option defaults to true and false respectively.
14178
14179 @item -ftrapv
14180 @opindex ftrapv
14181 This option generates traps for signed overflow on addition, subtraction,
14182 multiplication operations.
14183
14184 @item -fwrapv
14185 @opindex fwrapv
14186 This option instructs the compiler to assume that signed arithmetic
14187 overflow of addition, subtraction and multiplication wraps around
14188 using twos-complement representation.  This flag enables some optimizations
14189 and disables others.  This option is enabled by default for the Java
14190 front-end, as required by the Java language specification.
14191
14192 @item -fexceptions
14193 @opindex fexceptions
14194 Enable exception handling.  Generates extra code needed to propagate
14195 exceptions.  For some targets, this implies GCC will generate frame
14196 unwind information for all functions, which can produce significant data
14197 size overhead, although it does not affect execution.  If you do not
14198 specify this option, GCC will enable it by default for languages like
14199 C++ which normally require exception handling, and disable it for
14200 languages like C that do not normally require it.  However, you may need
14201 to enable this option when compiling C code that needs to interoperate
14202 properly with exception handlers written in C++.  You may also wish to
14203 disable this option if you are compiling older C++ programs that don't
14204 use exception handling.
14205
14206 @item -fnon-call-exceptions
14207 @opindex fnon-call-exceptions
14208 Generate code that allows trapping instructions to throw exceptions.
14209 Note that this requires platform-specific runtime support that does
14210 not exist everywhere.  Moreover, it only allows @emph{trapping}
14211 instructions to throw exceptions, i.e.@: memory references or floating
14212 point instructions.  It does not allow exceptions to be thrown from
14213 arbitrary signal handlers such as @code{SIGALRM}.
14214
14215 @item -funwind-tables
14216 @opindex funwind-tables
14217 Similar to @option{-fexceptions}, except that it will just generate any needed
14218 static data, but will not affect the generated code in any other way.
14219 You will normally not enable this option; instead, a language processor
14220 that needs this handling would enable it on your behalf.
14221
14222 @item -fasynchronous-unwind-tables
14223 @opindex fasynchronous-unwind-tables
14224 Generate unwind table in dwarf2 format, if supported by target machine.  The
14225 table is exact at each instruction boundary, so it can be used for stack
14226 unwinding from asynchronous events (such as debugger or garbage collector).
14227
14228 @item -fpcc-struct-return
14229 @opindex fpcc-struct-return
14230 Return ``short'' @code{struct} and @code{union} values in memory like
14231 longer ones, rather than in registers.  This convention is less
14232 efficient, but it has the advantage of allowing intercallability between
14233 GCC-compiled files and files compiled with other compilers, particularly
14234 the Portable C Compiler (pcc).
14235
14236 The precise convention for returning structures in memory depends
14237 on the target configuration macros.
14238
14239 Short structures and unions are those whose size and alignment match
14240 that of some integer type.
14241
14242 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
14243 switch is not binary compatible with code compiled with the
14244 @option{-freg-struct-return} switch.
14245 Use it to conform to a non-default application binary interface.
14246
14247 @item -freg-struct-return
14248 @opindex freg-struct-return
14249 Return @code{struct} and @code{union} values in registers when possible.
14250 This is more efficient for small structures than
14251 @option{-fpcc-struct-return}.
14252
14253 If you specify neither @option{-fpcc-struct-return} nor
14254 @option{-freg-struct-return}, GCC defaults to whichever convention is
14255 standard for the target.  If there is no standard convention, GCC
14256 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
14257 the principal compiler.  In those cases, we can choose the standard, and
14258 we chose the more efficient register return alternative.
14259
14260 @strong{Warning:} code compiled with the @option{-freg-struct-return}
14261 switch is not binary compatible with code compiled with the
14262 @option{-fpcc-struct-return} switch.
14263 Use it to conform to a non-default application binary interface.
14264
14265 @item -fshort-enums
14266 @opindex fshort-enums
14267 Allocate to an @code{enum} type only as many bytes as it needs for the
14268 declared range of possible values.  Specifically, the @code{enum} type
14269 will be equivalent to the smallest integer type which has enough room.
14270
14271 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
14272 code that is not binary compatible with code generated without that switch.
14273 Use it to conform to a non-default application binary interface.
14274
14275 @item -fshort-double
14276 @opindex fshort-double
14277 Use the same size for @code{double} as for @code{float}.
14278
14279 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
14280 code that is not binary compatible with code generated without that switch.
14281 Use it to conform to a non-default application binary interface.
14282
14283 @item -fshort-wchar
14284 @opindex fshort-wchar
14285 Override the underlying type for @samp{wchar_t} to be @samp{short
14286 unsigned int} instead of the default for the target.  This option is
14287 useful for building programs to run under WINE@.
14288
14289 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
14290 code that is not binary compatible with code generated without that switch.
14291 Use it to conform to a non-default application binary interface.
14292
14293 @item -fno-common
14294 @opindex fno-common
14295 In C, allocate even uninitialized global variables in the data section of the
14296 object file, rather than generating them as common blocks.  This has the
14297 effect that if the same variable is declared (without @code{extern}) in
14298 two different compilations, you will get an error when you link them.
14299 The only reason this might be useful is if you wish to verify that the
14300 program will work on other systems which always work this way.
14301
14302 @item -fno-ident
14303 @opindex fno-ident
14304 Ignore the @samp{#ident} directive.
14305
14306 @item -finhibit-size-directive
14307 @opindex finhibit-size-directive
14308 Don't output a @code{.size} assembler directive, or anything else that
14309 would cause trouble if the function is split in the middle, and the
14310 two halves are placed at locations far apart in memory.  This option is
14311 used when compiling @file{crtstuff.c}; you should not need to use it
14312 for anything else.
14313
14314 @item -fverbose-asm
14315 @opindex fverbose-asm
14316 Put extra commentary information in the generated assembly code to
14317 make it more readable.  This option is generally only of use to those
14318 who actually need to read the generated assembly code (perhaps while
14319 debugging the compiler itself).
14320
14321 @option{-fno-verbose-asm}, the default, causes the
14322 extra information to be omitted and is useful when comparing two assembler
14323 files.
14324
14325 @item -frecord-gcc-switches
14326 @opindex frecord-gcc-switches
14327 This switch causes the command line that was used to invoke the
14328 compiler to be recorded into the object file that is being created.
14329 This switch is only implemented on some targets and the exact format
14330 of the recording is target and binary file format dependent, but it
14331 usually takes the form of a section containing ASCII text.  This
14332 switch is related to the @option{-fverbose-asm} switch, but that
14333 switch only records information in the assembler output file as
14334 comments, so it never reaches the object file.
14335
14336 @item -fpic
14337 @opindex fpic
14338 @cindex global offset table
14339 @cindex PIC
14340 Generate position-independent code (PIC) suitable for use in a shared
14341 library, if supported for the target machine.  Such code accesses all
14342 constant addresses through a global offset table (GOT)@.  The dynamic
14343 loader resolves the GOT entries when the program starts (the dynamic
14344 loader is not part of GCC; it is part of the operating system).  If
14345 the GOT size for the linked executable exceeds a machine-specific
14346 maximum size, you get an error message from the linker indicating that
14347 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
14348 instead.  (These maximums are 8k on the SPARC and 32k
14349 on the m68k and RS/6000.  The 386 has no such limit.)
14350
14351 Position-independent code requires special support, and therefore works
14352 only on certain machines.  For the 386, GCC supports PIC for System V
14353 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
14354 position-independent.
14355
14356 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
14357 are defined to 1.
14358
14359 @item -fPIC
14360 @opindex fPIC
14361 If supported for the target machine, emit position-independent code,
14362 suitable for dynamic linking and avoiding any limit on the size of the
14363 global offset table.  This option makes a difference on the m68k,
14364 PowerPC and SPARC@.
14365
14366 Position-independent code requires special support, and therefore works
14367 only on certain machines.
14368
14369 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
14370 are defined to 2.
14371
14372 @item -fpie
14373 @itemx -fPIE
14374 @opindex fpie
14375 @opindex fPIE
14376 These options are similar to @option{-fpic} and @option{-fPIC}, but
14377 generated position independent code can be only linked into executables.
14378 Usually these options are used when @option{-pie} GCC option will be
14379 used during linking.
14380
14381 @option{-fpie} and @option{-fPIE} both define the macros
14382 @code{__pie__} and @code{__PIE__}.  The macros have the value 1
14383 for @option{-fpie} and 2 for @option{-fPIE}.
14384
14385 @item -fno-jump-tables
14386 @opindex fno-jump-tables
14387 Do not use jump tables for switch statements even where it would be
14388 more efficient than other code generation strategies.  This option is
14389 of use in conjunction with @option{-fpic} or @option{-fPIC} for
14390 building code which forms part of a dynamic linker and cannot
14391 reference the address of a jump table.  On some targets, jump tables
14392 do not require a GOT and this option is not needed.
14393
14394 @item -ffixed-@var{reg}
14395 @opindex ffixed
14396 Treat the register named @var{reg} as a fixed register; generated code
14397 should never refer to it (except perhaps as a stack pointer, frame
14398 pointer or in some other fixed role).
14399
14400 @var{reg} must be the name of a register.  The register names accepted
14401 are machine-specific and are defined in the @code{REGISTER_NAMES}
14402 macro in the machine description macro file.
14403
14404 This flag does not have a negative form, because it specifies a
14405 three-way choice.
14406
14407 @item -fcall-used-@var{reg}
14408 @opindex fcall-used
14409 Treat the register named @var{reg} as an allocable register that is
14410 clobbered by function calls.  It may be allocated for temporaries or
14411 variables that do not live across a call.  Functions compiled this way
14412 will not save and restore the register @var{reg}.
14413
14414 It is an error to used this flag with the frame pointer or stack pointer.
14415 Use of this flag for other registers that have fixed pervasive roles in
14416 the machine's execution model will produce disastrous results.
14417
14418 This flag does not have a negative form, because it specifies a
14419 three-way choice.
14420
14421 @item -fcall-saved-@var{reg}
14422 @opindex fcall-saved
14423 Treat the register named @var{reg} as an allocable register saved by
14424 functions.  It may be allocated even for temporaries or variables that
14425 live across a call.  Functions compiled this way will save and restore
14426 the register @var{reg} if they use it.
14427
14428 It is an error to used this flag with the frame pointer or stack pointer.
14429 Use of this flag for other registers that have fixed pervasive roles in
14430 the machine's execution model will produce disastrous results.
14431
14432 A different sort of disaster will result from the use of this flag for
14433 a register in which function values may be returned.
14434
14435 This flag does not have a negative form, because it specifies a
14436 three-way choice.
14437
14438 @item -fpack-struct[=@var{n}]
14439 @opindex fpack-struct
14440 Without a value specified, pack all structure members together without
14441 holes.  When a value is specified (which must be a small power of two), pack
14442 structure members according to this value, representing the maximum
14443 alignment (that is, objects with default alignment requirements larger than
14444 this will be output potentially unaligned at the next fitting location.
14445
14446 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
14447 code that is not binary compatible with code generated without that switch.
14448 Additionally, it makes the code suboptimal.
14449 Use it to conform to a non-default application binary interface.
14450
14451 @item -finstrument-functions
14452 @opindex finstrument-functions
14453 Generate instrumentation calls for entry and exit to functions.  Just
14454 after function entry and just before function exit, the following
14455 profiling functions will be called with the address of the current
14456 function and its call site.  (On some platforms,
14457 @code{__builtin_return_address} does not work beyond the current
14458 function, so the call site information may not be available to the
14459 profiling functions otherwise.)
14460
14461 @smallexample
14462 void __cyg_profile_func_enter (void *this_fn,
14463                                void *call_site);
14464 void __cyg_profile_func_exit  (void *this_fn,
14465                                void *call_site);
14466 @end smallexample
14467
14468 The first argument is the address of the start of the current function,
14469 which may be looked up exactly in the symbol table.
14470
14471 This instrumentation is also done for functions expanded inline in other
14472 functions.  The profiling calls will indicate where, conceptually, the
14473 inline function is entered and exited.  This means that addressable
14474 versions of such functions must be available.  If all your uses of a
14475 function are expanded inline, this may mean an additional expansion of
14476 code size.  If you use @samp{extern inline} in your C code, an
14477 addressable version of such functions must be provided.  (This is
14478 normally the case anyways, but if you get lucky and the optimizer always
14479 expands the functions inline, you might have gotten away without
14480 providing static copies.)
14481
14482 A function may be given the attribute @code{no_instrument_function}, in
14483 which case this instrumentation will not be done.  This can be used, for
14484 example, for the profiling functions listed above, high-priority
14485 interrupt routines, and any functions from which the profiling functions
14486 cannot safely be called (perhaps signal handlers, if the profiling
14487 routines generate output or allocate memory).
14488
14489 @item -fstack-check
14490 @opindex fstack-check
14491 Generate code to verify that you do not go beyond the boundary of the
14492 stack.  You should specify this flag if you are running in an
14493 environment with multiple threads, but only rarely need to specify it in
14494 a single-threaded environment since stack overflow is automatically
14495 detected on nearly all systems if there is only one stack.
14496
14497 Note that this switch does not actually cause checking to be done; the
14498 operating system must do that.  The switch causes generation of code
14499 to ensure that the operating system sees the stack being extended.
14500
14501 @item -fstack-limit-register=@var{reg}
14502 @itemx -fstack-limit-symbol=@var{sym}
14503 @itemx -fno-stack-limit
14504 @opindex fstack-limit-register
14505 @opindex fstack-limit-symbol
14506 @opindex fno-stack-limit
14507 Generate code to ensure that the stack does not grow beyond a certain value,
14508 either the value of a register or the address of a symbol.  If the stack
14509 would grow beyond the value, a signal is raised.  For most targets,
14510 the signal is raised before the stack overruns the boundary, so
14511 it is possible to catch the signal without taking special precautions.
14512
14513 For instance, if the stack starts at absolute address @samp{0x80000000}
14514 and grows downwards, you can use the flags
14515 @option{-fstack-limit-symbol=__stack_limit} and
14516 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
14517 of 128KB@.  Note that this may only work with the GNU linker.
14518
14519 @cindex aliasing of parameters
14520 @cindex parameters, aliased
14521 @item -fargument-alias
14522 @itemx -fargument-noalias
14523 @itemx -fargument-noalias-global
14524 @itemx -fargument-noalias-anything
14525 @opindex fargument-alias
14526 @opindex fargument-noalias
14527 @opindex fargument-noalias-global
14528 @opindex fargument-noalias-anything
14529 Specify the possible relationships among parameters and between
14530 parameters and global data.
14531
14532 @option{-fargument-alias} specifies that arguments (parameters) may
14533 alias each other and may alias global storage.@*
14534 @option{-fargument-noalias} specifies that arguments do not alias
14535 each other, but may alias global storage.@*
14536 @option{-fargument-noalias-global} specifies that arguments do not
14537 alias each other and do not alias global storage.
14538 @option{-fargument-noalias-anything} specifies that arguments do not
14539 alias any other storage.
14540
14541 Each language will automatically use whatever option is required by
14542 the language standard.  You should not need to use these options yourself.
14543
14544 @item -fleading-underscore
14545 @opindex fleading-underscore
14546 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
14547 change the way C symbols are represented in the object file.  One use
14548 is to help link with legacy assembly code.
14549
14550 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
14551 generate code that is not binary compatible with code generated without that
14552 switch.  Use it to conform to a non-default application binary interface.
14553 Not all targets provide complete support for this switch.
14554
14555 @item -ftls-model=@var{model}
14556 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
14557 The @var{model} argument should be one of @code{global-dynamic},
14558 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
14559
14560 The default without @option{-fpic} is @code{initial-exec}; with
14561 @option{-fpic} the default is @code{global-dynamic}.
14562
14563 @item -fvisibility=@var{default|internal|hidden|protected}
14564 @opindex fvisibility
14565 Set the default ELF image symbol visibility to the specified option---all
14566 symbols will be marked with this unless overridden within the code.
14567 Using this feature can very substantially improve linking and
14568 load times of shared object libraries, produce more optimized
14569 code, provide near-perfect API export and prevent symbol clashes.
14570 It is @strong{strongly} recommended that you use this in any shared objects
14571 you distribute.
14572
14573 Despite the nomenclature, @code{default} always means public ie;
14574 available to be linked against from outside the shared object.
14575 @code{protected} and @code{internal} are pretty useless in real-world
14576 usage so the only other commonly used option will be @code{hidden}.
14577 The default if @option{-fvisibility} isn't specified is
14578 @code{default}, i.e., make every
14579 symbol public---this causes the same behavior as previous versions of
14580 GCC@.
14581
14582 A good explanation of the benefits offered by ensuring ELF
14583 symbols have the correct visibility is given by ``How To Write
14584 Shared Libraries'' by Ulrich Drepper (which can be found at
14585 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
14586 solution made possible by this option to marking things hidden when
14587 the default is public is to make the default hidden and mark things
14588 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
14589 and @code{__attribute__ ((visibility("default")))} instead of
14590 @code{__declspec(dllexport)} you get almost identical semantics with
14591 identical syntax.  This is a great boon to those working with
14592 cross-platform projects.
14593
14594 For those adding visibility support to existing code, you may find
14595 @samp{#pragma GCC visibility} of use.  This works by you enclosing
14596 the declarations you wish to set visibility for with (for example)
14597 @samp{#pragma GCC visibility push(hidden)} and
14598 @samp{#pragma GCC visibility pop}.
14599 Bear in mind that symbol visibility should be viewed @strong{as
14600 part of the API interface contract} and thus all new code should
14601 always specify visibility when it is not the default ie; declarations
14602 only for use within the local DSO should @strong{always} be marked explicitly
14603 as hidden as so to avoid PLT indirection overheads---making this
14604 abundantly clear also aids readability and self-documentation of the code.
14605 Note that due to ISO C++ specification requirements, operator new and
14606 operator delete must always be of default visibility.
14607
14608 Be aware that headers from outside your project, in particular system
14609 headers and headers from any other library you use, may not be
14610 expecting to be compiled with visibility other than the default.  You
14611 may need to explicitly say @samp{#pragma GCC visibility push(default)}
14612 before including any such headers.
14613
14614 @samp{extern} declarations are not affected by @samp{-fvisibility}, so
14615 a lot of code can be recompiled with @samp{-fvisibility=hidden} with
14616 no modifications.  However, this means that calls to @samp{extern}
14617 functions with no explicit visibility will use the PLT, so it is more
14618 effective to use @samp{__attribute ((visibility))} and/or
14619 @samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
14620 declarations should be treated as hidden.
14621
14622 Note that @samp{-fvisibility} does affect C++ vague linkage
14623 entities. This means that, for instance, an exception class that will
14624 be thrown between DSOs must be explicitly marked with default
14625 visibility so that the @samp{type_info} nodes will be unified between
14626 the DSOs.
14627
14628 An overview of these techniques, their benefits and how to use them
14629 is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
14630
14631 @end table
14632
14633 @c man end
14634
14635 @node Environment Variables
14636 @section Environment Variables Affecting GCC
14637 @cindex environment variables
14638
14639 @c man begin ENVIRONMENT
14640 This section describes several environment variables that affect how GCC
14641 operates.  Some of them work by specifying directories or prefixes to use
14642 when searching for various kinds of files.  Some are used to specify other
14643 aspects of the compilation environment.
14644
14645 Note that you can also specify places to search using options such as
14646 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
14647 take precedence over places specified using environment variables, which
14648 in turn take precedence over those specified by the configuration of GCC@.
14649 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
14650 GNU Compiler Collection (GCC) Internals}.
14651
14652 @table @env
14653 @item LANG
14654 @itemx LC_CTYPE
14655 @c @itemx LC_COLLATE
14656 @itemx LC_MESSAGES
14657 @c @itemx LC_MONETARY
14658 @c @itemx LC_NUMERIC
14659 @c @itemx LC_TIME
14660 @itemx LC_ALL
14661 @findex LANG
14662 @findex LC_CTYPE
14663 @c @findex LC_COLLATE
14664 @findex LC_MESSAGES
14665 @c @findex LC_MONETARY
14666 @c @findex LC_NUMERIC
14667 @c @findex LC_TIME
14668 @findex LC_ALL
14669 @cindex locale
14670 These environment variables control the way that GCC uses
14671 localization information that allow GCC to work with different
14672 national conventions.  GCC inspects the locale categories
14673 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
14674 so.  These locale categories can be set to any value supported by your
14675 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
14676 Kingdom encoded in UTF-8.
14677
14678 The @env{LC_CTYPE} environment variable specifies character
14679 classification.  GCC uses it to determine the character boundaries in
14680 a string; this is needed for some multibyte encodings that contain quote
14681 and escape characters that would otherwise be interpreted as a string
14682 end or escape.
14683
14684 The @env{LC_MESSAGES} environment variable specifies the language to
14685 use in diagnostic messages.
14686
14687 If the @env{LC_ALL} environment variable is set, it overrides the value
14688 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
14689 and @env{LC_MESSAGES} default to the value of the @env{LANG}
14690 environment variable.  If none of these variables are set, GCC
14691 defaults to traditional C English behavior.
14692
14693 @item TMPDIR
14694 @findex TMPDIR
14695 If @env{TMPDIR} is set, it specifies the directory to use for temporary
14696 files.  GCC uses temporary files to hold the output of one stage of
14697 compilation which is to be used as input to the next stage: for example,
14698 the output of the preprocessor, which is the input to the compiler
14699 proper.
14700
14701 @item GCC_EXEC_PREFIX
14702 @findex GCC_EXEC_PREFIX
14703 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
14704 names of the subprograms executed by the compiler.  No slash is added
14705 when this prefix is combined with the name of a subprogram, but you can
14706 specify a prefix that ends with a slash if you wish.
14707
14708 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
14709 an appropriate prefix to use based on the pathname it was invoked with.
14710
14711 If GCC cannot find the subprogram using the specified prefix, it
14712 tries looking in the usual places for the subprogram.
14713
14714 The default value of @env{GCC_EXEC_PREFIX} is
14715 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
14716 the installed compiler. In many cases @var{prefix} is the value
14717 of @code{prefix} when you ran the @file{configure} script.
14718
14719 Other prefixes specified with @option{-B} take precedence over this prefix.
14720
14721 This prefix is also used for finding files such as @file{crt0.o} that are
14722 used for linking.
14723
14724 In addition, the prefix is used in an unusual way in finding the
14725 directories to search for header files.  For each of the standard
14726 directories whose name normally begins with @samp{/usr/local/lib/gcc}
14727 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
14728 replacing that beginning with the specified prefix to produce an
14729 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
14730 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
14731 These alternate directories are searched first; the standard directories
14732 come next. If a standard directory begins with the configured
14733 @var{prefix} then the value of @var{prefix} is replaced by
14734 @env{GCC_EXEC_PREFIX} when looking for header files.
14735
14736 @item COMPILER_PATH
14737 @findex COMPILER_PATH
14738 The value of @env{COMPILER_PATH} is a colon-separated list of
14739 directories, much like @env{PATH}.  GCC tries the directories thus
14740 specified when searching for subprograms, if it can't find the
14741 subprograms using @env{GCC_EXEC_PREFIX}.
14742
14743 @item LIBRARY_PATH
14744 @findex LIBRARY_PATH
14745 The value of @env{LIBRARY_PATH} is a colon-separated list of
14746 directories, much like @env{PATH}.  When configured as a native compiler,
14747 GCC tries the directories thus specified when searching for special
14748 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
14749 using GCC also uses these directories when searching for ordinary
14750 libraries for the @option{-l} option (but directories specified with
14751 @option{-L} come first).
14752
14753 @item LANG
14754 @findex LANG
14755 @cindex locale definition
14756 This variable is used to pass locale information to the compiler.  One way in
14757 which this information is used is to determine the character set to be used
14758 when character literals, string literals and comments are parsed in C and C++.
14759 When the compiler is configured to allow multibyte characters,
14760 the following values for @env{LANG} are recognized:
14761
14762 @table @samp
14763 @item C-JIS
14764 Recognize JIS characters.
14765 @item C-SJIS
14766 Recognize SJIS characters.
14767 @item C-EUCJP
14768 Recognize EUCJP characters.
14769 @end table
14770
14771 If @env{LANG} is not defined, or if it has some other value, then the
14772 compiler will use mblen and mbtowc as defined by the default locale to
14773 recognize and translate multibyte characters.
14774 @end table
14775
14776 @noindent
14777 Some additional environments variables affect the behavior of the
14778 preprocessor.
14779
14780 @include cppenv.texi
14781
14782 @c man end
14783
14784 @node Precompiled Headers
14785 @section Using Precompiled Headers
14786 @cindex precompiled headers
14787 @cindex speed of compilation
14788
14789 Often large projects have many header files that are included in every
14790 source file.  The time the compiler takes to process these header files
14791 over and over again can account for nearly all of the time required to
14792 build the project.  To make builds faster, GCC allows users to
14793 `precompile' a header file; then, if builds can use the precompiled
14794 header file they will be much faster.
14795
14796 To create a precompiled header file, simply compile it as you would any
14797 other file, if necessary using the @option{-x} option to make the driver
14798 treat it as a C or C++ header file.  You will probably want to use a
14799 tool like @command{make} to keep the precompiled header up-to-date when
14800 the headers it contains change.
14801
14802 A precompiled header file will be searched for when @code{#include} is
14803 seen in the compilation.  As it searches for the included file
14804 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
14805 compiler looks for a precompiled header in each directory just before it
14806 looks for the include file in that directory.  The name searched for is
14807 the name specified in the @code{#include} with @samp{.gch} appended.  If
14808 the precompiled header file can't be used, it is ignored.
14809
14810 For instance, if you have @code{#include "all.h"}, and you have
14811 @file{all.h.gch} in the same directory as @file{all.h}, then the
14812 precompiled header file will be used if possible, and the original
14813 header will be used otherwise.
14814
14815 Alternatively, you might decide to put the precompiled header file in a
14816 directory and use @option{-I} to ensure that directory is searched
14817 before (or instead of) the directory containing the original header.
14818 Then, if you want to check that the precompiled header file is always
14819 used, you can put a file of the same name as the original header in this
14820 directory containing an @code{#error} command.
14821
14822 This also works with @option{-include}.  So yet another way to use
14823 precompiled headers, good for projects not designed with precompiled
14824 header files in mind, is to simply take most of the header files used by
14825 a project, include them from another header file, precompile that header
14826 file, and @option{-include} the precompiled header.  If the header files
14827 have guards against multiple inclusion, they will be skipped because
14828 they've already been included (in the precompiled header).
14829
14830 If you need to precompile the same header file for different
14831 languages, targets, or compiler options, you can instead make a
14832 @emph{directory} named like @file{all.h.gch}, and put each precompiled
14833 header in the directory, perhaps using @option{-o}.  It doesn't matter
14834 what you call the files in the directory, every precompiled header in
14835 the directory will be considered.  The first precompiled header
14836 encountered in the directory that is valid for this compilation will
14837 be used; they're searched in no particular order.
14838
14839 There are many other possibilities, limited only by your imagination,
14840 good sense, and the constraints of your build system.
14841
14842 A precompiled header file can be used only when these conditions apply:
14843
14844 @itemize
14845 @item
14846 Only one precompiled header can be used in a particular compilation.
14847
14848 @item
14849 A precompiled header can't be used once the first C token is seen.  You
14850 can have preprocessor directives before a precompiled header; you can
14851 even include a precompiled header from inside another header, so long as
14852 there are no C tokens before the @code{#include}.
14853
14854 @item
14855 The precompiled header file must be produced for the same language as
14856 the current compilation.  You can't use a C precompiled header for a C++
14857 compilation.
14858
14859 @item
14860 The precompiled header file must have been produced by the same compiler
14861 binary as the current compilation is using.
14862
14863 @item
14864 Any macros defined before the precompiled header is included must
14865 either be defined in the same way as when the precompiled header was
14866 generated, or must not affect the precompiled header, which usually
14867 means that they don't appear in the precompiled header at all.
14868
14869 The @option{-D} option is one way to define a macro before a
14870 precompiled header is included; using a @code{#define} can also do it.
14871 There are also some options that define macros implicitly, like
14872 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
14873 defined this way.
14874
14875 @item If debugging information is output when using the precompiled
14876 header, using @option{-g} or similar, the same kind of debugging information
14877 must have been output when building the precompiled header.  However,
14878 a precompiled header built using @option{-g} can be used in a compilation
14879 when no debugging information is being output.
14880
14881 @item The same @option{-m} options must generally be used when building
14882 and using the precompiled header.  @xref{Submodel Options},
14883 for any cases where this rule is relaxed.
14884
14885 @item Each of the following options must be the same when building and using
14886 the precompiled header:
14887
14888 @gccoptlist{-fexceptions -funit-at-a-time}
14889
14890 @item
14891 Some other command-line options starting with @option{-f},
14892 @option{-p}, or @option{-O} must be defined in the same way as when
14893 the precompiled header was generated.  At present, it's not clear
14894 which options are safe to change and which are not; the safest choice
14895 is to use exactly the same options when generating and using the
14896 precompiled header.  The following are known to be safe:
14897
14898 @gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
14899 -fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
14900 -fsched-verbose=<number>  -fschedule-insns  -fvisibility= @gol
14901 -pedantic-errors}
14902
14903 @end itemize
14904
14905 For all of these except the last, the compiler will automatically
14906 ignore the precompiled header if the conditions aren't met.  If you
14907 find an option combination that doesn't work and doesn't cause the
14908 precompiled header to be ignored, please consider filing a bug report,
14909 see @ref{Bugs}.
14910
14911 If you do use differing options when generating and using the
14912 precompiled header, the actual behavior will be a mixture of the
14913 behavior for the options.  For instance, if you use @option{-g} to
14914 generate the precompiled header but not when using it, you may or may
14915 not get debugging information for routines in the precompiled header.
14916
14917 @node Running Protoize
14918 @section Running Protoize
14919
14920 The program @code{protoize} is an optional part of GCC@.  You can use
14921 it to add prototypes to a program, thus converting the program to ISO
14922 C in one respect.  The companion program @code{unprotoize} does the
14923 reverse: it removes argument types from any prototypes that are found.
14924
14925 When you run these programs, you must specify a set of source files as
14926 command line arguments.  The conversion programs start out by compiling
14927 these files to see what functions they define.  The information gathered
14928 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
14929
14930 After scanning comes actual conversion.  The specified files are all
14931 eligible to be converted; any files they include (whether sources or
14932 just headers) are eligible as well.
14933
14934 But not all the eligible files are converted.  By default,
14935 @code{protoize} and @code{unprotoize} convert only source and header
14936 files in the current directory.  You can specify additional directories
14937 whose files should be converted with the @option{-d @var{directory}}
14938 option.  You can also specify particular files to exclude with the
14939 @option{-x @var{file}} option.  A file is converted if it is eligible, its
14940 directory name matches one of the specified directory names, and its
14941 name within the directory has not been excluded.
14942
14943 Basic conversion with @code{protoize} consists of rewriting most
14944 function definitions and function declarations to specify the types of
14945 the arguments.  The only ones not rewritten are those for varargs
14946 functions.
14947
14948 @code{protoize} optionally inserts prototype declarations at the
14949 beginning of the source file, to make them available for any calls that
14950 precede the function's definition.  Or it can insert prototype
14951 declarations with block scope in the blocks where undeclared functions
14952 are called.
14953
14954 Basic conversion with @code{unprotoize} consists of rewriting most
14955 function declarations to remove any argument types, and rewriting
14956 function definitions to the old-style pre-ISO form.
14957
14958 Both conversion programs print a warning for any function declaration or
14959 definition that they can't convert.  You can suppress these warnings
14960 with @option{-q}.
14961
14962 The output from @code{protoize} or @code{unprotoize} replaces the
14963 original source file.  The original file is renamed to a name ending
14964 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
14965 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
14966 for DOS) file already exists, then the source file is simply discarded.
14967
14968 @code{protoize} and @code{unprotoize} both depend on GCC itself to
14969 scan the program and collect information about the functions it uses.
14970 So neither of these programs will work until GCC is installed.
14971
14972 Here is a table of the options you can use with @code{protoize} and
14973 @code{unprotoize}.  Each option works with both programs unless
14974 otherwise stated.
14975
14976 @table @code
14977 @item -B @var{directory}
14978 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
14979 usual directory (normally @file{/usr/local/lib}).  This file contains
14980 prototype information about standard system functions.  This option
14981 applies only to @code{protoize}.
14982
14983 @item -c @var{compilation-options}
14984 Use @var{compilation-options} as the options when running @command{gcc} to
14985 produce the @samp{.X} files.  The special option @option{-aux-info} is
14986 always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
14987
14988 Note that the compilation options must be given as a single argument to
14989 @code{protoize} or @code{unprotoize}.  If you want to specify several
14990 @command{gcc} options, you must quote the entire set of compilation options
14991 to make them a single word in the shell.
14992
14993 There are certain @command{gcc} arguments that you cannot use, because they
14994 would produce the wrong kind of output.  These include @option{-g},
14995 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
14996 the @var{compilation-options}, they are ignored.
14997
14998 @item -C
14999 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
15000 systems) instead of @samp{.c}.  This is convenient if you are converting
15001 a C program to C++.  This option applies only to @code{protoize}.
15002
15003 @item -g
15004 Add explicit global declarations.  This means inserting explicit
15005 declarations at the beginning of each source file for each function
15006 that is called in the file and was not declared.  These declarations
15007 precede the first function definition that contains a call to an
15008 undeclared function.  This option applies only to @code{protoize}.
15009
15010 @item -i @var{string}
15011 Indent old-style parameter declarations with the string @var{string}.
15012 This option applies only to @code{protoize}.
15013
15014 @code{unprotoize} converts prototyped function definitions to old-style
15015 function definitions, where the arguments are declared between the
15016 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
15017 uses five spaces as the indentation.  If you want to indent with just
15018 one space instead, use @option{-i " "}.
15019
15020 @item -k
15021 Keep the @samp{.X} files.  Normally, they are deleted after conversion
15022 is finished.
15023
15024 @item -l
15025 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
15026 a prototype declaration for each function in each block which calls the
15027 function without any declaration.  This option applies only to
15028 @code{protoize}.
15029
15030 @item -n
15031 Make no real changes.  This mode just prints information about the conversions
15032 that would have been done without @option{-n}.
15033
15034 @item -N
15035 Make no @samp{.save} files.  The original files are simply deleted.
15036 Use this option with caution.
15037
15038 @item -p @var{program}
15039 Use the program @var{program} as the compiler.  Normally, the name
15040 @file{gcc} is used.
15041
15042 @item -q
15043 Work quietly.  Most warnings are suppressed.
15044
15045 @item -v
15046 Print the version number, just like @option{-v} for @command{gcc}.
15047 @end table
15048
15049 If you need special compiler options to compile one of your program's
15050 source files, then you should generate that file's @samp{.X} file
15051 specially, by running @command{gcc} on that source file with the
15052 appropriate options and the option @option{-aux-info}.  Then run
15053 @code{protoize} on the entire set of files.  @code{protoize} will use
15054 the existing @samp{.X} file because it is newer than the source file.
15055 For example:
15056
15057 @smallexample
15058 gcc -Dfoo=bar file1.c -aux-info file1.X
15059 protoize *.c
15060 @end smallexample
15061
15062 @noindent
15063 You need to include the special files along with the rest in the
15064 @code{protoize} command, even though their @samp{.X} files already
15065 exist, because otherwise they won't get converted.
15066
15067 @xref{Protoize Caveats}, for more information on how to use
15068 @code{protoize} successfully.