Daily bump.
[official-gcc.git] / gcc / doc / invoke.texi
blobcd03c92b7aa8dc501aaf3125eb087d38b88c535c
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
6 @ignore
7 @c man begin INCLUDE
8 @include gcc-vers.texi
9 @c man end
11 @c man begin COPYRIGHT
12 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
13 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
15 Permission is granted to copy, distribute and/or modify this document
16 under the terms of the GNU Free Documentation License, Version 1.2 or
17 any later version published by the Free Software Foundation; with the
18 Invariant Sections being ``GNU General Public License'' and ``Funding
19 Free Software'', the Front-Cover texts being (a) (see below), and with
20 the Back-Cover Texts being (b) (see below).  A copy of the license is
21 included in the gfdl(7) man page.
23 (a) The FSF's Front-Cover Text is:
25      A GNU Manual
27 (b) The FSF's Back-Cover Text is:
29      You have freedom to copy and modify this GNU Manual, like GNU
30      software.  Copies published by the Free Software Foundation raise
31      funds for GNU development.
32 @c man end
33 @c Set file name and title for the man page.
34 @setfilename gcc
35 @settitle GNU project C and C++ compiler
36 @c man begin SYNOPSIS
37 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
38     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
39     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
40     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
41     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
42     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
43     [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
45 Only the most useful options are listed here; see below for the
46 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
47 @c man end
48 @c man begin SEEALSO
49 gpl(7), gfdl(7), fsf-funding(7),
50 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
51 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
52 @file{ld}, @file{binutils} and @file{gdb}.
53 @c man end
54 @c man begin BUGS
55 For instructions on reporting bugs, see
56 @w{@uref{http://gcc.gnu.org/bugs.html}}.
57 @c man end
58 @c man begin AUTHOR
59 See the Info entry for @command{gcc}, or
60 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
61 for contributors to GCC@.
62 @c man end
63 @end ignore
65 @node Invoking GCC
66 @chapter GCC Command Options
67 @cindex GCC command options
68 @cindex command options
69 @cindex options, GCC command
71 @c man begin DESCRIPTION
72 When you invoke GCC, it normally does preprocessing, compilation,
73 assembly and linking.  The ``overall options'' allow you to stop this
74 process at an intermediate stage.  For example, the @option{-c} option
75 says not to run the linker.  Then the output consists of object files
76 output by the assembler.
78 Other options are passed on to one stage of processing.  Some options
79 control the preprocessor and others the compiler itself.  Yet other
80 options control the assembler and linker; most of these are not
81 documented here, since you rarely need to use any of them.
83 @cindex C compilation options
84 Most of the command line options that you can use with GCC are useful
85 for C programs; when an option is only useful with another language
86 (usually C++), the explanation says so explicitly.  If the description
87 for a particular option does not mention a source language, you can use
88 that option with all supported languages.
90 @cindex C++ compilation options
91 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
92 options for compiling C++ programs.
94 @cindex grouping options
95 @cindex options, grouping
96 The @command{gcc} program accepts options and file names as operands.  Many
97 options have multi-letter names; therefore multiple single-letter options
98 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
99 -r}}.
101 @cindex order of options
102 @cindex options, order
103 You can mix options and other arguments.  For the most part, the order
104 you use doesn't matter.  Order does matter when you use several options
105 of the same kind; for example, if you specify @option{-L} more than once,
106 the directories are searched in the order specified.
108 Many options have long names starting with @samp{-f} or with
109 @samp{-W}---for example, 
110 @option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
111 these have both positive and negative forms; the negative form of
112 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
113 only one of these two forms, whichever one is not the default.
115 @c man end
117 @xref{Option Index}, for an index to GCC's options.
119 @menu
120 * Option Summary::      Brief list of all options, without explanations.
121 * Overall Options::     Controlling the kind of output:
122                         an executable, object files, assembler files,
123                         or preprocessed source.
124 * Invoking G++::        Compiling C++ programs.
125 * C Dialect Options::   Controlling the variant of C language compiled.
126 * C++ Dialect Options:: Variations on C++.
127 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
128                         and Objective-C++.
129 * Language Independent Options:: Controlling how diagnostics should be
130                         formatted.
131 * Warning Options::     How picky should the compiler be?
132 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
133 * Optimize Options::    How much optimization?
134 * Preprocessor Options:: Controlling header files and macro definitions.
135                          Also, getting dependency information for Make.
136 * Assembler Options::   Passing options to the assembler.
137 * Link Options::        Specifying libraries and so on.
138 * Directory Options::   Where to find header files and libraries.
139                         Where to find the compiler executable files.
140 * Spec Files::          How to pass switches to sub-processes.
141 * Target Options::      Running a cross-compiler, or an old version of GCC.
142 * Submodel Options::    Specifying minor hardware or convention variations,
143                         such as 68010 vs 68020.
144 * Code Gen Options::    Specifying conventions for function calls, data layout
145                         and register usage.
146 * Environment Variables:: Env vars that affect GCC.
147 * Precompiled Headers:: Compiling a header once, and using it many times.
148 * Running Protoize::    Automatically adding or removing function prototypes.
149 @end menu
151 @c man begin OPTIONS
153 @node Option Summary
154 @section Option Summary
156 Here is a summary of all the options, grouped by type.  Explanations are
157 in the following sections.
159 @table @emph
160 @item Overall Options
161 @xref{Overall Options,,Options Controlling the Kind of Output}.
162 @gccoptlist{-c  -S  -E  -o @var{file}  -combine -pipe  -pass-exit-codes  @gol
163 -x @var{language}  -v  -###  --help  --target-help  --version @@@var{file}}
165 @item C Language Options
166 @xref{C Dialect Options,,Options Controlling C Dialect}.
167 @gccoptlist{-ansi  -std=@var{standard}  -aux-info @var{filename} @gol
168 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
169 -fhosted  -ffreestanding -fopenmp -fms-extensions @gol
170 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
171 -fallow-single-precision  -fcond-mismatch @gol
172 -fsigned-bitfields  -fsigned-char @gol
173 -funsigned-bitfields  -funsigned-char}
175 @item C++ Language Options
176 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
177 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
178 -fconserve-space  -ffriend-injection @gol
179 -fno-elide-constructors @gol
180 -fno-enforce-eh-specs @gol
181 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
182 -fno-implicit-templates @gol
183 -fno-implicit-inline-templates @gol
184 -fno-implement-inlines  -fms-extensions @gol
185 -fno-nonansi-builtins  -fno-operator-names @gol
186 -fno-optional-diags  -fpermissive @gol
187 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
188 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
189 -fno-default-inline  -fvisibility-inlines-hidden @gol
190 -Wabi  -Wctor-dtor-privacy @gol
191 -Wnon-virtual-dtor  -Wreorder @gol
192 -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel @gol
193 -Wno-non-template-friend  -Wold-style-cast @gol
194 -Woverloaded-virtual  -Wno-pmf-conversions @gol
195 -Wsign-promo}
197 @item Objective-C and Objective-C++ Language Options
198 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
199 Objective-C and Objective-C++ Dialects}.
200 @gccoptlist{-fconstant-string-class=@var{class-name} @gol
201 -fgnu-runtime  -fnext-runtime @gol
202 -fno-nil-receivers @gol
203 -fobjc-call-cxx-cdtors @gol
204 -fobjc-direct-dispatch @gol
205 -fobjc-exceptions @gol
206 -fobjc-gc @gol
207 -freplace-objc-classes @gol
208 -fzero-link @gol
209 -gen-decls @gol
210 -Wassign-intercept @gol
211 -Wno-protocol  -Wselector @gol
212 -Wstrict-selector-match @gol
213 -Wundeclared-selector}
215 @item Language Independent Options
216 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
217 @gccoptlist{-fmessage-length=@var{n}  @gol
218 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
219 -fdiagnostics-show-option}
221 @item Warning Options
222 @xref{Warning Options,,Options to Request or Suppress Warnings}.
223 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
224 -w  -Wextra  -Wall  -Waggregate-return -Walways-true -Wno-attributes @gol
225 -Wc++-compat -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
226 -Wconversion  -Wno-deprecated-declarations @gol
227 -Wdisabled-optimization  -Wno-div-by-zero  -Wno-endif-labels @gol
228 -Werror  -Werror-* -Werror-implicit-function-declaration @gol
229 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
230 -Wno-format-extra-args -Wformat-nonliteral @gol
231 -Wformat-security  -Wformat-y2k @gol
232 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
233 -Wimport  -Wno-import  -Winit-self  -Winline @gol
234 -Wno-int-to-pointer-cast @gol
235 -Wno-invalid-offsetof  -Winvalid-pch @gol
236 -Wlarger-than-@var{len}  -Wunsafe-loop-optimizations  -Wlong-long @gol
237 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
238 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
239 -Wmissing-noreturn @gol
240 -Wno-multichar  -Wnonnull  -Wno-overflow @gol
241 -Woverlength-strings  -Wpacked  -Wpadded @gol
242 -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast @gol
243 -Wredundant-decls @gol
244 -Wreturn-type  -Wsequence-point  -Wshadow @gol
245 -Wsign-compare  -Wstack-protector @gol
246 -Wstrict-aliasing -Wstrict-aliasing=2 @gol
247 -Wstring-literal-comparison @gol
248 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
249 -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
250 -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
251 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
252 -Wunused-value  -Wunused-variable  -Wvariadic-macros @gol
253 -Wvolatile-register-var  -Wwrite-strings}
255 @item C-only Warning Options
256 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
257 -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition @gol
258 -Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
259 -Wdeclaration-after-statement -Wpointer-sign}
261 @item Debugging Options
262 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
263 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
264 -fdump-noaddr -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
265 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
266 -fdump-ipa-all -fdump-ipa-cgraph @gol
267 -fdump-tree-all @gol
268 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
269 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
270 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
271 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
272 -fdump-tree-ch @gol
273 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
274 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
275 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
276 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
277 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
278 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
279 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
280 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
281 -fdump-tree-nrv -fdump-tree-vect @gol
282 -fdump-tree-sink @gol
283 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
284 -fdump-tree-salias @gol
285 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
286 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
287 -ftree-vectorizer-verbose=@var{n} @gol
288 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
289 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
290 -feliminate-unused-debug-symbols -femit-class-debug-always @gol
291 -fmem-report -fprofile-arcs @gol
292 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
293 -ftest-coverage  -ftime-report -fvar-tracking @gol
294 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
295 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
296 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
297 -print-multi-directory  -print-multi-lib @gol
298 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
299 -save-temps  -time}
301 @item Optimization Options
302 @xref{Optimize Options,,Options that Control Optimization}.
303 @gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
304 -falign-labels=@var{n}  -falign-loops=@var{n}  @gol
305 -fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
306 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
307 -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
308 -fcaller-saves  -fcprop-registers  -fcse-follow-jumps @gol
309 -fcse-skip-blocks  -fcx-limited-range  -fdata-sections @gol
310 -fdelayed-branch  -fdelete-null-pointer-checks -fearly-inlining @gol
311 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
312 -fforce-addr  -fforward-propagate  -ffunction-sections @gol
313 -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -fgcse-after-reload @gol
314 -fcrossjumping  -fif-conversion  -fif-conversion2 @gol
315 -finline-functions  -finline-functions-called-once @gol
316 -finline-limit=@var{n}  -fkeep-inline-functions @gol
317 -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
318 -fmodulo-sched -fno-branch-count-reg @gol
319 -fno-default-inline  -fno-defer-pop -fmove-loop-invariants @gol
320 -fno-function-cse  -fno-guess-branch-probability @gol
321 -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
322 -funsafe-math-optimizations  -funsafe-loop-optimizations  -ffinite-math-only @gol
323 -fno-toplevel-reorder -fno-trapping-math  -fno-zero-initialized-in-bss @gol
324 -fomit-frame-pointer  -foptimize-register-move @gol
325 -foptimize-sibling-calls  -fprefetch-loop-arrays @gol
326 -fprofile-generate -fprofile-use @gol
327 -fregmove  -frename-registers @gol
328 -freorder-blocks  -freorder-blocks-and-partition -freorder-functions @gol
329 -frerun-cse-after-loop @gol
330 -frounding-math -frtl-abstract-sequences @gol
331 -fschedule-insns  -fschedule-insns2 @gol
332 -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
333 -fsched-spec-load-dangerous  @gol
334 -fsched-stalled-insns=@var{n} -fsched-stalled-insns-dep=@var{n} @gol
335 -fsched2-use-superblocks @gol
336 -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops @gol
337 -fsection-anchors  -fsignaling-nans  -fsingle-precision-constant @gol
338 -fstack-protector  -fstack-protector-all @gol
339 -fstrict-aliasing  -ftracer  -fthread-jumps @gol
340 -funroll-all-loops  -funroll-loops  -fpeel-loops @gol
341 -fsplit-ivs-in-unroller -funswitch-loops @gol
342 -fvariable-expansion-in-unroller @gol
343 -ftree-pre  -ftree-ccp  -ftree-dce -ftree-loop-optimize @gol
344 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol
345 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol
346 -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize @gol
347 -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb @gol
348 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol
349 --param @var{name}=@var{value}
350 -O  -O0  -O1  -O2  -O3  -Os}
352 @item Preprocessor Options
353 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
354 @gccoptlist{-A@var{question}=@var{answer} @gol
355 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
356 -C  -dD  -dI  -dM  -dN @gol
357 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
358 -idirafter @var{dir} @gol
359 -include @var{file}  -imacros @var{file} @gol
360 -iprefix @var{file}  -iwithprefix @var{dir} @gol
361 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
362 -imultilib @var{dir} -isysroot @var{dir} @gol
363 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
364 -P  -fworking-directory  -remap @gol
365 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
366 -Xpreprocessor @var{option}}
368 @item Assembler Option
369 @xref{Assembler Options,,Passing Options to the Assembler}.
370 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
372 @item Linker Options
373 @xref{Link Options,,Options for Linking}.
374 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
375 -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
376 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
377 -Wl,@var{option}  -Xlinker @var{option} @gol
378 -u @var{symbol}}
380 @item Directory Options
381 @xref{Directory Options,,Options for Directory Search}.
382 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
383 -specs=@var{file}  -I- --sysroot=@var{dir}}
385 @item Target Options
386 @c I wrote this xref this way to avoid overfull hbox. -- rms
387 @xref{Target Options}.
388 @gccoptlist{-V @var{version}  -b @var{machine}}
390 @item Machine Dependent Options
391 @xref{Submodel Options,,Hardware Models and Configurations}.
392 @c This list is ordered alphanumerically by subsection name.
393 @c Try and put the significant identifier (CPU or system) first,
394 @c so users have a clue at guessing where the ones they want will be.
396 @emph{ARC Options}
397 @gccoptlist{-EB  -EL @gol
398 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
399 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
401 @emph{ARM Options}
402 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
403 -mabi=@var{name} @gol
404 -mapcs-stack-check  -mno-apcs-stack-check @gol
405 -mapcs-float  -mno-apcs-float @gol
406 -mapcs-reentrant  -mno-apcs-reentrant @gol
407 -msched-prolog  -mno-sched-prolog @gol
408 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
409 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
410 -mthumb-interwork  -mno-thumb-interwork @gol
411 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
412 -mstructure-size-boundary=@var{n} @gol
413 -mabort-on-noreturn @gol
414 -mlong-calls  -mno-long-calls @gol
415 -msingle-pic-base  -mno-single-pic-base @gol
416 -mpic-register=@var{reg} @gol
417 -mnop-fun-dllimport @gol
418 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
419 -mpoke-function-name @gol
420 -mthumb  -marm @gol
421 -mtpcs-frame  -mtpcs-leaf-frame @gol
422 -mcaller-super-interworking  -mcallee-super-interworking @gol
423 -mtp=@var{name}}
425 @emph{AVR Options}
426 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
427 -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
429 @emph{Blackfin Options}
430 @gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol
431 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol
432 -mlow-64k  -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
433 -mno-id-shared-library -mshared-library-id=@var{n} @gol
434 -mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
435 -msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls}
437 @emph{CRIS Options}
438 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
439 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
440 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
441 -mstack-align  -mdata-align  -mconst-align @gol
442 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
443 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
444 -mmul-bug-workaround  -mno-mul-bug-workaround}
446 @emph{CRX Options}
447 @gccoptlist{-mmac -mpush-args}
449 @emph{Darwin Options}
450 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
451 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
452 -client_name  -compatibility_version  -current_version @gol
453 -dead_strip @gol
454 -dependency-file  -dylib_file  -dylinker_install_name @gol
455 -dynamic  -dynamiclib  -exported_symbols_list @gol
456 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
457 -force_flat_namespace  -headerpad_max_install_names @gol
458 -image_base  -init  -install_name  -keep_private_externs @gol
459 -multi_module  -multiply_defined  -multiply_defined_unused @gol
460 -noall_load   -no_dead_strip_inits_and_terms @gol
461 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
462 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
463 -private_bundle  -read_only_relocs  -sectalign @gol
464 -sectobjectsymbols  -whyload  -seg1addr @gol
465 -sectcreate  -sectobjectsymbols  -sectorder @gol
466 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
467 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
468 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
469 -single_module  -static  -sub_library  -sub_umbrella @gol
470 -twolevel_namespace  -umbrella  -undefined @gol
471 -unexported_symbols_list  -weak_reference_mismatches @gol
472 -whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
473 -mkernel -mone-byte-bool}
475 @emph{DEC Alpha Options}
476 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
477 -mieee  -mieee-with-inexact  -mieee-conformant @gol
478 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
479 -mtrap-precision=@var{mode}  -mbuild-constants @gol
480 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
481 -mbwx  -mmax  -mfix  -mcix @gol
482 -mfloat-vax  -mfloat-ieee @gol
483 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
484 -msmall-text  -mlarge-text @gol
485 -mmemory-latency=@var{time}}
487 @emph{DEC Alpha/VMS Options}
488 @gccoptlist{-mvms-return-codes}
490 @emph{FRV Options}
491 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
492 -mhard-float  -msoft-float @gol
493 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
494 -mdouble  -mno-double @gol
495 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
496 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
497 -mlinked-fp  -mlong-calls  -malign-labels @gol
498 -mlibrary-pic  -macc-4  -macc-8 @gol
499 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
500 -moptimize-membar -mno-optimize-membar @gol
501 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
502 -mvliw-branch  -mno-vliw-branch @gol
503 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
504 -mno-nested-cond-exec  -mtomcat-stats @gol
505 -mTLS -mtls @gol
506 -mcpu=@var{cpu}}
508 @emph{GNU/Linux Options}
509 @gccoptlist{-muclibc}
511 @emph{H8/300 Options}
512 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
514 @emph{HPPA Options}
515 @gccoptlist{-march=@var{architecture-type} @gol
516 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
517 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
518 -mfixed-range=@var{register-range} @gol
519 -mjump-in-delay -mlinker-opt -mlong-calls @gol
520 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
521 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
522 -mno-jump-in-delay  -mno-long-load-store @gol
523 -mno-portable-runtime  -mno-soft-float @gol
524 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
525 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
526 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
527 -munix=@var{unix-std}  -nolibdld  -static  -threads}
529 @emph{i386 and x86-64 Options}
530 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
531 -mfpmath=@var{unit} @gol
532 -masm=@var{dialect}  -mno-fancy-math-387 @gol
533 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
534 -mno-wide-multiply  -mrtd  -malign-double @gol
535 -mpreferred-stack-boundary=@var{num} @gol
536 -mmmx  -msse  -msse2 -msse3 -mssse3 -m3dnow @gol
537 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
538 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
539 -m96bit-long-double  -mregparm=@var{num}  -mx87regparm @gol
540 -msseregparm @gol  -mstackrealign @gol
541 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
542 -mcmodel=@var{code-model} @gol
543 -m32  -m64 -mlarge-data-threshold=@var{num}}
545 @emph{IA-64 Options}
546 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
547 -mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
548 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
549 -minline-float-divide-max-throughput @gol
550 -minline-int-divide-min-latency @gol
551 -minline-int-divide-max-throughput  @gol
552 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
553 -mno-dwarf2-asm -mearly-stop-bits @gol
554 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
555 -mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64 @gol
556 -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec @gol
557 -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
558 -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose @gol
559 -mno-sched-prefer-non-data-spec-insns @gol
560 -mno-sched-prefer-non-control-spec-insns @gol
561 -mno-sched-count-spec-in-critical-path}
563 @emph{M32R/D Options}
564 @gccoptlist{-m32r2 -m32rx -m32r @gol
565 -mdebug @gol
566 -malign-loops -mno-align-loops @gol
567 -missue-rate=@var{number} @gol
568 -mbranch-cost=@var{number} @gol
569 -mmodel=@var{code-size-model-type} @gol
570 -msdata=@var{sdata-type} @gol
571 -mno-flush-func -mflush-func=@var{name} @gol
572 -mno-flush-trap -mflush-trap=@var{number} @gol
573 -G @var{num}}
575 @emph{M32C Options}
576 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
578 @emph{M680x0 Options}
579 @gccoptlist{-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
580 -m68060  -mcpu32  -m5200  -mcfv4e -m68881  -mbitfield  @gol
581 -mc68000  -mc68020   @gol
582 -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
583 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
584 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
586 @emph{M68hc1x Options}
587 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
588 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
589 -msoft-reg-count=@var{count}}
591 @emph{MCore Options}
592 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
593 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
594 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
595 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
596 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
598 @emph{MIPS Options}
599 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
600 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
601 -mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
602 -mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64  @gol
603 -mfp32  -mfp64  -mhard-float  -msoft-float  @gol
604 -msingle-float  -mdouble-float  -mdsp  -mpaired-single  -mips3d @gol
605 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
606 -G@var{num}  -membedded-data  -mno-embedded-data @gol
607 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
608 -msplit-addresses  -mno-split-addresses  @gol
609 -mexplicit-relocs  -mno-explicit-relocs  @gol
610 -mcheck-zero-division  -mno-check-zero-division @gol
611 -mdivide-traps  -mdivide-breaks @gol
612 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
613 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
614 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
615 -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130 @gol
616 -mfix-sb1  -mno-fix-sb1 @gol
617 -mflush-func=@var{func}  -mno-flush-func @gol
618 -mbranch-likely  -mno-branch-likely @gol
619 -mfp-exceptions -mno-fp-exceptions @gol
620 -mvr4130-align -mno-vr4130-align}
622 @emph{MMIX Options}
623 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
624 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
625 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
626 -mno-base-addresses  -msingle-exit  -mno-single-exit}
628 @emph{MN10300 Options}
629 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
630 -mam33  -mno-am33 @gol
631 -mam33-2  -mno-am33-2 @gol
632 -mreturn-pointer-on-d0 @gol
633 -mno-crt0  -mrelax}
635 @emph{MT Options}
636 @gccoptlist{-mno-crt0 -mbacc -msim @gol
637 -march=@var{cpu-type} }
639 @emph{PDP-11 Options}
640 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
641 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
642 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
643 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
644 -mbranch-expensive  -mbranch-cheap @gol
645 -msplit  -mno-split  -munix-asm  -mdec-asm}
647 @emph{PowerPC Options}
648 See RS/6000 and PowerPC Options.
650 @emph{RS/6000 and PowerPC Options}
651 @gccoptlist{-mcpu=@var{cpu-type} @gol
652 -mtune=@var{cpu-type} @gol
653 -mpower  -mno-power  -mpower2  -mno-power2 @gol
654 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
655 -maltivec  -mno-altivec @gol
656 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
657 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
658 -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd @gol
659 -mmfpgpr -mno-mfpgpr @gol
660 -mnew-mnemonics  -mold-mnemonics @gol
661 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
662 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
663 -malign-power  -malign-natural @gol
664 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
665 -mstring  -mno-string  -mupdate  -mno-update @gol
666 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
667 -mstrict-align  -mno-strict-align  -mrelocatable @gol
668 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
669 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
670 -mdynamic-no-pic  -maltivec  -mswdiv @gol
671 -mprioritize-restricted-insns=@var{priority} @gol
672 -msched-costly-dep=@var{dependence_type} @gol
673 -minsert-sched-nops=@var{scheme} @gol
674 -mcall-sysv  -mcall-netbsd @gol
675 -maix-struct-return  -msvr4-struct-return @gol
676 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
677 -misel -mno-isel @gol
678 -misel=yes  -misel=no @gol
679 -mspe -mno-spe @gol
680 -mspe=yes  -mspe=no @gol
681 -mvrsave -mno-vrsave @gol
682 -mmulhw -mno-mulhw @gol
683 -mdlmzb -mno-dlmzb @gol
684 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
685 -mprototype  -mno-prototype @gol
686 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
687 -msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
689 @emph{S/390 and zSeries Options}
690 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
691 -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128 @gol
692 -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
693 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
694 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
695 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
696 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
698 @emph{Score Options}
699 @gccoptlist{-mel -mel @gol
700 -mmac @gol
701 -mscore5u -mscore7}
703 @emph{SH Options}
704 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
705 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
706 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
707 -m5-64media  -m5-64media-nofpu @gol
708 -m5-32media  -m5-32media-nofpu @gol
709 -m5-compact  -m5-compact-nofpu @gol
710 -mb  -ml  -mdalign  -mrelax @gol
711 -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
712 -mieee  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
713 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
714 -mdivsi3_libfunc=@var{name}  @gol
715 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
716  -minvalid-symbols}
718 @emph{SPARC Options}
719 @gccoptlist{-mcpu=@var{cpu-type} @gol
720 -mtune=@var{cpu-type} @gol
721 -mcmodel=@var{code-model} @gol
722 -m32  -m64  -mapp-regs  -mno-app-regs @gol
723 -mfaster-structs  -mno-faster-structs @gol
724 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
725 -mhard-quad-float  -msoft-quad-float @gol
726 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
727 -mstack-bias  -mno-stack-bias @gol
728 -munaligned-doubles  -mno-unaligned-doubles @gol
729 -mv8plus  -mno-v8plus  -mvis  -mno-vis
730 -threads -pthreads -pthread}
732 @emph{SPU Options}
733 @gccoptlist{-mwarn-reloc -merror-reloc @gol
734 -msafe-dma -munsafe-dma @gol
735 -mbranch-hints @gol
736 -msmall-mem -mlarge-mem}
738 @emph{System V Options}
739 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
741 @emph{TMS320C3x/C4x Options}
742 @gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
743 -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
744 -mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
745 -mparallel-insns  -mparallel-mpy  -mpreserve-float}
747 @emph{V850 Options}
748 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
749 -mprolog-function  -mno-prolog-function  -mspace @gol
750 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
751 -mapp-regs  -mno-app-regs @gol
752 -mdisable-callt  -mno-disable-callt @gol
753 -mv850e1 @gol
754 -mv850e @gol
755 -mv850  -mbig-switch}
757 @emph{VAX Options}
758 @gccoptlist{-mg  -mgnu  -munix}
760 @emph{x86-64 Options}
761 See i386 and x86-64 Options.
763 @emph{Xstormy16 Options}
764 @gccoptlist{-msim}
766 @emph{Xtensa Options}
767 @gccoptlist{-mconst16 -mno-const16 @gol
768 -mfused-madd  -mno-fused-madd @gol
769 -mtext-section-literals  -mno-text-section-literals @gol
770 -mtarget-align  -mno-target-align @gol
771 -mlongcalls  -mno-longcalls}
773 @emph{zSeries Options}
774 See S/390 and zSeries Options.
776 @item Code Generation Options
777 @xref{Code Gen Options,,Options for Code Generation Conventions}.
778 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
779 -ffixed-@var{reg}  -fexceptions @gol
780 -fnon-call-exceptions  -funwind-tables @gol
781 -fasynchronous-unwind-tables @gol
782 -finhibit-size-directive  -finstrument-functions @gol
783 -fno-common  -fno-ident @gol
784 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
785 -fno-jump-tables @gol
786 -freg-struct-return  -fshort-enums @gol
787 -fshort-double  -fshort-wchar @gol
788 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
789 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
790 -fargument-alias  -fargument-noalias @gol
791 -fargument-noalias-global  -fargument-noalias-anything
792 -fleading-underscore  -ftls-model=@var{model} @gol
793 -ftrapv  -fwrapv  -fbounds-check @gol
794 -fvisibility}
795 @end table
797 @menu
798 * Overall Options::     Controlling the kind of output:
799                         an executable, object files, assembler files,
800                         or preprocessed source.
801 * C Dialect Options::   Controlling the variant of C language compiled.
802 * C++ Dialect Options:: Variations on C++.
803 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
804                         and Objective-C++.
805 * Language Independent Options:: Controlling how diagnostics should be
806                         formatted.
807 * Warning Options::     How picky should the compiler be?
808 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
809 * Optimize Options::    How much optimization?
810 * Preprocessor Options:: Controlling header files and macro definitions.
811                          Also, getting dependency information for Make.
812 * Assembler Options::   Passing options to the assembler.
813 * Link Options::        Specifying libraries and so on.
814 * Directory Options::   Where to find header files and libraries.
815                         Where to find the compiler executable files.
816 * Spec Files::          How to pass switches to sub-processes.
817 * Target Options::      Running a cross-compiler, or an old version of GCC.
818 @end menu
820 @node Overall Options
821 @section Options Controlling the Kind of Output
823 Compilation can involve up to four stages: preprocessing, compilation
824 proper, assembly and linking, always in that order.  GCC is capable of
825 preprocessing and compiling several files either into several
826 assembler input files, or into one assembler input file; then each
827 assembler input file produces an object file, and linking combines all
828 the object files (those newly compiled, and those specified as input)
829 into an executable file.
831 @cindex file name suffix
832 For any given input file, the file name suffix determines what kind of
833 compilation is done:
835 @table @gcctabopt
836 @item @var{file}.c
837 C source code which must be preprocessed.
839 @item @var{file}.i
840 C source code which should not be preprocessed.
842 @item @var{file}.ii
843 C++ source code which should not be preprocessed.
845 @item @var{file}.m
846 Objective-C source code.  Note that you must link with the @file{libobjc}
847 library to make an Objective-C program work.
849 @item @var{file}.mi
850 Objective-C source code which should not be preprocessed.
852 @item @var{file}.mm
853 @itemx @var{file}.M
854 Objective-C++ source code.  Note that you must link with the @file{libobjc}
855 library to make an Objective-C++ program work.  Note that @samp{.M} refers
856 to a literal capital M@.
858 @item @var{file}.mii
859 Objective-C++ source code which should not be preprocessed.
861 @item @var{file}.h
862 C, C++, Objective-C or Objective-C++ header file to be turned into a
863 precompiled header.
865 @item @var{file}.cc
866 @itemx @var{file}.cp
867 @itemx @var{file}.cxx
868 @itemx @var{file}.cpp
869 @itemx @var{file}.CPP
870 @itemx @var{file}.c++
871 @itemx @var{file}.C
872 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
873 the last two letters must both be literally @samp{x}.  Likewise,
874 @samp{.C} refers to a literal capital C@.
876 @item @var{file}.mm
877 @itemx @var{file}.M
878 Objective-C++ source code which must be preprocessed.
880 @item @var{file}.mii
881 Objective-C++ source code which should not be preprocessed.
883 @item @var{file}.hh
884 @itemx @var{file}.H
885 C++ header file to be turned into a precompiled header.
887 @item @var{file}.f
888 @itemx @var{file}.for
889 @itemx @var{file}.FOR
890 Fixed form Fortran source code which should not be preprocessed.
892 @item @var{file}.F
893 @itemx @var{file}.fpp
894 @itemx @var{file}.FPP
895 Fixed form Fortran source code which must be preprocessed (with the traditional
896 preprocessor).
898 @item @var{file}.f90
899 @itemx @var{file}.f95
900 Free form Fortran source code which should not be preprocessed.
902 @item @var{file}.F90
903 @itemx @var{file}.F95
904 Free form Fortran source code which must be preprocessed (with the
905 traditional preprocessor).
907 @c FIXME: Descriptions of Java file types.
908 @c @var{file}.java
909 @c @var{file}.class
910 @c @var{file}.zip
911 @c @var{file}.jar
913 @item @var{file}.ads
914 Ada source code file which contains a library unit declaration (a
915 declaration of a package, subprogram, or generic, or a generic
916 instantiation), or a library unit renaming declaration (a package,
917 generic, or subprogram renaming declaration).  Such files are also
918 called @dfn{specs}.
920 @itemx @var{file}.adb
921 Ada source code file containing a library unit body (a subprogram or
922 package body).  Such files are also called @dfn{bodies}.
924 @c GCC also knows about some suffixes for languages not yet included:
925 @c Pascal:
926 @c @var{file}.p
927 @c @var{file}.pas
928 @c Ratfor:
929 @c @var{file}.r
931 @item @var{file}.s
932 Assembler code.
934 @item @var{file}.S
935 Assembler code which must be preprocessed.
937 @item @var{other}
938 An object file to be fed straight into linking.
939 Any file name with no recognized suffix is treated this way.
940 @end table
942 @opindex x
943 You can specify the input language explicitly with the @option{-x} option:
945 @table @gcctabopt
946 @item -x @var{language}
947 Specify explicitly the @var{language} for the following input files
948 (rather than letting the compiler choose a default based on the file
949 name suffix).  This option applies to all following input files until
950 the next @option{-x} option.  Possible values for @var{language} are:
951 @smallexample
952 c  c-header  c-cpp-output
953 c++  c++-header  c++-cpp-output
954 objective-c  objective-c-header  objective-c-cpp-output
955 objective-c++ objective-c++-header objective-c++-cpp-output
956 assembler  assembler-with-cpp
958 f95  f95-cpp-input
959 java
960 treelang
961 @end smallexample
963 @item -x none
964 Turn off any specification of a language, so that subsequent files are
965 handled according to their file name suffixes (as they are if @option{-x}
966 has not been used at all).
968 @item -pass-exit-codes
969 @opindex pass-exit-codes
970 Normally the @command{gcc} program will exit with the code of 1 if any
971 phase of the compiler returns a non-success return code.  If you specify
972 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
973 numerically highest error produced by any phase that returned an error
974 indication.  The C, C++, and Fortran frontends return 4, if an internal
975 compiler error is encountered.
976 @end table
978 If you only want some of the stages of compilation, you can use
979 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
980 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
981 @command{gcc} is to stop.  Note that some combinations (for example,
982 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
984 @table @gcctabopt
985 @item -c
986 @opindex c
987 Compile or assemble the source files, but do not link.  The linking
988 stage simply is not done.  The ultimate output is in the form of an
989 object file for each source file.
991 By default, the object file name for a source file is made by replacing
992 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
994 Unrecognized input files, not requiring compilation or assembly, are
995 ignored.
997 @item -S
998 @opindex S
999 Stop after the stage of compilation proper; do not assemble.  The output
1000 is in the form of an assembler code file for each non-assembler input
1001 file specified.
1003 By default, the assembler file name for a source file is made by
1004 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1006 Input files that don't require compilation are ignored.
1008 @item -E
1009 @opindex E
1010 Stop after the preprocessing stage; do not run the compiler proper.  The
1011 output is in the form of preprocessed source code, which is sent to the
1012 standard output.
1014 Input files which don't require preprocessing are ignored.
1016 @cindex output file option
1017 @item -o @var{file}
1018 @opindex o
1019 Place output in file @var{file}.  This applies regardless to whatever
1020 sort of output is being produced, whether it be an executable file,
1021 an object file, an assembler file or preprocessed C code.
1023 If @option{-o} is not specified, the default is to put an executable
1024 file in @file{a.out}, the object file for
1025 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1026 assembler file in @file{@var{source}.s}, a precompiled header file in
1027 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1028 standard output.
1030 @item -v
1031 @opindex v
1032 Print (on standard error output) the commands executed to run the stages
1033 of compilation.  Also print the version number of the compiler driver
1034 program and of the preprocessor and the compiler proper.
1036 @item -###
1037 @opindex ###
1038 Like @option{-v} except the commands are not executed and all command
1039 arguments are quoted.  This is useful for shell scripts to capture the
1040 driver-generated command lines.
1042 @item -pipe
1043 @opindex pipe
1044 Use pipes rather than temporary files for communication between the
1045 various stages of compilation.  This fails to work on some systems where
1046 the assembler is unable to read from a pipe; but the GNU assembler has
1047 no trouble.
1049 @item -combine
1050 @opindex combine
1051 If you are compiling multiple source files, this option tells the driver
1052 to pass all the source files to the compiler at once (for those
1053 languages for which the compiler can handle this).  This will allow
1054 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1055 language for which this is supported is C@.  If you pass source files for
1056 multiple languages to the driver, using this option, the driver will invoke
1057 the compiler(s) that support IMA once each, passing each compiler all the
1058 source files appropriate for it.  For those languages that do not support
1059 IMA this option will be ignored, and the compiler will be invoked once for
1060 each source file in that language.  If you use this option in conjunction
1061 with @option{-save-temps}, the compiler will generate multiple
1062 pre-processed files
1063 (one for each source file), but only one (combined) @file{.o} or
1064 @file{.s} file.
1066 @item --help
1067 @opindex help
1068 Print (on the standard output) a description of the command line options
1069 understood by @command{gcc}.  If the @option{-v} option is also specified
1070 then @option{--help} will also be passed on to the various processes
1071 invoked by @command{gcc}, so that they can display the command line options
1072 they accept.  If the @option{-Wextra} option is also specified then command
1073 line options which have no documentation associated with them will also
1074 be displayed.
1076 @item --target-help
1077 @opindex target-help
1078 Print (on the standard output) a description of target specific command
1079 line options for each tool.
1081 @item --version
1082 @opindex version
1083 Display the version number and copyrights of the invoked GCC@.
1085 @include @value{srcdir}/../libiberty/at-file.texi
1086 @end table
1088 @node Invoking G++
1089 @section Compiling C++ Programs
1091 @cindex suffixes for C++ source
1092 @cindex C++ source file suffixes
1093 C++ source files conventionally use one of the suffixes @samp{.C},
1094 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1095 @samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
1096 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1097 files with these names and compiles them as C++ programs even if you
1098 call the compiler the same way as for compiling C programs (usually
1099 with the name @command{gcc}).
1101 @findex g++
1102 @findex c++
1103 However, the use of @command{gcc} does not add the C++ library.
1104 @command{g++} is a program that calls GCC and treats @samp{.c},
1105 @samp{.h} and @samp{.i} files as C++ source files instead of C source
1106 files unless @option{-x} is used, and automatically specifies linking
1107 against the C++ library.  This program is also useful when
1108 precompiling a C header file with a @samp{.h} extension for use in C++
1109 compilations.  On many systems, @command{g++} is also installed with
1110 the name @command{c++}.
1112 @cindex invoking @command{g++}
1113 When you compile C++ programs, you may specify many of the same
1114 command-line options that you use for compiling programs in any
1115 language; or command-line options meaningful for C and related
1116 languages; or options that are meaningful only for C++ programs.
1117 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1118 explanations of options for languages related to C@.
1119 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1120 explanations of options that are meaningful only for C++ programs.
1122 @node C Dialect Options
1123 @section Options Controlling C Dialect
1124 @cindex dialect options
1125 @cindex language dialect options
1126 @cindex options, dialect
1128 The following options control the dialect of C (or languages derived
1129 from C, such as C++, Objective-C and Objective-C++) that the compiler
1130 accepts:
1132 @table @gcctabopt
1133 @cindex ANSI support
1134 @cindex ISO support
1135 @item -ansi
1136 @opindex ansi
1137 In C mode, support all ISO C90 programs.  In C++ mode,
1138 remove GNU extensions that conflict with ISO C++.
1140 This turns off certain features of GCC that are incompatible with ISO
1141 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1142 such as the @code{asm} and @code{typeof} keywords, and
1143 predefined macros such as @code{unix} and @code{vax} that identify the
1144 type of system you are using.  It also enables the undesirable and
1145 rarely used ISO trigraph feature.  For the C compiler,
1146 it disables recognition of C++ style @samp{//} comments as well as
1147 the @code{inline} keyword.
1149 The alternate keywords @code{__asm__}, @code{__extension__},
1150 @code{__inline__} and @code{__typeof__} continue to work despite
1151 @option{-ansi}.  You would not want to use them in an ISO C program, of
1152 course, but it is useful to put them in header files that might be included
1153 in compilations done with @option{-ansi}.  Alternate predefined macros
1154 such as @code{__unix__} and @code{__vax__} are also available, with or
1155 without @option{-ansi}.
1157 The @option{-ansi} option does not cause non-ISO programs to be
1158 rejected gratuitously.  For that, @option{-pedantic} is required in
1159 addition to @option{-ansi}.  @xref{Warning Options}.
1161 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1162 option is used.  Some header files may notice this macro and refrain
1163 from declaring certain functions or defining certain macros that the
1164 ISO standard doesn't call for; this is to avoid interfering with any
1165 programs that might use these names for other things.
1167 Functions which would normally be built in but do not have semantics
1168 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1169 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1170 built-in functions provided by GCC}, for details of the functions
1171 affected.
1173 @item -std=
1174 @opindex std
1175 Determine the language standard.  This option is currently only
1176 supported when compiling C or C++.  A value for this option must be
1177 provided; possible values are
1179 @table @samp
1180 @item c89
1181 @itemx iso9899:1990
1182 ISO C90 (same as @option{-ansi}).
1184 @item iso9899:199409
1185 ISO C90 as modified in amendment 1.
1187 @item c99
1188 @itemx c9x
1189 @itemx iso9899:1999
1190 @itemx iso9899:199x
1191 ISO C99.  Note that this standard is not yet fully supported; see
1192 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1193 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1195 @item gnu89
1196 Default, ISO C90 plus GNU extensions (including some C99 features).
1198 @item gnu99
1199 @itemx gnu9x
1200 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1201 this will become the default.  The name @samp{gnu9x} is deprecated.
1203 @item c++98
1204 The 1998 ISO C++ standard plus amendments.
1206 @item gnu++98
1207 The same as @option{-std=c++98} plus GNU extensions.  This is the
1208 default for C++ code.
1210 @item c++0x
1211 The working draft of the upcoming ISO C++0x standard. This option
1212 enables experimental features that are likely to be included in
1213 C++0x. The working draft is constantly changing, and any feature that is
1214 enabled by this flag may be removed from future versions of GCC if it is
1215 not part of the C++0x standard.
1217 @item gnu++0x
1218 The same as @option{-std=c++0x} plus GNU extensions. As with
1219 @option{-std=c++0x}, this option enables experimental features that may
1220 be removed in future versions of GCC.
1221 @end table
1223 Even when this option is not specified, you can still use some of the
1224 features of newer standards in so far as they do not conflict with
1225 previous C standards.  For example, you may use @code{__restrict__} even
1226 when @option{-std=c99} is not specified.
1228 The @option{-std} options specifying some version of ISO C have the same
1229 effects as @option{-ansi}, except that features that were not in ISO C90
1230 but are in the specified version (for example, @samp{//} comments and
1231 the @code{inline} keyword in ISO C99) are not disabled.
1233 @xref{Standards,,Language Standards Supported by GCC}, for details of
1234 these standard versions.
1236 @item -aux-info @var{filename}
1237 @opindex aux-info
1238 Output to the given filename prototyped declarations for all functions
1239 declared and/or defined in a translation unit, including those in header
1240 files.  This option is silently ignored in any language other than C@.
1242 Besides declarations, the file indicates, in comments, the origin of
1243 each declaration (source file and line), whether the declaration was
1244 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1245 @samp{O} for old, respectively, in the first character after the line
1246 number and the colon), and whether it came from a declaration or a
1247 definition (@samp{C} or @samp{F}, respectively, in the following
1248 character).  In the case of function definitions, a K&R-style list of
1249 arguments followed by their declarations is also provided, inside
1250 comments, after the declaration.
1252 @item -fno-asm
1253 @opindex fno-asm
1254 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1255 keyword, so that code can use these words as identifiers.  You can use
1256 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1257 instead.  @option{-ansi} implies @option{-fno-asm}.
1259 In C++, this switch only affects the @code{typeof} keyword, since
1260 @code{asm} and @code{inline} are standard keywords.  You may want to
1261 use the @option{-fno-gnu-keywords} flag instead, which has the same
1262 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1263 switch only affects the @code{asm} and @code{typeof} keywords, since
1264 @code{inline} is a standard keyword in ISO C99.
1266 @item -fno-builtin
1267 @itemx -fno-builtin-@var{function}
1268 @opindex fno-builtin
1269 @cindex built-in functions
1270 Don't recognize built-in functions that do not begin with
1271 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1272 functions provided by GCC}, for details of the functions affected,
1273 including those which are not built-in functions when @option{-ansi} or
1274 @option{-std} options for strict ISO C conformance are used because they
1275 do not have an ISO standard meaning.
1277 GCC normally generates special code to handle certain built-in functions
1278 more efficiently; for instance, calls to @code{alloca} may become single
1279 instructions that adjust the stack directly, and calls to @code{memcpy}
1280 may become inline copy loops.  The resulting code is often both smaller
1281 and faster, but since the function calls no longer appear as such, you
1282 cannot set a breakpoint on those calls, nor can you change the behavior
1283 of the functions by linking with a different library.  In addition,
1284 when a function is recognized as a built-in function, GCC may use
1285 information about that function to warn about problems with calls to
1286 that function, or to generate more efficient code, even if the
1287 resulting code still contains calls to that function.  For example,
1288 warnings are given with @option{-Wformat} for bad calls to
1289 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1290 known not to modify global memory.
1292 With the @option{-fno-builtin-@var{function}} option
1293 only the built-in function @var{function} is
1294 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1295 function is named this is not built-in in this version of GCC, this
1296 option is ignored.  There is no corresponding
1297 @option{-fbuiltin-@var{function}} option; if you wish to enable
1298 built-in functions selectively when using @option{-fno-builtin} or
1299 @option{-ffreestanding}, you may define macros such as:
1301 @smallexample
1302 #define abs(n)          __builtin_abs ((n))
1303 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1304 @end smallexample
1306 @item -fhosted
1307 @opindex fhosted
1308 @cindex hosted environment
1310 Assert that compilation takes place in a hosted environment.  This implies
1311 @option{-fbuiltin}.  A hosted environment is one in which the
1312 entire standard library is available, and in which @code{main} has a return
1313 type of @code{int}.  Examples are nearly everything except a kernel.
1314 This is equivalent to @option{-fno-freestanding}.
1316 @item -ffreestanding
1317 @opindex ffreestanding
1318 @cindex hosted environment
1320 Assert that compilation takes place in a freestanding environment.  This
1321 implies @option{-fno-builtin}.  A freestanding environment
1322 is one in which the standard library may not exist, and program startup may
1323 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1324 This is equivalent to @option{-fno-hosted}.
1326 @xref{Standards,,Language Standards Supported by GCC}, for details of
1327 freestanding and hosted environments.
1329 @item -fopenmp
1330 @opindex fopenmp
1331 @cindex openmp parallel
1332 Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1333 @code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1334 compiler generates parallel code according to the OpenMP Application
1335 Program Interface v2.5 @w{@uref{http://www.openmp.org/}}.
1337 @item -fms-extensions
1338 @opindex fms-extensions
1339 Accept some non-standard constructs used in Microsoft header files.
1341 Some cases of unnamed fields in structures and unions are only
1342 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1343 fields within structs/unions}, for details.
1345 @item -trigraphs
1346 @opindex trigraphs
1347 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1348 options for strict ISO C conformance) implies @option{-trigraphs}.
1350 @item -no-integrated-cpp
1351 @opindex no-integrated-cpp
1352 Performs a compilation in two passes: preprocessing and compiling.  This
1353 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1354 @option{-B} option.  The user supplied compilation step can then add in
1355 an additional preprocessing step after normal preprocessing but before
1356 compiling.  The default is to use the integrated cpp (internal cpp)
1358 The semantics of this option will change if "cc1", "cc1plus", and
1359 "cc1obj" are merged.
1361 @cindex traditional C language
1362 @cindex C language, traditional
1363 @item -traditional
1364 @itemx -traditional-cpp
1365 @opindex traditional-cpp
1366 @opindex traditional
1367 Formerly, these options caused GCC to attempt to emulate a pre-standard
1368 C compiler.  They are now only supported with the @option{-E} switch.
1369 The preprocessor continues to support a pre-standard mode.  See the GNU
1370 CPP manual for details.
1372 @item -fcond-mismatch
1373 @opindex fcond-mismatch
1374 Allow conditional expressions with mismatched types in the second and
1375 third arguments.  The value of such an expression is void.  This option
1376 is not supported for C++.
1378 @item -funsigned-char
1379 @opindex funsigned-char
1380 Let the type @code{char} be unsigned, like @code{unsigned char}.
1382 Each kind of machine has a default for what @code{char} should
1383 be.  It is either like @code{unsigned char} by default or like
1384 @code{signed char} by default.
1386 Ideally, a portable program should always use @code{signed char} or
1387 @code{unsigned char} when it depends on the signedness of an object.
1388 But many programs have been written to use plain @code{char} and
1389 expect it to be signed, or expect it to be unsigned, depending on the
1390 machines they were written for.  This option, and its inverse, let you
1391 make such a program work with the opposite default.
1393 The type @code{char} is always a distinct type from each of
1394 @code{signed char} or @code{unsigned char}, even though its behavior
1395 is always just like one of those two.
1397 @item -fsigned-char
1398 @opindex fsigned-char
1399 Let the type @code{char} be signed, like @code{signed char}.
1401 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1402 the negative form of @option{-funsigned-char}.  Likewise, the option
1403 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1405 @item -fsigned-bitfields
1406 @itemx -funsigned-bitfields
1407 @itemx -fno-signed-bitfields
1408 @itemx -fno-unsigned-bitfields
1409 @opindex fsigned-bitfields
1410 @opindex funsigned-bitfields
1411 @opindex fno-signed-bitfields
1412 @opindex fno-unsigned-bitfields
1413 These options control whether a bit-field is signed or unsigned, when the
1414 declaration does not use either @code{signed} or @code{unsigned}.  By
1415 default, such a bit-field is signed, because this is consistent: the
1416 basic integer types such as @code{int} are signed types.
1417 @end table
1419 @node C++ Dialect Options
1420 @section Options Controlling C++ Dialect
1422 @cindex compiler options, C++
1423 @cindex C++ options, command line
1424 @cindex options, C++
1425 This section describes the command-line options that are only meaningful
1426 for C++ programs; but you can also use most of the GNU compiler options
1427 regardless of what language your program is in.  For example, you
1428 might compile a file @code{firstClass.C} like this:
1430 @smallexample
1431 g++ -g -frepo -O -c firstClass.C
1432 @end smallexample
1434 @noindent
1435 In this example, only @option{-frepo} is an option meant
1436 only for C++ programs; you can use the other options with any
1437 language supported by GCC@.
1439 Here is a list of options that are @emph{only} for compiling C++ programs:
1441 @table @gcctabopt
1443 @item -fabi-version=@var{n}
1444 @opindex fabi-version
1445 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1446 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1447 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1448 the version that conforms most closely to the C++ ABI specification.
1449 Therefore, the ABI obtained using version 0 will change as ABI bugs
1450 are fixed.
1452 The default is version 2.
1454 @item -fno-access-control
1455 @opindex fno-access-control
1456 Turn off all access checking.  This switch is mainly useful for working
1457 around bugs in the access control code.
1459 @item -fcheck-new
1460 @opindex fcheck-new
1461 Check that the pointer returned by @code{operator new} is non-null
1462 before attempting to modify the storage allocated.  This check is
1463 normally unnecessary because the C++ standard specifies that
1464 @code{operator new} will only return @code{0} if it is declared
1465 @samp{throw()}, in which case the compiler will always check the
1466 return value even without this option.  In all other cases, when
1467 @code{operator new} has a non-empty exception specification, memory
1468 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1469 @samp{new (nothrow)}.
1471 @item -fconserve-space
1472 @opindex fconserve-space
1473 Put uninitialized or runtime-initialized global variables into the
1474 common segment, as C does.  This saves space in the executable at the
1475 cost of not diagnosing duplicate definitions.  If you compile with this
1476 flag and your program mysteriously crashes after @code{main()} has
1477 completed, you may have an object that is being destroyed twice because
1478 two definitions were merged.
1480 This option is no longer useful on most targets, now that support has
1481 been added for putting variables into BSS without making them common.
1483 @item -ffriend-injection
1484 @opindex ffriend-injection
1485 Inject friend functions into the enclosing namespace, so that they are
1486 visible outside the scope of the class in which they are declared.
1487 Friend functions were documented to work this way in the old Annotated
1488 C++ Reference Manual, and versions of G++ before 4.1 always worked
1489 that way.  However, in ISO C++ a friend function which is not declared
1490 in an enclosing scope can only be found using argument dependent
1491 lookup.  This option causes friends to be injected as they were in
1492 earlier releases.
1494 This option is for compatibility, and may be removed in a future
1495 release of G++.
1497 @item -fno-elide-constructors
1498 @opindex fno-elide-constructors
1499 The C++ standard allows an implementation to omit creating a temporary
1500 which is only used to initialize another object of the same type.
1501 Specifying this option disables that optimization, and forces G++ to
1502 call the copy constructor in all cases.
1504 @item -fno-enforce-eh-specs
1505 @opindex fno-enforce-eh-specs
1506 Don't generate code to check for violation of exception specifications
1507 at runtime.  This option violates the C++ standard, but may be useful
1508 for reducing code size in production builds, much like defining
1509 @samp{NDEBUG}.  This does not give user code permission to throw
1510 exceptions in violation of the exception specifications; the compiler
1511 will still optimize based on the specifications, so throwing an
1512 unexpected exception will result in undefined behavior.
1514 @item -ffor-scope
1515 @itemx -fno-for-scope
1516 @opindex ffor-scope
1517 @opindex fno-for-scope
1518 If @option{-ffor-scope} is specified, the scope of variables declared in
1519 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1520 as specified by the C++ standard.
1521 If @option{-fno-for-scope} is specified, the scope of variables declared in
1522 a @i{for-init-statement} extends to the end of the enclosing scope,
1523 as was the case in old versions of G++, and other (traditional)
1524 implementations of C++.
1526 The default if neither flag is given to follow the standard,
1527 but to allow and give a warning for old-style code that would
1528 otherwise be invalid, or have different behavior.
1530 @item -fno-gnu-keywords
1531 @opindex fno-gnu-keywords
1532 Do not recognize @code{typeof} as a keyword, so that code can use this
1533 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1534 @option{-ansi} implies @option{-fno-gnu-keywords}.
1536 @item -fno-implicit-templates
1537 @opindex fno-implicit-templates
1538 Never emit code for non-inline templates which are instantiated
1539 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1540 @xref{Template Instantiation}, for more information.
1542 @item -fno-implicit-inline-templates
1543 @opindex fno-implicit-inline-templates
1544 Don't emit code for implicit instantiations of inline templates, either.
1545 The default is to handle inlines differently so that compiles with and
1546 without optimization will need the same set of explicit instantiations.
1548 @item -fno-implement-inlines
1549 @opindex fno-implement-inlines
1550 To save space, do not emit out-of-line copies of inline functions
1551 controlled by @samp{#pragma implementation}.  This will cause linker
1552 errors if these functions are not inlined everywhere they are called.
1554 @item -fms-extensions
1555 @opindex fms-extensions
1556 Disable pedantic warnings about constructs used in MFC, such as implicit
1557 int and getting a pointer to member function via non-standard syntax.
1559 @item -fno-nonansi-builtins
1560 @opindex fno-nonansi-builtins
1561 Disable built-in declarations of functions that are not mandated by
1562 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1563 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1565 @item -fno-operator-names
1566 @opindex fno-operator-names
1567 Do not treat the operator name keywords @code{and}, @code{bitand},
1568 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1569 synonyms as keywords.
1571 @item -fno-optional-diags
1572 @opindex fno-optional-diags
1573 Disable diagnostics that the standard says a compiler does not need to
1574 issue.  Currently, the only such diagnostic issued by G++ is the one for
1575 a name having multiple meanings within a class.
1577 @item -fpermissive
1578 @opindex fpermissive
1579 Downgrade some diagnostics about nonconformant code from errors to
1580 warnings.  Thus, using @option{-fpermissive} will allow some
1581 nonconforming code to compile.
1583 @item -frepo
1584 @opindex frepo
1585 Enable automatic template instantiation at link time.  This option also
1586 implies @option{-fno-implicit-templates}.  @xref{Template
1587 Instantiation}, for more information.
1589 @item -fno-rtti
1590 @opindex fno-rtti
1591 Disable generation of information about every class with virtual
1592 functions for use by the C++ runtime type identification features
1593 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1594 of the language, you can save some space by using this flag.  Note that
1595 exception handling uses the same information, but it will generate it as
1596 needed. The @samp{dynamic_cast} operator can still be used for casts that
1597 do not require runtime type information, i.e. casts to @code{void *} or to
1598 unambiguous base classes.
1600 @item -fstats
1601 @opindex fstats
1602 Emit statistics about front-end processing at the end of the compilation.
1603 This information is generally only useful to the G++ development team.
1605 @item -ftemplate-depth-@var{n}
1606 @opindex ftemplate-depth
1607 Set the maximum instantiation depth for template classes to @var{n}.
1608 A limit on the template instantiation depth is needed to detect
1609 endless recursions during template class instantiation.  ANSI/ISO C++
1610 conforming programs must not rely on a maximum depth greater than 17.
1612 @item -fno-threadsafe-statics
1613 @opindex fno-threadsafe-statics
1614 Do not emit the extra code to use the routines specified in the C++
1615 ABI for thread-safe initialization of local statics.  You can use this
1616 option to reduce code size slightly in code that doesn't need to be
1617 thread-safe.
1619 @item -fuse-cxa-atexit
1620 @opindex fuse-cxa-atexit
1621 Register destructors for objects with static storage duration with the
1622 @code{__cxa_atexit} function rather than the @code{atexit} function.
1623 This option is required for fully standards-compliant handling of static
1624 destructors, but will only work if your C library supports
1625 @code{__cxa_atexit}.
1627 @item -fno-use-cxa-get-exception-ptr
1628 @opindex fno-use-cxa-get-exception-ptr
1629 Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
1630 will cause @code{std::uncaught_exception} to be incorrect, but is necessary
1631 if the runtime routine is not available.
1633 @item -fvisibility-inlines-hidden
1634 @opindex fvisibility-inlines-hidden
1635 This switch declares that the user does not attempt to compare
1636 pointers to inline methods where the addresses of the two functions
1637 were taken in different shared objects.
1639 The effect of this is that GCC may, effectively, mark inline methods with
1640 @code{__attribute__ ((visibility ("hidden")))} so that they do not
1641 appear in the export table of a DSO and do not require a PLT indirection
1642 when used within the DSO@.  Enabling this option can have a dramatic effect
1643 on load and link times of a DSO as it massively reduces the size of the
1644 dynamic export table when the library makes heavy use of templates.
1646 The behaviour of this switch is not quite the same as marking the
1647 methods as hidden directly, because it does not affect static variables
1648 local to the function or cause the compiler to deduce that
1649 the function is defined in only one shared object.
1651 You may mark a method as having a visibility explicitly to negate the
1652 effect of the switch for that method.  For example, if you do want to
1653 compare pointers to a particular inline method, you might mark it as
1654 having default visibility.  Marking the enclosing class with explicit
1655 visibility will have no effect.
1657 Explicitly instantiated inline methods are unaffected by this option
1658 as their linkage might otherwise cross a shared library boundary.
1659 @xref{Template Instantiation}.
1661 @item -fno-weak
1662 @opindex fno-weak
1663 Do not use weak symbol support, even if it is provided by the linker.
1664 By default, G++ will use weak symbols if they are available.  This
1665 option exists only for testing, and should not be used by end-users;
1666 it will result in inferior code and has no benefits.  This option may
1667 be removed in a future release of G++.
1669 @item -nostdinc++
1670 @opindex nostdinc++
1671 Do not search for header files in the standard directories specific to
1672 C++, but do still search the other standard directories.  (This option
1673 is used when building the C++ library.)
1674 @end table
1676 In addition, these optimization, warning, and code generation options
1677 have meanings only for C++ programs:
1679 @table @gcctabopt
1680 @item -fno-default-inline
1681 @opindex fno-default-inline
1682 Do not assume @samp{inline} for functions defined inside a class scope.
1683 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1684 functions will have linkage like inline functions; they just won't be
1685 inlined by default.
1687 @item -Wabi @r{(C++ only)}
1688 @opindex Wabi
1689 Warn when G++ generates code that is probably not compatible with the
1690 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
1691 all such cases, there are probably some cases that are not warned about,
1692 even though G++ is generating incompatible code.  There may also be
1693 cases where warnings are emitted even though the code that is generated
1694 will be compatible.
1696 You should rewrite your code to avoid these warnings if you are
1697 concerned about the fact that code generated by G++ may not be binary
1698 compatible with code generated by other compilers.
1700 The known incompatibilities at this point include:
1702 @itemize @bullet
1704 @item
1705 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1706 pack data into the same byte as a base class.  For example:
1708 @smallexample
1709 struct A @{ virtual void f(); int f1 : 1; @};
1710 struct B : public A @{ int f2 : 1; @};
1711 @end smallexample
1713 @noindent
1714 In this case, G++ will place @code{B::f2} into the same byte
1715 as@code{A::f1}; other compilers will not.  You can avoid this problem
1716 by explicitly padding @code{A} so that its size is a multiple of the
1717 byte size on your platform; that will cause G++ and other compilers to
1718 layout @code{B} identically.
1720 @item
1721 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1722 tail padding when laying out virtual bases.  For example:
1724 @smallexample
1725 struct A @{ virtual void f(); char c1; @};
1726 struct B @{ B(); char c2; @};
1727 struct C : public A, public virtual B @{@};
1728 @end smallexample
1730 @noindent
1731 In this case, G++ will not place @code{B} into the tail-padding for
1732 @code{A}; other compilers will.  You can avoid this problem by
1733 explicitly padding @code{A} so that its size is a multiple of its
1734 alignment (ignoring virtual base classes); that will cause G++ and other
1735 compilers to layout @code{C} identically.
1737 @item
1738 Incorrect handling of bit-fields with declared widths greater than that
1739 of their underlying types, when the bit-fields appear in a union.  For
1740 example:
1742 @smallexample
1743 union U @{ int i : 4096; @};
1744 @end smallexample
1746 @noindent
1747 Assuming that an @code{int} does not have 4096 bits, G++ will make the
1748 union too small by the number of bits in an @code{int}.
1750 @item
1751 Empty classes can be placed at incorrect offsets.  For example:
1753 @smallexample
1754 struct A @{@};
1756 struct B @{
1757   A a;
1758   virtual void f ();
1761 struct C : public B, public A @{@};
1762 @end smallexample
1764 @noindent
1765 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1766 it should be placed at offset zero.  G++ mistakenly believes that the
1767 @code{A} data member of @code{B} is already at offset zero.
1769 @item
1770 Names of template functions whose types involve @code{typename} or
1771 template template parameters can be mangled incorrectly.
1773 @smallexample
1774 template <typename Q>
1775 void f(typename Q::X) @{@}
1777 template <template <typename> class Q>
1778 void f(typename Q<int>::X) @{@}
1779 @end smallexample
1781 @noindent
1782 Instantiations of these templates may be mangled incorrectly.
1784 @end itemize
1786 @item -Wctor-dtor-privacy @r{(C++ only)}
1787 @opindex Wctor-dtor-privacy
1788 Warn when a class seems unusable because all the constructors or
1789 destructors in that class are private, and it has neither friends nor
1790 public static member functions.
1792 @item -Wnon-virtual-dtor @r{(C++ only)}
1793 @opindex Wnon-virtual-dtor
1794 Warn when a class appears to be polymorphic, thereby requiring a virtual
1795 destructor, yet it declares a non-virtual one.  This warning is also
1796 enabled if -Weffc++ is specified.
1798 @item -Wreorder @r{(C++ only)}
1799 @opindex Wreorder
1800 @cindex reordering, warning
1801 @cindex warning for reordering of member initializers
1802 Warn when the order of member initializers given in the code does not
1803 match the order in which they must be executed.  For instance:
1805 @smallexample
1806 struct A @{
1807   int i;
1808   int j;
1809   A(): j (0), i (1) @{ @}
1811 @end smallexample
1813 The compiler will rearrange the member initializers for @samp{i}
1814 and @samp{j} to match the declaration order of the members, emitting
1815 a warning to that effect.  This warning is enabled by @option{-Wall}.
1816 @end table
1818 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1820 @table @gcctabopt
1821 @item -Weffc++ @r{(C++ only)}
1822 @opindex Weffc++
1823 Warn about violations of the following style guidelines from Scott Meyers'
1824 @cite{Effective C++} book:
1826 @itemize @bullet
1827 @item
1828 Item 11:  Define a copy constructor and an assignment operator for classes
1829 with dynamically allocated memory.
1831 @item
1832 Item 12:  Prefer initialization to assignment in constructors.
1834 @item
1835 Item 14:  Make destructors virtual in base classes.
1837 @item
1838 Item 15:  Have @code{operator=} return a reference to @code{*this}.
1840 @item
1841 Item 23:  Don't try to return a reference when you must return an object.
1843 @end itemize
1845 Also warn about violations of the following style guidelines from
1846 Scott Meyers' @cite{More Effective C++} book:
1848 @itemize @bullet
1849 @item
1850 Item 6:  Distinguish between prefix and postfix forms of increment and
1851 decrement operators.
1853 @item
1854 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
1856 @end itemize
1858 When selecting this option, be aware that the standard library
1859 headers do not obey all of these guidelines; use @samp{grep -v}
1860 to filter out those warnings.
1862 @item -Wno-deprecated @r{(C++ only)}
1863 @opindex Wno-deprecated
1864 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
1866 @item -Wstrict-null-sentinel @r{(C++ only)}
1867 @opindex Wstrict-null-sentinel
1868 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
1869 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
1870 to @code{__null}.  Although it is a null pointer constant not a null pointer,
1871 it is guaranteed to of the same size as a pointer.  But this use is
1872 not portable across different compilers.
1874 @item -Wno-non-template-friend @r{(C++ only)}
1875 @opindex Wno-non-template-friend
1876 Disable warnings when non-templatized friend functions are declared
1877 within a template.  Since the advent of explicit template specification
1878 support in G++, if the name of the friend is an unqualified-id (i.e.,
1879 @samp{friend foo(int)}), the C++ language specification demands that the
1880 friend declare or define an ordinary, nontemplate function.  (Section
1881 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
1882 could be interpreted as a particular specialization of a templatized
1883 function.  Because this non-conforming behavior is no longer the default
1884 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
1885 check existing code for potential trouble spots and is on by default.
1886 This new compiler behavior can be turned off with
1887 @option{-Wno-non-template-friend} which keeps the conformant compiler code
1888 but disables the helpful warning.
1890 @item -Wold-style-cast @r{(C++ only)}
1891 @opindex Wold-style-cast
1892 Warn if an old-style (C-style) cast to a non-void type is used within
1893 a C++ program.  The new-style casts (@samp{dynamic_cast},
1894 @samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
1895 less vulnerable to unintended effects and much easier to search for.
1897 @item -Woverloaded-virtual @r{(C++ only)}
1898 @opindex Woverloaded-virtual
1899 @cindex overloaded virtual fn, warning
1900 @cindex warning for overloaded virtual fn
1901 Warn when a function declaration hides virtual functions from a
1902 base class.  For example, in:
1904 @smallexample
1905 struct A @{
1906   virtual void f();
1909 struct B: public A @{
1910   void f(int);
1912 @end smallexample
1914 the @code{A} class version of @code{f} is hidden in @code{B}, and code
1915 like:
1917 @smallexample
1918 B* b;
1919 b->f();
1920 @end smallexample
1922 will fail to compile.
1924 @item -Wno-pmf-conversions @r{(C++ only)}
1925 @opindex Wno-pmf-conversions
1926 Disable the diagnostic for converting a bound pointer to member function
1927 to a plain pointer.
1929 @item -Wsign-promo @r{(C++ only)}
1930 @opindex Wsign-promo
1931 Warn when overload resolution chooses a promotion from unsigned or
1932 enumerated type to a signed type, over a conversion to an unsigned type of
1933 the same size.  Previous versions of G++ would try to preserve
1934 unsignedness, but the standard mandates the current behavior.
1936 @smallexample
1937 struct A @{
1938   operator int ();
1939   A& operator = (int);
1942 main ()
1944   A a,b;
1945   a = b;
1947 @end smallexample
1949 In this example, G++ will synthesize a default @samp{A& operator =
1950 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1951 @end table
1953 @node Objective-C and Objective-C++ Dialect Options
1954 @section Options Controlling Objective-C and Objective-C++ Dialects
1956 @cindex compiler options, Objective-C and Objective-C++
1957 @cindex Objective-C and Objective-C++ options, command line
1958 @cindex options, Objective-C and Objective-C++
1959 (NOTE: This manual does not describe the Objective-C and Objective-C++
1960 languages themselves.  See @xref{Standards,,Language Standards
1961 Supported by GCC}, for references.)
1963 This section describes the command-line options that are only meaningful
1964 for Objective-C and Objective-C++ programs, but you can also use most of
1965 the language-independent GNU compiler options.
1966 For example, you might compile a file @code{some_class.m} like this:
1968 @smallexample
1969 gcc -g -fgnu-runtime -O -c some_class.m
1970 @end smallexample
1972 @noindent
1973 In this example, @option{-fgnu-runtime} is an option meant only for
1974 Objective-C and Objective-C++ programs; you can use the other options with
1975 any language supported by GCC@.
1977 Note that since Objective-C is an extension of the C language, Objective-C
1978 compilations may also use options specific to the C front-end (e.g.,
1979 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
1980 C++-specific options (e.g., @option{-Wabi}).
1982 Here is a list of options that are @emph{only} for compiling Objective-C
1983 and Objective-C++ programs:
1985 @table @gcctabopt
1986 @item -fconstant-string-class=@var{class-name}
1987 @opindex fconstant-string-class
1988 Use @var{class-name} as the name of the class to instantiate for each
1989 literal string specified with the syntax @code{@@"@dots{}"}.  The default
1990 class name is @code{NXConstantString} if the GNU runtime is being used, and
1991 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
1992 @option{-fconstant-cfstrings} option, if also present, will override the
1993 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
1994 to be laid out as constant CoreFoundation strings.
1996 @item -fgnu-runtime
1997 @opindex fgnu-runtime
1998 Generate object code compatible with the standard GNU Objective-C
1999 runtime.  This is the default for most types of systems.
2001 @item -fnext-runtime
2002 @opindex fnext-runtime
2003 Generate output compatible with the NeXT runtime.  This is the default
2004 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2005 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2006 used.
2008 @item -fno-nil-receivers
2009 @opindex fno-nil-receivers
2010 Assume that all Objective-C message dispatches (e.g.,
2011 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
2012 is not @code{nil}.  This allows for more efficient entry points in the runtime
2013 to be used.  Currently, this option is only available in conjunction with
2014 the NeXT runtime on Mac OS X 10.3 and later.
2016 @item -fobjc-call-cxx-cdtors
2017 @opindex fobjc-call-cxx-cdtors
2018 For each Objective-C class, check if any of its instance variables is a
2019 C++ object with a non-trivial default constructor.  If so, synthesize a
2020 special @code{- (id) .cxx_construct} instance method that will run
2021 non-trivial default constructors on any such instance variables, in order,
2022 and then return @code{self}.  Similarly, check if any instance variable
2023 is a C++ object with a non-trivial destructor, and if so, synthesize a
2024 special @code{- (void) .cxx_destruct} method that will run
2025 all such default destructors, in reverse order.
2027 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2028 thusly generated will only operate on instance variables declared in the
2029 current Objective-C class, and not those inherited from superclasses.  It
2030 is the responsibility of the Objective-C runtime to invoke all such methods
2031 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2032 will be invoked by the runtime immediately after a new object
2033 instance is allocated; the @code{- (void) .cxx_destruct} methods will
2034 be invoked immediately before the runtime deallocates an object instance.
2036 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2037 support for invoking the @code{- (id) .cxx_construct} and
2038 @code{- (void) .cxx_destruct} methods.
2040 @item -fobjc-direct-dispatch
2041 @opindex fobjc-direct-dispatch
2042 Allow fast jumps to the message dispatcher.  On Darwin this is
2043 accomplished via the comm page.
2045 @item -fobjc-exceptions
2046 @opindex fobjc-exceptions
2047 Enable syntactic support for structured exception handling in Objective-C,
2048 similar to what is offered by C++ and Java.  This option is
2049 unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2050 earlier.
2052 @smallexample
2053   @@try @{
2054     @dots{}
2055        @@throw expr;
2056     @dots{}
2057   @}
2058   @@catch (AnObjCClass *exc) @{
2059     @dots{}
2060       @@throw expr;
2061     @dots{}
2062       @@throw;
2063     @dots{}
2064   @}
2065   @@catch (AnotherClass *exc) @{
2066     @dots{}
2067   @}
2068   @@catch (id allOthers) @{
2069     @dots{}
2070   @}
2071   @@finally @{
2072     @dots{}
2073       @@throw expr;
2074     @dots{}
2075   @}
2076 @end smallexample
2078 The @code{@@throw} statement may appear anywhere in an Objective-C or
2079 Objective-C++ program; when used inside of a @code{@@catch} block, the
2080 @code{@@throw} may appear without an argument (as shown above), in which case
2081 the object caught by the @code{@@catch} will be rethrown.
2083 Note that only (pointers to) Objective-C objects may be thrown and
2084 caught using this scheme.  When an object is thrown, it will be caught
2085 by the nearest @code{@@catch} clause capable of handling objects of that type,
2086 analogously to how @code{catch} blocks work in C++ and Java.  A
2087 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2088 any and all Objective-C exceptions not caught by previous @code{@@catch}
2089 clauses (if any).
2091 The @code{@@finally} clause, if present, will be executed upon exit from the
2092 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2093 regardless of whether any exceptions are thrown, caught or rethrown
2094 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2095 of the @code{finally} clause in Java.
2097 There are several caveats to using the new exception mechanism:
2099 @itemize @bullet
2100 @item
2101 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2102 idioms provided by the @code{NSException} class, the new
2103 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2104 systems, due to additional functionality needed in the (NeXT) Objective-C
2105 runtime.
2107 @item
2108 As mentioned above, the new exceptions do not support handling
2109 types other than Objective-C objects.   Furthermore, when used from
2110 Objective-C++, the Objective-C exception model does not interoperate with C++
2111 exceptions at this time.  This means you cannot @code{@@throw} an exception
2112 from Objective-C and @code{catch} it in C++, or vice versa
2113 (i.e., @code{throw @dots{} @@catch}).
2114 @end itemize
2116 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2117 blocks for thread-safe execution:
2119 @smallexample
2120   @@synchronized (ObjCClass *guard) @{
2121     @dots{}
2122   @}
2123 @end smallexample
2125 Upon entering the @code{@@synchronized} block, a thread of execution shall
2126 first check whether a lock has been placed on the corresponding @code{guard}
2127 object by another thread.  If it has, the current thread shall wait until
2128 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2129 the current thread will place its own lock on it, execute the code contained in
2130 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2131 making @code{guard} available to other threads).
2133 Unlike Java, Objective-C does not allow for entire methods to be marked
2134 @code{@@synchronized}.  Note that throwing exceptions out of
2135 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2136 to be unlocked properly.
2138 @item -fobjc-gc
2139 @opindex fobjc-gc
2140 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2142 @item -freplace-objc-classes
2143 @opindex freplace-objc-classes
2144 Emit a special marker instructing @command{ld(1)} not to statically link in
2145 the resulting object file, and allow @command{dyld(1)} to load it in at
2146 run time instead.  This is used in conjunction with the Fix-and-Continue
2147 debugging mode, where the object file in question may be recompiled and
2148 dynamically reloaded in the course of program execution, without the need
2149 to restart the program itself.  Currently, Fix-and-Continue functionality
2150 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2151 and later.
2153 @item -fzero-link
2154 @opindex fzero-link
2155 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2156 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2157 compile time) with static class references that get initialized at load time,
2158 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2159 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2160 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2161 for individual class implementations to be modified during program execution.
2163 @item -gen-decls
2164 @opindex gen-decls
2165 Dump interface declarations for all classes seen in the source file to a
2166 file named @file{@var{sourcename}.decl}.
2168 @item -Wassign-intercept
2169 @opindex Wassign-intercept
2170 Warn whenever an Objective-C assignment is being intercepted by the
2171 garbage collector.
2173 @item -Wno-protocol
2174 @opindex Wno-protocol
2175 If a class is declared to implement a protocol, a warning is issued for
2176 every method in the protocol that is not implemented by the class.  The
2177 default behavior is to issue a warning for every method not explicitly
2178 implemented in the class, even if a method implementation is inherited
2179 from the superclass.  If you use the @option{-Wno-protocol} option, then
2180 methods inherited from the superclass are considered to be implemented,
2181 and no warning is issued for them.
2183 @item -Wselector
2184 @opindex Wselector
2185 Warn if multiple methods of different types for the same selector are
2186 found during compilation.  The check is performed on the list of methods
2187 in the final stage of compilation.  Additionally, a check is performed
2188 for each selector appearing in a @code{@@selector(@dots{})}
2189 expression, and a corresponding method for that selector has been found
2190 during compilation.  Because these checks scan the method table only at
2191 the end of compilation, these warnings are not produced if the final
2192 stage of compilation is not reached, for example because an error is
2193 found during compilation, or because the @option{-fsyntax-only} option is
2194 being used.
2196 @item -Wstrict-selector-match
2197 @opindex Wstrict-selector-match
2198 Warn if multiple methods with differing argument and/or return types are
2199 found for a given selector when attempting to send a message using this
2200 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2201 is off (which is the default behavior), the compiler will omit such warnings
2202 if any differences found are confined to types which share the same size
2203 and alignment.
2205 @item -Wundeclared-selector
2206 @opindex Wundeclared-selector
2207 Warn if a @code{@@selector(@dots{})} expression referring to an
2208 undeclared selector is found.  A selector is considered undeclared if no
2209 method with that name has been declared before the
2210 @code{@@selector(@dots{})} expression, either explicitly in an
2211 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2212 an @code{@@implementation} section.  This option always performs its
2213 checks as soon as a @code{@@selector(@dots{})} expression is found,
2214 while @option{-Wselector} only performs its checks in the final stage of
2215 compilation.  This also enforces the coding style convention
2216 that methods and selectors must be declared before being used.
2218 @item -print-objc-runtime-info
2219 @opindex print-objc-runtime-info
2220 Generate C header describing the largest structure that is passed by
2221 value, if any.
2223 @end table
2225 @node Language Independent Options
2226 @section Options to Control Diagnostic Messages Formatting
2227 @cindex options to control diagnostics formatting
2228 @cindex diagnostic messages
2229 @cindex message formatting
2231 Traditionally, diagnostic messages have been formatted irrespective of
2232 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2233 below can be used to control the diagnostic messages formatting
2234 algorithm, e.g.@: how many characters per line, how often source location
2235 information should be reported.  Right now, only the C++ front end can
2236 honor these options.  However it is expected, in the near future, that
2237 the remaining front ends would be able to digest them correctly.
2239 @table @gcctabopt
2240 @item -fmessage-length=@var{n}
2241 @opindex fmessage-length
2242 Try to format error messages so that they fit on lines of about @var{n}
2243 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2244 the front ends supported by GCC@.  If @var{n} is zero, then no
2245 line-wrapping will be done; each error message will appear on a single
2246 line.
2248 @opindex fdiagnostics-show-location
2249 @item -fdiagnostics-show-location=once
2250 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2251 reporter to emit @emph{once} source location information; that is, in
2252 case the message is too long to fit on a single physical line and has to
2253 be wrapped, the source location won't be emitted (as prefix) again,
2254 over and over, in subsequent continuation lines.  This is the default
2255 behavior.
2257 @item -fdiagnostics-show-location=every-line
2258 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2259 messages reporter to emit the same source location information (as
2260 prefix) for physical lines that result from the process of breaking
2261 a message which is too long to fit on a single line.
2263 @item -fdiagnostics-show-option
2264 @opindex fdiagnostics-show-option
2265 This option instructs the diagnostic machinery to add text to each
2266 diagnostic emitted, which indicates which command line option directly
2267 controls that diagnostic, when such an option is known to the
2268 diagnostic machinery.
2270 @end table
2272 @node Warning Options
2273 @section Options to Request or Suppress Warnings
2274 @cindex options to control warnings
2275 @cindex warning messages
2276 @cindex messages, warning
2277 @cindex suppressing warnings
2279 Warnings are diagnostic messages that report constructions which
2280 are not inherently erroneous but which are risky or suggest there
2281 may have been an error.
2283 You can request many specific warnings with options beginning @samp{-W},
2284 for example @option{-Wimplicit} to request warnings on implicit
2285 declarations.  Each of these specific warning options also has a
2286 negative form beginning @samp{-Wno-} to turn off warnings;
2287 for example, @option{-Wno-implicit}.  This manual lists only one of the
2288 two forms, whichever is not the default.
2290 The following options control the amount and kinds of warnings produced
2291 by GCC; for further, language-specific options also refer to
2292 @ref{C++ Dialect Options} and @ref{Objective-C and Objective-C++ Dialect
2293 Options}.
2295 @table @gcctabopt
2296 @cindex syntax checking
2297 @item -fsyntax-only
2298 @opindex fsyntax-only
2299 Check the code for syntax errors, but don't do anything beyond that.
2301 @item -pedantic
2302 @opindex pedantic
2303 Issue all the warnings demanded by strict ISO C and ISO C++;
2304 reject all programs that use forbidden extensions, and some other
2305 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2306 version of the ISO C standard specified by any @option{-std} option used.
2308 Valid ISO C and ISO C++ programs should compile properly with or without
2309 this option (though a rare few will require @option{-ansi} or a
2310 @option{-std} option specifying the required version of ISO C)@.  However,
2311 without this option, certain GNU extensions and traditional C and C++
2312 features are supported as well.  With this option, they are rejected.
2314 @option{-pedantic} does not cause warning messages for use of the
2315 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2316 warnings are also disabled in the expression that follows
2317 @code{__extension__}.  However, only system header files should use
2318 these escape routes; application programs should avoid them.
2319 @xref{Alternate Keywords}.
2321 Some users try to use @option{-pedantic} to check programs for strict ISO
2322 C conformance.  They soon find that it does not do quite what they want:
2323 it finds some non-ISO practices, but not all---only those for which
2324 ISO C @emph{requires} a diagnostic, and some others for which
2325 diagnostics have been added.
2327 A feature to report any failure to conform to ISO C might be useful in
2328 some instances, but would require considerable additional work and would
2329 be quite different from @option{-pedantic}.  We don't have plans to
2330 support such a feature in the near future.
2332 Where the standard specified with @option{-std} represents a GNU
2333 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2334 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2335 extended dialect is based.  Warnings from @option{-pedantic} are given
2336 where they are required by the base standard.  (It would not make sense
2337 for such warnings to be given only for features not in the specified GNU
2338 C dialect, since by definition the GNU dialects of C include all
2339 features the compiler supports with the given option, and there would be
2340 nothing to warn about.)
2342 @item -pedantic-errors
2343 @opindex pedantic-errors
2344 Like @option{-pedantic}, except that errors are produced rather than
2345 warnings.
2347 @item -w
2348 @opindex w
2349 Inhibit all warning messages.
2351 @item -Wno-import
2352 @opindex Wno-import
2353 Inhibit warning messages about the use of @samp{#import}.
2355 @item -Wchar-subscripts
2356 @opindex Wchar-subscripts
2357 Warn if an array subscript has type @code{char}.  This is a common cause
2358 of error, as programmers often forget that this type is signed on some
2359 machines.
2360 This warning is enabled by @option{-Wall}.
2362 @item -Wcomment
2363 @opindex Wcomment
2364 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2365 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2366 This warning is enabled by @option{-Wall}.
2368 @item -Wfatal-errors
2369 @opindex Wfatal-errors
2370 This option causes the compiler to abort compilation on the first error
2371 occurred rather than trying to keep going and printing further error
2372 messages.
2374 @item -Wformat
2375 @opindex Wformat
2376 @opindex ffreestanding
2377 @opindex fno-builtin
2378 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2379 the arguments supplied have types appropriate to the format string
2380 specified, and that the conversions specified in the format string make
2381 sense.  This includes standard functions, and others specified by format
2382 attributes (@pxref{Function Attributes}), in the @code{printf},
2383 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2384 not in the C standard) families (or other target-specific families).
2385 Which functions are checked without format attributes having been
2386 specified depends on the standard version selected, and such checks of
2387 functions without the attribute specified are disabled by
2388 @option{-ffreestanding} or @option{-fno-builtin}.
2390 The formats are checked against the format features supported by GNU
2391 libc version 2.2.  These include all ISO C90 and C99 features, as well
2392 as features from the Single Unix Specification and some BSD and GNU
2393 extensions.  Other library implementations may not support all these
2394 features; GCC does not support warning about features that go beyond a
2395 particular library's limitations.  However, if @option{-pedantic} is used
2396 with @option{-Wformat}, warnings will be given about format features not
2397 in the selected standard version (but not for @code{strfmon} formats,
2398 since those are not in any version of the C standard).  @xref{C Dialect
2399 Options,,Options Controlling C Dialect}.
2401 Since @option{-Wformat} also checks for null format arguments for
2402 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2404 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2405 aspects of format checking, the options @option{-Wformat-y2k},
2406 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2407 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2408 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2410 @item -Wformat-y2k
2411 @opindex Wformat-y2k
2412 If @option{-Wformat} is specified, also warn about @code{strftime}
2413 formats which may yield only a two-digit year.
2415 @item -Wno-format-extra-args
2416 @opindex Wno-format-extra-args
2417 If @option{-Wformat} is specified, do not warn about excess arguments to a
2418 @code{printf} or @code{scanf} format function.  The C standard specifies
2419 that such arguments are ignored.
2421 Where the unused arguments lie between used arguments that are
2422 specified with @samp{$} operand number specifications, normally
2423 warnings are still given, since the implementation could not know what
2424 type to pass to @code{va_arg} to skip the unused arguments.  However,
2425 in the case of @code{scanf} formats, this option will suppress the
2426 warning if the unused arguments are all pointers, since the Single
2427 Unix Specification says that such unused arguments are allowed.
2429 @item -Wno-format-zero-length
2430 @opindex Wno-format-zero-length
2431 If @option{-Wformat} is specified, do not warn about zero-length formats.
2432 The C standard specifies that zero-length formats are allowed.
2434 @item -Wformat-nonliteral
2435 @opindex Wformat-nonliteral
2436 If @option{-Wformat} is specified, also warn if the format string is not a
2437 string literal and so cannot be checked, unless the format function
2438 takes its format arguments as a @code{va_list}.
2440 @item -Wformat-security
2441 @opindex Wformat-security
2442 If @option{-Wformat} is specified, also warn about uses of format
2443 functions that represent possible security problems.  At present, this
2444 warns about calls to @code{printf} and @code{scanf} functions where the
2445 format string is not a string literal and there are no format arguments,
2446 as in @code{printf (foo);}.  This may be a security hole if the format
2447 string came from untrusted input and contains @samp{%n}.  (This is
2448 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2449 in future warnings may be added to @option{-Wformat-security} that are not
2450 included in @option{-Wformat-nonliteral}.)
2452 @item -Wformat=2
2453 @opindex Wformat=2
2454 Enable @option{-Wformat} plus format checks not included in
2455 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2456 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2458 @item -Wnonnull
2459 @opindex Wnonnull
2460 Warn about passing a null pointer for arguments marked as
2461 requiring a non-null value by the @code{nonnull} function attribute.
2463 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2464 can be disabled with the @option{-Wno-nonnull} option.
2466 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
2467 @opindex Winit-self
2468 Warn about uninitialized variables which are initialized with themselves.
2469 Note this option can only be used with the @option{-Wuninitialized} option,
2470 which in turn only works with @option{-O1} and above.
2472 For example, GCC will warn about @code{i} being uninitialized in the
2473 following snippet only when @option{-Winit-self} has been specified:
2474 @smallexample
2475 @group
2476 int f()
2478   int i = i;
2479   return i;
2481 @end group
2482 @end smallexample
2484 @item -Wimplicit-int
2485 @opindex Wimplicit-int
2486 Warn when a declaration does not specify a type.
2487 This warning is enabled by @option{-Wall}.
2489 @item -Wimplicit-function-declaration
2490 @itemx -Werror-implicit-function-declaration
2491 @opindex Wimplicit-function-declaration
2492 @opindex Werror-implicit-function-declaration
2493 Give a warning (or error) whenever a function is used before being
2494 declared.  The form @option{-Wno-error-implicit-function-declaration}
2495 is not supported.
2496 This warning is enabled by @option{-Wall} (as a warning, not an error).
2498 @item -Wimplicit
2499 @opindex Wimplicit
2500 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2501 This warning is enabled by @option{-Wall}.
2503 @item -Wmain
2504 @opindex Wmain
2505 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2506 function with external linkage, returning int, taking either zero
2507 arguments, two, or three arguments of appropriate types.
2508 This warning is enabled by @option{-Wall}.
2510 @item -Wmissing-braces
2511 @opindex Wmissing-braces
2512 Warn if an aggregate or union initializer is not fully bracketed.  In
2513 the following example, the initializer for @samp{a} is not fully
2514 bracketed, but that for @samp{b} is fully bracketed.
2516 @smallexample
2517 int a[2][2] = @{ 0, 1, 2, 3 @};
2518 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2519 @end smallexample
2521 This warning is enabled by @option{-Wall}.
2523 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
2524 @opindex Wmissing-include-dirs
2525 Warn if a user-supplied include directory does not exist.
2527 @item -Wparentheses
2528 @opindex Wparentheses
2529 Warn if parentheses are omitted in certain contexts, such
2530 as when there is an assignment in a context where a truth value
2531 is expected, or when operators are nested whose precedence people
2532 often get confused about.  Only the warning for an assignment used as
2533 a truth value is supported when compiling C++; the other warnings are
2534 only supported when compiling C@.
2536 Also warn if a comparison like @samp{x<=y<=z} appears; this is
2537 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
2538 interpretation from that of ordinary mathematical notation.
2540 Also warn about constructions where there may be confusion to which
2541 @code{if} statement an @code{else} branch belongs.  Here is an example of
2542 such a case:
2544 @smallexample
2545 @group
2547   if (a)
2548     if (b)
2549       foo ();
2550   else
2551     bar ();
2553 @end group
2554 @end smallexample
2556 In C, every @code{else} branch belongs to the innermost possible @code{if}
2557 statement, which in this example is @code{if (b)}.  This is often not
2558 what the programmer expected, as illustrated in the above example by
2559 indentation the programmer chose.  When there is the potential for this
2560 confusion, GCC will issue a warning when this flag is specified.
2561 To eliminate the warning, add explicit braces around the innermost
2562 @code{if} statement so there is no way the @code{else} could belong to
2563 the enclosing @code{if}.  The resulting code would look like this:
2565 @smallexample
2566 @group
2568   if (a)
2569     @{
2570       if (b)
2571         foo ();
2572       else
2573         bar ();
2574     @}
2576 @end group
2577 @end smallexample
2579 This warning is enabled by @option{-Wall}.
2581 @item -Wsequence-point
2582 @opindex Wsequence-point
2583 Warn about code that may have undefined semantics because of violations
2584 of sequence point rules in the C and C++ standards.
2586 The C and C++ standards defines the order in which expressions in a C/C++
2587 program are evaluated in terms of @dfn{sequence points}, which represent
2588 a partial ordering between the execution of parts of the program: those
2589 executed before the sequence point, and those executed after it.  These
2590 occur after the evaluation of a full expression (one which is not part
2591 of a larger expression), after the evaluation of the first operand of a
2592 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2593 function is called (but after the evaluation of its arguments and the
2594 expression denoting the called function), and in certain other places.
2595 Other than as expressed by the sequence point rules, the order of
2596 evaluation of subexpressions of an expression is not specified.  All
2597 these rules describe only a partial order rather than a total order,
2598 since, for example, if two functions are called within one expression
2599 with no sequence point between them, the order in which the functions
2600 are called is not specified.  However, the standards committee have
2601 ruled that function calls do not overlap.
2603 It is not specified when between sequence points modifications to the
2604 values of objects take effect.  Programs whose behavior depends on this
2605 have undefined behavior; the C and C++ standards specify that ``Between
2606 the previous and next sequence point an object shall have its stored
2607 value modified at most once by the evaluation of an expression.  
2608 Furthermore, the prior value shall be read only to determine the value
2609 to be stored.''.  If a program breaks these rules, the results on any
2610 particular implementation are entirely unpredictable.
2612 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2613 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2614 diagnosed by this option, and it may give an occasional false positive
2615 result, but in general it has been found fairly effective at detecting
2616 this sort of problem in programs.
2618 The standard is worded confusingly, therefore there is some debate
2619 over the precise meaning of the sequence point rules in subtle cases.
2620 Links to discussions of the problem, including proposed formal
2621 definitions, may be found on the GCC readings page, at
2622 @w{@uref{http://gcc.gnu.org/readings.html}}.
2624 This warning is enabled by @option{-Wall} for C and C++.
2626 @item -Wreturn-type
2627 @opindex Wreturn-type
2628 Warn whenever a function is defined with a return-type that defaults to
2629 @code{int}.  Also warn about any @code{return} statement with no
2630 return-value in a function whose return-type is not @code{void}.
2632 For C, also warn if the return type of a function has a type qualifier
2633 such as @code{const}.  Such a type qualifier has no effect, since the
2634 value returned by a function is not an lvalue.  ISO C prohibits
2635 qualified @code{void} return types on function definitions, so such
2636 return types always receive a warning even without this option.
2638 For C++, a function without return type always produces a diagnostic
2639 message, even when @option{-Wno-return-type} is specified.  The only
2640 exceptions are @samp{main} and functions defined in system headers.
2642 This warning is enabled by @option{-Wall}.
2644 @item -Wswitch
2645 @opindex Wswitch
2646 Warn whenever a @code{switch} statement has an index of enumerated type
2647 and lacks a @code{case} for one or more of the named codes of that
2648 enumeration.  (The presence of a @code{default} label prevents this
2649 warning.)  @code{case} labels outside the enumeration range also
2650 provoke warnings when this option is used.
2651 This warning is enabled by @option{-Wall}.
2653 @item -Wswitch-default
2654 @opindex Wswitch-switch
2655 Warn whenever a @code{switch} statement does not have a @code{default}
2656 case.
2658 @item -Wswitch-enum
2659 @opindex Wswitch-enum
2660 Warn whenever a @code{switch} statement has an index of enumerated type
2661 and lacks a @code{case} for one or more of the named codes of that
2662 enumeration.  @code{case} labels outside the enumeration range also
2663 provoke warnings when this option is used.
2665 @item -Wtrigraphs
2666 @opindex Wtrigraphs
2667 Warn if any trigraphs are encountered that might change the meaning of
2668 the program (trigraphs within comments are not warned about).
2669 This warning is enabled by @option{-Wall}.
2671 @item -Wunused-function
2672 @opindex Wunused-function
2673 Warn whenever a static function is declared but not defined or a
2674 non-inline static function is unused.
2675 This warning is enabled by @option{-Wall}.
2677 @item -Wunused-label
2678 @opindex Wunused-label
2679 Warn whenever a label is declared but not used.
2680 This warning is enabled by @option{-Wall}.
2682 To suppress this warning use the @samp{unused} attribute
2683 (@pxref{Variable Attributes}).
2685 @item -Wunused-parameter
2686 @opindex Wunused-parameter
2687 Warn whenever a function parameter is unused aside from its declaration.
2689 To suppress this warning use the @samp{unused} attribute
2690 (@pxref{Variable Attributes}).
2692 @item -Wunused-variable
2693 @opindex Wunused-variable
2694 Warn whenever a local variable or non-constant static variable is unused
2695 aside from its declaration.
2696 This warning is enabled by @option{-Wall}.
2698 To suppress this warning use the @samp{unused} attribute
2699 (@pxref{Variable Attributes}).
2701 @item -Wunused-value
2702 @opindex Wunused-value
2703 Warn whenever a statement computes a result that is explicitly not used.
2704 This warning is enabled by @option{-Wall}.
2706 To suppress this warning cast the expression to @samp{void}.
2708 @item -Wunused
2709 @opindex Wunused
2710 All the above @option{-Wunused} options combined.
2712 In order to get a warning about an unused function parameter, you must
2713 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2714 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
2716 @item -Wuninitialized
2717 @opindex Wuninitialized
2718 Warn if an automatic variable is used without first being initialized or
2719 if a variable may be clobbered by a @code{setjmp} call.
2721 These warnings are possible only in optimizing compilation,
2722 because they require data flow information that is computed only
2723 when optimizing.  If you do not specify @option{-O}, you will not get 
2724 these warnings. Instead, GCC will issue a warning about @option{-Wuninitialized}
2725 requiring @option{-O}.
2727 If you want to warn about code which uses the uninitialized value of the
2728 variable in its own initializer, use the @option{-Winit-self} option.
2730 These warnings occur for individual uninitialized or clobbered
2731 elements of structure, union or array variables as well as for
2732 variables which are uninitialized or clobbered as a whole.  They do
2733 not occur for variables or elements declared @code{volatile}.  Because
2734 these warnings depend on optimization, the exact variables or elements
2735 for which there are warnings will depend on the precise optimization
2736 options and version of GCC used.
2738 Note that there may be no warning about a variable that is used only
2739 to compute a value that itself is never used, because such
2740 computations may be deleted by data flow analysis before the warnings
2741 are printed.
2743 These warnings are made optional because GCC is not smart
2744 enough to see all the reasons why the code might be correct
2745 despite appearing to have an error.  Here is one example of how
2746 this can happen:
2748 @smallexample
2749 @group
2751   int x;
2752   switch (y)
2753     @{
2754     case 1: x = 1;
2755       break;
2756     case 2: x = 4;
2757       break;
2758     case 3: x = 5;
2759     @}
2760   foo (x);
2762 @end group
2763 @end smallexample
2765 @noindent
2766 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2767 always initialized, but GCC doesn't know this.  Here is
2768 another common case:
2770 @smallexample
2772   int save_y;
2773   if (change_y) save_y = y, y = new_y;
2774   @dots{}
2775   if (change_y) y = save_y;
2777 @end smallexample
2779 @noindent
2780 This has no bug because @code{save_y} is used only if it is set.
2782 @cindex @code{longjmp} warnings
2783 This option also warns when a non-volatile automatic variable might be
2784 changed by a call to @code{longjmp}.  These warnings as well are possible
2785 only in optimizing compilation.
2787 The compiler sees only the calls to @code{setjmp}.  It cannot know
2788 where @code{longjmp} will be called; in fact, a signal handler could
2789 call it at any point in the code.  As a result, you may get a warning
2790 even when there is in fact no problem because @code{longjmp} cannot
2791 in fact be called at the place which would cause a problem.
2793 Some spurious warnings can be avoided if you declare all the functions
2794 you use that never return as @code{noreturn}.  @xref{Function
2795 Attributes}.
2797 This warning is enabled by @option{-Wall}.
2799 @item -Wunknown-pragmas
2800 @opindex Wunknown-pragmas
2801 @cindex warning for unknown pragmas
2802 @cindex unknown pragmas, warning
2803 @cindex pragmas, warning of unknown
2804 Warn when a #pragma directive is encountered which is not understood by
2805 GCC@.  If this command line option is used, warnings will even be issued
2806 for unknown pragmas in system header files.  This is not the case if
2807 the warnings were only enabled by the @option{-Wall} command line option.
2809 @item -Wno-pragmas
2810 @opindex Wno-pragmas
2811 @opindex Wpragmas
2812 Do not warn about misuses of pragmas, such as incorrect parameters,
2813 invalid syntax, or conflicts between pragmas.  See also
2814 @samp{-Wunknown-pragmas}.
2816 @item -Wstrict-aliasing
2817 @opindex Wstrict-aliasing
2818 This option is only active when @option{-fstrict-aliasing} is active.
2819 It warns about code which might break the strict aliasing rules that the
2820 compiler is using for optimization.  The warning does not catch all
2821 cases, but does attempt to catch the more common pitfalls.  It is
2822 included in @option{-Wall}.
2824 @item -Wstrict-aliasing=2
2825 @opindex Wstrict-aliasing=2
2826 This option is only active when @option{-fstrict-aliasing} is active.
2827 It warns about code which might break the strict aliasing rules that the
2828 compiler is using for optimization.  This warning catches more cases than
2829 @option{-Wstrict-aliasing}, but it will also give a warning for some ambiguous
2830 cases that are safe.
2832 @item -Wall
2833 @opindex Wall
2834 All of the above @samp{-W} options combined.  This enables all the
2835 warnings about constructions that some users consider questionable, and
2836 that are easy to avoid (or modify to prevent the warning), even in
2837 conjunction with macros.  This also enables some language-specific
2838 warnings described in @ref{C++ Dialect Options} and
2839 @ref{Objective-C and Objective-C++ Dialect Options}.
2840 @end table
2842 The following @option{-W@dots{}} options are not implied by @option{-Wall}.
2843 Some of them warn about constructions that users generally do not
2844 consider questionable, but which occasionally you might wish to check
2845 for; others warn about constructions that are necessary or hard to avoid
2846 in some cases, and there is no simple way to modify the code to suppress
2847 the warning.
2849 @table @gcctabopt
2850 @item -Wextra
2851 @opindex W
2852 @opindex Wextra
2853 (This option used to be called @option{-W}.  The older name is still
2854 supported, but the newer name is more descriptive.)  Print extra warning
2855 messages for these events:
2857 @itemize @bullet
2858 @item
2859 A function can return either with or without a value.  (Falling
2860 off the end of the function body is considered returning without
2861 a value.)  For example, this function would evoke such a
2862 warning:
2864 @smallexample
2865 @group
2866 foo (a)
2868   if (a > 0)
2869     return a;
2871 @end group
2872 @end smallexample
2874 @item
2875 An expression-statement or the left-hand side of a comma expression
2876 contains no side effects.
2877 To suppress the warning, cast the unused expression to void.
2878 For example, an expression such as @samp{x[i,j]} will cause a warning,
2879 but @samp{x[(void)i,j]} will not.
2881 @item
2882 An unsigned value is compared against zero with @samp{<} or @samp{>=}.
2884 @item
2885 Storage-class specifiers like @code{static} are not the first things in
2886 a declaration.  According to the C Standard, this usage is obsolescent.
2888 @item
2889 If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
2890 arguments.
2892 @item
2893 A comparison between signed and unsigned values could produce an
2894 incorrect result when the signed value is converted to unsigned.
2895 (But don't warn if @option{-Wno-sign-compare} is also specified.)
2897 @item
2898 An aggregate has an initializer which does not initialize all members.
2899 This warning can be independently controlled by
2900 @option{-Wmissing-field-initializers}.
2902 @item
2903 An initialized field without side effects is overridden when using
2904 designated initializers (@pxref{Designated Inits, , Designated
2905 Initializers}).  This warning can be independently controlled by
2906 @option{-Woverride-init}.
2908 @item
2909 A function parameter is declared without a type specifier in K&R-style
2910 functions:
2912 @smallexample
2913 void foo(bar) @{ @}
2914 @end smallexample
2916 @item
2917 An empty body occurs in an @samp{if} or @samp{else} statement.
2919 @item
2920 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2921 @samp{>}, or @samp{>=}.
2923 @item
2924 A variable might be changed by @samp{longjmp} or @samp{vfork}.
2926 @item
2927 Any of several floating-point events that often indicate errors, such as
2928 overflow, underflow, loss of precision, etc.
2930 @item @r{(C++ only)}
2931 An enumerator and a non-enumerator both appear in a conditional expression.
2933 @item @r{(C++ only)}
2934 A non-static reference or non-static @samp{const} member appears in a
2935 class without constructors.
2937 @item @r{(C++ only)}
2938 Ambiguous virtual bases.
2940 @item @r{(C++ only)}
2941 Subscripting an array which has been declared @samp{register}.
2943 @item @r{(C++ only)}
2944 Taking the address of a variable which has been declared @samp{register}.
2946 @item @r{(C++ only)}
2947 A base class is not initialized in a derived class' copy constructor.
2948 @end itemize
2950 @item -Wno-div-by-zero
2951 @opindex Wno-div-by-zero
2952 @opindex Wdiv-by-zero
2953 Do not warn about compile-time integer division by zero.  Floating point
2954 division by zero is not warned about, as it can be a legitimate way of
2955 obtaining infinities and NaNs.
2957 @item -Wsystem-headers
2958 @opindex Wsystem-headers
2959 @cindex warnings from system headers
2960 @cindex system headers, warnings from
2961 Print warning messages for constructs found in system header files.
2962 Warnings from system headers are normally suppressed, on the assumption
2963 that they usually do not indicate real problems and would only make the
2964 compiler output harder to read.  Using this command line option tells
2965 GCC to emit warnings from system headers as if they occurred in user
2966 code.  However, note that using @option{-Wall} in conjunction with this
2967 option will @emph{not} warn about unknown pragmas in system
2968 headers---for that, @option{-Wunknown-pragmas} must also be used.
2970 @item -Wfloat-equal
2971 @opindex Wfloat-equal
2972 Warn if floating point values are used in equality comparisons.
2974 The idea behind this is that sometimes it is convenient (for the
2975 programmer) to consider floating-point values as approximations to
2976 infinitely precise real numbers.  If you are doing this, then you need
2977 to compute (by analyzing the code, or in some other way) the maximum or
2978 likely maximum error that the computation introduces, and allow for it
2979 when performing comparisons (and when producing output, but that's a
2980 different problem).  In particular, instead of testing for equality, you
2981 would check to see whether the two values have ranges that overlap; and
2982 this is done with the relational operators, so equality comparisons are
2983 probably mistaken.
2985 @item -Wtraditional @r{(C only)}
2986 @opindex Wtraditional
2987 Warn about certain constructs that behave differently in traditional and
2988 ISO C@.  Also warn about ISO C constructs that have no traditional C
2989 equivalent, and/or problematic constructs which should be avoided.
2991 @itemize @bullet
2992 @item
2993 Macro parameters that appear within string literals in the macro body.
2994 In traditional C macro replacement takes place within string literals,
2995 but does not in ISO C@.
2997 @item
2998 In traditional C, some preprocessor directives did not exist.
2999 Traditional preprocessors would only consider a line to be a directive
3000 if the @samp{#} appeared in column 1 on the line.  Therefore
3001 @option{-Wtraditional} warns about directives that traditional C
3002 understands but would ignore because the @samp{#} does not appear as the
3003 first character on the line.  It also suggests you hide directives like
3004 @samp{#pragma} not understood by traditional C by indenting them.  Some
3005 traditional implementations would not recognize @samp{#elif}, so it
3006 suggests avoiding it altogether.
3008 @item
3009 A function-like macro that appears without arguments.
3011 @item
3012 The unary plus operator.
3014 @item
3015 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3016 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3017 constants.)  Note, these suffixes appear in macros defined in the system
3018 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3019 Use of these macros in user code might normally lead to spurious
3020 warnings, however GCC's integrated preprocessor has enough context to
3021 avoid warning in these cases.
3023 @item
3024 A function declared external in one block and then used after the end of
3025 the block.
3027 @item
3028 A @code{switch} statement has an operand of type @code{long}.
3030 @item
3031 A non-@code{static} function declaration follows a @code{static} one.
3032 This construct is not accepted by some traditional C compilers.
3034 @item
3035 The ISO type of an integer constant has a different width or
3036 signedness from its traditional type.  This warning is only issued if
3037 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3038 typically represent bit patterns, are not warned about.
3040 @item
3041 Usage of ISO string concatenation is detected.
3043 @item
3044 Initialization of automatic aggregates.
3046 @item
3047 Identifier conflicts with labels.  Traditional C lacks a separate
3048 namespace for labels.
3050 @item
3051 Initialization of unions.  If the initializer is zero, the warning is
3052 omitted.  This is done under the assumption that the zero initializer in
3053 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3054 initializer warnings and relies on default initialization to zero in the
3055 traditional C case.
3057 @item
3058 Conversions by prototypes between fixed/floating point values and vice
3059 versa.  The absence of these prototypes when compiling with traditional
3060 C would cause serious problems.  This is a subset of the possible
3061 conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3063 @item
3064 Use of ISO C style function definitions.  This warning intentionally is
3065 @emph{not} issued for prototype declarations or variadic functions
3066 because these ISO C features will appear in your code when using
3067 libiberty's traditional C compatibility macros, @code{PARAMS} and
3068 @code{VPARAMS}.  This warning is also bypassed for nested functions
3069 because that feature is already a GCC extension and thus not relevant to
3070 traditional C compatibility.
3071 @end itemize
3073 @item -Wtraditional-conversion @r{(C only)}
3074 @opindex Wtraditional-conversion
3075 Warn if a prototype causes a type conversion that is different from what
3076 would happen to the same argument in the absence of a prototype.  This
3077 includes conversions of fixed point to floating and vice versa, and
3078 conversions changing the width or signedness of a fixed point argument
3079 except when the same as the default promotion.
3081 @item -Wdeclaration-after-statement @r{(C only)}
3082 @opindex Wdeclaration-after-statement
3083 Warn when a declaration is found after a statement in a block.  This
3084 construct, known from C++, was introduced with ISO C99 and is by default
3085 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3086 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3088 @item -Wundef
3089 @opindex Wundef
3090 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3092 @item -Wno-endif-labels
3093 @opindex Wno-endif-labels
3094 @opindex Wendif-labels
3095 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3097 @item -Wshadow
3098 @opindex Wshadow
3099 Warn whenever a local variable shadows another local variable, parameter or
3100 global variable or whenever a built-in function is shadowed.
3102 @item -Wlarger-than-@var{len}
3103 @opindex Wlarger-than
3104 Warn whenever an object of larger than @var{len} bytes is defined.
3106 @item -Wunsafe-loop-optimizations
3107 @opindex Wunsafe-loop-optimizations
3108 Warn if the loop cannot be optimized because the compiler could not
3109 assume anything on the bounds of the loop indices.  With
3110 @option{-funsafe-loop-optimizations} warn if the compiler made
3111 such assumptions.
3113 @item -Wpointer-arith
3114 @opindex Wpointer-arith
3115 Warn about anything that depends on the ``size of'' a function type or
3116 of @code{void}.  GNU C assigns these types a size of 1, for
3117 convenience in calculations with @code{void *} pointers and pointers
3118 to functions.
3120 @item -Wbad-function-cast @r{(C only)}
3121 @opindex Wbad-function-cast
3122 Warn whenever a function call is cast to a non-matching type.
3123 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3125 @item -Wc++-compat
3126 Warn about ISO C constructs that are outside of the common subset of
3127 ISO C and ISO C++, e.g.@: request for implicit conversion from
3128 @code{void *} to a pointer to non-@code{void} type.
3130 @item -Wcast-qual
3131 @opindex Wcast-qual
3132 Warn whenever a pointer is cast so as to remove a type qualifier from
3133 the target type.  For example, warn if a @code{const char *} is cast
3134 to an ordinary @code{char *}.
3136 @item -Wcast-align
3137 @opindex Wcast-align
3138 Warn whenever a pointer is cast such that the required alignment of the
3139 target is increased.  For example, warn if a @code{char *} is cast to
3140 an @code{int *} on machines where integers can only be accessed at
3141 two- or four-byte boundaries.
3143 @item -Wwrite-strings
3144 @opindex Wwrite-strings
3145 When compiling C, give string constants the type @code{const
3146 char[@var{length}]} so that
3147 copying the address of one into a non-@code{const} @code{char *}
3148 pointer will get a warning; when compiling C++, warn about the
3149 deprecated conversion from string literals to @code{char *}.  This
3150 warning, by default, is enabled for C++ programs.
3151 These warnings will help you find at
3152 compile time code that can try to write into a string constant, but
3153 only if you have been very careful about using @code{const} in
3154 declarations and prototypes.  Otherwise, it will just be a nuisance;
3155 this is why we did not make @option{-Wall} request these warnings.
3157 @item -Wconversion
3158 @opindex Wconversion
3159 Warn for implicit conversions that may alter a value. This includes
3160 conversions between real and integer, like @code{abs (x)} when
3161 @code{x} is @code{double}; conversions between signed and unsigned,
3162 like @code{unsigned ui = -1}; and conversions to smaller types, like
3163 @code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3164 ((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3165 changed by the conversion like in @code{abs (2.0)}.
3167 @item -Wsign-compare
3168 @opindex Wsign-compare
3169 @cindex warning for comparison of signed and unsigned values
3170 @cindex comparison of signed and unsigned values, warning
3171 @cindex signed and unsigned values, comparison warning
3172 Warn when a comparison between signed and unsigned values could produce
3173 an incorrect result when the signed value is converted to unsigned.
3174 This warning is also enabled by @option{-Wextra}; to get the other warnings
3175 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3177 @item -Waggregate-return
3178 @opindex Waggregate-return
3179 Warn if any functions that return structures or unions are defined or
3180 called.  (In languages where you can return an array, this also elicits
3181 a warning.)
3183 @item -Walways-true
3184 @opindex Walways-true
3185 Warn about comparisons which are always true such as testing if
3186 unsigned values are greater than or equal to zero.  This warning is
3187 enabled by @option{-Wall}.
3189 @item -Wno-attributes
3190 @opindex Wno-attributes
3191 @opindex Wattributes
3192 Do not warn if an unexpected @code{__attribute__} is used, such as
3193 unrecognized attributes, function attributes applied to variables,
3194 etc.  This will not stop errors for incorrect use of supported
3195 attributes.
3197 @item -Wstrict-prototypes @r{(C only)}
3198 @opindex Wstrict-prototypes
3199 Warn if a function is declared or defined without specifying the
3200 argument types.  (An old-style function definition is permitted without
3201 a warning if preceded by a declaration which specifies the argument
3202 types.)
3204 @item -Wold-style-definition @r{(C only)}
3205 @opindex Wold-style-definition
3206 Warn if an old-style function definition is used.  A warning is given
3207 even if there is a previous prototype.
3209 @item -Wmissing-prototypes @r{(C only)}
3210 @opindex Wmissing-prototypes
3211 Warn if a global function is defined without a previous prototype
3212 declaration.  This warning is issued even if the definition itself
3213 provides a prototype.  The aim is to detect global functions that fail
3214 to be declared in header files.
3216 @item -Wmissing-declarations @r{(C only)}
3217 @opindex Wmissing-declarations
3218 Warn if a global function is defined without a previous declaration.
3219 Do so even if the definition itself provides a prototype.
3220 Use this option to detect global functions that are not declared in
3221 header files.
3223 @item -Wmissing-field-initializers
3224 @opindex Wmissing-field-initializers
3225 @opindex W
3226 @opindex Wextra
3227 Warn if a structure's initializer has some fields missing.  For
3228 example, the following code would cause such a warning, because
3229 @code{x.h} is implicitly zero:
3231 @smallexample
3232 struct s @{ int f, g, h; @};
3233 struct s x = @{ 3, 4 @};
3234 @end smallexample
3236 This option does not warn about designated initializers, so the following
3237 modification would not trigger a warning:
3239 @smallexample
3240 struct s @{ int f, g, h; @};
3241 struct s x = @{ .f = 3, .g = 4 @};
3242 @end smallexample
3244 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
3245 warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
3247 @item -Wmissing-noreturn
3248 @opindex Wmissing-noreturn
3249 Warn about functions which might be candidates for attribute @code{noreturn}.
3250 Note these are only possible candidates, not absolute ones.  Care should
3251 be taken to manually verify functions actually do not ever return before
3252 adding the @code{noreturn} attribute, otherwise subtle code generation
3253 bugs could be introduced.  You will not get a warning for @code{main} in
3254 hosted C environments.
3256 @item -Wmissing-format-attribute
3257 @opindex Wmissing-format-attribute
3258 @opindex Wformat
3259 Warn about function pointers which might be candidates for @code{format}
3260 attributes.  Note these are only possible candidates, not absolute ones.
3261 GCC will guess that function pointers with @code{format} attributes that
3262 are used in assignment, initialization, parameter passing or return
3263 statements should have a corresponding @code{format} attribute in the
3264 resulting type.  I.e.@: the left-hand side of the assignment or
3265 initialization, the type of the parameter variable, or the return type
3266 of the containing function respectively should also have a @code{format}
3267 attribute to avoid the warning.
3269 GCC will also warn about function definitions which might be
3270 candidates for @code{format} attributes.  Again, these are only
3271 possible candidates.  GCC will guess that @code{format} attributes
3272 might be appropriate for any function that calls a function like
3273 @code{vprintf} or @code{vscanf}, but this might not always be the
3274 case, and some functions for which @code{format} attributes are
3275 appropriate may not be detected.
3277 @item -Wno-multichar
3278 @opindex Wno-multichar
3279 @opindex Wmultichar
3280 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
3281 Usually they indicate a typo in the user's code, as they have
3282 implementation-defined values, and should not be used in portable code.
3284 @item -Wnormalized=<none|id|nfc|nfkc>
3285 @opindex Wnormalized
3286 @cindex NFC
3287 @cindex NFKC
3288 @cindex character set, input normalization
3289 In ISO C and ISO C++, two identifiers are different if they are
3290 different sequences of characters.  However, sometimes when characters
3291 outside the basic ASCII character set are used, you can have two
3292 different character sequences that look the same.  To avoid confusion,
3293 the ISO 10646 standard sets out some @dfn{normalization rules} which
3294 when applied ensure that two sequences that look the same are turned into
3295 the same sequence.  GCC can warn you if you are using identifiers which
3296 have not been normalized; this option controls that warning.
3298 There are four levels of warning that GCC supports.  The default is
3299 @option{-Wnormalized=nfc}, which warns about any identifier which is
3300 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
3301 recommended form for most uses.
3303 Unfortunately, there are some characters which ISO C and ISO C++ allow
3304 in identifiers that when turned into NFC aren't allowable as
3305 identifiers.  That is, there's no way to use these symbols in portable
3306 ISO C or C++ and have all your identifiers in NFC.
3307 @option{-Wnormalized=id} suppresses the warning for these characters.
3308 It is hoped that future versions of the standards involved will correct
3309 this, which is why this option is not the default.
3311 You can switch the warning off for all characters by writing
3312 @option{-Wnormalized=none}.  You would only want to do this if you
3313 were using some other normalization scheme (like ``D''), because
3314 otherwise you can easily create bugs that are literally impossible to see.
3316 Some characters in ISO 10646 have distinct meanings but look identical
3317 in some fonts or display methodologies, especially once formatting has
3318 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
3319 LETTER N'', will display just like a regular @code{n} which has been
3320 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
3321 normalization scheme to convert all these into a standard form as
3322 well, and GCC will warn if your code is not in NFKC if you use
3323 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
3324 about every identifier that contains the letter O because it might be
3325 confused with the digit 0, and so is not the default, but may be
3326 useful as a local coding convention if the programming environment is
3327 unable to be fixed to display these characters distinctly.
3329 @item -Wno-deprecated-declarations
3330 @opindex Wno-deprecated-declarations
3331 Do not warn about uses of functions (@pxref{Function Attributes}),
3332 variables (@pxref{Variable Attributes}), and types (@pxref{Type
3333 Attributes}) marked as deprecated by using the @code{deprecated}
3334 attribute.
3336 @item -Wno-overflow
3337 @opindex Wno-overflow
3338 Do not warn about compile-time overflow in constant expressions.
3340 @item -Woverride-init
3341 @opindex Woverride-init
3342 @opindex W
3343 @opindex Wextra
3344 Warn if an initialized field without side effects is overridden when
3345 using designated initializers (@pxref{Designated Inits, , Designated
3346 Initializers}).
3348 This warning is included in @option{-Wextra}.  To get other
3349 @option{-Wextra} warnings without this one, use @samp{-Wextra
3350 -Wno-override-init}.
3352 @item -Wpacked
3353 @opindex Wpacked
3354 Warn if a structure is given the packed attribute, but the packed
3355 attribute has no effect on the layout or size of the structure.
3356 Such structures may be mis-aligned for little benefit.  For
3357 instance, in this code, the variable @code{f.x} in @code{struct bar}
3358 will be misaligned even though @code{struct bar} does not itself
3359 have the packed attribute:
3361 @smallexample
3362 @group
3363 struct foo @{
3364   int x;
3365   char a, b, c, d;
3366 @} __attribute__((packed));
3367 struct bar @{
3368   char z;
3369   struct foo f;
3371 @end group
3372 @end smallexample
3374 @item -Wpadded
3375 @opindex Wpadded
3376 Warn if padding is included in a structure, either to align an element
3377 of the structure or to align the whole structure.  Sometimes when this
3378 happens it is possible to rearrange the fields of the structure to
3379 reduce the padding and so make the structure smaller.
3381 @item -Wredundant-decls
3382 @opindex Wredundant-decls
3383 Warn if anything is declared more than once in the same scope, even in
3384 cases where multiple declaration is valid and changes nothing.
3386 @item -Wnested-externs @r{(C only)}
3387 @opindex Wnested-externs
3388 Warn if an @code{extern} declaration is encountered within a function.
3390 @item -Wunreachable-code
3391 @opindex Wunreachable-code
3392 Warn if the compiler detects that code will never be executed.
3394 This option is intended to warn when the compiler detects that at
3395 least a whole line of source code will never be executed, because
3396 some condition is never satisfied or because it is after a
3397 procedure that never returns.
3399 It is possible for this option to produce a warning even though there
3400 are circumstances under which part of the affected line can be executed,
3401 so care should be taken when removing apparently-unreachable code.
3403 For instance, when a function is inlined, a warning may mean that the
3404 line is unreachable in only one inlined copy of the function.
3406 This option is not made part of @option{-Wall} because in a debugging
3407 version of a program there is often substantial code which checks
3408 correct functioning of the program and is, hopefully, unreachable
3409 because the program does work.  Another common use of unreachable
3410 code is to provide behavior which is selectable at compile-time.
3412 @item -Winline
3413 @opindex Winline
3414 Warn if a function can not be inlined and it was declared as inline.
3415 Even with this option, the compiler will not warn about failures to
3416 inline functions declared in system headers.
3418 The compiler uses a variety of heuristics to determine whether or not
3419 to inline a function.  For example, the compiler takes into account
3420 the size of the function being inlined and the amount of inlining
3421 that has already been done in the current function.  Therefore,
3422 seemingly insignificant changes in the source program can cause the
3423 warnings produced by @option{-Winline} to appear or disappear.
3425 @item -Wno-invalid-offsetof @r{(C++ only)}
3426 @opindex Wno-invalid-offsetof
3427 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
3428 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
3429 to a non-POD type is undefined.  In existing C++ implementations,
3430 however, @samp{offsetof} typically gives meaningful results even when
3431 applied to certain kinds of non-POD types. (Such as a simple
3432 @samp{struct} that fails to be a POD type only by virtue of having a
3433 constructor.)  This flag is for users who are aware that they are
3434 writing nonportable code and who have deliberately chosen to ignore the
3435 warning about it.
3437 The restrictions on @samp{offsetof} may be relaxed in a future version
3438 of the C++ standard.
3440 @item -Wno-int-to-pointer-cast @r{(C only)}
3441 @opindex Wno-int-to-pointer-cast
3442 Suppress warnings from casts to pointer type of an integer of a
3443 different size.
3445 @item -Wno-pointer-to-int-cast @r{(C only)}
3446 @opindex Wno-pointer-to-int-cast
3447 Suppress warnings from casts from a pointer to an integer type of a
3448 different size.
3450 @item -Winvalid-pch
3451 @opindex Winvalid-pch
3452 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
3453 the search path but can't be used.
3455 @item -Wlong-long
3456 @opindex Wlong-long
3457 @opindex Wno-long-long
3458 Warn if @samp{long long} type is used.  This is default.  To inhibit
3459 the warning messages, use @option{-Wno-long-long}.  Flags
3460 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
3461 only when @option{-pedantic} flag is used.
3463 @item -Wvariadic-macros
3464 @opindex Wvariadic-macros
3465 @opindex Wno-variadic-macros
3466 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
3467 alternate syntax when in pedantic ISO C99 mode.  This is default.
3468 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
3470 @item -Wvolatile-register-var
3471 @opindex Wvolatile-register-var
3472 @opindex Wno-volatile-register-var
3473 Warn if a register variable is declared volatile.  The volatile
3474 modifier does not inhibit all optimizations that may eliminate reads
3475 and/or writes to register variables.
3477 @item -Wdisabled-optimization
3478 @opindex Wdisabled-optimization
3479 Warn if a requested optimization pass is disabled.  This warning does
3480 not generally indicate that there is anything wrong with your code; it
3481 merely indicates that GCC's optimizers were unable to handle the code
3482 effectively.  Often, the problem is that your code is too big or too
3483 complex; GCC will refuse to optimize programs when the optimization
3484 itself is likely to take inordinate amounts of time.
3486 @item -Wpointer-sign
3487 @opindex Wpointer-sign
3488 @opindex Wno-pointer-sign
3489 Warn for pointer argument passing or assignment with different signedness.
3490 This option is only supported for C and Objective-C@.  It is implied by
3491 @option{-Wall} and by @option{-pedantic}, which can be disabled with
3492 @option{-Wno-pointer-sign}.
3494 @item -Werror
3495 @opindex Werror
3496 Make all warnings into errors.
3498 @item -Werror=
3499 @opindex Werror=
3500 Make the specified warning into an errors.  The specifier for a
3501 warning is appended, for example @option{-Werror=switch} turns the
3502 warnings controlled by @option{-Wswitch} into errors.  This switch
3503 takes a negative form, to be used to negate @option{-Werror} for
3504 specific warnings, for example @option{-Wno-error=switch} makes
3505 @option{-Wswitch} warnings not be errors, even when @option{-Werror}
3506 is in effect.  You can use the @option{-fdiagnostics-show-option}
3507 option to have each controllable warning amended with the option which
3508 controls it, to determine what to use with this option.
3510 Note that specifying @option{-Werror=}@var{foo} automatically implies
3511 @option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
3512 imply anything.
3514 @item -Wstack-protector
3515 @opindex Wstack-protector
3516 This option is only active when @option{-fstack-protector} is active.  It
3517 warns about functions that will not be protected against stack smashing.
3519 @item -Wstring-literal-comparison
3520 @opindex Wstring-literal-comparison
3521 Warn about suspicious comparisons to string literal constants.  In C,
3522 direct comparisons against the memory address of a string literal, such
3523 as @code{if (x == "abc")}, typically indicate a programmer error, and
3524 even when intentional, result in unspecified behavior and are not portable.
3525 Usually these warnings alert that the programmer intended to use
3526 @code{strcmp}.  This warning is enabled by @option{-Wall}.
3528 @item -Woverlength-strings
3529 @opindex Woverlength-strings
3530 Warn about string constants which are longer than the ``minimum
3531 maximum'' length specified in the C standard.  Modern compilers
3532 generally allow string constants which are much longer than the
3533 standard's minimum limit, but very portable programs should avoid
3534 using longer strings.
3536 The limit applies @emph{after} string constant concatenation, and does
3537 not count the trailing NUL@.  In C89, the limit was 509 characters; in
3538 C99, it was raised to 4095.  C++98 does not specify a normative
3539 minimum maximum, so we do not diagnose overlength strings in C++@.
3541 This option is implied by @option{-pedantic}, and can be disabled with
3542 @option{-Wno-overlength-strings}.
3543 @end table
3545 @node Debugging Options
3546 @section Options for Debugging Your Program or GCC
3547 @cindex options, debugging
3548 @cindex debugging information options
3550 GCC has various special options that are used for debugging
3551 either your program or GCC:
3553 @table @gcctabopt
3554 @item -g
3555 @opindex g
3556 Produce debugging information in the operating system's native format
3557 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
3558 information.
3560 On most systems that use stabs format, @option{-g} enables use of extra
3561 debugging information that only GDB can use; this extra information
3562 makes debugging work better in GDB but will probably make other debuggers
3563 crash or
3564 refuse to read the program.  If you want to control for certain whether
3565 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
3566 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
3568 GCC allows you to use @option{-g} with
3569 @option{-O}.  The shortcuts taken by optimized code may occasionally
3570 produce surprising results: some variables you declared may not exist
3571 at all; flow of control may briefly move where you did not expect it;
3572 some statements may not be executed because they compute constant
3573 results or their values were already at hand; some statements may
3574 execute in different places because they were moved out of loops.
3576 Nevertheless it proves possible to debug optimized output.  This makes
3577 it reasonable to use the optimizer for programs that might have bugs.
3579 The following options are useful when GCC is generated with the
3580 capability for more than one debugging format.
3582 @item -ggdb
3583 @opindex ggdb
3584 Produce debugging information for use by GDB@.  This means to use the
3585 most expressive format available (DWARF 2, stabs, or the native format
3586 if neither of those are supported), including GDB extensions if at all
3587 possible.
3589 @item -gstabs
3590 @opindex gstabs
3591 Produce debugging information in stabs format (if that is supported),
3592 without GDB extensions.  This is the format used by DBX on most BSD
3593 systems.  On MIPS, Alpha and System V Release 4 systems this option
3594 produces stabs debugging output which is not understood by DBX or SDB@.
3595 On System V Release 4 systems this option requires the GNU assembler.
3597 @item -feliminate-unused-debug-symbols
3598 @opindex feliminate-unused-debug-symbols
3599 Produce debugging information in stabs format (if that is supported),
3600 for only symbols that are actually used.
3602 @item -femit-class-debug-always
3603 Instead of emitting debugging information for a C++ class in only one
3604 object file, emit it in all object files using the class.  This option
3605 should be used only with debuggers that are unable to handle the way GCC
3606 normally emits debugging information for classes because using this
3607 option will increase the size of debugging information by as much as a
3608 factor of two.
3610 @item -gstabs+
3611 @opindex gstabs+
3612 Produce debugging information in stabs format (if that is supported),
3613 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3614 use of these extensions is likely to make other debuggers crash or
3615 refuse to read the program.
3617 @item -gcoff
3618 @opindex gcoff
3619 Produce debugging information in COFF format (if that is supported).
3620 This is the format used by SDB on most System V systems prior to
3621 System V Release 4.
3623 @item -gxcoff
3624 @opindex gxcoff
3625 Produce debugging information in XCOFF format (if that is supported).
3626 This is the format used by the DBX debugger on IBM RS/6000 systems.
3628 @item -gxcoff+
3629 @opindex gxcoff+
3630 Produce debugging information in XCOFF format (if that is supported),
3631 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3632 use of these extensions is likely to make other debuggers crash or
3633 refuse to read the program, and may cause assemblers other than the GNU
3634 assembler (GAS) to fail with an error.
3636 @item -gdwarf-2
3637 @opindex gdwarf-2
3638 Produce debugging information in DWARF version 2 format (if that is
3639 supported).  This is the format used by DBX on IRIX 6.  With this
3640 option, GCC uses features of DWARF version 3 when they are useful;
3641 version 3 is upward compatible with version 2, but may still cause
3642 problems for older debuggers.
3644 @item -gvms
3645 @opindex gvms
3646 Produce debugging information in VMS debug format (if that is
3647 supported).  This is the format used by DEBUG on VMS systems.
3649 @item -g@var{level}
3650 @itemx -ggdb@var{level}
3651 @itemx -gstabs@var{level}
3652 @itemx -gcoff@var{level}
3653 @itemx -gxcoff@var{level}
3654 @itemx -gvms@var{level}
3655 Request debugging information and also use @var{level} to specify how
3656 much information.  The default level is 2.
3658 Level 1 produces minimal information, enough for making backtraces in
3659 parts of the program that you don't plan to debug.  This includes
3660 descriptions of functions and external variables, but no information
3661 about local variables and no line numbers.
3663 Level 3 includes extra information, such as all the macro definitions
3664 present in the program.  Some debuggers support macro expansion when
3665 you use @option{-g3}.
3667 @option{-gdwarf-2} does not accept a concatenated debug level, because
3668 GCC used to support an option @option{-gdwarf} that meant to generate
3669 debug information in version 1 of the DWARF format (which is very
3670 different from version 2), and it would have been too confusing.  That
3671 debug format is long obsolete, but the option cannot be changed now.
3672 Instead use an additional @option{-g@var{level}} option to change the
3673 debug level for DWARF2.
3675 @item -feliminate-dwarf2-dups
3676 @opindex feliminate-dwarf2-dups
3677 Compress DWARF2 debugging information by eliminating duplicated
3678 information about each symbol.  This option only makes sense when
3679 generating DWARF2 debugging information with @option{-gdwarf-2}.
3681 @cindex @command{prof}
3682 @item -p
3683 @opindex p
3684 Generate extra code to write profile information suitable for the
3685 analysis program @command{prof}.  You must use this option when compiling
3686 the source files you want data about, and you must also use it when
3687 linking.
3689 @cindex @command{gprof}
3690 @item -pg
3691 @opindex pg
3692 Generate extra code to write profile information suitable for the
3693 analysis program @command{gprof}.  You must use this option when compiling
3694 the source files you want data about, and you must also use it when
3695 linking.
3697 @item -Q
3698 @opindex Q
3699 Makes the compiler print out each function name as it is compiled, and
3700 print some statistics about each pass when it finishes.
3702 @item -ftime-report
3703 @opindex ftime-report
3704 Makes the compiler print some statistics about the time consumed by each
3705 pass when it finishes.
3707 @item -fmem-report
3708 @opindex fmem-report
3709 Makes the compiler print some statistics about permanent memory
3710 allocation when it finishes.
3712 @item -fprofile-arcs
3713 @opindex fprofile-arcs
3714 Add code so that program flow @dfn{arcs} are instrumented.  During
3715 execution the program records how many times each branch and call is
3716 executed and how many times it is taken or returns.  When the compiled
3717 program exits it saves this data to a file called
3718 @file{@var{auxname}.gcda} for each source file.  The data may be used for
3719 profile-directed optimizations (@option{-fbranch-probabilities}), or for
3720 test coverage analysis (@option{-ftest-coverage}).  Each object file's
3721 @var{auxname} is generated from the name of the output file, if
3722 explicitly specified and it is not the final executable, otherwise it is
3723 the basename of the source file.  In both cases any suffix is removed
3724 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
3725 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
3726 @xref{Cross-profiling}.
3728 @cindex @command{gcov}
3729 @item --coverage
3730 @opindex coverage
3732 This option is used to compile and link code instrumented for coverage
3733 analysis.  The option is a synonym for @option{-fprofile-arcs}
3734 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
3735 linking).  See the documentation for those options for more details.
3737 @itemize
3739 @item
3740 Compile the source files with @option{-fprofile-arcs} plus optimization
3741 and code generation options.  For test coverage analysis, use the
3742 additional @option{-ftest-coverage} option.  You do not need to profile
3743 every source file in a program.
3745 @item
3746 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
3747 (the latter implies the former).
3749 @item
3750 Run the program on a representative workload to generate the arc profile
3751 information.  This may be repeated any number of times.  You can run
3752 concurrent instances of your program, and provided that the file system
3753 supports locking, the data files will be correctly updated.  Also
3754 @code{fork} calls are detected and correctly handled (double counting
3755 will not happen).
3757 @item
3758 For profile-directed optimizations, compile the source files again with
3759 the same optimization and code generation options plus
3760 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
3761 Control Optimization}).
3763 @item
3764 For test coverage analysis, use @command{gcov} to produce human readable
3765 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
3766 @command{gcov} documentation for further information.
3768 @end itemize
3770 With @option{-fprofile-arcs}, for each function of your program GCC
3771 creates a program flow graph, then finds a spanning tree for the graph.
3772 Only arcs that are not on the spanning tree have to be instrumented: the
3773 compiler adds code to count the number of times that these arcs are
3774 executed.  When an arc is the only exit or only entrance to a block, the
3775 instrumentation code can be added to the block; otherwise, a new basic
3776 block must be created to hold the instrumentation code.
3778 @need 2000
3779 @item -ftest-coverage
3780 @opindex ftest-coverage
3781 Produce a notes file that the @command{gcov} code-coverage utility
3782 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
3783 show program coverage.  Each source file's note file is called
3784 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
3785 above for a description of @var{auxname} and instructions on how to
3786 generate test coverage data.  Coverage data will match the source files
3787 more closely, if you do not optimize.
3789 @item -d@var{letters}
3790 @item -fdump-rtl-@var{pass}
3791 @opindex d
3792 Says to make debugging dumps during compilation at times specified by
3793 @var{letters}.    This is used for debugging the RTL-based passes of the
3794 compiler.  The file names for most of the dumps are made by appending a
3795 pass number and a word to the @var{dumpname}.  @var{dumpname} is generated
3796 from the name of the output file, if explicitly specified and it is not
3797 an executable, otherwise it is the basename of the source file.
3799 Most debug dumps can be enabled either passing a letter to the @option{-d}
3800 option, or with a long @option{-fdump-rtl} switch; here are the possible
3801 letters for use in @var{letters} and @var{pass}, and their meanings:
3803 @table @gcctabopt
3804 @item -dA
3805 @opindex dA
3806 Annotate the assembler output with miscellaneous debugging information.
3808 @item -dB
3809 @itemx -fdump-rtl-bbro
3810 @opindex dB
3811 @opindex fdump-rtl-bbro
3812 Dump after block reordering, to @file{@var{file}.148r.bbro}.
3814 @item -dc
3815 @itemx -fdump-rtl-combine
3816 @opindex dc
3817 @opindex fdump-rtl-combine
3818 Dump after instruction combination, to the file @file{@var{file}.129r.combine}.
3820 @item -dC
3821 @itemx -fdump-rtl-ce1
3822 @itemx -fdump-rtl-ce2
3823 @opindex dC
3824 @opindex fdump-rtl-ce1
3825 @opindex fdump-rtl-ce2
3826 @option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the
3827 first if conversion, to the file @file{@var{file}.117r.ce1}.  @option{-dC}
3828 and @option{-fdump-rtl-ce2} enable dumping after the second if
3829 conversion, to the file @file{@var{file}.130r.ce2}.
3831 @item -dd
3832 @itemx -fdump-rtl-btl
3833 @itemx -fdump-rtl-dbr
3834 @opindex dd
3835 @opindex fdump-rtl-btl
3836 @opindex fdump-rtl-dbr
3837 @option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch
3838 target load optimization, to @file{@var{file}.31.btl}.  @option{-dd}
3839 and @option{-fdump-rtl-dbr} enable dumping after delayed branch
3840 scheduling, to @file{@var{file}.36.dbr}.
3842 @item -dD
3843 @opindex dD
3844 Dump all macro definitions, at the end of preprocessing, in addition to
3845 normal output.
3847 @item -dE
3848 @itemx -fdump-rtl-ce3
3849 @opindex dE
3850 @opindex fdump-rtl-ce3
3851 Dump after the third if conversion, to @file{@var{file}.146r.ce3}.
3853 @item -df
3854 @itemx -fdump-rtl-cfg
3855 @itemx -fdump-rtl-life
3856 @opindex df
3857 @opindex fdump-rtl-cfg
3858 @opindex fdump-rtl-life
3859 @option{-df} and @option{-fdump-rtl-cfg} enable dumping after control
3860 and data flow analysis, to @file{@var{file}.116r.cfg}.  @option{-df}
3861 and @option{-fdump-rtl-cfg} enable dumping dump after life analysis,
3862 to @file{@var{file}.128r.life1} and @file{@var{file}.135r.life2}.
3864 @item -dg
3865 @itemx -fdump-rtl-greg
3866 @opindex dg
3867 @opindex fdump-rtl-greg
3868 Dump after global register allocation, to @file{@var{file}.139r.greg}.
3870 @item -dG
3871 @itemx -fdump-rtl-gcse
3872 @itemx -fdump-rtl-bypass
3873 @opindex dG
3874 @opindex fdump-rtl-gcse
3875 @opindex fdump-rtl-bypass
3876 @option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to
3877 @file{@var{file}.114r.gcse}.  @option{-dG} and @option{-fdump-rtl-bypass}
3878 enable dumping after jump bypassing and control flow optimizations, to
3879 @file{@var{file}.115r.bypass}.
3881 @item -dh
3882 @itemx -fdump-rtl-eh
3883 @opindex dh
3884 @opindex fdump-rtl-eh
3885 Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
3887 @item -di
3888 @itemx -fdump-rtl-sibling
3889 @opindex di
3890 @opindex fdump-rtl-sibling
3891 Dump after sibling call optimizations, to @file{@var{file}.106r.sibling}.
3893 @item -dj
3894 @itemx -fdump-rtl-jump
3895 @opindex dj
3896 @opindex fdump-rtl-jump
3897 Dump after the first jump optimization, to @file{@var{file}.112r.jump}.
3899 @item -dk
3900 @itemx -fdump-rtl-stack
3901 @opindex dk
3902 @opindex fdump-rtl-stack
3903 Dump after conversion from registers to stack, to @file{@var{file}.152r.stack}.
3905 @item -dl
3906 @itemx -fdump-rtl-lreg
3907 @opindex dl
3908 @opindex fdump-rtl-lreg
3909 Dump after local register allocation, to @file{@var{file}.138r.lreg}.
3911 @item -dL
3912 @itemx -fdump-rtl-loop2
3913 @opindex dL
3914 @opindex fdump-rtl-loop2
3915 @option{-dL} and @option{-fdump-rtl-loop2} enable dumping after the
3916 loop optimization pass, to @file{@var{file}.119r.loop2},
3917 @file{@var{file}.120r.loop2_init},
3918 @file{@var{file}.121r.loop2_invariant}, and
3919 @file{@var{file}.125r.loop2_done}.
3921 @item -dm
3922 @itemx -fdump-rtl-sms
3923 @opindex dm
3924 @opindex fdump-rtl-sms
3925 Dump after modulo scheduling, to @file{@var{file}.136r.sms}.
3927 @item -dM
3928 @itemx -fdump-rtl-mach
3929 @opindex dM
3930 @opindex fdump-rtl-mach
3931 Dump after performing the machine dependent reorganization pass, to
3932 @file{@var{file}.155r.mach}.
3934 @item -dn
3935 @itemx -fdump-rtl-rnreg
3936 @opindex dn
3937 @opindex fdump-rtl-rnreg
3938 Dump after register renumbering, to @file{@var{file}.147r.rnreg}.
3940 @item -dN
3941 @itemx -fdump-rtl-regmove
3942 @opindex dN
3943 @opindex fdump-rtl-regmove
3944 Dump after the register move pass, to @file{@var{file}.132r.regmove}.
3946 @item -do
3947 @itemx -fdump-rtl-postreload
3948 @opindex do
3949 @opindex fdump-rtl-postreload
3950 Dump after post-reload optimizations, to @file{@var{file}.24.postreload}.
3952 @item -dr
3953 @itemx -fdump-rtl-expand
3954 @opindex dr
3955 @opindex fdump-rtl-expand
3956 Dump after RTL generation, to @file{@var{file}.104r.expand}.
3958 @item -dR
3959 @itemx -fdump-rtl-sched2
3960 @opindex dR
3961 @opindex fdump-rtl-sched2
3962 Dump after the second scheduling pass, to @file{@var{file}.149r.sched2}.
3964 @item -ds
3965 @itemx -fdump-rtl-cse
3966 @opindex ds
3967 @opindex fdump-rtl-cse
3968 Dump after CSE (including the jump optimization that sometimes follows
3969 CSE), to @file{@var{file}.113r.cse}.
3971 @item -dS
3972 @itemx -fdump-rtl-sched1
3973 @opindex dS
3974 @opindex fdump-rtl-sched1
3975 Dump after the first scheduling pass, to @file{@var{file}.136r.sched1}.
3977 @item -dt
3978 @itemx -fdump-rtl-cse2
3979 @opindex dt
3980 @opindex fdump-rtl-cse2
3981 Dump after the second CSE pass (including the jump optimization that
3982 sometimes follows CSE), to @file{@var{file}.127r.cse2}.
3984 @item -dT
3985 @itemx -fdump-rtl-tracer
3986 @opindex dT
3987 @opindex fdump-rtl-tracer
3988 Dump after running tracer, to @file{@var{file}.118r.tracer}.
3990 @item -dV
3991 @itemx -fdump-rtl-vpt
3992 @itemx -fdump-rtl-vartrack
3993 @opindex dV
3994 @opindex fdump-rtl-vpt
3995 @opindex fdump-rtl-vartrack
3996 @option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value
3997 profile transformations, to @file{@var{file}.10.vpt}.  @option{-dV}
3998 and @option{-fdump-rtl-vartrack} enable dumping after variable tracking,
3999 to @file{@var{file}.154r.vartrack}.
4001 @item -dw
4002 @itemx -fdump-rtl-flow2
4003 @opindex dw
4004 @opindex fdump-rtl-flow2
4005 Dump after the second flow pass, to @file{@var{file}.142r.flow2}.
4007 @item -dz
4008 @itemx -fdump-rtl-peephole2
4009 @opindex dz
4010 @opindex fdump-rtl-peephole2
4011 Dump after the peephole pass, to @file{@var{file}.145r.peephole2}.
4013 @item -dZ
4014 @itemx -fdump-rtl-web
4015 @opindex dZ
4016 @opindex fdump-rtl-web
4017 Dump after live range splitting, to @file{@var{file}.126r.web}.
4019 @item -da
4020 @itemx -fdump-rtl-all
4021 @opindex da
4022 @opindex fdump-rtl-all
4023 Produce all the dumps listed above.
4025 @item -dH
4026 @opindex dH
4027 Produce a core dump whenever an error occurs.
4029 @item -dm
4030 @opindex dm
4031 Print statistics on memory usage, at the end of the run, to
4032 standard error.
4034 @item -dp
4035 @opindex dp
4036 Annotate the assembler output with a comment indicating which
4037 pattern and alternative was used.  The length of each instruction is
4038 also printed.
4040 @item -dP
4041 @opindex dP
4042 Dump the RTL in the assembler output as a comment before each instruction.
4043 Also turns on @option{-dp} annotation.
4045 @item -dv
4046 @opindex dv
4047 For each of the other indicated dump files (either with @option{-d} or
4048 @option{-fdump-rtl-@var{pass}}), dump a representation of the control flow
4049 graph suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
4051 @item -dx
4052 @opindex dx
4053 Just generate RTL for a function instead of compiling it.  Usually used
4054 with @samp{r} (@option{-fdump-rtl-expand}).
4056 @item -dy
4057 @opindex dy
4058 Dump debugging information during parsing, to standard error.
4059 @end table
4061 @item -fdump-noaddr
4062 @opindex fdump-noaddr
4063 When doing debugging dumps (see @option{-d} option above), suppress
4064 address output.  This makes it more feasible to use diff on debugging
4065 dumps for compiler invocations with different compiler binaries and/or
4066 different text / bss / data / heap / stack / dso start locations.
4068 @item -fdump-unnumbered
4069 @opindex fdump-unnumbered
4070 When doing debugging dumps (see @option{-d} option above), suppress instruction
4071 numbers, line number note and address output.  This makes it more feasible to
4072 use diff on debugging dumps for compiler invocations with different
4073 options, in particular with and without @option{-g}.
4075 @item -fdump-translation-unit @r{(C++ only)}
4076 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
4077 @opindex fdump-translation-unit
4078 Dump a representation of the tree structure for the entire translation
4079 unit to a file.  The file name is made by appending @file{.tu} to the
4080 source file name.  If the @samp{-@var{options}} form is used, @var{options}
4081 controls the details of the dump as described for the
4082 @option{-fdump-tree} options.
4084 @item -fdump-class-hierarchy @r{(C++ only)}
4085 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
4086 @opindex fdump-class-hierarchy
4087 Dump a representation of each class's hierarchy and virtual function
4088 table layout to a file.  The file name is made by appending @file{.class}
4089 to the source file name.  If the @samp{-@var{options}} form is used,
4090 @var{options} controls the details of the dump as described for the
4091 @option{-fdump-tree} options.
4093 @item -fdump-ipa-@var{switch}
4094 @opindex fdump-ipa
4095 Control the dumping at various stages of inter-procedural analysis
4096 language tree to a file.  The file name is generated by appending a switch
4097 specific suffix to the source file name.  The following dumps are possible:
4099 @table @samp
4100 @item all
4101 Enables all inter-procedural analysis dumps; currently the only produced
4102 dump is the @samp{cgraph} dump.
4104 @item cgraph
4105 Dumps information about call-graph optimization, unused function removal,
4106 and inlining decisions.
4107 @end table
4109 @item -fdump-tree-@var{switch}
4110 @itemx -fdump-tree-@var{switch}-@var{options}
4111 @opindex fdump-tree
4112 Control the dumping at various stages of processing the intermediate
4113 language tree to a file.  The file name is generated by appending a switch
4114 specific suffix to the source file name.  If the @samp{-@var{options}}
4115 form is used, @var{options} is a list of @samp{-} separated options that
4116 control the details of the dump.  Not all options are applicable to all
4117 dumps, those which are not meaningful will be ignored.  The following
4118 options are available
4120 @table @samp
4121 @item address
4122 Print the address of each node.  Usually this is not meaningful as it
4123 changes according to the environment and source file.  Its primary use
4124 is for tying up a dump file with a debug environment.
4125 @item slim
4126 Inhibit dumping of members of a scope or body of a function merely
4127 because that scope has been reached.  Only dump such items when they
4128 are directly reachable by some other path.  When dumping pretty-printed
4129 trees, this option inhibits dumping the bodies of control structures.
4130 @item raw
4131 Print a raw representation of the tree.  By default, trees are
4132 pretty-printed into a C-like representation.
4133 @item details
4134 Enable more detailed dumps (not honored by every dump option).
4135 @item stats
4136 Enable dumping various statistics about the pass (not honored by every dump
4137 option).
4138 @item blocks
4139 Enable showing basic block boundaries (disabled in raw dumps).
4140 @item vops
4141 Enable showing virtual operands for every statement.
4142 @item lineno
4143 Enable showing line numbers for statements.
4144 @item uid
4145 Enable showing the unique ID (@code{DECL_UID}) for each variable.
4146 @item all
4147 Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
4148 @end table
4150 The following tree dumps are possible:
4151 @table @samp
4153 @item original
4154 Dump before any tree based optimization, to @file{@var{file}.original}.
4156 @item optimized
4157 Dump after all tree based optimization, to @file{@var{file}.optimized}.
4159 @item inlined
4160 Dump after function inlining, to @file{@var{file}.inlined}.
4162 @item gimple
4163 @opindex fdump-tree-gimple
4164 Dump each function before and after the gimplification pass to a file.  The
4165 file name is made by appending @file{.gimple} to the source file name.
4167 @item cfg
4168 @opindex fdump-tree-cfg
4169 Dump the control flow graph of each function to a file.  The file name is
4170 made by appending @file{.cfg} to the source file name.
4172 @item vcg
4173 @opindex fdump-tree-vcg
4174 Dump the control flow graph of each function to a file in VCG format.  The
4175 file name is made by appending @file{.vcg} to the source file name.  Note
4176 that if the file contains more than one function, the generated file cannot
4177 be used directly by VCG@.  You will need to cut and paste each function's
4178 graph into its own separate file first.
4180 @item ch
4181 @opindex fdump-tree-ch
4182 Dump each function after copying loop headers.  The file name is made by
4183 appending @file{.ch} to the source file name.
4185 @item ssa
4186 @opindex fdump-tree-ssa
4187 Dump SSA related information to a file.  The file name is made by appending
4188 @file{.ssa} to the source file name.
4190 @item salias
4191 @opindex fdump-tree-salias
4192 Dump structure aliasing variable information to a file.  This file name
4193 is made by appending @file{.salias} to the source file name.
4195 @item alias
4196 @opindex fdump-tree-alias
4197 Dump aliasing information for each function.  The file name is made by
4198 appending @file{.alias} to the source file name.
4200 @item ccp
4201 @opindex fdump-tree-ccp
4202 Dump each function after CCP@.  The file name is made by appending
4203 @file{.ccp} to the source file name.
4205 @item storeccp
4206 @opindex fdump-tree-storeccp
4207 Dump each function after STORE-CCP.  The file name is made by appending
4208 @file{.storeccp} to the source file name.
4210 @item pre
4211 @opindex fdump-tree-pre
4212 Dump trees after partial redundancy elimination.  The file name is made
4213 by appending @file{.pre} to the source file name.
4215 @item fre
4216 @opindex fdump-tree-fre
4217 Dump trees after full redundancy elimination.  The file name is made
4218 by appending @file{.fre} to the source file name.
4220 @item copyprop
4221 @opindex fdump-tree-copyprop
4222 Dump trees after copy propagation.  The file name is made
4223 by appending @file{.copyprop} to the source file name.
4225 @item store_copyprop
4226 @opindex fdump-tree-store_copyprop
4227 Dump trees after store copy-propagation.  The file name is made
4228 by appending @file{.store_copyprop} to the source file name.
4230 @item dce
4231 @opindex fdump-tree-dce
4232 Dump each function after dead code elimination.  The file name is made by
4233 appending @file{.dce} to the source file name.
4235 @item mudflap
4236 @opindex fdump-tree-mudflap
4237 Dump each function after adding mudflap instrumentation.  The file name is
4238 made by appending @file{.mudflap} to the source file name.
4240 @item sra
4241 @opindex fdump-tree-sra
4242 Dump each function after performing scalar replacement of aggregates.  The
4243 file name is made by appending @file{.sra} to the source file name.
4245 @item sink
4246 @opindex fdump-tree-sink
4247 Dump each function after performing code sinking.  The file name is made
4248 by appending @file{.sink} to the source file name. 
4250 @item dom
4251 @opindex fdump-tree-dom
4252 Dump each function after applying dominator tree optimizations.  The file
4253 name is made by appending @file{.dom} to the source file name.
4255 @item dse
4256 @opindex fdump-tree-dse
4257 Dump each function after applying dead store elimination.  The file
4258 name is made by appending @file{.dse} to the source file name.
4260 @item phiopt
4261 @opindex fdump-tree-phiopt
4262 Dump each function after optimizing PHI nodes into straightline code.  The file
4263 name is made by appending @file{.phiopt} to the source file name.
4265 @item forwprop
4266 @opindex fdump-tree-forwprop
4267 Dump each function after forward propagating single use variables.  The file
4268 name is made by appending @file{.forwprop} to the source file name.
4270 @item copyrename
4271 @opindex fdump-tree-copyrename
4272 Dump each function after applying the copy rename optimization.  The file
4273 name is made by appending @file{.copyrename} to the source file name.
4275 @item nrv
4276 @opindex fdump-tree-nrv
4277 Dump each function after applying the named return value optimization on
4278 generic trees.  The file name is made by appending @file{.nrv} to the source
4279 file name.
4281 @item vect
4282 @opindex fdump-tree-vect
4283 Dump each function after applying vectorization of loops.  The file name is
4284 made by appending @file{.vect} to the source file name.
4286 @item vrp
4287 @opindex fdump-tree-vrp
4288 Dump each function after Value Range Propagation (VRP).  The file name
4289 is made by appending @file{.vrp} to the source file name.
4291 @item all
4292 @opindex fdump-tree-all
4293 Enable all the available tree dumps with the flags provided in this option.
4294 @end table
4296 @item -ftree-vectorizer-verbose=@var{n}
4297 @opindex ftree-vectorizer-verbose
4298 This option controls the amount of debugging output the vectorizer prints.
4299 This information is written to standard error, unless 
4300 @option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified, 
4301 in which case it is output to the usual dump listing file, @file{.vect}.
4302 For @var{n}=0 no diagnostic information is reported.
4303 If @var{n}=1 the vectorizer reports each loop that got vectorized, 
4304 and the total number of loops that got vectorized.
4305 If @var{n}=2 the vectorizer also reports non-vectorized loops that passed 
4306 the first analysis phase (vect_analyze_loop_form) - i.e. countable, 
4307 inner-most, single-bb, single-entry/exit loops.  This is the same verbosity 
4308 level that @option{-fdump-tree-vect-stats} uses.
4309 Higher verbosity levels mean either more information dumped for each 
4310 reported loop, or same amount of information reported for more loops:
4311 If @var{n}=3, alignment related information is added to the reports.
4312 If @var{n}=4, data-references related information (e.g. memory dependences, 
4313 memory access-patterns) is added to the reports.
4314 If @var{n}=5, the vectorizer reports also non-vectorized inner-most loops 
4315 that did not pass the first analysis phase (i.e. may not be countable, or 
4316 may have complicated control-flow).
4317 If @var{n}=6, the vectorizer reports also non-vectorized nested loops.
4318 For @var{n}=7, all the information the vectorizer generates during its 
4319 analysis and transformation is reported.  This is the same verbosity level
4320 that @option{-fdump-tree-vect-details} uses.
4322 @item -frandom-seed=@var{string}
4323 @opindex frandom-string
4324 This option provides a seed that GCC uses when it would otherwise use
4325 random numbers.  It is used to generate certain symbol names
4326 that have to be different in every compiled file.  It is also used to
4327 place unique stamps in coverage data files and the object files that
4328 produce them.  You can use the @option{-frandom-seed} option to produce
4329 reproducibly identical object files.
4331 The @var{string} should be different for every file you compile.
4333 @item -fsched-verbose=@var{n}
4334 @opindex fsched-verbose
4335 On targets that use instruction scheduling, this option controls the
4336 amount of debugging output the scheduler prints.  This information is
4337 written to standard error, unless @option{-dS} or @option{-dR} is
4338 specified, in which case it is output to the usual dump
4339 listing file, @file{.sched} or @file{.sched2} respectively.  However
4340 for @var{n} greater than nine, the output is always printed to standard
4341 error.
4343 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
4344 same information as @option{-dRS}.  For @var{n} greater than one, it
4345 also output basic block probabilities, detailed ready list information
4346 and unit/insn info.  For @var{n} greater than two, it includes RTL
4347 at abort point, control-flow and regions info.  And for @var{n} over
4348 four, @option{-fsched-verbose} also includes dependence info.
4350 @item -save-temps
4351 @opindex save-temps
4352 Store the usual ``temporary'' intermediate files permanently; place them
4353 in the current directory and name them based on the source file.  Thus,
4354 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
4355 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
4356 preprocessed @file{foo.i} output file even though the compiler now
4357 normally uses an integrated preprocessor.
4359 When used in combination with the @option{-x} command line option,
4360 @option{-save-temps} is sensible enough to avoid over writing an
4361 input source file with the same extension as an intermediate file.
4362 The corresponding intermediate file may be obtained by renaming the
4363 source file before using @option{-save-temps}.
4365 @item -time
4366 @opindex time
4367 Report the CPU time taken by each subprocess in the compilation
4368 sequence.  For C source files, this is the compiler proper and assembler
4369 (plus the linker if linking is done).  The output looks like this:
4371 @smallexample
4372 # cc1 0.12 0.01
4373 # as 0.00 0.01
4374 @end smallexample
4376 The first number on each line is the ``user time'', that is time spent
4377 executing the program itself.  The second number is ``system time'',
4378 time spent executing operating system routines on behalf of the program.
4379 Both numbers are in seconds.
4381 @item -fvar-tracking
4382 @opindex fvar-tracking
4383 Run variable tracking pass.  It computes where variables are stored at each
4384 position in code.  Better debugging information is then generated
4385 (if the debugging information format supports this information).
4387 It is enabled by default when compiling with optimization (@option{-Os},
4388 @option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
4389 the debug info format supports it.
4391 @item -print-file-name=@var{library}
4392 @opindex print-file-name
4393 Print the full absolute name of the library file @var{library} that
4394 would be used when linking---and don't do anything else.  With this
4395 option, GCC does not compile or link anything; it just prints the
4396 file name.
4398 @item -print-multi-directory
4399 @opindex print-multi-directory
4400 Print the directory name corresponding to the multilib selected by any
4401 other switches present in the command line.  This directory is supposed
4402 to exist in @env{GCC_EXEC_PREFIX}.
4404 @item -print-multi-lib
4405 @opindex print-multi-lib
4406 Print the mapping from multilib directory names to compiler switches
4407 that enable them.  The directory name is separated from the switches by
4408 @samp{;}, and each switch starts with an @samp{@@} instead of the
4409 @samp{-}, without spaces between multiple switches.  This is supposed to
4410 ease shell-processing.
4412 @item -print-prog-name=@var{program}
4413 @opindex print-prog-name
4414 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
4416 @item -print-libgcc-file-name
4417 @opindex print-libgcc-file-name
4418 Same as @option{-print-file-name=libgcc.a}.
4420 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
4421 but you do want to link with @file{libgcc.a}.  You can do
4423 @smallexample
4424 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
4425 @end smallexample
4427 @item -print-search-dirs
4428 @opindex print-search-dirs
4429 Print the name of the configured installation directory and a list of
4430 program and library directories @command{gcc} will search---and don't do anything else.
4432 This is useful when @command{gcc} prints the error message
4433 @samp{installation problem, cannot exec cpp0: No such file or directory}.
4434 To resolve this you either need to put @file{cpp0} and the other compiler
4435 components where @command{gcc} expects to find them, or you can set the environment
4436 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
4437 Don't forget the trailing @samp{/}.
4438 @xref{Environment Variables}.
4440 @item -dumpmachine
4441 @opindex dumpmachine
4442 Print the compiler's target machine (for example,
4443 @samp{i686-pc-linux-gnu})---and don't do anything else.
4445 @item -dumpversion
4446 @opindex dumpversion
4447 Print the compiler version (for example, @samp{3.0})---and don't do
4448 anything else.
4450 @item -dumpspecs
4451 @opindex dumpspecs
4452 Print the compiler's built-in specs---and don't do anything else.  (This
4453 is used when GCC itself is being built.)  @xref{Spec Files}.
4455 @item -feliminate-unused-debug-types
4456 @opindex feliminate-unused-debug-types
4457 Normally, when producing DWARF2 output, GCC will emit debugging
4458 information for all types declared in a compilation
4459 unit, regardless of whether or not they are actually used
4460 in that compilation unit.  Sometimes this is useful, such as
4461 if, in the debugger, you want to cast a value to a type that is
4462 not actually used in your program (but is declared).  More often,
4463 however, this results in a significant amount of wasted space.
4464 With this option, GCC will avoid producing debug symbol output
4465 for types that are nowhere used in the source file being compiled.
4466 @end table
4468 @node Optimize Options
4469 @section Options That Control Optimization
4470 @cindex optimize options
4471 @cindex options, optimization
4473 These options control various sorts of optimizations.
4475 Without any optimization option, the compiler's goal is to reduce the
4476 cost of compilation and to make debugging produce the expected
4477 results.  Statements are independent: if you stop the program with a
4478 breakpoint between statements, you can then assign a new value to any
4479 variable or change the program counter to any other statement in the
4480 function and get exactly the results you would expect from the source
4481 code.
4483 Turning on optimization flags makes the compiler attempt to improve
4484 the performance and/or code size at the expense of compilation time
4485 and possibly the ability to debug the program.
4487 The compiler performs optimization based on the knowledge it has of
4488 the program.  Optimization levels @option{-O} and above, in
4489 particular, enable @emph{unit-at-a-time} mode, which allows the
4490 compiler to consider information gained from later functions in
4491 the file when compiling a function.  Compiling multiple files at
4492 once to a single output file in @emph{unit-at-a-time} mode allows
4493 the compiler to use information gained from all of the files when
4494 compiling each of them.
4496 Not all optimizations are controlled directly by a flag.  Only
4497 optimizations that have a flag are listed.
4499 @table @gcctabopt
4500 @item -O
4501 @itemx -O1
4502 @opindex O
4503 @opindex O1
4504 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4505 more memory for a large function.
4507 With @option{-O}, the compiler tries to reduce code size and execution
4508 time, without performing any optimizations that take a great deal of
4509 compilation time.
4511 @option{-O} turns on the following optimization flags:
4512 @gccoptlist{-fdefer-pop @gol
4513 -fdelayed-branch @gol
4514 -fguess-branch-probability @gol
4515 -fcprop-registers @gol
4516 -fif-conversion @gol
4517 -fif-conversion2 @gol
4518 -ftree-ccp @gol
4519 -ftree-dce @gol
4520 -ftree-dominator-opts @gol
4521 -ftree-dse @gol
4522 -ftree-ter @gol
4523 -ftree-lrs @gol
4524 -ftree-sra @gol
4525 -ftree-copyrename @gol
4526 -ftree-fre @gol
4527 -ftree-ch @gol
4528 -funit-at-a-time @gol
4529 -fmerge-constants}
4531 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
4532 where doing so does not interfere with debugging.
4534 @item -O2
4535 @opindex O2
4536 Optimize even more.  GCC performs nearly all supported optimizations
4537 that do not involve a space-speed tradeoff.  The compiler does not
4538 perform loop unrolling or function inlining when you specify @option{-O2}.
4539 As compared to @option{-O}, this option increases both compilation time
4540 and the performance of the generated code.
4542 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
4543 also turns on the following optimization flags:
4544 @gccoptlist{-fthread-jumps @gol
4545 -fcrossjumping @gol
4546 -foptimize-sibling-calls @gol
4547 -fcse-follow-jumps  -fcse-skip-blocks @gol
4548 -fgcse  -fgcse-lm  @gol
4549 -fexpensive-optimizations @gol
4550 -frerun-cse-after-loop  @gol
4551 -fcaller-saves @gol
4552 -fpeephole2 @gol
4553 -fschedule-insns  -fschedule-insns2 @gol
4554 -fsched-interblock  -fsched-spec @gol
4555 -fregmove @gol
4556 -fstrict-aliasing @gol
4557 -fdelete-null-pointer-checks @gol
4558 -freorder-blocks  -freorder-functions @gol
4559 -falign-functions  -falign-jumps @gol
4560 -falign-loops  -falign-labels @gol
4561 -ftree-vrp @gol
4562 -ftree-pre}
4564 Please note the warning under @option{-fgcse} about
4565 invoking @option{-O2} on programs that use computed gotos.
4567 @item -O3
4568 @opindex O3
4569 Optimize yet more.  @option{-O3} turns on all optimizations specified by
4570 @option{-O2} and also turns on the @option{-finline-functions},
4571 @option{-funswitch-loops} and @option{-fgcse-after-reload} options.
4573 @item -O0
4574 @opindex O0
4575 Do not optimize.  This is the default.
4577 @item -Os
4578 @opindex Os
4579 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
4580 do not typically increase code size.  It also performs further
4581 optimizations designed to reduce code size.
4583 @option{-Os} disables the following optimization flags:
4584 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
4585 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
4586 -fprefetch-loop-arrays  -ftree-vect-loop-version}
4588 If you use multiple @option{-O} options, with or without level numbers,
4589 the last such option is the one that is effective.
4590 @end table
4592 Options of the form @option{-f@var{flag}} specify machine-independent
4593 flags.  Most flags have both positive and negative forms; the negative
4594 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
4595 below, only one of the forms is listed---the one you typically will
4596 use.  You can figure out the other form by either removing @samp{no-}
4597 or adding it.
4599 The following options control specific optimizations.  They are either
4600 activated by @option{-O} options or are related to ones that are.  You
4601 can use the following flags in the rare cases when ``fine-tuning'' of
4602 optimizations to be performed is desired.
4604 @table @gcctabopt
4605 @item -fno-default-inline
4606 @opindex fno-default-inline
4607 Do not make member functions inline by default merely because they are
4608 defined inside the class scope (C++ only).  Otherwise, when you specify
4609 @w{@option{-O}}, member functions defined inside class scope are compiled
4610 inline by default; i.e., you don't need to add @samp{inline} in front of
4611 the member function name.
4613 @item -fno-defer-pop
4614 @opindex fno-defer-pop
4615 Always pop the arguments to each function call as soon as that function
4616 returns.  For machines which must pop arguments after a function call,
4617 the compiler normally lets arguments accumulate on the stack for several
4618 function calls and pops them all at once.
4620 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4622 @item -fforce-mem
4623 @opindex fforce-mem
4624 Force memory operands to be copied into registers before doing
4625 arithmetic on them.  This produces better code by making all memory
4626 references potential common subexpressions.  When they are not common
4627 subexpressions, instruction combination should eliminate the separate
4628 register-load. This option is now a nop and will be removed in 4.2.
4630 @item -fforce-addr
4631 @opindex fforce-addr
4632 Force memory address constants to be copied into registers before
4633 doing arithmetic on them.
4635 @item -fforward-propagate
4636 @opindex fforward-propagate
4637 Perform a forward propagation pass on RTL.  The pass tries to combine two
4638 instructions and checks if the result can be simplified.  If loop unrolling
4639 is active, two passes are performed and the second is scheduled after
4640 loop unrolling.
4642 This option is enabled by default at optimization levels @option{-O2},
4643 @option{-O3}, @option{-Os}.
4645 @item -fomit-frame-pointer
4646 @opindex fomit-frame-pointer
4647 Don't keep the frame pointer in a register for functions that
4648 don't need one.  This avoids the instructions to save, set up and
4649 restore frame pointers; it also makes an extra register available
4650 in many functions.  @strong{It also makes debugging impossible on
4651 some machines.}
4653 On some machines, such as the VAX, this flag has no effect, because
4654 the standard calling sequence automatically handles the frame pointer
4655 and nothing is saved by pretending it doesn't exist.  The
4656 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
4657 whether a target machine supports this flag.  @xref{Registers,,Register
4658 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
4660 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4662 @item -foptimize-sibling-calls
4663 @opindex foptimize-sibling-calls
4664 Optimize sibling and tail recursive calls.
4666 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4668 @item -fno-inline
4669 @opindex fno-inline
4670 Don't pay attention to the @code{inline} keyword.  Normally this option
4671 is used to keep the compiler from expanding any functions inline.
4672 Note that if you are not optimizing, no functions can be expanded inline.
4674 @item -finline-functions
4675 @opindex finline-functions
4676 Integrate all simple functions into their callers.  The compiler
4677 heuristically decides which functions are simple enough to be worth
4678 integrating in this way.
4680 If all calls to a given function are integrated, and the function is
4681 declared @code{static}, then the function is normally not output as
4682 assembler code in its own right.
4684 Enabled at level @option{-O3}.
4686 @item -finline-functions-called-once
4687 @opindex finline-functions-called-once
4688 Consider all @code{static} functions called once for inlining into their
4689 caller even if they are not marked @code{inline}.  If a call to a given
4690 function is integrated, then the function is not output as assembler code
4691 in its own right.
4693 Enabled if @option{-funit-at-a-time} is enabled.
4695 @item -fearly-inlining
4696 @opindex fearly-inlining
4697 Inline functions marked by @code{always_inline} and functions whose body seems
4698 smaller than the function call overhead early before doing
4699 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
4700 makes profiling significantly cheaper and usually inlining faster on programs
4701 having large chains of nested wrapper functions.
4703 Enabled by default.
4705 @item -finline-limit=@var{n}
4706 @opindex finline-limit
4707 By default, GCC limits the size of functions that can be inlined.  This flag
4708 allows the control of this limit for functions that are explicitly marked as
4709 inline (i.e., marked with the inline keyword or defined within the class
4710 definition in c++).  @var{n} is the size of functions that can be inlined in
4711 number of pseudo instructions (not counting parameter handling).  The default
4712 value of @var{n} is 600.
4713 Increasing this value can result in more inlined code at
4714 the cost of compilation time and memory consumption.  Decreasing usually makes
4715 the compilation faster and less code will be inlined (which presumably
4716 means slower programs).  This option is particularly useful for programs that
4717 use inlining heavily such as those based on recursive templates with C++.
4719 Inlining is actually controlled by a number of parameters, which may be
4720 specified individually by using @option{--param @var{name}=@var{value}}.
4721 The @option{-finline-limit=@var{n}} option sets some of these parameters
4722 as follows:
4724 @table @gcctabopt
4725 @item max-inline-insns-single
4726  is set to @var{n}/2.
4727 @item max-inline-insns-auto
4728  is set to @var{n}/2.
4729 @item min-inline-insns
4730  is set to 130 or @var{n}/4, whichever is smaller.
4731 @item max-inline-insns-rtl
4732  is set to @var{n}.
4733 @end table
4735 See below for a documentation of the individual
4736 parameters controlling inlining.
4738 @emph{Note:} pseudo instruction represents, in this particular context, an
4739 abstract measurement of function's size.  In no way does it represent a count
4740 of assembly instructions and as such its exact meaning might change from one
4741 release to an another.
4743 @item -fkeep-inline-functions
4744 @opindex fkeep-inline-functions
4745 In C, emit @code{static} functions that are declared @code{inline}
4746 into the object file, even if the function has been inlined into all
4747 of its callers.  This switch does not affect functions using the
4748 @code{extern inline} extension in GNU C89@.  In C++, emit any and all
4749 inline functions into the object file.
4751 @item -fkeep-static-consts
4752 @opindex fkeep-static-consts
4753 Emit variables declared @code{static const} when optimization isn't turned
4754 on, even if the variables aren't referenced.
4756 GCC enables this option by default.  If you want to force the compiler to
4757 check if the variable was referenced, regardless of whether or not
4758 optimization is turned on, use the @option{-fno-keep-static-consts} option.
4760 @item -fmerge-constants
4761 Attempt to merge identical constants (string constants and floating point
4762 constants) across compilation units.
4764 This option is the default for optimized compilation if the assembler and
4765 linker support it.  Use @option{-fno-merge-constants} to inhibit this
4766 behavior.
4768 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4770 @item -fmerge-all-constants
4771 Attempt to merge identical constants and identical variables.
4773 This option implies @option{-fmerge-constants}.  In addition to
4774 @option{-fmerge-constants} this considers e.g.@: even constant initialized
4775 arrays or initialized constant variables with integral or floating point
4776 types.  Languages like C or C++ require each non-automatic variable to
4777 have distinct location, so using this option will result in non-conforming
4778 behavior.
4780 @item -fmodulo-sched
4781 @opindex fmodulo-sched
4782 Perform swing modulo scheduling immediately before the first scheduling
4783 pass.  This pass looks at innermost loops and reorders their
4784 instructions by overlapping different iterations.
4786 @item -fno-branch-count-reg
4787 @opindex fno-branch-count-reg
4788 Do not use ``decrement and branch'' instructions on a count register,
4789 but instead generate a sequence of instructions that decrement a
4790 register, compare it against zero, then branch based upon the result.
4791 This option is only meaningful on architectures that support such
4792 instructions, which include x86, PowerPC, IA-64 and S/390.
4794 The default is @option{-fbranch-count-reg}.
4796 @item -fno-function-cse
4797 @opindex fno-function-cse
4798 Do not put function addresses in registers; make each instruction that
4799 calls a constant function contain the function's address explicitly.
4801 This option results in less efficient code, but some strange hacks
4802 that alter the assembler output may be confused by the optimizations
4803 performed when this option is not used.
4805 The default is @option{-ffunction-cse}
4807 @item -fno-zero-initialized-in-bss
4808 @opindex fno-zero-initialized-in-bss
4809 If the target supports a BSS section, GCC by default puts variables that
4810 are initialized to zero into BSS@.  This can save space in the resulting
4811 code.
4813 This option turns off this behavior because some programs explicitly
4814 rely on variables going to the data section.  E.g., so that the
4815 resulting executable can find the beginning of that section and/or make
4816 assumptions based on that.
4818 The default is @option{-fzero-initialized-in-bss}.
4820 @item -fbounds-check
4821 @opindex fbounds-check
4822 For front-ends that support it, generate additional code to check that
4823 indices used to access arrays are within the declared range.  This is
4824 currently only supported by the Java and Fortran front-ends, where
4825 this option defaults to true and false respectively.
4827 @item -fmudflap -fmudflapth -fmudflapir
4828 @opindex fmudflap
4829 @opindex fmudflapth
4830 @opindex fmudflapir
4831 @cindex bounds checking
4832 @cindex mudflap
4833 For front-ends that support it (C and C++), instrument all risky
4834 pointer/array dereferencing operations, some standard library
4835 string/heap functions, and some other associated constructs with
4836 range/validity tests.  Modules so instrumented should be immune to
4837 buffer overflows, invalid heap use, and some other classes of C/C++
4838 programming errors.  The instrumentation relies on a separate runtime
4839 library (@file{libmudflap}), which will be linked into a program if
4840 @option{-fmudflap} is given at link time.  Run-time behavior of the
4841 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
4842 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
4843 for its options.
4845 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
4846 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
4847 addition to @option{-fmudflap} or @option{-fmudflapth}, if
4848 instrumentation should ignore pointer reads.  This produces less
4849 instrumentation (and therefore faster execution) and still provides
4850 some protection against outright memory corrupting writes, but allows
4851 erroneously read data to propagate within a program.
4853 @item -fthread-jumps
4854 @opindex fthread-jumps
4855 Perform optimizations where we check to see if a jump branches to a
4856 location where another comparison subsumed by the first is found.  If
4857 so, the first branch is redirected to either the destination of the
4858 second branch or a point immediately following it, depending on whether
4859 the condition is known to be true or false.
4861 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4863 @item -fcse-follow-jumps
4864 @opindex fcse-follow-jumps
4865 In common subexpression elimination, scan through jump instructions
4866 when the target of the jump is not reached by any other path.  For
4867 example, when CSE encounters an @code{if} statement with an
4868 @code{else} clause, CSE will follow the jump when the condition
4869 tested is false.
4871 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4873 @item -fcse-skip-blocks
4874 @opindex fcse-skip-blocks
4875 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
4876 follow jumps which conditionally skip over blocks.  When CSE
4877 encounters a simple @code{if} statement with no else clause,
4878 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
4879 body of the @code{if}.
4881 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4883 @item -frerun-cse-after-loop
4884 @opindex frerun-cse-after-loop
4885 Re-run common subexpression elimination after loop optimizations has been
4886 performed.
4888 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4890 @item -fgcse
4891 @opindex fgcse
4892 Perform a global common subexpression elimination pass.
4893 This pass also performs global constant and copy propagation.
4895 @emph{Note:} When compiling a program using computed gotos, a GCC
4896 extension, you may get better runtime performance if you disable
4897 the global common subexpression elimination pass by adding
4898 @option{-fno-gcse} to the command line.
4900 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4902 @item -fgcse-lm
4903 @opindex fgcse-lm
4904 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
4905 attempt to move loads which are only killed by stores into themselves.  This
4906 allows a loop containing a load/store sequence to be changed to a load outside
4907 the loop, and a copy/store within the loop.
4909 Enabled by default when gcse is enabled.
4911 @item -fgcse-sm
4912 @opindex fgcse-sm
4913 When @option{-fgcse-sm} is enabled, a store motion pass is run after
4914 global common subexpression elimination.  This pass will attempt to move
4915 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
4916 loops containing a load/store sequence can be changed to a load before
4917 the loop and a store after the loop.
4919 Not enabled at any optimization level.
4921 @item -fgcse-las
4922 @opindex fgcse-las
4923 When @option{-fgcse-las} is enabled, the global common subexpression
4924 elimination pass eliminates redundant loads that come after stores to the
4925 same memory location (both partial and full redundancies).
4927 Not enabled at any optimization level.
4929 @item -fgcse-after-reload
4930 @opindex fgcse-after-reload
4931 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
4932 pass is performed after reload.  The purpose of this pass is to cleanup
4933 redundant spilling.
4935 @item -funsafe-loop-optimizations
4936 @opindex funsafe-loop-optimizations
4937 If given, the loop optimizer will assume that loop indices do not
4938 overflow, and that the loops with nontrivial exit condition are not
4939 infinite.  This enables a wider range of loop optimizations even if
4940 the loop optimizer itself cannot prove that these assumptions are valid.
4941 Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
4942 if it finds this kind of loop.
4944 @item -fcrossjumping
4945 @opindex crossjumping
4946 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
4947 resulting code may or may not perform better than without cross-jumping.
4949 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4951 @item -fif-conversion
4952 @opindex if-conversion
4953 Attempt to transform conditional jumps into branch-less equivalents.  This
4954 include use of conditional moves, min, max, set flags and abs instructions, and
4955 some tricks doable by standard arithmetics.  The use of conditional execution
4956 on chips where it is available is controlled by @code{if-conversion2}.
4958 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4960 @item -fif-conversion2
4961 @opindex if-conversion2
4962 Use conditional execution (where available) to transform conditional jumps into
4963 branch-less equivalents.
4965 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4967 @item -fdelete-null-pointer-checks
4968 @opindex fdelete-null-pointer-checks
4969 Use global dataflow analysis to identify and eliminate useless checks
4970 for null pointers.  The compiler assumes that dereferencing a null
4971 pointer would have halted the program.  If a pointer is checked after
4972 it has already been dereferenced, it cannot be null.
4974 In some environments, this assumption is not true, and programs can
4975 safely dereference null pointers.  Use
4976 @option{-fno-delete-null-pointer-checks} to disable this optimization
4977 for programs which depend on that behavior.
4979 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4981 @item -fexpensive-optimizations
4982 @opindex fexpensive-optimizations
4983 Perform a number of minor optimizations that are relatively expensive.
4985 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4987 @item -foptimize-register-move
4988 @itemx -fregmove
4989 @opindex foptimize-register-move
4990 @opindex fregmove
4991 Attempt to reassign register numbers in move instructions and as
4992 operands of other simple instructions in order to maximize the amount of
4993 register tying.  This is especially helpful on machines with two-operand
4994 instructions.
4996 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
4997 optimization.
4999 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5001 @item -fdelayed-branch
5002 @opindex fdelayed-branch
5003 If supported for the target machine, attempt to reorder instructions
5004 to exploit instruction slots available after delayed branch
5005 instructions.
5007 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5009 @item -fschedule-insns
5010 @opindex fschedule-insns
5011 If supported for the target machine, attempt to reorder instructions to
5012 eliminate execution stalls due to required data being unavailable.  This
5013 helps machines that have slow floating point or memory load instructions
5014 by allowing other instructions to be issued until the result of the load
5015 or floating point instruction is required.
5017 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5019 @item -fschedule-insns2
5020 @opindex fschedule-insns2
5021 Similar to @option{-fschedule-insns}, but requests an additional pass of
5022 instruction scheduling after register allocation has been done.  This is
5023 especially useful on machines with a relatively small number of
5024 registers and where memory load instructions take more than one cycle.
5026 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5028 @item -fno-sched-interblock
5029 @opindex fno-sched-interblock
5030 Don't schedule instructions across basic blocks.  This is normally
5031 enabled by default when scheduling before register allocation, i.e.@:
5032 with @option{-fschedule-insns} or at @option{-O2} or higher.
5034 @item -fno-sched-spec
5035 @opindex fno-sched-spec
5036 Don't allow speculative motion of non-load instructions.  This is normally
5037 enabled by default when scheduling before register allocation, i.e.@:
5038 with @option{-fschedule-insns} or at @option{-O2} or higher.
5040 @item -fsched-spec-load
5041 @opindex fsched-spec-load
5042 Allow speculative motion of some load instructions.  This only makes
5043 sense when scheduling before register allocation, i.e.@: with
5044 @option{-fschedule-insns} or at @option{-O2} or higher.
5046 @item -fsched-spec-load-dangerous
5047 @opindex fsched-spec-load-dangerous
5048 Allow speculative motion of more load instructions.  This only makes
5049 sense when scheduling before register allocation, i.e.@: with
5050 @option{-fschedule-insns} or at @option{-O2} or higher.
5052 @item -fsched-stalled-insns=@var{n}
5053 @opindex fsched-stalled-insns
5054 Define how many insns (if any) can be moved prematurely from the queue
5055 of stalled insns into the ready list, during the second scheduling pass.
5057 @item -fsched-stalled-insns-dep=@var{n}
5058 @opindex fsched-stalled-insns-dep
5059 Define how many insn groups (cycles) will be examined for a dependency
5060 on a stalled insn that is candidate for premature removal from the queue
5061 of stalled insns.  Has an effect only during the second scheduling pass,
5062 and only if @option{-fsched-stalled-insns} is used and its value is not zero.
5064 @item -fsched2-use-superblocks
5065 @opindex fsched2-use-superblocks
5066 When scheduling after register allocation, do use superblock scheduling
5067 algorithm.  Superblock scheduling allows motion across basic block boundaries
5068 resulting on faster schedules.  This option is experimental, as not all machine
5069 descriptions used by GCC model the CPU closely enough to avoid unreliable
5070 results from the algorithm.
5072 This only makes sense when scheduling after register allocation, i.e.@: with
5073 @option{-fschedule-insns2} or at @option{-O2} or higher.
5075 @item -fsched2-use-traces
5076 @opindex fsched2-use-traces
5077 Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
5078 allocation and additionally perform code duplication in order to increase the
5079 size of superblocks using tracer pass.  See @option{-ftracer} for details on
5080 trace formation.
5082 This mode should produce faster but significantly longer programs.  Also
5083 without @option{-fbranch-probabilities} the traces constructed may not
5084 match the reality and hurt the performance.  This only makes
5085 sense when scheduling after register allocation, i.e.@: with
5086 @option{-fschedule-insns2} or at @option{-O2} or higher.
5088 @item -fsee
5089 @opindex fsee
5090 Eliminates redundant extension instructions and move the non redundant
5091 ones to optimal placement using LCM.
5093 @item -freschedule-modulo-scheduled-loops
5094 @opindex fscheduling-in-modulo-scheduled-loops
5095 The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled
5096 we may want to prevent the later scheduling passes from changing its schedule, we use this
5097 option to control that.
5099 @item -fcaller-saves
5100 @opindex fcaller-saves
5101 Enable values to be allocated in registers that will be clobbered by
5102 function calls, by emitting extra instructions to save and restore the
5103 registers around such calls.  Such allocation is done only when it
5104 seems to result in better code than would otherwise be produced.
5106 This option is always enabled by default on certain machines, usually
5107 those which have no call-preserved registers to use instead.
5109 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5111 @item -ftree-pre
5112 Perform Partial Redundancy Elimination (PRE) on trees.  This flag is
5113 enabled by default at @option{-O2} and @option{-O3}.
5115 @item -ftree-fre
5116 Perform Full Redundancy Elimination (FRE) on trees.  The difference
5117 between FRE and PRE is that FRE only considers expressions
5118 that are computed on all paths leading to the redundant computation.
5119 This analysis faster than PRE, though it exposes fewer redundancies.
5120 This flag is enabled by default at @option{-O} and higher.
5122 @item -ftree-copy-prop
5123 Perform copy propagation on trees.  This pass eliminates unnecessary
5124 copy operations.  This flag is enabled by default at @option{-O} and
5125 higher.
5127 @item -ftree-store-copy-prop
5128 Perform copy propagation of memory loads and stores.  This pass
5129 eliminates unnecessary copy operations in memory references
5130 (structures, global variables, arrays, etc).  This flag is enabled by
5131 default at @option{-O2} and higher.
5133 @item -ftree-salias
5134 Perform structural alias analysis on trees.  This flag
5135 is enabled by default at @option{-O} and higher.
5137 @item -fipa-pta
5138 Perform interprocedural pointer analysis.
5140 @item -ftree-sink
5141 Perform forward store motion  on trees.  This flag is
5142 enabled by default at @option{-O} and higher.
5144 @item -ftree-ccp
5145 Perform sparse conditional constant propagation (CCP) on trees.  This
5146 pass only operates on local scalar variables and is enabled by default
5147 at @option{-O} and higher.
5149 @item -ftree-store-ccp
5150 Perform sparse conditional constant propagation (CCP) on trees.  This
5151 pass operates on both local scalar variables and memory stores and
5152 loads (global variables, structures, arrays, etc).  This flag is
5153 enabled by default at @option{-O2} and higher.
5155 @item -ftree-dce
5156 Perform dead code elimination (DCE) on trees.  This flag is enabled by
5157 default at @option{-O} and higher.
5159 @item -ftree-dominator-opts
5160 Perform a variety of simple scalar cleanups (constant/copy
5161 propagation, redundancy elimination, range propagation and expression
5162 simplification) based on a dominator tree traversal.  This also
5163 performs jump threading (to reduce jumps to jumps). This flag is
5164 enabled by default at @option{-O} and higher.
5166 @item -ftree-ch
5167 Perform loop header copying on trees.  This is beneficial since it increases
5168 effectiveness of code motion optimizations.  It also saves one jump.  This flag
5169 is enabled by default at @option{-O} and higher.  It is not enabled
5170 for @option{-Os}, since it usually increases code size.
5172 @item -ftree-loop-optimize
5173 Perform loop optimizations on trees.  This flag is enabled by default
5174 at @option{-O} and higher.
5176 @item -ftree-loop-linear
5177 Perform linear loop transformations on tree.  This flag can improve cache
5178 performance and allow further loop optimizations to take place.
5180 @item -ftree-loop-im
5181 Perform loop invariant motion on trees.  This pass moves only invariants that
5182 would be hard to handle at RTL level (function calls, operations that expand to
5183 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
5184 operands of conditions that are invariant out of the loop, so that we can use
5185 just trivial invariantness analysis in loop unswitching.  The pass also includes
5186 store motion.
5188 @item -ftree-loop-ivcanon
5189 Create a canonical counter for number of iterations in the loop for that
5190 determining number of iterations requires complicated analysis.  Later
5191 optimizations then may determine the number easily.  Useful especially
5192 in connection with unrolling.
5194 @item -fivopts
5195 Perform induction variable optimizations (strength reduction, induction
5196 variable merging and induction variable elimination) on trees.
5198 @item -ftree-sra
5199 Perform scalar replacement of aggregates.  This pass replaces structure
5200 references with scalars to prevent committing structures to memory too
5201 early.  This flag is enabled by default at @option{-O} and higher.
5203 @item -ftree-copyrename
5204 Perform copy renaming on trees.  This pass attempts to rename compiler
5205 temporaries to other variables at copy locations, usually resulting in
5206 variable names which more closely resemble the original variables.  This flag
5207 is enabled by default at @option{-O} and higher.
5209 @item -ftree-ter
5210 Perform temporary expression replacement during the SSA->normal phase.  Single
5211 use/single def temporaries are replaced at their use location with their
5212 defining expression.  This results in non-GIMPLE code, but gives the expanders
5213 much more complex trees to work on resulting in better RTL generation.  This is
5214 enabled by default at @option{-O} and higher.
5216 @item -ftree-lrs
5217 Perform live range splitting during the SSA->normal phase.  Distinct live
5218 ranges of a variable are split into unique variables, allowing for better
5219 optimization later.  This is enabled by default at @option{-O} and higher.
5221 @item -ftree-vectorize
5222 Perform loop vectorization on trees.
5224 @item -ftree-vect-loop-version
5225 @opindex ftree-vect-loop-version
5226 Perform loop versioning when doing loop vectorization on trees.  When a loop
5227 appears to be vectorizable except that data alignment or data dependence cannot
5228 be determined at compile time then vectorized and non-vectorized versions of
5229 the loop are generated along with runtime checks for alignment or dependence
5230 to control which version is executed.  This option is enabled by default
5231 except at level @option{-Os} where it is disabled.
5233 @item -ftree-vrp
5234 Perform Value Range Propagation on trees.  This is similar to the
5235 constant propagation pass, but instead of values, ranges of values are
5236 propagated.  This allows the optimizers to remove unnecessary range
5237 checks like array bound checks and null pointer checks.  This is
5238 enabled by default at @option{-O2} and higher.  Null pointer check
5239 elimination is only done if @option{-fdelete-null-pointer-checks} is
5240 enabled.
5242 @item -ftracer
5243 @opindex ftracer
5244 Perform tail duplication to enlarge superblock size.  This transformation
5245 simplifies the control flow of the function allowing other optimizations to do
5246 better job.
5248 @item -funroll-loops
5249 @opindex funroll-loops
5250 Unroll loops whose number of iterations can be determined at compile
5251 time or upon entry to the loop.  @option{-funroll-loops} implies
5252 @option{-frerun-cse-after-loop}.  This option makes code larger,
5253 and may or may not make it run faster.
5255 @item -funroll-all-loops
5256 @opindex funroll-all-loops
5257 Unroll all loops, even if their number of iterations is uncertain when
5258 the loop is entered.  This usually makes programs run more slowly.
5259 @option{-funroll-all-loops} implies the same options as
5260 @option{-funroll-loops},
5262 @item -fsplit-ivs-in-unroller
5263 @opindex -fsplit-ivs-in-unroller
5264 Enables expressing of values of induction variables in later iterations
5265 of the unrolled loop using the value in the first iteration.  This breaks
5266 long dependency chains, thus improving efficiency of the scheduling passes.
5268 Combination of @option{-fweb} and CSE is often sufficient to obtain the
5269 same effect.  However in cases the loop body is more complicated than
5270 a single basic block, this is not reliable.  It also does not work at all
5271 on some of the architectures due to restrictions in the CSE pass.
5273 This optimization is enabled by default.
5275 @item -fvariable-expansion-in-unroller
5276 @opindex -fvariable-expansion-in-unroller
5277 With this option, the compiler will create multiple copies of some
5278 local variables when unrolling a loop which can result in superior code.
5280 @item -fprefetch-loop-arrays
5281 @opindex fprefetch-loop-arrays
5282 If supported by the target machine, generate instructions to prefetch
5283 memory to improve the performance of loops that access large arrays.
5285 This option may generate better or worse code; results are highly
5286 dependent on the structure of loops within the source code.
5288 Disabled at level @option{-Os}.
5290 @item -fno-peephole
5291 @itemx -fno-peephole2
5292 @opindex fno-peephole
5293 @opindex fno-peephole2
5294 Disable any machine-specific peephole optimizations.  The difference
5295 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
5296 are implemented in the compiler; some targets use one, some use the
5297 other, a few use both.
5299 @option{-fpeephole} is enabled by default.
5300 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5302 @item -fno-guess-branch-probability
5303 @opindex fno-guess-branch-probability
5304 Do not guess branch probabilities using heuristics.
5306 GCC will use heuristics to guess branch probabilities if they are
5307 not provided by profiling feedback (@option{-fprofile-arcs}).  These
5308 heuristics are based on the control flow graph.  If some branch probabilities
5309 are specified by @samp{__builtin_expect}, then the heuristics will be
5310 used to guess branch probabilities for the rest of the control flow graph,
5311 taking the @samp{__builtin_expect} info into account.  The interactions
5312 between the heuristics and @samp{__builtin_expect} can be complex, and in
5313 some cases, it may be useful to disable the heuristics so that the effects
5314 of @samp{__builtin_expect} are easier to understand.
5316 The default is @option{-fguess-branch-probability} at levels
5317 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5319 @item -freorder-blocks
5320 @opindex freorder-blocks
5321 Reorder basic blocks in the compiled function in order to reduce number of
5322 taken branches and improve code locality.
5324 Enabled at levels @option{-O2}, @option{-O3}.
5326 @item -freorder-blocks-and-partition
5327 @opindex freorder-blocks-and-partition
5328 In addition to reordering basic blocks in the compiled function, in order
5329 to reduce number of taken branches, partitions hot and cold basic blocks
5330 into separate sections of the assembly and .o files, to improve
5331 paging and cache locality performance.
5333 This optimization is automatically turned off in the presence of
5334 exception handling, for linkonce sections, for functions with a user-defined
5335 section attribute and on any architecture that does not support named
5336 sections.
5338 @item -freorder-functions
5339 @opindex freorder-functions
5340 Reorder functions in the object file in order to
5341 improve code locality.  This is implemented by using special
5342 subsections @code{.text.hot} for most frequently executed functions and
5343 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
5344 the linker so object file format must support named sections and linker must
5345 place them in a reasonable way.
5347 Also profile feedback must be available in to make this option effective.  See
5348 @option{-fprofile-arcs} for details.
5350 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5352 @item -fstrict-aliasing
5353 @opindex fstrict-aliasing
5354 Allows the compiler to assume the strictest aliasing rules applicable to
5355 the language being compiled.  For C (and C++), this activates
5356 optimizations based on the type of expressions.  In particular, an
5357 object of one type is assumed never to reside at the same address as an
5358 object of a different type, unless the types are almost the same.  For
5359 example, an @code{unsigned int} can alias an @code{int}, but not a
5360 @code{void*} or a @code{double}.  A character type may alias any other
5361 type.
5363 Pay special attention to code like this:
5364 @smallexample
5365 union a_union @{
5366   int i;
5367   double d;
5370 int f() @{
5371   a_union t;
5372   t.d = 3.0;
5373   return t.i;
5375 @end smallexample
5376 The practice of reading from a different union member than the one most
5377 recently written to (called ``type-punning'') is common.  Even with
5378 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
5379 is accessed through the union type.  So, the code above will work as
5380 expected.  However, this code might not:
5381 @smallexample
5382 int f() @{
5383   a_union t;
5384   int* ip;
5385   t.d = 3.0;
5386   ip = &t.i;
5387   return *ip;
5389 @end smallexample
5391 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5393 @item -falign-functions
5394 @itemx -falign-functions=@var{n}
5395 @opindex falign-functions
5396 Align the start of functions to the next power-of-two greater than
5397 @var{n}, skipping up to @var{n} bytes.  For instance,
5398 @option{-falign-functions=32} aligns functions to the next 32-byte
5399 boundary, but @option{-falign-functions=24} would align to the next
5400 32-byte boundary only if this can be done by skipping 23 bytes or less.
5402 @option{-fno-align-functions} and @option{-falign-functions=1} are
5403 equivalent and mean that functions will not be aligned.
5405 Some assemblers only support this flag when @var{n} is a power of two;
5406 in that case, it is rounded up.
5408 If @var{n} is not specified or is zero, use a machine-dependent default.
5410 Enabled at levels @option{-O2}, @option{-O3}.
5412 @item -falign-labels
5413 @itemx -falign-labels=@var{n}
5414 @opindex falign-labels
5415 Align all branch targets to a power-of-two boundary, skipping up to
5416 @var{n} bytes like @option{-falign-functions}.  This option can easily
5417 make code slower, because it must insert dummy operations for when the
5418 branch target is reached in the usual flow of the code.
5420 @option{-fno-align-labels} and @option{-falign-labels=1} are
5421 equivalent and mean that labels will not be aligned.
5423 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
5424 are greater than this value, then their values are used instead.
5426 If @var{n} is not specified or is zero, use a machine-dependent default
5427 which is very likely to be @samp{1}, meaning no alignment.
5429 Enabled at levels @option{-O2}, @option{-O3}.
5431 @item -falign-loops
5432 @itemx -falign-loops=@var{n}
5433 @opindex falign-loops
5434 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
5435 like @option{-falign-functions}.  The hope is that the loop will be
5436 executed many times, which will make up for any execution of the dummy
5437 operations.
5439 @option{-fno-align-loops} and @option{-falign-loops=1} are
5440 equivalent and mean that loops will not be aligned.
5442 If @var{n} is not specified or is zero, use a machine-dependent default.
5444 Enabled at levels @option{-O2}, @option{-O3}.
5446 @item -falign-jumps
5447 @itemx -falign-jumps=@var{n}
5448 @opindex falign-jumps
5449 Align branch targets to a power-of-two boundary, for branch targets
5450 where the targets can only be reached by jumping, skipping up to @var{n}
5451 bytes like @option{-falign-functions}.  In this case, no dummy operations
5452 need be executed.
5454 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
5455 equivalent and mean that loops will not be aligned.
5457 If @var{n} is not specified or is zero, use a machine-dependent default.
5459 Enabled at levels @option{-O2}, @option{-O3}.
5461 @item -funit-at-a-time
5462 @opindex funit-at-a-time
5463 Parse the whole compilation unit before starting to produce code.
5464 This allows some extra optimizations to take place but consumes
5465 more memory (in general).  There are some compatibility issues
5466 with @emph{unit-at-a-time} mode:
5467 @itemize @bullet
5468 @item
5469 enabling @emph{unit-at-a-time} mode may change the order
5470 in which functions, variables, and top-level @code{asm} statements
5471 are emitted, and will likely break code relying on some particular
5472 ordering.  The majority of such top-level @code{asm} statements,
5473 though, can be replaced by @code{section} attributes.  The
5474 @option{fno-toplevel-reorder} option may be used to keep the ordering
5475 used in the input file, at the cost of some optimizations.
5477 @item
5478 @emph{unit-at-a-time} mode removes unreferenced static variables
5479 and functions.  This may result in undefined references
5480 when an @code{asm} statement refers directly to variables or functions
5481 that are otherwise unused.  In that case either the variable/function
5482 shall be listed as an operand of the @code{asm} statement operand or,
5483 in the case of top-level @code{asm} statements the attribute @code{used}
5484 shall be used on the declaration.
5486 @item
5487 Static functions now can use non-standard passing conventions that
5488 may break @code{asm} statements calling functions directly.  Again,
5489 attribute @code{used} will prevent this behavior.
5490 @end itemize
5492 As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
5493 but this scheme may not be supported by future releases of GCC@.
5495 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5497 @item -fno-toplevel-reorder
5498 Do not reorder top-level functions, variables, and @code{asm}
5499 statements.  Output them in the same order that they appear in the
5500 input file.  When this option is used, unreferenced static variables
5501 will not be removed.  This option is intended to support existing code
5502 which relies on a particular ordering.  For new code, it is better to
5503 use attributes.
5505 @item -fweb
5506 @opindex fweb
5507 Constructs webs as commonly used for register allocation purposes and assign
5508 each web individual pseudo register.  This allows the register allocation pass
5509 to operate on pseudos directly, but also strengthens several other optimization
5510 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
5511 however, make debugging impossible, since variables will no longer stay in a
5512 ``home register''.
5514 Enabled by default with @option{-funroll-loops}.
5516 @item -fwhole-program
5517 @opindex fwhole-program
5518 Assume that the current compilation unit represents whole program being
5519 compiled.  All public functions and variables with the exception of @code{main}
5520 and those merged by attribute @code{externally_visible} become static functions
5521 and in a affect gets more aggressively optimized by interprocedural optimizers.
5522 While this option is equivalent to proper use of @code{static} keyword for
5523 programs consisting of single file, in combination with option
5524 @option{--combine} this flag can be used to compile most of smaller scale C
5525 programs since the functions and variables become local for the whole combined
5526 compilation unit, not for the single source file itself.
5529 @item -fno-cprop-registers
5530 @opindex fno-cprop-registers
5531 After register allocation and post-register allocation instruction splitting,
5532 we perform a copy-propagation pass to try to reduce scheduling dependencies
5533 and occasionally eliminate the copy.
5535 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5537 @item -fprofile-generate
5538 @opindex fprofile-generate
5540 Enable options usually used for instrumenting application to produce
5541 profile useful for later recompilation with profile feedback based
5542 optimization.  You must use @option{-fprofile-generate} both when
5543 compiling and when linking your program.
5545 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
5547 @item -fprofile-use
5548 @opindex fprofile-use
5549 Enable profile feedback directed optimizations, and optimizations
5550 generally profitable only with profile feedback available.
5552 The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
5553 @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
5555 @end table
5557 The following options control compiler behavior regarding floating
5558 point arithmetic.  These options trade off between speed and
5559 correctness.  All must be specifically enabled.
5561 @table @gcctabopt
5562 @item -ffloat-store
5563 @opindex ffloat-store
5564 Do not store floating point variables in registers, and inhibit other
5565 options that might change whether a floating point value is taken from a
5566 register or memory.
5568 @cindex floating point precision
5569 This option prevents undesirable excess precision on machines such as
5570 the 68000 where the floating registers (of the 68881) keep more
5571 precision than a @code{double} is supposed to have.  Similarly for the
5572 x86 architecture.  For most programs, the excess precision does only
5573 good, but a few programs rely on the precise definition of IEEE floating
5574 point.  Use @option{-ffloat-store} for such programs, after modifying
5575 them to store all pertinent intermediate computations into variables.
5577 @item -ffast-math
5578 @opindex ffast-math
5579 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
5580 @option{-fno-trapping-math}, @option{-ffinite-math-only},
5581 @option{-fno-rounding-math}, @option{-fno-signaling-nans}
5582 and @option{fcx-limited-range}.
5584 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
5586 This option should never be turned on by any @option{-O} option since
5587 it can result in incorrect output for programs which depend on
5588 an exact implementation of IEEE or ISO rules/specifications for
5589 math functions.
5591 @item -fno-math-errno
5592 @opindex fno-math-errno
5593 Do not set ERRNO after calling math functions that are executed
5594 with a single instruction, e.g., sqrt.  A program that relies on
5595 IEEE exceptions for math error handling may want to use this flag
5596 for speed while maintaining IEEE arithmetic compatibility.
5598 This option should never be turned on by any @option{-O} option since
5599 it can result in incorrect output for programs which depend on
5600 an exact implementation of IEEE or ISO rules/specifications for
5601 math functions.
5603 The default is @option{-fmath-errno}.
5605 On Darwin systems, the math library never sets @code{errno}.  There is therefore
5606 no reason for the compiler to consider the possibility that it might,
5607 and @option{-fno-math-errno} is the default.
5609 @item -funsafe-math-optimizations
5610 @opindex funsafe-math-optimizations
5611 Allow optimizations for floating-point arithmetic that (a) assume
5612 that arguments and results are valid and (b) may violate IEEE or
5613 ANSI standards.  When used at link-time, it may include libraries
5614 or startup files that change the default FPU control word or other
5615 similar optimizations.
5617 This option should never be turned on by any @option{-O} option since
5618 it can result in incorrect output for programs which depend on
5619 an exact implementation of IEEE or ISO rules/specifications for
5620 math functions.
5622 The default is @option{-fno-unsafe-math-optimizations}.
5624 @item -ffinite-math-only
5625 @opindex ffinite-math-only
5626 Allow optimizations for floating-point arithmetic that assume
5627 that arguments and results are not NaNs or +-Infs.
5629 This option should never be turned on by any @option{-O} option since
5630 it can result in incorrect output for programs which depend on
5631 an exact implementation of IEEE or ISO rules/specifications.
5633 The default is @option{-fno-finite-math-only}.
5635 @item -fno-trapping-math
5636 @opindex fno-trapping-math
5637 Compile code assuming that floating-point operations cannot generate
5638 user-visible traps.  These traps include division by zero, overflow,
5639 underflow, inexact result and invalid operation.  This option implies
5640 @option{-fno-signaling-nans}.  Setting this option may allow faster
5641 code if one relies on ``non-stop'' IEEE arithmetic, for example.
5643 This option should never be turned on by any @option{-O} option since
5644 it can result in incorrect output for programs which depend on
5645 an exact implementation of IEEE or ISO rules/specifications for
5646 math functions.
5648 The default is @option{-ftrapping-math}.
5650 @item -frounding-math
5651 @opindex frounding-math
5652 Disable transformations and optimizations that assume default floating
5653 point rounding behavior.  This is round-to-zero for all floating point
5654 to integer conversions, and round-to-nearest for all other arithmetic
5655 truncations.  This option should be specified for programs that change
5656 the FP rounding mode dynamically, or that may be executed with a
5657 non-default rounding mode.  This option disables constant folding of
5658 floating point expressions at compile-time (which may be affected by
5659 rounding mode) and arithmetic transformations that are unsafe in the
5660 presence of sign-dependent rounding modes.
5662 The default is @option{-fno-rounding-math}.
5664 This option is experimental and does not currently guarantee to
5665 disable all GCC optimizations that are affected by rounding mode.
5666 Future versions of GCC may provide finer control of this setting
5667 using C99's @code{FENV_ACCESS} pragma.  This command line option
5668 will be used to specify the default state for @code{FENV_ACCESS}.
5670 @item -frtl-abstract-sequences
5671 @opindex frtl-abstract-sequences
5672 It is a size optimization method. This option is to find identical
5673 sequences of code, which can be turned into pseudo-procedures  and
5674 then  replace  all  occurrences with  calls to  the  newly created
5675 subroutine. It is kind of an opposite of @option{-finline-functions}.
5676 This optimization runs at RTL level.
5678 @item -fsignaling-nans
5679 @opindex fsignaling-nans
5680 Compile code assuming that IEEE signaling NaNs may generate user-visible
5681 traps during floating-point operations.  Setting this option disables
5682 optimizations that may change the number of exceptions visible with
5683 signaling NaNs.  This option implies @option{-ftrapping-math}.
5685 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
5686 be defined.
5688 The default is @option{-fno-signaling-nans}.
5690 This option is experimental and does not currently guarantee to
5691 disable all GCC optimizations that affect signaling NaN behavior.
5693 @item -fsingle-precision-constant
5694 @opindex fsingle-precision-constant
5695 Treat floating point constant as single precision constant instead of
5696 implicitly converting it to double precision constant.
5698 @item -fcx-limited-range
5699 @itemx -fno-cx-limited-range
5700 @opindex fcx-limited-range
5701 @opindex fno-cx-limited-range
5702 When enabled, this option states that a range reduction step is not
5703 needed when performing complex division.  The default is
5704 @option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.
5706 This option controls the default setting of the ISO C99 
5707 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
5708 all languages.
5710 @end table
5712 The following options control optimizations that may improve
5713 performance, but are not enabled by any @option{-O} options.  This
5714 section includes experimental options that may produce broken code.
5716 @table @gcctabopt
5717 @item -fbranch-probabilities
5718 @opindex fbranch-probabilities
5719 After running a program compiled with @option{-fprofile-arcs}
5720 (@pxref{Debugging Options,, Options for Debugging Your Program or
5721 @command{gcc}}), you can compile it a second time using
5722 @option{-fbranch-probabilities}, to improve optimizations based on
5723 the number of times each branch was taken.  When the program
5724 compiled with @option{-fprofile-arcs} exits it saves arc execution
5725 counts to a file called @file{@var{sourcename}.gcda} for each source
5726 file  The information in this data file is very dependent on the
5727 structure of the generated code, so you must use the same source code
5728 and the same optimization options for both compilations.
5730 With @option{-fbranch-probabilities}, GCC puts a
5731 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
5732 These can be used to improve optimization.  Currently, they are only
5733 used in one place: in @file{reorg.c}, instead of guessing which path a
5734 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
5735 exactly determine which path is taken more often.
5737 @item -fprofile-values
5738 @opindex fprofile-values
5739 If combined with @option{-fprofile-arcs}, it adds code so that some
5740 data about values of expressions in the program is gathered.
5742 With @option{-fbranch-probabilities}, it reads back the data gathered
5743 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
5744 notes to instructions for their later usage in optimizations.
5746 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
5748 @item -fvpt
5749 @opindex fvpt
5750 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
5751 a code to gather information about values of expressions.
5753 With @option{-fbranch-probabilities}, it reads back the data gathered
5754 and actually performs the optimizations based on them.
5755 Currently the optimizations include specialization of division operation
5756 using the knowledge about the value of the denominator.
5758 @item -frename-registers
5759 @opindex frename-registers
5760 Attempt to avoid false dependencies in scheduled code by making use
5761 of registers left over after register allocation.  This optimization
5762 will most benefit processors with lots of registers.  Depending on the
5763 debug information format adopted by the target, however, it can
5764 make debugging impossible, since variables will no longer stay in
5765 a ``home register''.
5767 Enabled by default with @option{-funroll-loops}.
5769 @item -ftracer
5770 @opindex ftracer
5771 Perform tail duplication to enlarge superblock size.  This transformation
5772 simplifies the control flow of the function allowing other optimizations to do
5773 better job.
5775 Enabled with @option{-fprofile-use}.
5777 @item -funroll-loops
5778 @opindex funroll-loops
5779 Unroll loops whose number of iterations can be determined at compile time or
5780 upon entry to the loop.  @option{-funroll-loops} implies
5781 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}. 
5782 It also turns on complete loop peeling (i.e.@: complete removal of loops with
5783 small constant number of iterations).  This option makes code larger, and may
5784 or may not make it run faster.
5786 Enabled with @option{-fprofile-use}.
5788 @item -funroll-all-loops
5789 @opindex funroll-all-loops
5790 Unroll all loops, even if their number of iterations is uncertain when
5791 the loop is entered.  This usually makes programs run more slowly.
5792 @option{-funroll-all-loops} implies the same options as
5793 @option{-funroll-loops}.
5795 @item -fpeel-loops
5796 @opindex fpeel-loops
5797 Peels the loops for that there is enough information that they do not
5798 roll much (from profile feedback).  It also turns on complete loop peeling
5799 (i.e.@: complete removal of loops with small constant number of iterations).
5801 Enabled with @option{-fprofile-use}.
5803 @item -fmove-loop-invariants
5804 @opindex fmove-loop-invariants
5805 Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
5806 at level @option{-O1}
5808 @item -funswitch-loops
5809 @opindex funswitch-loops
5810 Move branches with loop invariant conditions out of the loop, with duplicates
5811 of the loop on both branches (modified according to result of the condition).
5813 @item -ffunction-sections
5814 @itemx -fdata-sections
5815 @opindex ffunction-sections
5816 @opindex fdata-sections
5817 Place each function or data item into its own section in the output
5818 file if the target supports arbitrary sections.  The name of the
5819 function or the name of the data item determines the section's name
5820 in the output file.
5822 Use these options on systems where the linker can perform optimizations
5823 to improve locality of reference in the instruction space.  Most systems
5824 using the ELF object format and SPARC processors running Solaris 2 have
5825 linkers with such optimizations.  AIX may have these optimizations in
5826 the future.
5828 Only use these options when there are significant benefits from doing
5829 so.  When you specify these options, the assembler and linker will
5830 create larger object and executable files and will also be slower.
5831 You will not be able to use @code{gprof} on all systems if you
5832 specify this option and you may have problems with debugging if
5833 you specify both this option and @option{-g}.
5835 @item -fbranch-target-load-optimize
5836 @opindex fbranch-target-load-optimize
5837 Perform branch target register load optimization before prologue / epilogue
5838 threading.
5839 The use of target registers can typically be exposed only during reload,
5840 thus hoisting loads out of loops and doing inter-block scheduling needs
5841 a separate optimization pass.
5843 @item -fbranch-target-load-optimize2
5844 @opindex fbranch-target-load-optimize2
5845 Perform branch target register load optimization after prologue / epilogue
5846 threading.
5848 @item -fbtr-bb-exclusive
5849 @opindex fbtr-bb-exclusive
5850 When performing branch target register load optimization, don't reuse
5851 branch target registers in within any basic block.
5853 @item -fstack-protector
5854 Emit extra code to check for buffer overflows, such as stack smashing
5855 attacks.  This is done by adding a guard variable to functions with
5856 vulnerable objects.  This includes functions that call alloca, and
5857 functions with buffers larger than 8 bytes.  The guards are initialized
5858 when a function is entered and then checked when the function exits.
5859 If a guard check fails, an error message is printed and the program exits.
5861 @item -fstack-protector-all
5862 Like @option{-fstack-protector} except that all functions are protected.
5864 @item -fsection-anchors
5865 @opindex fsection-anchors
5866 Try to reduce the number of symbolic address calculations by using
5867 shared ``anchor'' symbols to address nearby objects.  This transformation
5868 can help to reduce the number of GOT entries and GOT accesses on some
5869 targets.
5871 For example, the implementation of the following function @code{foo}:
5873 @smallexample
5874 static int a, b, c;
5875 int foo (void) @{ return a + b + c; @}
5876 @end smallexample
5878 would usually calculate the addresses of all three variables, but if you
5879 compile it with @option{-fsection-anchors}, it will access the variables
5880 from a common anchor point instead.  The effect is similar to the
5881 following pseudocode (which isn't valid C):
5883 @smallexample
5884 int foo (void)
5886   register int *xr = &x;
5887   return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5889 @end smallexample
5891 Not all targets support this option.
5893 @item --param @var{name}=@var{value}
5894 @opindex param
5895 In some places, GCC uses various constants to control the amount of
5896 optimization that is done.  For example, GCC will not inline functions
5897 that contain more that a certain number of instructions.  You can
5898 control some of these constants on the command-line using the
5899 @option{--param} option.
5901 The names of specific parameters, and the meaning of the values, are
5902 tied to the internals of the compiler, and are subject to change
5903 without notice in future releases.
5905 In each case, the @var{value} is an integer.  The allowable choices for
5906 @var{name} are given in the following table:
5908 @table @gcctabopt
5909 @item salias-max-implicit-fields
5910 The maximum number of fields in a variable without direct
5911 structure accesses for which structure aliasing will consider trying 
5912 to track each field.  The default is 5
5914 @item salias-max-array-elements
5915 The maximum number of elements an array can have and its elements
5916 still be tracked individually by structure aliasing. The default is 4
5918 @item sra-max-structure-size
5919 The maximum structure size, in bytes, at which the scalar replacement
5920 of aggregates (SRA) optimization will perform block copies.  The
5921 default value, 0, implies that GCC will select the most appropriate
5922 size itself.
5924 @item sra-field-structure-ratio
5925 The threshold ratio (as a percentage) between instantiated fields and
5926 the complete structure size.  We say that if the ratio of the number
5927 of bytes in instantiated fields to the number of bytes in the complete
5928 structure exceeds this parameter, then block copies are not used.  The
5929 default is 75.
5931 @item max-crossjump-edges
5932 The maximum number of incoming edges to consider for crossjumping.
5933 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
5934 the number of edges incoming to each block.  Increasing values mean
5935 more aggressive optimization, making the compile time increase with
5936 probably small improvement in executable size.
5938 @item min-crossjump-insns
5939 The minimum number of instructions which must be matched at the end
5940 of two blocks before crossjumping will be performed on them.  This
5941 value is ignored in the case where all instructions in the block being
5942 crossjumped from are matched.  The default value is 5.
5944 @item max-grow-copy-bb-insns
5945 The maximum code size expansion factor when copying basic blocks
5946 instead of jumping.  The expansion is relative to a jump instruction.
5947 The default value is 8.
5949 @item max-goto-duplication-insns
5950 The maximum number of instructions to duplicate to a block that jumps
5951 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
5952 passes, GCC factors computed gotos early in the compilation process,
5953 and unfactors them as late as possible.  Only computed jumps at the
5954 end of a basic blocks with no more than max-goto-duplication-insns are
5955 unfactored.  The default value is 8.
5957 @item max-delay-slot-insn-search
5958 The maximum number of instructions to consider when looking for an
5959 instruction to fill a delay slot.  If more than this arbitrary number of
5960 instructions is searched, the time savings from filling the delay slot
5961 will be minimal so stop searching.  Increasing values mean more
5962 aggressive optimization, making the compile time increase with probably
5963 small improvement in executable run time.
5965 @item max-delay-slot-live-search
5966 When trying to fill delay slots, the maximum number of instructions to
5967 consider when searching for a block with valid live register
5968 information.  Increasing this arbitrarily chosen value means more
5969 aggressive optimization, increasing the compile time.  This parameter
5970 should be removed when the delay slot code is rewritten to maintain the
5971 control-flow graph.
5973 @item max-gcse-memory
5974 The approximate maximum amount of memory that will be allocated in
5975 order to perform the global common subexpression elimination
5976 optimization.  If more memory than specified is required, the
5977 optimization will not be done.
5979 @item max-gcse-passes
5980 The maximum number of passes of GCSE to run.  The default is 1.
5982 @item max-pending-list-length
5983 The maximum number of pending dependencies scheduling will allow
5984 before flushing the current state and starting over.  Large functions
5985 with few branches or calls can create excessively large lists which
5986 needlessly consume memory and resources.
5988 @item max-inline-insns-single
5989 Several parameters control the tree inliner used in gcc.
5990 This number sets the maximum number of instructions (counted in GCC's
5991 internal representation) in a single function that the tree inliner
5992 will consider for inlining.  This only affects functions declared
5993 inline and methods implemented in a class declaration (C++).
5994 The default value is 450.
5996 @item max-inline-insns-auto
5997 When you use @option{-finline-functions} (included in @option{-O3}),
5998 a lot of functions that would otherwise not be considered for inlining
5999 by the compiler will be investigated.  To those functions, a different
6000 (more restrictive) limit compared to functions declared inline can
6001 be applied.
6002 The default value is 90.
6004 @item large-function-insns
6005 The limit specifying really large functions.  For functions larger than this
6006 limit after inlining inlining is constrained by
6007 @option{--param large-function-growth}.  This parameter is useful primarily
6008 to avoid extreme compilation time caused by non-linear algorithms used by the
6009 backend.
6010 This parameter is ignored when @option{-funit-at-a-time} is not used.
6011 The default value is 2700.
6013 @item large-function-growth
6014 Specifies maximal growth of large function caused by inlining in percents.
6015 This parameter is ignored when @option{-funit-at-a-time} is not used.
6016 The default value is 100 which limits large function growth to 2.0 times
6017 the original size.
6019 @item large-unit-insns
6020 The limit specifying large translation unit.  Growth caused by inlining of
6021 units larger than this limit is limited by @option{--param inline-unit-growth}.
6022 For small units this might be too tight (consider unit consisting of function A
6023 that is inline and B that just calls A three time.  If B is small relative to
6024 A, the growth of unit is 300\% and yet such inlining is very sane.  For very
6025 large units consisting of small inlininable functions however the overall unit
6026 growth limit is needed to avoid exponential explosion of code size.  Thus for
6027 smaller units, the size is increased to @option{--param large-unit-insns}
6028 before applying @option{--param inline-unit-growth}.  The default is 10000
6030 @item inline-unit-growth
6031 Specifies maximal overall growth of the compilation unit caused by inlining.
6032 This parameter is ignored when @option{-funit-at-a-time} is not used.
6033 The default value is 50 which limits unit growth to 1.5 times the original
6034 size.
6036 @item large-stack-frame
6037 The limit specifying large stack frames.  While inlining the algorithm is trying
6038 to not grow past this limit too much.  Default value is 256 bytes.
6040 @item large-stack-frame-growth
6041 Specifies maximal growth of large stack frames caused by inlining in percents.
6042 The default value is 1000 which limits large stack frame growth to 11 times
6043 the original size.
6045 @item max-inline-insns-recursive
6046 @itemx max-inline-insns-recursive-auto
6047 Specifies maximum number of instructions out-of-line copy of self recursive inline
6048 function can grow into by performing recursive inlining.
6050 For functions declared inline @option{--param max-inline-insns-recursive} is
6051 taken into account.  For function not declared inline, recursive inlining
6052 happens only when @option{-finline-functions} (included in @option{-O3}) is
6053 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
6054 default value is 450.
6056 @item max-inline-recursive-depth
6057 @itemx max-inline-recursive-depth-auto
6058 Specifies maximum recursion depth used by the recursive inlining.
6060 For functions declared inline @option{--param max-inline-recursive-depth} is
6061 taken into account.  For function not declared inline, recursive inlining
6062 happens only when @option{-finline-functions} (included in @option{-O3}) is
6063 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
6064 default value is 450.
6066 @item min-inline-recursive-probability
6067 Recursive inlining is profitable only for function having deep recursion
6068 in average and can hurt for function having little recursion depth by
6069 increasing the prologue size or complexity of function body to other
6070 optimizers.
6072 When profile feedback is available (see @option{-fprofile-generate}) the actual
6073 recursion depth can be guessed from probability that function will recurse via
6074 given call expression.  This parameter limits inlining only to call expression
6075 whose probability exceeds given threshold (in percents).  The default value is
6078 @item inline-call-cost
6079 Specify cost of call instruction relative to simple arithmetics operations
6080 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
6081 functions and at the same time increases size of leaf function that is believed to
6082 reduce function size by being inlined.  In effect it increases amount of
6083 inlining for code having large abstraction penalty (many functions that just
6084 pass the arguments to other functions) and decrease inlining for code with low
6085 abstraction penalty.  The default value is 16.
6087 @item max-unrolled-insns
6088 The maximum number of instructions that a loop should have if that loop
6089 is unrolled, and if the loop is unrolled, it determines how many times
6090 the loop code is unrolled.
6092 @item max-average-unrolled-insns
6093 The maximum number of instructions biased by probabilities of their execution
6094 that a loop should have if that loop is unrolled, and if the loop is unrolled,
6095 it determines how many times the loop code is unrolled.
6097 @item max-unroll-times
6098 The maximum number of unrollings of a single loop.
6100 @item max-peeled-insns
6101 The maximum number of instructions that a loop should have if that loop
6102 is peeled, and if the loop is peeled, it determines how many times
6103 the loop code is peeled.
6105 @item max-peel-times
6106 The maximum number of peelings of a single loop.
6108 @item max-completely-peeled-insns
6109 The maximum number of insns of a completely peeled loop.
6111 @item max-completely-peel-times
6112 The maximum number of iterations of a loop to be suitable for complete peeling.
6114 @item max-unswitch-insns
6115 The maximum number of insns of an unswitched loop.
6117 @item max-unswitch-level
6118 The maximum number of branches unswitched in a single loop.
6120 @item lim-expensive
6121 The minimum cost of an expensive expression in the loop invariant motion.
6123 @item iv-consider-all-candidates-bound
6124 Bound on number of candidates for induction variables below that
6125 all candidates are considered for each use in induction variable
6126 optimizations.  Only the most relevant candidates are considered
6127 if there are more candidates, to avoid quadratic time complexity.
6129 @item iv-max-considered-uses
6130 The induction variable optimizations give up on loops that contain more
6131 induction variable uses.
6133 @item iv-always-prune-cand-set-bound
6134 If number of candidates in the set is smaller than this value,
6135 we always try to remove unnecessary ivs from the set during its
6136 optimization when a new iv is added to the set.
6138 @item scev-max-expr-size
6139 Bound on size of expressions used in the scalar evolutions analyzer.
6140 Large expressions slow the analyzer.
6142 @item vect-max-version-checks
6143 The maximum number of runtime checks that can be performed when doing
6144 loop versioning in the vectorizer.  See option ftree-vect-loop-version
6145 for more information.
6147 @item max-iterations-to-track
6149 The maximum number of iterations of a loop the brute force algorithm
6150 for analysis of # of iterations of the loop tries to evaluate.
6152 @item hot-bb-count-fraction
6153 Select fraction of the maximal count of repetitions of basic block in program
6154 given basic block needs to have to be considered hot.
6156 @item hot-bb-frequency-fraction
6157 Select fraction of the maximal frequency of executions of basic block in
6158 function given basic block needs to have to be considered hot
6160 @item max-predicted-iterations
6161 The maximum number of loop iterations we predict statically.  This is useful
6162 in cases where function contain single loop with known bound and other loop
6163 with unknown.  We predict the known number of iterations correctly, while
6164 the unknown number of iterations average to roughly 10.  This means that the
6165 loop without bounds would appear artificially cold relative to the other one.
6167 @item tracer-dynamic-coverage
6168 @itemx tracer-dynamic-coverage-feedback
6170 This value is used to limit superblock formation once the given percentage of
6171 executed instructions is covered.  This limits unnecessary code size
6172 expansion.
6174 The @option{tracer-dynamic-coverage-feedback} is used only when profile
6175 feedback is available.  The real profiles (as opposed to statically estimated
6176 ones) are much less balanced allowing the threshold to be larger value.
6178 @item tracer-max-code-growth
6179 Stop tail duplication once code growth has reached given percentage.  This is
6180 rather hokey argument, as most of the duplicates will be eliminated later in
6181 cross jumping, so it may be set to much higher values than is the desired code
6182 growth.
6184 @item tracer-min-branch-ratio
6186 Stop reverse growth when the reverse probability of best edge is less than this
6187 threshold (in percent).
6189 @item tracer-min-branch-ratio
6190 @itemx tracer-min-branch-ratio-feedback
6192 Stop forward growth if the best edge do have probability lower than this
6193 threshold.
6195 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
6196 compilation for profile feedback and one for compilation without.  The value
6197 for compilation with profile feedback needs to be more conservative (higher) in
6198 order to make tracer effective.
6200 @item max-cse-path-length
6202 Maximum number of basic blocks on path that cse considers.  The default is 10.
6204 @item max-cse-insns
6205 The maximum instructions CSE process before flushing. The default is 1000.
6207 @item global-var-threshold
6209 Counts the number of function calls (@var{n}) and the number of
6210 call-clobbered variables (@var{v}).  If @var{n}x@var{v} is larger than this limit, a
6211 single artificial variable will be created to represent all the
6212 call-clobbered variables at function call sites.  This artificial
6213 variable will then be made to alias every call-clobbered variable.
6214 (done as @code{int * size_t} on the host machine; beware overflow).
6216 @item max-aliased-vops
6218 Maximum number of virtual operands allowed to represent aliases
6219 before triggering the alias grouping heuristic.  Alias grouping
6220 reduces compile times and memory consumption needed for aliasing at
6221 the expense of precision loss in alias information.
6223 @item ggc-min-expand
6225 GCC uses a garbage collector to manage its own memory allocation.  This
6226 parameter specifies the minimum percentage by which the garbage
6227 collector's heap should be allowed to expand between collections.
6228 Tuning this may improve compilation speed; it has no effect on code
6229 generation.
6231 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
6232 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
6233 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
6234 GCC is not able to calculate RAM on a particular platform, the lower
6235 bound of 30% is used.  Setting this parameter and
6236 @option{ggc-min-heapsize} to zero causes a full collection to occur at
6237 every opportunity.  This is extremely slow, but can be useful for
6238 debugging.
6240 @item ggc-min-heapsize
6242 Minimum size of the garbage collector's heap before it begins bothering
6243 to collect garbage.  The first collection occurs after the heap expands
6244 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
6245 tuning this may improve compilation speed, and has no effect on code
6246 generation.
6248 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
6249 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
6250 with a lower bound of 4096 (four megabytes) and an upper bound of
6251 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
6252 particular platform, the lower bound is used.  Setting this parameter
6253 very large effectively disables garbage collection.  Setting this
6254 parameter and @option{ggc-min-expand} to zero causes a full collection
6255 to occur at every opportunity.
6257 @item max-reload-search-insns
6258 The maximum number of instruction reload should look backward for equivalent
6259 register.  Increasing values mean more aggressive optimization, making the
6260 compile time increase with probably slightly better performance.  The default
6261 value is 100.
6263 @item max-cselib-memory-locations
6264 The maximum number of memory locations cselib should take into account.
6265 Increasing values mean more aggressive optimization, making the compile time
6266 increase with probably slightly better performance.  The default value is 500.
6268 @item max-flow-memory-locations
6269 Similar as @option{max-cselib-memory-locations} but for dataflow liveness.
6270 The default value is 100.
6272 @item reorder-blocks-duplicate
6273 @itemx reorder-blocks-duplicate-feedback
6275 Used by basic block reordering pass to decide whether to use unconditional
6276 branch or duplicate the code on its destination.  Code is duplicated when its
6277 estimated size is smaller than this value multiplied by the estimated size of
6278 unconditional jump in the hot spots of the program.
6280 The @option{reorder-block-duplicate-feedback} is used only when profile
6281 feedback is available and may be set to higher values than
6282 @option{reorder-block-duplicate} since information about the hot spots is more
6283 accurate.
6285 @item max-sched-ready-insns
6286 The maximum number of instructions ready to be issued the scheduler should
6287 consider at any given time during the first scheduling pass.  Increasing
6288 values mean more thorough searches, making the compilation time increase
6289 with probably little benefit.  The default value is 100.
6291 @item max-sched-region-blocks
6292 The maximum number of blocks in a region to be considered for
6293 interblock scheduling.  The default value is 10.
6295 @item max-sched-region-insns
6296 The maximum number of insns in a region to be considered for
6297 interblock scheduling.  The default value is 100.
6299 @item min-spec-prob
6300 The minimum probability (in percents) of reaching a source block
6301 for interblock speculative scheduling.  The default value is 40.
6303 @item max-sched-extend-regions-iters
6304 The maximum number of iterations through CFG to extend regions.
6305 0 - disable region extension,
6306 N - do at most N iterations.
6307 The default value is 0.
6309 @item max-sched-insn-conflict-delay
6310 The maximum conflict delay for an insn to be considered for speculative motion.
6311 The default value is 3.
6313 @item sched-spec-prob-cutoff
6314 The minimal probability of speculation success (in percents), so that
6315 speculative insn will be scheduled.
6316 The default value is 40.
6318 @item max-last-value-rtl
6320 The maximum size measured as number of RTLs that can be recorded in an expression
6321 in combiner for a pseudo register as last known value of that register.  The default
6322 is 10000.
6324 @item integer-share-limit
6325 Small integer constants can use a shared data structure, reducing the
6326 compiler's memory usage and increasing its speed.  This sets the maximum
6327 value of a shared integer constant's.  The default value is 256.
6329 @item min-virtual-mappings
6330 Specifies the minimum number of virtual mappings in the incremental
6331 SSA updater that should be registered to trigger the virtual mappings
6332 heuristic defined by virtual-mappings-ratio.  The default value is
6333 100.
6335 @item virtual-mappings-ratio
6336 If the number of virtual mappings is virtual-mappings-ratio bigger
6337 than the number of virtual symbols to be updated, then the incremental
6338 SSA updater switches to a full update for those symbols.  The default
6339 ratio is 3.
6341 @item ssp-buffer-size
6342 The minimum size of buffers (i.e. arrays) that will receive stack smashing
6343 protection when @option{-fstack-protection} is used.
6345 @item max-jump-thread-duplication-stmts
6346 Maximum number of statements allowed in a block that needs to be
6347 duplicated when threading jumps.
6349 @item max-fields-for-field-sensitive
6350 Maximum number of fields in a structure we will treat in
6351 a field sensitive manner during pointer analysis.
6353 @item prefetch-latency
6354 Estimate on average number of instructions that are executed before
6355 prefetch finishes.  The distance we prefetch ahead is proportional
6356 to this constant.  Increasing this number may also lead to less
6357 streams being prefetched (see @option{simultaneous-prefetches}).
6359 @item simultaneous-prefetches
6360 Maximum number of prefetches that can run at the same time.
6362 @item l1-cache-line-size
6363 The size of cache line in L1 cache, in bytes.
6365 @item l1-cache-size
6366 The number of cache lines in L1 cache.
6368 @end table
6369 @end table
6371 @node Preprocessor Options
6372 @section Options Controlling the Preprocessor
6373 @cindex preprocessor options
6374 @cindex options, preprocessor
6376 These options control the C preprocessor, which is run on each C source
6377 file before actual compilation.
6379 If you use the @option{-E} option, nothing is done except preprocessing.
6380 Some of these options make sense only together with @option{-E} because
6381 they cause the preprocessor output to be unsuitable for actual
6382 compilation.
6384 @table @gcctabopt
6385 @opindex Wp
6386 You can use @option{-Wp,@var{option}} to bypass the compiler driver
6387 and pass @var{option} directly through to the preprocessor.  If
6388 @var{option} contains commas, it is split into multiple options at the
6389 commas.  However, many options are modified, translated or interpreted
6390 by the compiler driver before being passed to the preprocessor, and
6391 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
6392 interface is undocumented and subject to change, so whenever possible
6393 you should avoid using @option{-Wp} and let the driver handle the
6394 options instead.
6396 @item -Xpreprocessor @var{option}
6397 @opindex preprocessor
6398 Pass @var{option} as an option to the preprocessor.  You can use this to
6399 supply system-specific preprocessor options which GCC does not know how to
6400 recognize.
6402 If you want to pass an option that takes an argument, you must use
6403 @option{-Xpreprocessor} twice, once for the option and once for the argument.
6404 @end table
6406 @include cppopts.texi
6408 @node Assembler Options
6409 @section Passing Options to the Assembler
6411 @c prevent bad page break with this line
6412 You can pass options to the assembler.
6414 @table @gcctabopt
6415 @item -Wa,@var{option}
6416 @opindex Wa
6417 Pass @var{option} as an option to the assembler.  If @var{option}
6418 contains commas, it is split into multiple options at the commas.
6420 @item -Xassembler @var{option}
6421 @opindex Xassembler
6422 Pass @var{option} as an option to the assembler.  You can use this to
6423 supply system-specific assembler options which GCC does not know how to
6424 recognize.
6426 If you want to pass an option that takes an argument, you must use
6427 @option{-Xassembler} twice, once for the option and once for the argument.
6429 @end table
6431 @node Link Options
6432 @section Options for Linking
6433 @cindex link options
6434 @cindex options, linking
6436 These options come into play when the compiler links object files into
6437 an executable output file.  They are meaningless if the compiler is
6438 not doing a link step.
6440 @table @gcctabopt
6441 @cindex file names
6442 @item @var{object-file-name}
6443 A file name that does not end in a special recognized suffix is
6444 considered to name an object file or library.  (Object files are
6445 distinguished from libraries by the linker according to the file
6446 contents.)  If linking is done, these object files are used as input
6447 to the linker.
6449 @item -c
6450 @itemx -S
6451 @itemx -E
6452 @opindex c
6453 @opindex S
6454 @opindex E
6455 If any of these options is used, then the linker is not run, and
6456 object file names should not be used as arguments.  @xref{Overall
6457 Options}.
6459 @cindex Libraries
6460 @item -l@var{library}
6461 @itemx -l @var{library}
6462 @opindex l
6463 Search the library named @var{library} when linking.  (The second
6464 alternative with the library as a separate argument is only for
6465 POSIX compliance and is not recommended.)
6467 It makes a difference where in the command you write this option; the
6468 linker searches and processes libraries and object files in the order they
6469 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
6470 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
6471 to functions in @samp{z}, those functions may not be loaded.
6473 The linker searches a standard list of directories for the library,
6474 which is actually a file named @file{lib@var{library}.a}.  The linker
6475 then uses this file as if it had been specified precisely by name.
6477 The directories searched include several standard system directories
6478 plus any that you specify with @option{-L}.
6480 Normally the files found this way are library files---archive files
6481 whose members are object files.  The linker handles an archive file by
6482 scanning through it for members which define symbols that have so far
6483 been referenced but not defined.  But if the file that is found is an
6484 ordinary object file, it is linked in the usual fashion.  The only
6485 difference between using an @option{-l} option and specifying a file name
6486 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
6487 and searches several directories.
6489 @item -lobjc
6490 @opindex lobjc
6491 You need this special case of the @option{-l} option in order to
6492 link an Objective-C or Objective-C++ program.
6494 @item -nostartfiles
6495 @opindex nostartfiles
6496 Do not use the standard system startup files when linking.
6497 The standard system libraries are used normally, unless @option{-nostdlib}
6498 or @option{-nodefaultlibs} is used.
6500 @item -nodefaultlibs
6501 @opindex nodefaultlibs
6502 Do not use the standard system libraries when linking.
6503 Only the libraries you specify will be passed to the linker.
6504 The standard startup files are used normally, unless @option{-nostartfiles}
6505 is used.  The compiler may generate calls to @code{memcmp},
6506 @code{memset}, @code{memcpy} and @code{memmove}.
6507 These entries are usually resolved by entries in
6508 libc.  These entry points should be supplied through some other
6509 mechanism when this option is specified.
6511 @item -nostdlib
6512 @opindex nostdlib
6513 Do not use the standard system startup files or libraries when linking.
6514 No startup files and only the libraries you specify will be passed to
6515 the linker.  The compiler may generate calls to @code{memcmp}, @code{memset},
6516 @code{memcpy} and @code{memmove}.
6517 These entries are usually resolved by entries in
6518 libc.  These entry points should be supplied through some other
6519 mechanism when this option is specified.
6521 @cindex @option{-lgcc}, use with @option{-nostdlib}
6522 @cindex @option{-nostdlib} and unresolved references
6523 @cindex unresolved references and @option{-nostdlib}
6524 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
6525 @cindex @option{-nodefaultlibs} and unresolved references
6526 @cindex unresolved references and @option{-nodefaultlibs}
6527 One of the standard libraries bypassed by @option{-nostdlib} and
6528 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
6529 that GCC uses to overcome shortcomings of particular machines, or special
6530 needs for some languages.
6531 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
6532 Collection (GCC) Internals},
6533 for more discussion of @file{libgcc.a}.)
6534 In most cases, you need @file{libgcc.a} even when you want to avoid
6535 other standard libraries.  In other words, when you specify @option{-nostdlib}
6536 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
6537 This ensures that you have no unresolved references to internal GCC
6538 library subroutines.  (For example, @samp{__main}, used to ensure C++
6539 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
6540 GNU Compiler Collection (GCC) Internals}.)
6542 @item -pie
6543 @opindex pie
6544 Produce a position independent executable on targets which support it.
6545 For predictable results, you must also specify the same set of options
6546 that were used to generate code (@option{-fpie}, @option{-fPIE},
6547 or model suboptions) when you specify this option.
6549 @item -rdynamic
6550 @opindex rdynamic
6551 Pass the flag @option{-export-dynamic} to the ELF linker, on targets
6552 that support it. This instructs the linker to add all symbols, not
6553 only used ones, to the dynamic symbol table. This option is needed
6554 for some uses of @code{dlopen} or to allow obtaining backtraces
6555 from within a program.
6557 @item -s
6558 @opindex s
6559 Remove all symbol table and relocation information from the executable.
6561 @item -static
6562 @opindex static
6563 On systems that support dynamic linking, this prevents linking with the shared
6564 libraries.  On other systems, this option has no effect.
6566 @item -shared
6567 @opindex shared
6568 Produce a shared object which can then be linked with other objects to
6569 form an executable.  Not all systems support this option.  For predictable
6570 results, you must also specify the same set of options that were used to
6571 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
6572 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
6573 needs to build supplementary stub code for constructors to work.  On
6574 multi-libbed systems, @samp{gcc -shared} must select the correct support
6575 libraries to link against.  Failing to supply the correct flags may lead
6576 to subtle defects.  Supplying them in cases where they are not necessary
6577 is innocuous.}
6579 @item -shared-libgcc
6580 @itemx -static-libgcc
6581 @opindex shared-libgcc
6582 @opindex static-libgcc
6583 On systems that provide @file{libgcc} as a shared library, these options
6584 force the use of either the shared or static version respectively.
6585 If no shared version of @file{libgcc} was built when the compiler was
6586 configured, these options have no effect.
6588 There are several situations in which an application should use the
6589 shared @file{libgcc} instead of the static version.  The most common
6590 of these is when the application wishes to throw and catch exceptions
6591 across different shared libraries.  In that case, each of the libraries
6592 as well as the application itself should use the shared @file{libgcc}.
6594 Therefore, the G++ and GCJ drivers automatically add
6595 @option{-shared-libgcc} whenever you build a shared library or a main
6596 executable, because C++ and Java programs typically use exceptions, so
6597 this is the right thing to do.
6599 If, instead, you use the GCC driver to create shared libraries, you may
6600 find that they will not always be linked with the shared @file{libgcc}.
6601 If GCC finds, at its configuration time, that you have a non-GNU linker
6602 or a GNU linker that does not support option @option{--eh-frame-hdr},
6603 it will link the shared version of @file{libgcc} into shared libraries
6604 by default.  Otherwise, it will take advantage of the linker and optimize
6605 away the linking with the shared version of @file{libgcc}, linking with
6606 the static version of libgcc by default.  This allows exceptions to
6607 propagate through such shared libraries, without incurring relocation
6608 costs at library load time.
6610 However, if a library or main executable is supposed to throw or catch
6611 exceptions, you must link it using the G++ or GCJ driver, as appropriate
6612 for the languages used in the program, or using the option
6613 @option{-shared-libgcc}, such that it is linked with the shared
6614 @file{libgcc}.
6616 @item -symbolic
6617 @opindex symbolic
6618 Bind references to global symbols when building a shared object.  Warn
6619 about any unresolved references (unless overridden by the link editor
6620 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
6621 this option.
6623 @item -Xlinker @var{option}
6624 @opindex Xlinker
6625 Pass @var{option} as an option to the linker.  You can use this to
6626 supply system-specific linker options which GCC does not know how to
6627 recognize.
6629 If you want to pass an option that takes an argument, you must use
6630 @option{-Xlinker} twice, once for the option and once for the argument.
6631 For example, to pass @option{-assert definitions}, you must write
6632 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
6633 @option{-Xlinker "-assert definitions"}, because this passes the entire
6634 string as a single argument, which is not what the linker expects.
6636 @item -Wl,@var{option}
6637 @opindex Wl
6638 Pass @var{option} as an option to the linker.  If @var{option} contains
6639 commas, it is split into multiple options at the commas.
6641 @item -u @var{symbol}
6642 @opindex u
6643 Pretend the symbol @var{symbol} is undefined, to force linking of
6644 library modules to define it.  You can use @option{-u} multiple times with
6645 different symbols to force loading of additional library modules.
6646 @end table
6648 @node Directory Options
6649 @section Options for Directory Search
6650 @cindex directory options
6651 @cindex options, directory search
6652 @cindex search path
6654 These options specify directories to search for header files, for
6655 libraries and for parts of the compiler:
6657 @table @gcctabopt
6658 @item -I@var{dir}
6659 @opindex I
6660 Add the directory @var{dir} to the head of the list of directories to be
6661 searched for header files.  This can be used to override a system header
6662 file, substituting your own version, since these directories are
6663 searched before the system header file directories.  However, you should
6664 not use this option to add directories that contain vendor-supplied
6665 system header files (use @option{-isystem} for that).  If you use more than
6666 one @option{-I} option, the directories are scanned in left-to-right
6667 order; the standard system directories come after.
6669 If a standard system include directory, or a directory specified with
6670 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
6671 option will be ignored.  The directory will still be searched but as a
6672 system directory at its normal position in the system include chain.
6673 This is to ensure that GCC's procedure to fix buggy system headers and
6674 the ordering for the include_next directive are not inadvertently changed.
6675 If you really need to change the search order for system directories,
6676 use the @option{-nostdinc} and/or @option{-isystem} options.
6678 @item -iquote@var{dir}
6679 @opindex iquote
6680 Add the directory @var{dir} to the head of the list of directories to
6681 be searched for header files only for the case of @samp{#include
6682 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
6683 otherwise just like @option{-I}.
6685 @item -L@var{dir}
6686 @opindex L
6687 Add directory @var{dir} to the list of directories to be searched
6688 for @option{-l}.
6690 @item -B@var{prefix}
6691 @opindex B
6692 This option specifies where to find the executables, libraries,
6693 include files, and data files of the compiler itself.
6695 The compiler driver program runs one or more of the subprograms
6696 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
6697 @var{prefix} as a prefix for each program it tries to run, both with and
6698 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
6700 For each subprogram to be run, the compiler driver first tries the
6701 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
6702 was not specified, the driver tries two standard prefixes, which are
6703 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
6704 those results in a file name that is found, the unmodified program
6705 name is searched for using the directories specified in your
6706 @env{PATH} environment variable.
6708 The compiler will check to see if the path provided by the @option{-B}
6709 refers to a directory, and if necessary it will add a directory
6710 separator character at the end of the path.
6712 @option{-B} prefixes that effectively specify directory names also apply
6713 to libraries in the linker, because the compiler translates these
6714 options into @option{-L} options for the linker.  They also apply to
6715 includes files in the preprocessor, because the compiler translates these
6716 options into @option{-isystem} options for the preprocessor.  In this case,
6717 the compiler appends @samp{include} to the prefix.
6719 The run-time support file @file{libgcc.a} can also be searched for using
6720 the @option{-B} prefix, if needed.  If it is not found there, the two
6721 standard prefixes above are tried, and that is all.  The file is left
6722 out of the link if it is not found by those means.
6724 Another way to specify a prefix much like the @option{-B} prefix is to use
6725 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
6726 Variables}.
6728 As a special kludge, if the path provided by @option{-B} is
6729 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
6730 9, then it will be replaced by @file{[dir/]include}.  This is to help
6731 with boot-strapping the compiler.
6733 @item -specs=@var{file}
6734 @opindex specs
6735 Process @var{file} after the compiler reads in the standard @file{specs}
6736 file, in order to override the defaults that the @file{gcc} driver
6737 program uses when determining what switches to pass to @file{cc1},
6738 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
6739 @option{-specs=@var{file}} can be specified on the command line, and they
6740 are processed in order, from left to right.
6742 @item --sysroot=@var{dir}
6743 @opindex sysroot
6744 Use @var{dir} as the logical root directory for headers and libraries.
6745 For example, if the compiler would normally search for headers in
6746 @file{/usr/include} and libraries in @file{/usr/lib}, it will instead
6747 search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.  
6749 If you use both this option and the @option{-isysroot} option, then
6750 the @option{--sysroot} option will apply to libraries, but the
6751 @option{-isysroot} option will apply to header files.
6753 The GNU linker (beginning with version 2.16) has the necessary support
6754 for this option.  If your linker does not support this option, the
6755 header file aspect of @option{--sysroot} will still work, but the
6756 library aspect will not.
6758 @item -I-
6759 @opindex I-
6760 This option has been deprecated.  Please use @option{-iquote} instead for
6761 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
6762 Any directories you specify with @option{-I} options before the @option{-I-}
6763 option are searched only for the case of @samp{#include "@var{file}"};
6764 they are not searched for @samp{#include <@var{file}>}.
6766 If additional directories are specified with @option{-I} options after
6767 the @option{-I-}, these directories are searched for all @samp{#include}
6768 directives.  (Ordinarily @emph{all} @option{-I} directories are used
6769 this way.)
6771 In addition, the @option{-I-} option inhibits the use of the current
6772 directory (where the current input file came from) as the first search
6773 directory for @samp{#include "@var{file}"}.  There is no way to
6774 override this effect of @option{-I-}.  With @option{-I.} you can specify
6775 searching the directory which was current when the compiler was
6776 invoked.  That is not exactly the same as what the preprocessor does
6777 by default, but it is often satisfactory.
6779 @option{-I-} does not inhibit the use of the standard system directories
6780 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
6781 independent.
6782 @end table
6784 @c man end
6786 @node Spec Files
6787 @section Specifying subprocesses and the switches to pass to them
6788 @cindex Spec Files
6790 @command{gcc} is a driver program.  It performs its job by invoking a
6791 sequence of other programs to do the work of compiling, assembling and
6792 linking.  GCC interprets its command-line parameters and uses these to
6793 deduce which programs it should invoke, and which command-line options
6794 it ought to place on their command lines.  This behavior is controlled
6795 by @dfn{spec strings}.  In most cases there is one spec string for each
6796 program that GCC can invoke, but a few programs have multiple spec
6797 strings to control their behavior.  The spec strings built into GCC can
6798 be overridden by using the @option{-specs=} command-line switch to specify
6799 a spec file.
6801 @dfn{Spec files} are plaintext files that are used to construct spec
6802 strings.  They consist of a sequence of directives separated by blank
6803 lines.  The type of directive is determined by the first non-whitespace
6804 character on the line and it can be one of the following:
6806 @table @code
6807 @item %@var{command}
6808 Issues a @var{command} to the spec file processor.  The commands that can
6809 appear here are:
6811 @table @code
6812 @item %include <@var{file}>
6813 @cindex %include
6814 Search for @var{file} and insert its text at the current point in the
6815 specs file.
6817 @item %include_noerr <@var{file}>
6818 @cindex %include_noerr
6819 Just like @samp{%include}, but do not generate an error message if the include
6820 file cannot be found.
6822 @item %rename @var{old_name} @var{new_name}
6823 @cindex %rename
6824 Rename the spec string @var{old_name} to @var{new_name}.
6826 @end table
6828 @item *[@var{spec_name}]:
6829 This tells the compiler to create, override or delete the named spec
6830 string.  All lines after this directive up to the next directive or
6831 blank line are considered to be the text for the spec string.  If this
6832 results in an empty string then the spec will be deleted.  (Or, if the
6833 spec did not exist, then nothing will happened.)  Otherwise, if the spec
6834 does not currently exist a new spec will be created.  If the spec does
6835 exist then its contents will be overridden by the text of this
6836 directive, unless the first character of that text is the @samp{+}
6837 character, in which case the text will be appended to the spec.
6839 @item [@var{suffix}]:
6840 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
6841 and up to the next directive or blank line are considered to make up the
6842 spec string for the indicated suffix.  When the compiler encounters an
6843 input file with the named suffix, it will processes the spec string in
6844 order to work out how to compile that file.  For example:
6846 @smallexample
6847 .ZZ:
6848 z-compile -input %i
6849 @end smallexample
6851 This says that any input file whose name ends in @samp{.ZZ} should be
6852 passed to the program @samp{z-compile}, which should be invoked with the
6853 command-line switch @option{-input} and with the result of performing the
6854 @samp{%i} substitution.  (See below.)
6856 As an alternative to providing a spec string, the text that follows a
6857 suffix directive can be one of the following:
6859 @table @code
6860 @item @@@var{language}
6861 This says that the suffix is an alias for a known @var{language}.  This is
6862 similar to using the @option{-x} command-line switch to GCC to specify a
6863 language explicitly.  For example:
6865 @smallexample
6866 .ZZ:
6867 @@c++
6868 @end smallexample
6870 Says that .ZZ files are, in fact, C++ source files.
6872 @item #@var{name}
6873 This causes an error messages saying:
6875 @smallexample
6876 @var{name} compiler not installed on this system.
6877 @end smallexample
6878 @end table
6880 GCC already has an extensive list of suffixes built into it.
6881 This directive will add an entry to the end of the list of suffixes, but
6882 since the list is searched from the end backwards, it is effectively
6883 possible to override earlier entries using this technique.
6885 @end table
6887 GCC has the following spec strings built into it.  Spec files can
6888 override these strings or create their own.  Note that individual
6889 targets can also add their own spec strings to this list.
6891 @smallexample
6892 asm          Options to pass to the assembler
6893 asm_final    Options to pass to the assembler post-processor
6894 cpp          Options to pass to the C preprocessor
6895 cc1          Options to pass to the C compiler
6896 cc1plus      Options to pass to the C++ compiler
6897 endfile      Object files to include at the end of the link
6898 link         Options to pass to the linker
6899 lib          Libraries to include on the command line to the linker
6900 libgcc       Decides which GCC support library to pass to the linker
6901 linker       Sets the name of the linker
6902 predefines   Defines to be passed to the C preprocessor
6903 signed_char  Defines to pass to CPP to say whether @code{char} is signed
6904              by default
6905 startfile    Object files to include at the start of the link
6906 @end smallexample
6908 Here is a small example of a spec file:
6910 @smallexample
6911 %rename lib                 old_lib
6913 *lib:
6914 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
6915 @end smallexample
6917 This example renames the spec called @samp{lib} to @samp{old_lib} and
6918 then overrides the previous definition of @samp{lib} with a new one.
6919 The new definition adds in some extra command-line options before
6920 including the text of the old definition.
6922 @dfn{Spec strings} are a list of command-line options to be passed to their
6923 corresponding program.  In addition, the spec strings can contain
6924 @samp{%}-prefixed sequences to substitute variable text or to
6925 conditionally insert text into the command line.  Using these constructs
6926 it is possible to generate quite complex command lines.
6928 Here is a table of all defined @samp{%}-sequences for spec
6929 strings.  Note that spaces are not generated automatically around the
6930 results of expanding these sequences.  Therefore you can concatenate them
6931 together or combine them with constant text in a single argument.
6933 @table @code
6934 @item %%
6935 Substitute one @samp{%} into the program name or argument.
6937 @item %i
6938 Substitute the name of the input file being processed.
6940 @item %b
6941 Substitute the basename of the input file being processed.
6942 This is the substring up to (and not including) the last period
6943 and not including the directory.
6945 @item %B
6946 This is the same as @samp{%b}, but include the file suffix (text after
6947 the last period).
6949 @item %d
6950 Marks the argument containing or following the @samp{%d} as a
6951 temporary file name, so that that file will be deleted if GCC exits
6952 successfully.  Unlike @samp{%g}, this contributes no text to the
6953 argument.
6955 @item %g@var{suffix}
6956 Substitute a file name that has suffix @var{suffix} and is chosen
6957 once per compilation, and mark the argument in the same way as
6958 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
6959 name is now chosen in a way that is hard to predict even when previously
6960 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
6961 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
6962 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
6963 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
6964 was simply substituted with a file name chosen once per compilation,
6965 without regard to any appended suffix (which was therefore treated
6966 just like ordinary text), making such attacks more likely to succeed.
6968 @item %u@var{suffix}
6969 Like @samp{%g}, but generates a new temporary file name even if
6970 @samp{%u@var{suffix}} was already seen.
6972 @item %U@var{suffix}
6973 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
6974 new one if there is no such last file name.  In the absence of any
6975 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
6976 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
6977 would involve the generation of two distinct file names, one
6978 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
6979 simply substituted with a file name chosen for the previous @samp{%u},
6980 without regard to any appended suffix.
6982 @item %j@var{suffix}
6983 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
6984 writable, and if save-temps is off; otherwise, substitute the name
6985 of a temporary file, just like @samp{%u}.  This temporary file is not
6986 meant for communication between processes, but rather as a junk
6987 disposal mechanism.
6989 @item %|@var{suffix}
6990 @itemx %m@var{suffix}
6991 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
6992 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
6993 all.  These are the two most common ways to instruct a program that it
6994 should read from standard input or write to standard output.  If you
6995 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
6996 construct: see for example @file{f/lang-specs.h}.
6998 @item %.@var{SUFFIX}
6999 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
7000 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
7001 terminated by the next space or %.
7003 @item %w
7004 Marks the argument containing or following the @samp{%w} as the
7005 designated output file of this compilation.  This puts the argument
7006 into the sequence of arguments that @samp{%o} will substitute later.
7008 @item %o
7009 Substitutes the names of all the output files, with spaces
7010 automatically placed around them.  You should write spaces
7011 around the @samp{%o} as well or the results are undefined.
7012 @samp{%o} is for use in the specs for running the linker.
7013 Input files whose names have no recognized suffix are not compiled
7014 at all, but they are included among the output files, so they will
7015 be linked.
7017 @item %O
7018 Substitutes the suffix for object files.  Note that this is
7019 handled specially when it immediately follows @samp{%g, %u, or %U},
7020 because of the need for those to form complete file names.  The
7021 handling is such that @samp{%O} is treated exactly as if it had already
7022 been substituted, except that @samp{%g, %u, and %U} do not currently
7023 support additional @var{suffix} characters following @samp{%O} as they would
7024 following, for example, @samp{.o}.
7026 @item %p
7027 Substitutes the standard macro predefinitions for the
7028 current target machine.  Use this when running @code{cpp}.
7030 @item %P
7031 Like @samp{%p}, but puts @samp{__} before and after the name of each
7032 predefined macro, except for macros that start with @samp{__} or with
7033 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
7036 @item %I
7037 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
7038 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
7039 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
7040 and @option{-imultilib} as necessary.
7042 @item %s
7043 Current argument is the name of a library or startup file of some sort.
7044 Search for that file in a standard list of directories and substitute
7045 the full name found.
7047 @item %e@var{str}
7048 Print @var{str} as an error message.  @var{str} is terminated by a newline.
7049 Use this when inconsistent options are detected.
7051 @item %(@var{name})
7052 Substitute the contents of spec string @var{name} at this point.
7054 @item %[@var{name}]
7055 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
7057 @item %x@{@var{option}@}
7058 Accumulate an option for @samp{%X}.
7060 @item %X
7061 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
7062 spec string.
7064 @item %Y
7065 Output the accumulated assembler options specified by @option{-Wa}.
7067 @item %Z
7068 Output the accumulated preprocessor options specified by @option{-Wp}.
7070 @item %a
7071 Process the @code{asm} spec.  This is used to compute the
7072 switches to be passed to the assembler.
7074 @item %A
7075 Process the @code{asm_final} spec.  This is a spec string for
7076 passing switches to an assembler post-processor, if such a program is
7077 needed.
7079 @item %l
7080 Process the @code{link} spec.  This is the spec for computing the
7081 command line passed to the linker.  Typically it will make use of the
7082 @samp{%L %G %S %D and %E} sequences.
7084 @item %D
7085 Dump out a @option{-L} option for each directory that GCC believes might
7086 contain startup files.  If the target supports multilibs then the
7087 current multilib directory will be prepended to each of these paths.
7089 @item %L
7090 Process the @code{lib} spec.  This is a spec string for deciding which
7091 libraries should be included on the command line to the linker.
7093 @item %G
7094 Process the @code{libgcc} spec.  This is a spec string for deciding
7095 which GCC support library should be included on the command line to the linker.
7097 @item %S
7098 Process the @code{startfile} spec.  This is a spec for deciding which
7099 object files should be the first ones passed to the linker.  Typically
7100 this might be a file named @file{crt0.o}.
7102 @item %E
7103 Process the @code{endfile} spec.  This is a spec string that specifies
7104 the last object files that will be passed to the linker.
7106 @item %C
7107 Process the @code{cpp} spec.  This is used to construct the arguments
7108 to be passed to the C preprocessor.
7110 @item %1
7111 Process the @code{cc1} spec.  This is used to construct the options to be
7112 passed to the actual C compiler (@samp{cc1}).
7114 @item %2
7115 Process the @code{cc1plus} spec.  This is used to construct the options to be
7116 passed to the actual C++ compiler (@samp{cc1plus}).
7118 @item %*
7119 Substitute the variable part of a matched option.  See below.
7120 Note that each comma in the substituted string is replaced by
7121 a single space.
7123 @item %<@code{S}
7124 Remove all occurrences of @code{-S} from the command line.  Note---this
7125 command is position dependent.  @samp{%} commands in the spec string
7126 before this one will see @code{-S}, @samp{%} commands in the spec string
7127 after this one will not.
7129 @item %:@var{function}(@var{args})
7130 Call the named function @var{function}, passing it @var{args}.
7131 @var{args} is first processed as a nested spec string, then split
7132 into an argument vector in the usual fashion.  The function returns
7133 a string which is processed as if it had appeared literally as part
7134 of the current spec.
7136 The following built-in spec functions are provided:
7138 @table @code
7139 @item @code{if-exists}
7140 The @code{if-exists} spec function takes one argument, an absolute
7141 pathname to a file.  If the file exists, @code{if-exists} returns the
7142 pathname.  Here is a small example of its usage:
7144 @smallexample
7145 *startfile:
7146 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
7147 @end smallexample
7149 @item @code{if-exists-else}
7150 The @code{if-exists-else} spec function is similar to the @code{if-exists}
7151 spec function, except that it takes two arguments.  The first argument is
7152 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
7153 returns the pathname.  If it does not exist, it returns the second argument.
7154 This way, @code{if-exists-else} can be used to select one file or another,
7155 based on the existence of the first.  Here is a small example of its usage:
7157 @smallexample
7158 *startfile:
7159 crt0%O%s %:if-exists(crti%O%s) \
7160 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
7161 @end smallexample
7163 @item @code{replace-outfile}
7164 The @code{replace-outfile} spec function takes two arguments.  It looks for the
7165 first argument in the outfiles array and replaces it with the second argument.  Here
7166 is a small example of its usage:
7168 @smallexample
7169 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
7170 @end smallexample
7172 @end table
7174 @item %@{@code{S}@}
7175 Substitutes the @code{-S} switch, if that switch was given to GCC@.
7176 If that switch was not specified, this substitutes nothing.  Note that
7177 the leading dash is omitted when specifying this option, and it is
7178 automatically inserted if the substitution is performed.  Thus the spec
7179 string @samp{%@{foo@}} would match the command-line option @option{-foo}
7180 and would output the command line option @option{-foo}.
7182 @item %W@{@code{S}@}
7183 Like %@{@code{S}@} but mark last argument supplied within as a file to be
7184 deleted on failure.
7186 @item %@{@code{S}*@}
7187 Substitutes all the switches specified to GCC whose names start
7188 with @code{-S}, but which also take an argument.  This is used for
7189 switches like @option{-o}, @option{-D}, @option{-I}, etc.
7190 GCC considers @option{-o foo} as being
7191 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
7192 text, including the space.  Thus two arguments would be generated.
7194 @item %@{@code{S}*&@code{T}*@}
7195 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
7196 (the order of @code{S} and @code{T} in the spec is not significant).
7197 There can be any number of ampersand-separated variables; for each the
7198 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
7200 @item %@{@code{S}:@code{X}@}
7201 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
7203 @item %@{!@code{S}:@code{X}@}
7204 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
7206 @item %@{@code{S}*:@code{X}@}
7207 Substitutes @code{X} if one or more switches whose names start with
7208 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
7209 once, no matter how many such switches appeared.  However, if @code{%*}
7210 appears somewhere in @code{X}, then @code{X} will be substituted once
7211 for each matching switch, with the @code{%*} replaced by the part of
7212 that switch that matched the @code{*}.
7214 @item %@{.@code{S}:@code{X}@}
7215 Substitutes @code{X}, if processing a file with suffix @code{S}.
7217 @item %@{!.@code{S}:@code{X}@}
7218 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
7220 @item %@{@code{S}|@code{P}:@code{X}@}
7221 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
7222 This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
7223 although they have a stronger binding than the @samp{|}.  If @code{%*}
7224 appears in @code{X}, all of the alternatives must be starred, and only
7225 the first matching alternative is substituted.
7227 For example, a spec string like this:
7229 @smallexample
7230 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
7231 @end smallexample
7233 will output the following command-line options from the following input
7234 command-line options:
7236 @smallexample
7237 fred.c        -foo -baz
7238 jim.d         -bar -boggle
7239 -d fred.c     -foo -baz -boggle
7240 -d jim.d      -bar -baz -boggle
7241 @end smallexample
7243 @item %@{S:X; T:Y; :D@}
7245 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
7246 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
7247 be as many clauses as you need.  This may be combined with @code{.},
7248 @code{!}, @code{|}, and @code{*} as needed.
7251 @end table
7253 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
7254 construct may contain other nested @samp{%} constructs or spaces, or
7255 even newlines.  They are processed as usual, as described above.
7256 Trailing white space in @code{X} is ignored.  White space may also
7257 appear anywhere on the left side of the colon in these constructs,
7258 except between @code{.} or @code{*} and the corresponding word.
7260 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
7261 handled specifically in these constructs.  If another value of
7262 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
7263 @option{-W} switch is found later in the command line, the earlier
7264 switch value is ignored, except with @{@code{S}*@} where @code{S} is
7265 just one letter, which passes all matching options.
7267 The character @samp{|} at the beginning of the predicate text is used to
7268 indicate that a command should be piped to the following command, but
7269 only if @option{-pipe} is specified.
7271 It is built into GCC which switches take arguments and which do not.
7272 (You might think it would be useful to generalize this to allow each
7273 compiler's spec to say which switches take arguments.  But this cannot
7274 be done in a consistent fashion.  GCC cannot even decide which input
7275 files have been specified without knowing which switches take arguments,
7276 and it must know which input files to compile in order to tell which
7277 compilers to run).
7279 GCC also knows implicitly that arguments starting in @option{-l} are to be
7280 treated as compiler output files, and passed to the linker in their
7281 proper position among the other output files.
7283 @c man begin OPTIONS
7285 @node Target Options
7286 @section Specifying Target Machine and Compiler Version
7287 @cindex target options
7288 @cindex cross compiling
7289 @cindex specifying machine version
7290 @cindex specifying compiler version and target machine
7291 @cindex compiler version, specifying
7292 @cindex target machine, specifying
7294 The usual way to run GCC is to run the executable called @file{gcc}, or
7295 @file{<machine>-gcc} when cross-compiling, or
7296 @file{<machine>-gcc-<version>} to run a version other than the one that
7297 was installed last.  Sometimes this is inconvenient, so GCC provides
7298 options that will switch to another cross-compiler or version.
7300 @table @gcctabopt
7301 @item -b @var{machine}
7302 @opindex b
7303 The argument @var{machine} specifies the target machine for compilation.
7305 The value to use for @var{machine} is the same as was specified as the
7306 machine type when configuring GCC as a cross-compiler.  For
7307 example, if a cross-compiler was configured with @samp{configure
7308 arm-elf}, meaning to compile for an arm processor with elf binaries,
7309 then you would specify @option{-b arm-elf} to run that cross compiler.
7310 Because there are other options beginning with @option{-b}, the
7311 configuration must contain a hyphen. 
7313 @item -V @var{version}
7314 @opindex V
7315 The argument @var{version} specifies which version of GCC to run.
7316 This is useful when multiple versions are installed.  For example,
7317 @var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
7318 @end table
7320 The @option{-V} and @option{-b} options work by running the
7321 @file{<machine>-gcc-<version>} executable, so there's no real reason to
7322 use them if you can just run that directly.
7324 @node Submodel Options
7325 @section Hardware Models and Configurations
7326 @cindex submodel options
7327 @cindex specifying hardware config
7328 @cindex hardware models and configurations, specifying
7329 @cindex machine dependent options
7331 Earlier we discussed the standard option @option{-b} which chooses among
7332 different installed compilers for completely different target
7333 machines, such as VAX vs.@: 68000 vs.@: 80386.
7335 In addition, each of these target machine types can have its own
7336 special options, starting with @samp{-m}, to choose among various
7337 hardware models or configurations---for example, 68010 vs 68020,
7338 floating coprocessor or none.  A single installed version of the
7339 compiler can compile for any model or configuration, according to the
7340 options specified.
7342 Some configurations of the compiler also support additional special
7343 options, usually for compatibility with other compilers on the same
7344 platform.
7346 @c This list is ordered alphanumerically by subsection name.
7347 @c It should be the same order and spelling as these options are listed
7348 @c in Machine Dependent Options
7350 @menu
7351 * ARC Options::
7352 * ARM Options::
7353 * AVR Options::
7354 * Blackfin Options::
7355 * CRIS Options::
7356 * CRX Options::
7357 * Darwin Options::
7358 * DEC Alpha Options::
7359 * DEC Alpha/VMS Options::
7360 * FRV Options::
7361 * GNU/Linux Options::
7362 * H8/300 Options::
7363 * HPPA Options::
7364 * i386 and x86-64 Options::
7365 * IA-64 Options::
7366 * M32C Options::
7367 * M32R/D Options::
7368 * M680x0 Options::
7369 * M68hc1x Options::
7370 * MCore Options::
7371 * MIPS Options::
7372 * MMIX Options::
7373 * MN10300 Options::
7374 * MT Options::
7375 * PDP-11 Options::
7376 * PowerPC Options::
7377 * RS/6000 and PowerPC Options::
7378 * S/390 and zSeries Options::
7379 * Score Options::
7380 * SH Options::
7381 * SPARC Options::
7382 * SPU Options::
7383 * System V Options::
7384 * TMS320C3x/C4x Options::
7385 * V850 Options::
7386 * VAX Options::
7387 * x86-64 Options::
7388 * Xstormy16 Options::
7389 * Xtensa Options::
7390 * zSeries Options::
7391 @end menu
7393 @node ARC Options
7394 @subsection ARC Options
7395 @cindex ARC Options
7397 These options are defined for ARC implementations:
7399 @table @gcctabopt
7400 @item -EL
7401 @opindex EL
7402 Compile code for little endian mode.  This is the default.
7404 @item -EB
7405 @opindex EB
7406 Compile code for big endian mode.
7408 @item -mmangle-cpu
7409 @opindex mmangle-cpu
7410 Prepend the name of the cpu to all public symbol names.
7411 In multiple-processor systems, there are many ARC variants with different
7412 instruction and register set characteristics.  This flag prevents code
7413 compiled for one cpu to be linked with code compiled for another.
7414 No facility exists for handling variants that are ``almost identical''.
7415 This is an all or nothing option.
7417 @item -mcpu=@var{cpu}
7418 @opindex mcpu
7419 Compile code for ARC variant @var{cpu}.
7420 Which variants are supported depend on the configuration.
7421 All variants support @option{-mcpu=base}, this is the default.
7423 @item -mtext=@var{text-section}
7424 @itemx -mdata=@var{data-section}
7425 @itemx -mrodata=@var{readonly-data-section}
7426 @opindex mtext
7427 @opindex mdata
7428 @opindex mrodata
7429 Put functions, data, and readonly data in @var{text-section},
7430 @var{data-section}, and @var{readonly-data-section} respectively
7431 by default.  This can be overridden with the @code{section} attribute.
7432 @xref{Variable Attributes}.
7434 @end table
7436 @node ARM Options
7437 @subsection ARM Options
7438 @cindex ARM options
7440 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
7441 architectures:
7443 @table @gcctabopt
7444 @item -mabi=@var{name}
7445 @opindex mabi
7446 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
7447 @samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
7449 @item -mapcs-frame
7450 @opindex mapcs-frame
7451 Generate a stack frame that is compliant with the ARM Procedure Call
7452 Standard for all functions, even if this is not strictly necessary for
7453 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
7454 with this option will cause the stack frames not to be generated for
7455 leaf functions.  The default is @option{-mno-apcs-frame}.
7457 @item -mapcs
7458 @opindex mapcs
7459 This is a synonym for @option{-mapcs-frame}.
7461 @ignore
7462 @c not currently implemented
7463 @item -mapcs-stack-check
7464 @opindex mapcs-stack-check
7465 Generate code to check the amount of stack space available upon entry to
7466 every function (that actually uses some stack space).  If there is
7467 insufficient space available then either the function
7468 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
7469 called, depending upon the amount of stack space required.  The run time
7470 system is required to provide these functions.  The default is
7471 @option{-mno-apcs-stack-check}, since this produces smaller code.
7473 @c not currently implemented
7474 @item -mapcs-float
7475 @opindex mapcs-float
7476 Pass floating point arguments using the float point registers.  This is
7477 one of the variants of the APCS@.  This option is recommended if the
7478 target hardware has a floating point unit or if a lot of floating point
7479 arithmetic is going to be performed by the code.  The default is
7480 @option{-mno-apcs-float}, since integer only code is slightly increased in
7481 size if @option{-mapcs-float} is used.
7483 @c not currently implemented
7484 @item -mapcs-reentrant
7485 @opindex mapcs-reentrant
7486 Generate reentrant, position independent code.  The default is
7487 @option{-mno-apcs-reentrant}.
7488 @end ignore
7490 @item -mthumb-interwork
7491 @opindex mthumb-interwork
7492 Generate code which supports calling between the ARM and Thumb
7493 instruction sets.  Without this option the two instruction sets cannot
7494 be reliably used inside one program.  The default is
7495 @option{-mno-thumb-interwork}, since slightly larger code is generated
7496 when @option{-mthumb-interwork} is specified.
7498 @item -mno-sched-prolog
7499 @opindex mno-sched-prolog
7500 Prevent the reordering of instructions in the function prolog, or the
7501 merging of those instruction with the instructions in the function's
7502 body.  This means that all functions will start with a recognizable set
7503 of instructions (or in fact one of a choice from a small set of
7504 different function prologues), and this information can be used to
7505 locate the start if functions inside an executable piece of code.  The
7506 default is @option{-msched-prolog}.
7508 @item -mhard-float
7509 @opindex mhard-float
7510 Generate output containing floating point instructions.  This is the
7511 default.
7513 @item -msoft-float
7514 @opindex msoft-float
7515 Generate output containing library calls for floating point.
7516 @strong{Warning:} the requisite libraries are not available for all ARM
7517 targets.  Normally the facilities of the machine's usual C compiler are
7518 used, but this cannot be done directly in cross-compilation.  You must make
7519 your own arrangements to provide suitable library functions for
7520 cross-compilation.
7522 @option{-msoft-float} changes the calling convention in the output file;
7523 therefore, it is only useful if you compile @emph{all} of a program with
7524 this option.  In particular, you need to compile @file{libgcc.a}, the
7525 library that comes with GCC, with @option{-msoft-float} in order for
7526 this to work.
7528 @item -mfloat-abi=@var{name}
7529 @opindex mfloat-abi
7530 Specifies which ABI to use for floating point values.  Permissible values
7531 are: @samp{soft}, @samp{softfp} and @samp{hard}.
7533 @samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
7534 and @option{-mhard-float} respectively.  @samp{softfp} allows the generation
7535 of floating point instructions, but still uses the soft-float calling
7536 conventions.
7538 @item -mlittle-endian
7539 @opindex mlittle-endian
7540 Generate code for a processor running in little-endian mode.  This is
7541 the default for all standard configurations.
7543 @item -mbig-endian
7544 @opindex mbig-endian
7545 Generate code for a processor running in big-endian mode; the default is
7546 to compile code for a little-endian processor.
7548 @item -mwords-little-endian
7549 @opindex mwords-little-endian
7550 This option only applies when generating code for big-endian processors.
7551 Generate code for a little-endian word order but a big-endian byte
7552 order.  That is, a byte order of the form @samp{32107654}.  Note: this
7553 option should only be used if you require compatibility with code for
7554 big-endian ARM processors generated by versions of the compiler prior to
7555 2.8.
7557 @item -mcpu=@var{name}
7558 @opindex mcpu
7559 This specifies the name of the target ARM processor.  GCC uses this name
7560 to determine what kind of instructions it can emit when generating
7561 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
7562 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
7563 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
7564 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
7565 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
7566 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
7567 @samp{arm8}, @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
7568 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
7569 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
7570 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
7571 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
7572 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
7573 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
7574 @samp{arm1176jz-s}, @samp{arm1176jzf-s}, @samp{xscale}, @samp{iwmmxt},
7575 @samp{ep9312}.
7577 @itemx -mtune=@var{name}
7578 @opindex mtune
7579 This option is very similar to the @option{-mcpu=} option, except that
7580 instead of specifying the actual target processor type, and hence
7581 restricting which instructions can be used, it specifies that GCC should
7582 tune the performance of the code as if the target were of the type
7583 specified in this option, but still choosing the instructions that it
7584 will generate based on the cpu specified by a @option{-mcpu=} option.
7585 For some ARM implementations better performance can be obtained by using
7586 this option.
7588 @item -march=@var{name}
7589 @opindex march
7590 This specifies the name of the target ARM architecture.  GCC uses this
7591 name to determine what kind of instructions it can emit when generating
7592 assembly code.  This option can be used in conjunction with or instead
7593 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
7594 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
7595 @samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
7596 @samp{iwmmxt}, @samp{ep9312}.
7598 @item -mfpu=@var{name}
7599 @itemx -mfpe=@var{number}
7600 @itemx -mfp=@var{number}
7601 @opindex mfpu
7602 @opindex mfpe
7603 @opindex mfp
7604 This specifies what floating point hardware (or hardware emulation) is
7605 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
7606 @samp{fpe3}, @samp{maverick}, @samp{vfp}.  @option{-mfp} and @option{-mfpe}
7607 are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
7608 with older versions of GCC@.
7610 If @option{-msoft-float} is specified this specifies the format of
7611 floating point values.
7613 @item -mstructure-size-boundary=@var{n}
7614 @opindex mstructure-size-boundary
7615 The size of all structures and unions will be rounded up to a multiple
7616 of the number of bits set by this option.  Permissible values are 8, 32
7617 and 64.  The default value varies for different toolchains.  For the COFF
7618 targeted toolchain the default value is 8.  A value of 64 is only allowed
7619 if the underlying ABI supports it.
7621 Specifying the larger number can produce faster, more efficient code, but
7622 can also increase the size of the program.  Different values are potentially
7623 incompatible.  Code compiled with one value cannot necessarily expect to
7624 work with code or libraries compiled with another value, if they exchange
7625 information using structures or unions.
7627 @item -mabort-on-noreturn
7628 @opindex mabort-on-noreturn
7629 Generate a call to the function @code{abort} at the end of a
7630 @code{noreturn} function.  It will be executed if the function tries to
7631 return.
7633 @item -mlong-calls
7634 @itemx -mno-long-calls
7635 @opindex mlong-calls
7636 @opindex mno-long-calls
7637 Tells the compiler to perform function calls by first loading the
7638 address of the function into a register and then performing a subroutine
7639 call on this register.  This switch is needed if the target function
7640 will lie outside of the 64 megabyte addressing range of the offset based
7641 version of subroutine call instruction.
7643 Even if this switch is enabled, not all function calls will be turned
7644 into long calls.  The heuristic is that static functions, functions
7645 which have the @samp{short-call} attribute, functions that are inside
7646 the scope of a @samp{#pragma no_long_calls} directive and functions whose
7647 definitions have already been compiled within the current compilation
7648 unit, will not be turned into long calls.  The exception to this rule is
7649 that weak function definitions, functions with the @samp{long-call}
7650 attribute or the @samp{section} attribute, and functions that are within
7651 the scope of a @samp{#pragma long_calls} directive, will always be
7652 turned into long calls.
7654 This feature is not enabled by default.  Specifying
7655 @option{-mno-long-calls} will restore the default behavior, as will
7656 placing the function calls within the scope of a @samp{#pragma
7657 long_calls_off} directive.  Note these switches have no effect on how
7658 the compiler generates code to handle function calls via function
7659 pointers.
7661 @item -mnop-fun-dllimport
7662 @opindex mnop-fun-dllimport
7663 Disable support for the @code{dllimport} attribute.
7665 @item -msingle-pic-base
7666 @opindex msingle-pic-base
7667 Treat the register used for PIC addressing as read-only, rather than
7668 loading it in the prologue for each function.  The run-time system is
7669 responsible for initializing this register with an appropriate value
7670 before execution begins.
7672 @item -mpic-register=@var{reg}
7673 @opindex mpic-register
7674 Specify the register to be used for PIC addressing.  The default is R10
7675 unless stack-checking is enabled, when R9 is used.
7677 @item -mcirrus-fix-invalid-insns
7678 @opindex mcirrus-fix-invalid-insns
7679 @opindex mno-cirrus-fix-invalid-insns
7680 Insert NOPs into the instruction stream to in order to work around
7681 problems with invalid Maverick instruction combinations.  This option
7682 is only valid if the @option{-mcpu=ep9312} option has been used to
7683 enable generation of instructions for the Cirrus Maverick floating
7684 point co-processor.  This option is not enabled by default, since the
7685 problem is only present in older Maverick implementations.  The default
7686 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
7687 switch.
7689 @item -mpoke-function-name
7690 @opindex mpoke-function-name
7691 Write the name of each function into the text section, directly
7692 preceding the function prologue.  The generated code is similar to this:
7694 @smallexample
7695      t0
7696          .ascii "arm_poke_function_name", 0
7697          .align
7698      t1
7699          .word 0xff000000 + (t1 - t0)
7700      arm_poke_function_name
7701          mov     ip, sp
7702          stmfd   sp!, @{fp, ip, lr, pc@}
7703          sub     fp, ip, #4
7704 @end smallexample
7706 When performing a stack backtrace, code can inspect the value of
7707 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
7708 location @code{pc - 12} and the top 8 bits are set, then we know that
7709 there is a function name embedded immediately preceding this location
7710 and has length @code{((pc[-3]) & 0xff000000)}.
7712 @item -mthumb
7713 @opindex mthumb
7714 Generate code for the 16-bit Thumb instruction set.  The default is to
7715 use the 32-bit ARM instruction set.
7717 @item -mtpcs-frame
7718 @opindex mtpcs-frame
7719 Generate a stack frame that is compliant with the Thumb Procedure Call
7720 Standard for all non-leaf functions.  (A leaf function is one that does
7721 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
7723 @item -mtpcs-leaf-frame
7724 @opindex mtpcs-leaf-frame
7725 Generate a stack frame that is compliant with the Thumb Procedure Call
7726 Standard for all leaf functions.  (A leaf function is one that does
7727 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
7729 @item -mcallee-super-interworking
7730 @opindex mcallee-super-interworking
7731 Gives all externally visible functions in the file being compiled an ARM
7732 instruction set header which switches to Thumb mode before executing the
7733 rest of the function.  This allows these functions to be called from
7734 non-interworking code.
7736 @item -mcaller-super-interworking
7737 @opindex mcaller-super-interworking
7738 Allows calls via function pointers (including virtual functions) to
7739 execute correctly regardless of whether the target code has been
7740 compiled for interworking or not.  There is a small overhead in the cost
7741 of executing a function pointer if this option is enabled.
7743 @item -mtp=@var{name}
7744 @opindex mtp
7745 Specify the access model for the thread local storage pointer.  The valid
7746 models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
7747 @option{cp15}, which fetches the thread pointer from @code{cp15} directly
7748 (supported in the arm6k architecture), and @option{auto}, which uses the
7749 best available method for the selected processor.  The default setting is
7750 @option{auto}.
7752 @end table
7754 @node AVR Options
7755 @subsection AVR Options
7756 @cindex AVR Options
7758 These options are defined for AVR implementations:
7760 @table @gcctabopt
7761 @item -mmcu=@var{mcu}
7762 @opindex mmcu
7763 Specify ATMEL AVR instruction set or MCU type.
7765 Instruction set avr1 is for the minimal AVR core, not supported by the C
7766 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
7767 attiny11, attiny12, attiny15, attiny28).
7769 Instruction set avr2 (default) is for the classic AVR core with up to
7770 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
7771 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7772 at90c8534, at90s8535).
7774 Instruction set avr3 is for the classic AVR core with up to 128K program
7775 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
7777 Instruction set avr4 is for the enhanced AVR core with up to 8K program
7778 memory space (MCU types: atmega8, atmega83, atmega85).
7780 Instruction set avr5 is for the enhanced AVR core with up to 128K program
7781 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
7782 atmega64, atmega128, at43usb355, at94k).
7784 @item -msize
7785 @opindex msize
7786 Output instruction sizes to the asm file.
7788 @item -minit-stack=@var{N}
7789 @opindex minit-stack
7790 Specify the initial stack address, which may be a symbol or numeric value,
7791 @samp{__stack} is the default.
7793 @item -mno-interrupts
7794 @opindex mno-interrupts
7795 Generated code is not compatible with hardware interrupts.
7796 Code size will be smaller.
7798 @item -mcall-prologues
7799 @opindex mcall-prologues
7800 Functions prologues/epilogues expanded as call to appropriate
7801 subroutines.  Code size will be smaller.
7803 @item -mno-tablejump
7804 @opindex mno-tablejump
7805 Do not generate tablejump insns which sometimes increase code size.
7807 @item -mtiny-stack
7808 @opindex mtiny-stack
7809 Change only the low 8 bits of the stack pointer.
7811 @item -mint8
7812 @opindex mint8
7813 Assume int to be 8 bit integer.  This affects the sizes of all types: A
7814 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
7815 and long long will be 4 bytes.  Please note that this option does not
7816 comply to the C standards, but it will provide you with smaller code
7817 size.
7818 @end table
7820 @node Blackfin Options
7821 @subsection Blackfin Options
7822 @cindex Blackfin Options
7824 @table @gcctabopt
7825 @item -momit-leaf-frame-pointer
7826 @opindex momit-leaf-frame-pointer
7827 Don't keep the frame pointer in a register for leaf functions.  This
7828 avoids the instructions to save, set up and restore frame pointers and
7829 makes an extra register available in leaf functions.  The option
7830 @option{-fomit-frame-pointer} removes the frame pointer for all functions
7831 which might make debugging harder.
7833 @item -mspecld-anomaly
7834 @opindex mspecld-anomaly
7835 When enabled, the compiler will ensure that the generated code does not
7836 contain speculative loads after jump instructions.  This option is enabled
7837 by default.
7839 @item -mno-specld-anomaly
7840 @opindex mno-specld-anomaly
7841 Don't generate extra code to prevent speculative loads from occurring.
7843 @item -mcsync-anomaly
7844 @opindex mcsync-anomaly
7845 When enabled, the compiler will ensure that the generated code does not
7846 contain CSYNC or SSYNC instructions too soon after conditional branches.
7847 This option is enabled by default.
7849 @item -mno-csync-anomaly
7850 @opindex mno-csync-anomaly
7851 Don't generate extra code to prevent CSYNC or SSYNC instructions from
7852 occurring too soon after a conditional branch.
7854 @item -mlow-64k
7855 @opindex mlow-64k
7856 When enabled, the compiler is free to take advantage of the knowledge that
7857 the entire program fits into the low 64k of memory.
7859 @item -mno-low-64k
7860 @opindex mno-low-64k
7861 Assume that the program is arbitrarily large.  This is the default.
7863 @item -mstack-check-l1
7864 @opindex mstack-check-l1
7865 Do stack checking using information placed into L1 scratchpad memory by the
7866 uClinux kernel.
7868 @item -mid-shared-library
7869 @opindex mid-shared-library
7870 Generate code that supports shared libraries via the library ID method.
7871 This allows for execute in place and shared libraries in an environment
7872 without virtual memory management.  This option implies @option{-fPIC}.
7874 @item -mno-id-shared-library
7875 @opindex mno-id-shared-library
7876 Generate code that doesn't assume ID based shared libraries are being used.
7877 This is the default.
7879 @item -mleaf-id-shared-library
7880 @opindex mleaf-id-shared-library
7881 Generate code that supports shared libraries via the library ID method,
7882 but assumes that this library or executable won't link against any other
7883 ID shared libraries.  That allows the compiler to use faster code for jumps
7884 and calls.
7886 @item -mno-leaf-id-shared-library
7887 @opindex mno-leaf-id-shared-library
7888 Do not assume that the code being compiled won't link against any ID shared
7889 libraries.  Slower code will be generated for jump and call insns.
7891 @item -mshared-library-id=n
7892 @opindex mshared-library-id
7893 Specified the identification number of the ID based shared library being
7894 compiled.  Specifying a value of 0 will generate more compact code, specifying
7895 other values will force the allocation of that number to the current
7896 library but is no more space or time efficient than omitting this option.
7898 @item -msep-data
7899 @opindex msep-data
7900 Generate code that allows the data segment to be located in a different
7901 area of memory from the text segment.  This allows for execute in place in
7902 an environment without virtual memory management by eliminating relocations
7903 against the text section.
7905 @item -mno-sep-data
7906 @opindex mno-sep-data
7907 Generate code that assumes that the data segment follows the text segment.
7908 This is the default.
7910 @item -mlong-calls
7911 @itemx -mno-long-calls
7912 @opindex mlong-calls
7913 @opindex mno-long-calls
7914 Tells the compiler to perform function calls by first loading the
7915 address of the function into a register and then performing a subroutine
7916 call on this register.  This switch is needed if the target function
7917 will lie outside of the 24 bit addressing range of the offset based
7918 version of subroutine call instruction.
7920 This feature is not enabled by default.  Specifying
7921 @option{-mno-long-calls} will restore the default behavior.  Note these
7922 switches have no effect on how the compiler generates code to handle
7923 function calls via function pointers.
7924 @end table
7926 @node CRIS Options
7927 @subsection CRIS Options
7928 @cindex CRIS Options
7930 These options are defined specifically for the CRIS ports.
7932 @table @gcctabopt
7933 @item -march=@var{architecture-type}
7934 @itemx -mcpu=@var{architecture-type}
7935 @opindex march
7936 @opindex mcpu
7937 Generate code for the specified architecture.  The choices for
7938 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
7939 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
7940 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
7941 @samp{v10}.
7943 @item -mtune=@var{architecture-type}
7944 @opindex mtune
7945 Tune to @var{architecture-type} everything applicable about the generated
7946 code, except for the ABI and the set of available instructions.  The
7947 choices for @var{architecture-type} are the same as for
7948 @option{-march=@var{architecture-type}}.
7950 @item -mmax-stack-frame=@var{n}
7951 @opindex mmax-stack-frame
7952 Warn when the stack frame of a function exceeds @var{n} bytes.
7954 @item -melinux-stacksize=@var{n}
7955 @opindex melinux-stacksize
7956 Only available with the @samp{cris-axis-aout} target.  Arranges for
7957 indications in the program to the kernel loader that the stack of the
7958 program should be set to @var{n} bytes.
7960 @item -metrax4
7961 @itemx -metrax100
7962 @opindex metrax4
7963 @opindex metrax100
7964 The options @option{-metrax4} and @option{-metrax100} are synonyms for
7965 @option{-march=v3} and @option{-march=v8} respectively.
7967 @item -mmul-bug-workaround
7968 @itemx -mno-mul-bug-workaround
7969 @opindex mmul-bug-workaround
7970 @opindex mno-mul-bug-workaround
7971 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
7972 models where it applies.  This option is active by default.
7974 @item -mpdebug
7975 @opindex mpdebug
7976 Enable CRIS-specific verbose debug-related information in the assembly
7977 code.  This option also has the effect to turn off the @samp{#NO_APP}
7978 formatted-code indicator to the assembler at the beginning of the
7979 assembly file.
7981 @item -mcc-init
7982 @opindex mcc-init
7983 Do not use condition-code results from previous instruction; always emit
7984 compare and test instructions before use of condition codes.
7986 @item -mno-side-effects
7987 @opindex mno-side-effects
7988 Do not emit instructions with side-effects in addressing modes other than
7989 post-increment.
7991 @item -mstack-align
7992 @itemx -mno-stack-align
7993 @itemx -mdata-align
7994 @itemx -mno-data-align
7995 @itemx -mconst-align
7996 @itemx -mno-const-align
7997 @opindex mstack-align
7998 @opindex mno-stack-align
7999 @opindex mdata-align
8000 @opindex mno-data-align
8001 @opindex mconst-align
8002 @opindex mno-const-align
8003 These options (no-options) arranges (eliminate arrangements) for the
8004 stack-frame, individual data and constants to be aligned for the maximum
8005 single data access size for the chosen CPU model.  The default is to
8006 arrange for 32-bit alignment.  ABI details such as structure layout are
8007 not affected by these options.
8009 @item -m32-bit
8010 @itemx -m16-bit
8011 @itemx -m8-bit
8012 @opindex m32-bit
8013 @opindex m16-bit
8014 @opindex m8-bit
8015 Similar to the stack- data- and const-align options above, these options
8016 arrange for stack-frame, writable data and constants to all be 32-bit,
8017 16-bit or 8-bit aligned.  The default is 32-bit alignment.
8019 @item -mno-prologue-epilogue
8020 @itemx -mprologue-epilogue
8021 @opindex mno-prologue-epilogue
8022 @opindex mprologue-epilogue
8023 With @option{-mno-prologue-epilogue}, the normal function prologue and
8024 epilogue that sets up the stack-frame are omitted and no return
8025 instructions or return sequences are generated in the code.  Use this
8026 option only together with visual inspection of the compiled code: no
8027 warnings or errors are generated when call-saved registers must be saved,
8028 or storage for local variable needs to be allocated.
8030 @item -mno-gotplt
8031 @itemx -mgotplt
8032 @opindex mno-gotplt
8033 @opindex mgotplt
8034 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
8035 instruction sequences that load addresses for functions from the PLT part
8036 of the GOT rather than (traditional on other architectures) calls to the
8037 PLT@.  The default is @option{-mgotplt}.
8039 @item -maout
8040 @opindex maout
8041 Legacy no-op option only recognized with the cris-axis-aout target.
8043 @item -melf
8044 @opindex melf
8045 Legacy no-op option only recognized with the cris-axis-elf and
8046 cris-axis-linux-gnu targets.
8048 @item -melinux
8049 @opindex melinux
8050 Only recognized with the cris-axis-aout target, where it selects a
8051 GNU/linux-like multilib, include files and instruction set for
8052 @option{-march=v8}.
8054 @item -mlinux
8055 @opindex mlinux
8056 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
8058 @item -sim
8059 @opindex sim
8060 This option, recognized for the cris-axis-aout and cris-axis-elf arranges
8061 to link with input-output functions from a simulator library.  Code,
8062 initialized data and zero-initialized data are allocated consecutively.
8064 @item -sim2
8065 @opindex sim2
8066 Like @option{-sim}, but pass linker options to locate initialized data at
8067 0x40000000 and zero-initialized data at 0x80000000.
8068 @end table
8070 @node CRX Options
8071 @subsection CRX Options
8072 @cindex CRX Options
8074 These options are defined specifically for the CRX ports.
8076 @table @gcctabopt
8078 @item -mmac
8079 @opindex mmac
8080 Enable the use of multiply-accumulate instructions. Disabled by default.
8082 @item -mpush-args
8083 @opindex mpush-args
8084 Push instructions will be used to pass outgoing arguments when functions
8085 are called. Enabled by default.
8086 @end table
8088 @node Darwin Options
8089 @subsection Darwin Options
8090 @cindex Darwin options
8092 These options are defined for all architectures running the Darwin operating
8093 system.
8095 FSF GCC on Darwin does not create ``fat'' object files; it will create
8096 an object file for the single architecture that it was built to
8097 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
8098 @option{-arch} options are used; it does so by running the compiler or
8099 linker multiple times and joining the results together with
8100 @file{lipo}.
8102 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
8103 @samp{i686}) is determined by the flags that specify the ISA
8104 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
8105 @option{-force_cpusubtype_ALL} option can be used to override this.
8107 The Darwin tools vary in their behavior when presented with an ISA
8108 mismatch.  The assembler, @file{as}, will only permit instructions to
8109 be used that are valid for the subtype of the file it is generating,
8110 so you cannot put 64-bit instructions in an @samp{ppc750} object file.
8111 The linker for shared libraries, @file{/usr/bin/libtool}, will fail
8112 and print an error if asked to create a shared library with a less
8113 restrictive subtype than its input files (for instance, trying to put
8114 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
8115 for executables, @file{ld}, will quietly give the executable the most
8116 restrictive subtype of any of its input files.
8118 @table @gcctabopt
8119 @item -F@var{dir}
8120 @opindex F
8121 Add the framework directory @var{dir} to the head of the list of
8122 directories to be searched for header files.  These directories are
8123 interleaved with those specified by @option{-I} options and are
8124 scanned in a left-to-right order.
8126 A framework directory is a directory with frameworks in it.  A
8127 framework is a directory with a @samp{"Headers"} and/or
8128 @samp{"PrivateHeaders"} directory contained directly in it that ends
8129 in @samp{".framework"}.  The name of a framework is the name of this
8130 directory excluding the @samp{".framework"}.  Headers associated with
8131 the framework are found in one of those two directories, with
8132 @samp{"Headers"} being searched first.  A subframework is a framework
8133 directory that is in a framework's @samp{"Frameworks"} directory.
8134 Includes of subframework headers can only appear in a header of a
8135 framework that contains the subframework, or in a sibling subframework
8136 header.  Two subframeworks are siblings if they occur in the same
8137 framework.  A subframework should not have the same name as a
8138 framework, a warning will be issued if this is violated.  Currently a
8139 subframework cannot have subframeworks, in the future, the mechanism
8140 may be extended to support this.  The standard frameworks can be found
8141 in @samp{"/System/Library/Frameworks"} and
8142 @samp{"/Library/Frameworks"}.  An example include looks like
8143 @code{#include <Framework/header.h>}, where @samp{Framework} denotes
8144 the name of the framework and header.h is found in the
8145 @samp{"PrivateHeaders"} or @samp{"Headers"} directory.
8147 @item -gused
8148 @opindex -gused
8149 Emit debugging information for symbols that are used.  For STABS
8150 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
8151 This is by default ON@.
8153 @item -gfull
8154 @opindex -gfull
8155 Emit debugging information for all symbols and types.
8157 @item -mmacosx-version-min=@var{version}
8158 The earliest version of MacOS X that this executable will run on
8159 is @var{version}.  Typical values of @var{version} include @code{10.1},
8160 @code{10.2}, and @code{10.3.9}.
8162 The default for this option is to make choices that seem to be most
8163 useful.  
8165 @item -mkernel
8166 @opindex mkernel
8167 Enable kernel development mode.  The @option{-mkernel} option sets
8168 @option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
8169 @option{-fno-exceptions}, @option{-fno-non-call-exceptions},
8170 @option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
8171 applicable.  This mode also sets @option{-mno-altivec},
8172 @option{-msoft-float}, @option{-fno-builtin} and
8173 @option{-mlong-branch} for PowerPC targets.
8175 @item -mone-byte-bool
8176 @opindex -mone-byte-bool
8177 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
8178 By default @samp{sizeof(bool)} is @samp{4} when compiling for
8179 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
8180 option has no effect on x86.
8182 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
8183 to generate code that is not binary compatible with code generated
8184 without that switch.  Using this switch may require recompiling all
8185 other modules in a program, including system libraries.  Use this
8186 switch to conform to a non-default data model.
8188 @item -mfix-and-continue
8189 @itemx -ffix-and-continue
8190 @itemx -findirect-data
8191 @opindex mfix-and-continue
8192 @opindex ffix-and-continue
8193 @opindex findirect-data
8194 Generate code suitable for fast turn around development.  Needed to
8195 enable gdb to dynamically load @code{.o} files into already running
8196 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
8197 are provided for backwards compatibility.
8199 @item -all_load
8200 @opindex all_load
8201 Loads all members of static archive libraries.
8202 See man ld(1) for more information.
8204 @item -arch_errors_fatal
8205 @opindex arch_errors_fatal
8206 Cause the errors having to do with files that have the wrong architecture
8207 to be fatal.
8209 @item -bind_at_load
8210 @opindex bind_at_load
8211 Causes the output file to be marked such that the dynamic linker will
8212 bind all undefined references when the file is loaded or launched.
8214 @item -bundle
8215 @opindex bundle
8216 Produce a Mach-o bundle format file.
8217 See man ld(1) for more information.
8219 @item -bundle_loader @var{executable}
8220 @opindex bundle_loader
8221 This option specifies the @var{executable} that will be loading the build
8222 output file being linked.  See man ld(1) for more information.
8224 @item -dynamiclib
8225 @opindex -dynamiclib
8226 When passed this option, GCC will produce a dynamic library instead of
8227 an executable when linking, using the Darwin @file{libtool} command.
8229 @item -force_cpusubtype_ALL
8230 @opindex -force_cpusubtype_ALL
8231 This causes GCC's output file to have the @var{ALL} subtype, instead of
8232 one controlled by the @option{-mcpu} or @option{-march} option.
8234 @item -allowable_client  @var{client_name}
8235 @itemx -client_name
8236 @itemx -compatibility_version
8237 @itemx -current_version
8238 @itemx -dead_strip
8239 @itemx -dependency-file
8240 @itemx -dylib_file
8241 @itemx -dylinker_install_name
8242 @itemx -dynamic
8243 @itemx -exported_symbols_list
8244 @itemx -filelist
8245 @itemx -flat_namespace
8246 @itemx -force_flat_namespace
8247 @itemx -headerpad_max_install_names
8248 @itemx -image_base
8249 @itemx -init
8250 @itemx -install_name
8251 @itemx -keep_private_externs
8252 @itemx -multi_module
8253 @itemx -multiply_defined
8254 @itemx -multiply_defined_unused
8255 @itemx -noall_load
8256 @itemx -no_dead_strip_inits_and_terms
8257 @itemx -nofixprebinding
8258 @itemx -nomultidefs
8259 @itemx -noprebind
8260 @itemx -noseglinkedit
8261 @itemx -pagezero_size
8262 @itemx -prebind
8263 @itemx -prebind_all_twolevel_modules
8264 @itemx -private_bundle
8265 @itemx -read_only_relocs
8266 @itemx -sectalign
8267 @itemx -sectobjectsymbols
8268 @itemx -whyload
8269 @itemx -seg1addr
8270 @itemx -sectcreate
8271 @itemx -sectobjectsymbols
8272 @itemx -sectorder
8273 @itemx -segaddr
8274 @itemx -segs_read_only_addr
8275 @itemx -segs_read_write_addr
8276 @itemx -seg_addr_table
8277 @itemx -seg_addr_table_filename
8278 @itemx -seglinkedit
8279 @itemx -segprot
8280 @itemx -segs_read_only_addr
8281 @itemx -segs_read_write_addr
8282 @itemx -single_module
8283 @itemx -static
8284 @itemx -sub_library
8285 @itemx -sub_umbrella
8286 @itemx -twolevel_namespace
8287 @itemx -umbrella
8288 @itemx -undefined
8289 @itemx -unexported_symbols_list
8290 @itemx -weak_reference_mismatches
8291 @itemx -whatsloaded
8293 @opindex allowable_client
8294 @opindex client_name
8295 @opindex compatibility_version
8296 @opindex current_version
8297 @opindex dead_strip
8298 @opindex dependency-file
8299 @opindex dylib_file
8300 @opindex dylinker_install_name
8301 @opindex dynamic
8302 @opindex exported_symbols_list
8303 @opindex filelist
8304 @opindex flat_namespace
8305 @opindex force_flat_namespace
8306 @opindex headerpad_max_install_names
8307 @opindex image_base
8308 @opindex init
8309 @opindex install_name
8310 @opindex keep_private_externs
8311 @opindex multi_module
8312 @opindex multiply_defined
8313 @opindex multiply_defined_unused
8314 @opindex noall_load
8315 @opindex no_dead_strip_inits_and_terms
8316 @opindex nofixprebinding
8317 @opindex nomultidefs
8318 @opindex noprebind
8319 @opindex noseglinkedit
8320 @opindex pagezero_size
8321 @opindex prebind
8322 @opindex prebind_all_twolevel_modules
8323 @opindex private_bundle
8324 @opindex read_only_relocs
8325 @opindex sectalign
8326 @opindex sectobjectsymbols
8327 @opindex whyload
8328 @opindex seg1addr
8329 @opindex sectcreate
8330 @opindex sectobjectsymbols
8331 @opindex sectorder
8332 @opindex segaddr
8333 @opindex segs_read_only_addr
8334 @opindex segs_read_write_addr
8335 @opindex seg_addr_table
8336 @opindex seg_addr_table_filename
8337 @opindex seglinkedit
8338 @opindex segprot
8339 @opindex segs_read_only_addr
8340 @opindex segs_read_write_addr
8341 @opindex single_module
8342 @opindex static
8343 @opindex sub_library
8344 @opindex sub_umbrella
8345 @opindex twolevel_namespace
8346 @opindex umbrella
8347 @opindex undefined
8348 @opindex unexported_symbols_list
8349 @opindex weak_reference_mismatches
8350 @opindex whatsloaded
8352 These options are passed to the Darwin linker.  The Darwin linker man page
8353 describes them in detail.
8354 @end table
8356 @node DEC Alpha Options
8357 @subsection DEC Alpha Options
8359 These @samp{-m} options are defined for the DEC Alpha implementations:
8361 @table @gcctabopt
8362 @item -mno-soft-float
8363 @itemx -msoft-float
8364 @opindex mno-soft-float
8365 @opindex msoft-float
8366 Use (do not use) the hardware floating-point instructions for
8367 floating-point operations.  When @option{-msoft-float} is specified,
8368 functions in @file{libgcc.a} will be used to perform floating-point
8369 operations.  Unless they are replaced by routines that emulate the
8370 floating-point operations, or compiled in such a way as to call such
8371 emulations routines, these routines will issue floating-point
8372 operations.   If you are compiling for an Alpha without floating-point
8373 operations, you must ensure that the library is built so as not to call
8374 them.
8376 Note that Alpha implementations without floating-point operations are
8377 required to have floating-point registers.
8379 @item -mfp-reg
8380 @itemx -mno-fp-regs
8381 @opindex mfp-reg
8382 @opindex mno-fp-regs
8383 Generate code that uses (does not use) the floating-point register set.
8384 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
8385 register set is not used, floating point operands are passed in integer
8386 registers as if they were integers and floating-point results are passed
8387 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
8388 so any function with a floating-point argument or return value called by code
8389 compiled with @option{-mno-fp-regs} must also be compiled with that
8390 option.
8392 A typical use of this option is building a kernel that does not use,
8393 and hence need not save and restore, any floating-point registers.
8395 @item -mieee
8396 @opindex mieee
8397 The Alpha architecture implements floating-point hardware optimized for
8398 maximum performance.  It is mostly compliant with the IEEE floating
8399 point standard.  However, for full compliance, software assistance is
8400 required.  This option generates code fully IEEE compliant code
8401 @emph{except} that the @var{inexact-flag} is not maintained (see below).
8402 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
8403 defined during compilation.  The resulting code is less efficient but is
8404 able to correctly support denormalized numbers and exceptional IEEE
8405 values such as not-a-number and plus/minus infinity.  Other Alpha
8406 compilers call this option @option{-ieee_with_no_inexact}.
8408 @item -mieee-with-inexact
8409 @opindex mieee-with-inexact
8410 This is like @option{-mieee} except the generated code also maintains
8411 the IEEE @var{inexact-flag}.  Turning on this option causes the
8412 generated code to implement fully-compliant IEEE math.  In addition to
8413 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
8414 macro.  On some Alpha implementations the resulting code may execute
8415 significantly slower than the code generated by default.  Since there is
8416 very little code that depends on the @var{inexact-flag}, you should
8417 normally not specify this option.  Other Alpha compilers call this
8418 option @option{-ieee_with_inexact}.
8420 @item -mfp-trap-mode=@var{trap-mode}
8421 @opindex mfp-trap-mode
8422 This option controls what floating-point related traps are enabled.
8423 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
8424 The trap mode can be set to one of four values:
8426 @table @samp
8427 @item n
8428 This is the default (normal) setting.  The only traps that are enabled
8429 are the ones that cannot be disabled in software (e.g., division by zero
8430 trap).
8432 @item u
8433 In addition to the traps enabled by @samp{n}, underflow traps are enabled
8434 as well.
8436 @item su
8437 Like @samp{u}, but the instructions are marked to be safe for software
8438 completion (see Alpha architecture manual for details).
8440 @item sui
8441 Like @samp{su}, but inexact traps are enabled as well.
8442 @end table
8444 @item -mfp-rounding-mode=@var{rounding-mode}
8445 @opindex mfp-rounding-mode
8446 Selects the IEEE rounding mode.  Other Alpha compilers call this option
8447 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
8450 @table @samp
8451 @item n
8452 Normal IEEE rounding mode.  Floating point numbers are rounded towards
8453 the nearest machine number or towards the even machine number in case
8454 of a tie.
8456 @item m
8457 Round towards minus infinity.
8459 @item c
8460 Chopped rounding mode.  Floating point numbers are rounded towards zero.
8462 @item d
8463 Dynamic rounding mode.  A field in the floating point control register
8464 (@var{fpcr}, see Alpha architecture reference manual) controls the
8465 rounding mode in effect.  The C library initializes this register for
8466 rounding towards plus infinity.  Thus, unless your program modifies the
8467 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
8468 @end table
8470 @item -mtrap-precision=@var{trap-precision}
8471 @opindex mtrap-precision
8472 In the Alpha architecture, floating point traps are imprecise.  This
8473 means without software assistance it is impossible to recover from a
8474 floating trap and program execution normally needs to be terminated.
8475 GCC can generate code that can assist operating system trap handlers
8476 in determining the exact location that caused a floating point trap.
8477 Depending on the requirements of an application, different levels of
8478 precisions can be selected:
8480 @table @samp
8481 @item p
8482 Program precision.  This option is the default and means a trap handler
8483 can only identify which program caused a floating point exception.
8485 @item f
8486 Function precision.  The trap handler can determine the function that
8487 caused a floating point exception.
8489 @item i
8490 Instruction precision.  The trap handler can determine the exact
8491 instruction that caused a floating point exception.
8492 @end table
8494 Other Alpha compilers provide the equivalent options called
8495 @option{-scope_safe} and @option{-resumption_safe}.
8497 @item -mieee-conformant
8498 @opindex mieee-conformant
8499 This option marks the generated code as IEEE conformant.  You must not
8500 use this option unless you also specify @option{-mtrap-precision=i} and either
8501 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
8502 is to emit the line @samp{.eflag 48} in the function prologue of the
8503 generated assembly file.  Under DEC Unix, this has the effect that
8504 IEEE-conformant math library routines will be linked in.
8506 @item -mbuild-constants
8507 @opindex mbuild-constants
8508 Normally GCC examines a 32- or 64-bit integer constant to
8509 see if it can construct it from smaller constants in two or three
8510 instructions.  If it cannot, it will output the constant as a literal and
8511 generate code to load it from the data segment at runtime.
8513 Use this option to require GCC to construct @emph{all} integer constants
8514 using code, even if it takes more instructions (the maximum is six).
8516 You would typically use this option to build a shared library dynamic
8517 loader.  Itself a shared library, it must relocate itself in memory
8518 before it can find the variables and constants in its own data segment.
8520 @item -malpha-as
8521 @itemx -mgas
8522 @opindex malpha-as
8523 @opindex mgas
8524 Select whether to generate code to be assembled by the vendor-supplied
8525 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
8527 @item -mbwx
8528 @itemx -mno-bwx
8529 @itemx -mcix
8530 @itemx -mno-cix
8531 @itemx -mfix
8532 @itemx -mno-fix
8533 @itemx -mmax
8534 @itemx -mno-max
8535 @opindex mbwx
8536 @opindex mno-bwx
8537 @opindex mcix
8538 @opindex mno-cix
8539 @opindex mfix
8540 @opindex mno-fix
8541 @opindex mmax
8542 @opindex mno-max
8543 Indicate whether GCC should generate code to use the optional BWX,
8544 CIX, FIX and MAX instruction sets.  The default is to use the instruction
8545 sets supported by the CPU type specified via @option{-mcpu=} option or that
8546 of the CPU on which GCC was built if none was specified.
8548 @item -mfloat-vax
8549 @itemx -mfloat-ieee
8550 @opindex mfloat-vax
8551 @opindex mfloat-ieee
8552 Generate code that uses (does not use) VAX F and G floating point
8553 arithmetic instead of IEEE single and double precision.
8555 @item -mexplicit-relocs
8556 @itemx -mno-explicit-relocs
8557 @opindex mexplicit-relocs
8558 @opindex mno-explicit-relocs
8559 Older Alpha assemblers provided no way to generate symbol relocations
8560 except via assembler macros.  Use of these macros does not allow
8561 optimal instruction scheduling.  GNU binutils as of version 2.12
8562 supports a new syntax that allows the compiler to explicitly mark
8563 which relocations should apply to which instructions.  This option
8564 is mostly useful for debugging, as GCC detects the capabilities of
8565 the assembler when it is built and sets the default accordingly.
8567 @item -msmall-data
8568 @itemx -mlarge-data
8569 @opindex msmall-data
8570 @opindex mlarge-data
8571 When @option{-mexplicit-relocs} is in effect, static data is
8572 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
8573 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
8574 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
8575 16-bit relocations off of the @code{$gp} register.  This limits the
8576 size of the small data area to 64KB, but allows the variables to be
8577 directly accessed via a single instruction.
8579 The default is @option{-mlarge-data}.  With this option the data area
8580 is limited to just below 2GB@.  Programs that require more than 2GB of
8581 data must use @code{malloc} or @code{mmap} to allocate the data in the
8582 heap instead of in the program's data segment.
8584 When generating code for shared libraries, @option{-fpic} implies
8585 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
8587 @item -msmall-text
8588 @itemx -mlarge-text
8589 @opindex msmall-text
8590 @opindex mlarge-text
8591 When @option{-msmall-text} is used, the compiler assumes that the
8592 code of the entire program (or shared library) fits in 4MB, and is
8593 thus reachable with a branch instruction.  When @option{-msmall-data}
8594 is used, the compiler can assume that all local symbols share the
8595 same @code{$gp} value, and thus reduce the number of instructions
8596 required for a function call from 4 to 1.
8598 The default is @option{-mlarge-text}.
8600 @item -mcpu=@var{cpu_type}
8601 @opindex mcpu
8602 Set the instruction set and instruction scheduling parameters for
8603 machine type @var{cpu_type}.  You can specify either the @samp{EV}
8604 style name or the corresponding chip number.  GCC supports scheduling
8605 parameters for the EV4, EV5 and EV6 family of processors and will
8606 choose the default values for the instruction set from the processor
8607 you specify.  If you do not specify a processor type, GCC will default
8608 to the processor on which the compiler was built.
8610 Supported values for @var{cpu_type} are
8612 @table @samp
8613 @item ev4
8614 @itemx ev45
8615 @itemx 21064
8616 Schedules as an EV4 and has no instruction set extensions.
8618 @item ev5
8619 @itemx 21164
8620 Schedules as an EV5 and has no instruction set extensions.
8622 @item ev56
8623 @itemx 21164a
8624 Schedules as an EV5 and supports the BWX extension.
8626 @item pca56
8627 @itemx 21164pc
8628 @itemx 21164PC
8629 Schedules as an EV5 and supports the BWX and MAX extensions.
8631 @item ev6
8632 @itemx 21264
8633 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
8635 @item ev67
8636 @itemx 21264a
8637 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
8638 @end table
8640 @item -mtune=@var{cpu_type}
8641 @opindex mtune
8642 Set only the instruction scheduling parameters for machine type
8643 @var{cpu_type}.  The instruction set is not changed.
8645 @item -mmemory-latency=@var{time}
8646 @opindex mmemory-latency
8647 Sets the latency the scheduler should assume for typical memory
8648 references as seen by the application.  This number is highly
8649 dependent on the memory access patterns used by the application
8650 and the size of the external cache on the machine.
8652 Valid options for @var{time} are
8654 @table @samp
8655 @item @var{number}
8656 A decimal number representing clock cycles.
8658 @item L1
8659 @itemx L2
8660 @itemx L3
8661 @itemx main
8662 The compiler contains estimates of the number of clock cycles for
8663 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8664 (also called Dcache, Scache, and Bcache), as well as to main memory.
8665 Note that L3 is only valid for EV5.
8667 @end table
8668 @end table
8670 @node DEC Alpha/VMS Options
8671 @subsection DEC Alpha/VMS Options
8673 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
8675 @table @gcctabopt
8676 @item -mvms-return-codes
8677 @opindex mvms-return-codes
8678 Return VMS condition codes from main.  The default is to return POSIX
8679 style condition (e.g.@ error) codes.
8680 @end table
8682 @node FRV Options
8683 @subsection FRV Options
8684 @cindex FRV Options
8686 @table @gcctabopt
8687 @item -mgpr-32
8688 @opindex mgpr-32
8690 Only use the first 32 general purpose registers.
8692 @item -mgpr-64
8693 @opindex mgpr-64
8695 Use all 64 general purpose registers.
8697 @item -mfpr-32
8698 @opindex mfpr-32
8700 Use only the first 32 floating point registers.
8702 @item -mfpr-64
8703 @opindex mfpr-64
8705 Use all 64 floating point registers
8707 @item -mhard-float
8708 @opindex mhard-float
8710 Use hardware instructions for floating point operations.
8712 @item -msoft-float
8713 @opindex msoft-float
8715 Use library routines for floating point operations.
8717 @item -malloc-cc
8718 @opindex malloc-cc
8720 Dynamically allocate condition code registers.
8722 @item -mfixed-cc
8723 @opindex mfixed-cc
8725 Do not try to dynamically allocate condition code registers, only
8726 use @code{icc0} and @code{fcc0}.
8728 @item -mdword
8729 @opindex mdword
8731 Change ABI to use double word insns.
8733 @item -mno-dword
8734 @opindex mno-dword
8736 Do not use double word instructions.
8738 @item -mdouble
8739 @opindex mdouble
8741 Use floating point double instructions.
8743 @item -mno-double
8744 @opindex mno-double
8746 Do not use floating point double instructions.
8748 @item -mmedia
8749 @opindex mmedia
8751 Use media instructions.
8753 @item -mno-media
8754 @opindex mno-media
8756 Do not use media instructions.
8758 @item -mmuladd
8759 @opindex mmuladd
8761 Use multiply and add/subtract instructions.
8763 @item -mno-muladd
8764 @opindex mno-muladd
8766 Do not use multiply and add/subtract instructions.
8768 @item -mfdpic
8769 @opindex mfdpic
8771 Select the FDPIC ABI, that uses function descriptors to represent
8772 pointers to functions.  Without any PIC/PIE-related options, it
8773 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
8774 assumes GOT entries and small data are within a 12-bit range from the
8775 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
8776 are computed with 32 bits.
8778 @item -minline-plt
8779 @opindex minline-plt
8781 Enable inlining of PLT entries in function calls to functions that are
8782 not known to bind locally.  It has no effect without @option{-mfdpic}.
8783 It's enabled by default if optimizing for speed and compiling for
8784 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
8785 optimization option such as @option{-O3} or above is present in the
8786 command line.
8788 @item -mTLS
8789 @opindex TLS
8791 Assume a large TLS segment when generating thread-local code.
8793 @item -mtls
8794 @opindex tls
8796 Do not assume a large TLS segment when generating thread-local code.
8798 @item -mgprel-ro
8799 @opindex mgprel-ro
8801 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
8802 that is known to be in read-only sections.  It's enabled by default,
8803 except for @option{-fpic} or @option{-fpie}: even though it may help
8804 make the global offset table smaller, it trades 1 instruction for 4.
8805 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
8806 one of which may be shared by multiple symbols, and it avoids the need
8807 for a GOT entry for the referenced symbol, so it's more likely to be a
8808 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
8810 @item -multilib-library-pic
8811 @opindex multilib-library-pic
8813 Link with the (library, not FD) pic libraries.  It's implied by
8814 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
8815 @option{-fpic} without @option{-mfdpic}.  You should never have to use
8816 it explicitly.
8818 @item -mlinked-fp
8819 @opindex mlinked-fp
8821 Follow the EABI requirement of always creating a frame pointer whenever
8822 a stack frame is allocated.  This option is enabled by default and can
8823 be disabled with @option{-mno-linked-fp}.
8825 @item -mlong-calls
8826 @opindex mlong-calls
8828 Use indirect addressing to call functions outside the current
8829 compilation unit.  This allows the functions to be placed anywhere
8830 within the 32-bit address space.
8832 @item -malign-labels
8833 @opindex malign-labels
8835 Try to align labels to an 8-byte boundary by inserting nops into the
8836 previous packet.  This option only has an effect when VLIW packing
8837 is enabled.  It doesn't create new packets; it merely adds nops to
8838 existing ones.
8840 @item -mlibrary-pic
8841 @opindex mlibrary-pic
8843 Generate position-independent EABI code.
8845 @item -macc-4
8846 @opindex macc-4
8848 Use only the first four media accumulator registers.
8850 @item -macc-8
8851 @opindex macc-8
8853 Use all eight media accumulator registers.
8855 @item -mpack
8856 @opindex mpack
8858 Pack VLIW instructions.
8860 @item -mno-pack
8861 @opindex mno-pack
8863 Do not pack VLIW instructions.
8865 @item -mno-eflags
8866 @opindex mno-eflags
8868 Do not mark ABI switches in e_flags.
8870 @item -mcond-move
8871 @opindex mcond-move
8873 Enable the use of conditional-move instructions (default).
8875 This switch is mainly for debugging the compiler and will likely be removed
8876 in a future version.
8878 @item -mno-cond-move
8879 @opindex mno-cond-move
8881 Disable the use of conditional-move instructions.
8883 This switch is mainly for debugging the compiler and will likely be removed
8884 in a future version.
8886 @item -mscc
8887 @opindex mscc
8889 Enable the use of conditional set instructions (default).
8891 This switch is mainly for debugging the compiler and will likely be removed
8892 in a future version.
8894 @item -mno-scc
8895 @opindex mno-scc
8897 Disable the use of conditional set instructions.
8899 This switch is mainly for debugging the compiler and will likely be removed
8900 in a future version.
8902 @item -mcond-exec
8903 @opindex mcond-exec
8905 Enable the use of conditional execution (default).
8907 This switch is mainly for debugging the compiler and will likely be removed
8908 in a future version.
8910 @item -mno-cond-exec
8911 @opindex mno-cond-exec
8913 Disable the use of conditional execution.
8915 This switch is mainly for debugging the compiler and will likely be removed
8916 in a future version.
8918 @item -mvliw-branch
8919 @opindex mvliw-branch
8921 Run a pass to pack branches into VLIW instructions (default).
8923 This switch is mainly for debugging the compiler and will likely be removed
8924 in a future version.
8926 @item -mno-vliw-branch
8927 @opindex mno-vliw-branch
8929 Do not run a pass to pack branches into VLIW instructions.
8931 This switch is mainly for debugging the compiler and will likely be removed
8932 in a future version.
8934 @item -mmulti-cond-exec
8935 @opindex mmulti-cond-exec
8937 Enable optimization of @code{&&} and @code{||} in conditional execution
8938 (default).
8940 This switch is mainly for debugging the compiler and will likely be removed
8941 in a future version.
8943 @item -mno-multi-cond-exec
8944 @opindex mno-multi-cond-exec
8946 Disable optimization of @code{&&} and @code{||} in conditional execution.
8948 This switch is mainly for debugging the compiler and will likely be removed
8949 in a future version.
8951 @item -mnested-cond-exec
8952 @opindex mnested-cond-exec
8954 Enable nested conditional execution optimizations (default).
8956 This switch is mainly for debugging the compiler and will likely be removed
8957 in a future version.
8959 @item -mno-nested-cond-exec
8960 @opindex mno-nested-cond-exec
8962 Disable nested conditional execution optimizations.
8964 This switch is mainly for debugging the compiler and will likely be removed
8965 in a future version.
8967 @item -moptimize-membar
8968 @opindex moptimize-membar
8970 This switch removes redundant @code{membar} instructions from the
8971 compiler generated code.  It is enabled by default.
8973 @item -mno-optimize-membar
8974 @opindex mno-optimize-membar
8976 This switch disables the automatic removal of redundant @code{membar}
8977 instructions from the generated code.
8979 @item -mtomcat-stats
8980 @opindex mtomcat-stats
8982 Cause gas to print out tomcat statistics.
8984 @item -mcpu=@var{cpu}
8985 @opindex mcpu
8987 Select the processor type for which to generate code.  Possible values are
8988 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
8989 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
8991 @end table
8993 @node GNU/Linux Options
8994 @subsection GNU/Linux Options
8996 These @samp{-m} options are defined for GNU/Linux targets:
8998 @table @gcctabopt
8999 @item -mglibc
9000 @opindex mglibc
9001 Use the GNU C library instead of uClibc.  This is the default except
9002 on @samp{*-*-linux-*uclibc*} targets.
9004 @item -muclibc
9005 @opindex muclibc
9006 Use uClibc instead of the GNU C library.  This is the default on
9007 @samp{*-*-linux-*uclibc*} targets.
9008 @end table
9010 @node H8/300 Options
9011 @subsection H8/300 Options
9013 These @samp{-m} options are defined for the H8/300 implementations:
9015 @table @gcctabopt
9016 @item -mrelax
9017 @opindex mrelax
9018 Shorten some address references at link time, when possible; uses the
9019 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
9020 ld, Using ld}, for a fuller description.
9022 @item -mh
9023 @opindex mh
9024 Generate code for the H8/300H@.
9026 @item -ms
9027 @opindex ms
9028 Generate code for the H8S@.
9030 @item -mn
9031 @opindex mn
9032 Generate code for the H8S and H8/300H in the normal mode.  This switch
9033 must be used either with @option{-mh} or @option{-ms}.
9035 @item -ms2600
9036 @opindex ms2600
9037 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
9039 @item -mint32
9040 @opindex mint32
9041 Make @code{int} data 32 bits by default.
9043 @item -malign-300
9044 @opindex malign-300
9045 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9046 The default for the H8/300H and H8S is to align longs and floats on 4
9047 byte boundaries.
9048 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
9049 This option has no effect on the H8/300.
9050 @end table
9052 @node HPPA Options
9053 @subsection HPPA Options
9054 @cindex HPPA Options
9056 These @samp{-m} options are defined for the HPPA family of computers:
9058 @table @gcctabopt
9059 @item -march=@var{architecture-type}
9060 @opindex march
9061 Generate code for the specified architecture.  The choices for
9062 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
9063 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
9064 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
9065 architecture option for your machine.  Code compiled for lower numbered
9066 architectures will run on higher numbered architectures, but not the
9067 other way around.
9069 @item -mpa-risc-1-0
9070 @itemx -mpa-risc-1-1
9071 @itemx -mpa-risc-2-0
9072 @opindex mpa-risc-1-0
9073 @opindex mpa-risc-1-1
9074 @opindex mpa-risc-2-0
9075 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
9077 @item -mbig-switch
9078 @opindex mbig-switch
9079 Generate code suitable for big switch tables.  Use this option only if
9080 the assembler/linker complain about out of range branches within a switch
9081 table.
9083 @item -mjump-in-delay
9084 @opindex mjump-in-delay
9085 Fill delay slots of function calls with unconditional jump instructions
9086 by modifying the return pointer for the function call to be the target
9087 of the conditional jump.
9089 @item -mdisable-fpregs
9090 @opindex mdisable-fpregs
9091 Prevent floating point registers from being used in any manner.  This is
9092 necessary for compiling kernels which perform lazy context switching of
9093 floating point registers.  If you use this option and attempt to perform
9094 floating point operations, the compiler will abort.
9096 @item -mdisable-indexing
9097 @opindex mdisable-indexing
9098 Prevent the compiler from using indexing address modes.  This avoids some
9099 rather obscure problems when compiling MIG generated code under MACH@.
9101 @item -mno-space-regs
9102 @opindex mno-space-regs
9103 Generate code that assumes the target has no space registers.  This allows
9104 GCC to generate faster indirect calls and use unscaled index address modes.
9106 Such code is suitable for level 0 PA systems and kernels.
9108 @item -mfast-indirect-calls
9109 @opindex mfast-indirect-calls
9110 Generate code that assumes calls never cross space boundaries.  This
9111 allows GCC to emit code which performs faster indirect calls.
9113 This option will not work in the presence of shared libraries or nested
9114 functions.
9116 @item -mfixed-range=@var{register-range}
9117 @opindex mfixed-range
9118 Generate code treating the given register range as fixed registers.
9119 A fixed register is one that the register allocator can not use.  This is
9120 useful when compiling kernel code.  A register range is specified as
9121 two registers separated by a dash.  Multiple register ranges can be
9122 specified separated by a comma.
9124 @item -mlong-load-store
9125 @opindex mlong-load-store
9126 Generate 3-instruction load and store sequences as sometimes required by
9127 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
9128 the HP compilers.
9130 @item -mportable-runtime
9131 @opindex mportable-runtime
9132 Use the portable calling conventions proposed by HP for ELF systems.
9134 @item -mgas
9135 @opindex mgas
9136 Enable the use of assembler directives only GAS understands.
9138 @item -mschedule=@var{cpu-type}
9139 @opindex mschedule
9140 Schedule code according to the constraints for the machine type
9141 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
9142 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
9143 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
9144 proper scheduling option for your machine.  The default scheduling is
9145 @samp{8000}.
9147 @item -mlinker-opt
9148 @opindex mlinker-opt
9149 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
9150 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
9151 linkers in which they give bogus error messages when linking some programs.
9153 @item -msoft-float
9154 @opindex msoft-float
9155 Generate output containing library calls for floating point.
9156 @strong{Warning:} the requisite libraries are not available for all HPPA
9157 targets.  Normally the facilities of the machine's usual C compiler are
9158 used, but this cannot be done directly in cross-compilation.  You must make
9159 your own arrangements to provide suitable library functions for
9160 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
9161 does provide software floating point support.
9163 @option{-msoft-float} changes the calling convention in the output file;
9164 therefore, it is only useful if you compile @emph{all} of a program with
9165 this option.  In particular, you need to compile @file{libgcc.a}, the
9166 library that comes with GCC, with @option{-msoft-float} in order for
9167 this to work.
9169 @item -msio
9170 @opindex msio
9171 Generate the predefine, @code{_SIO}, for server IO@.  The default is
9172 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
9173 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
9174 options are available under HP-UX and HI-UX@.
9176 @item -mgnu-ld
9177 @opindex gnu-ld
9178 Use GNU ld specific options.  This passes @option{-shared} to ld when
9179 building a shared library.  It is the default when GCC is configured,
9180 explicitly or implicitly, with the GNU linker.  This option does not
9181 have any affect on which ld is called, it only changes what parameters
9182 are passed to that ld.  The ld that is called is determined by the
9183 @option{--with-ld} configure option, GCC's program search path, and
9184 finally by the user's @env{PATH}.  The linker used by GCC can be printed
9185 using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
9186 on the 64 bit HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
9188 @item -mhp-ld
9189 @opindex hp-ld
9190 Use HP ld specific options.  This passes @option{-b} to ld when building
9191 a shared library and passes @option{+Accept TypeMismatch} to ld on all
9192 links.  It is the default when GCC is configured, explicitly or
9193 implicitly, with the HP linker.  This option does not have any affect on
9194 which ld is called, it only changes what parameters are passed to that
9195 ld.  The ld that is called is determined by the @option{--with-ld}
9196 configure option, GCC's program search path, and finally by the user's
9197 @env{PATH}.  The linker used by GCC can be printed using @samp{which
9198 `gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
9199 HP-UX GCC, i.e. configured with @samp{hppa*64*-*-hpux*}.
9201 @item -mlong-calls
9202 @opindex mno-long-calls
9203 Generate code that uses long call sequences.  This ensures that a call
9204 is always able to reach linker generated stubs.  The default is to generate
9205 long calls only when the distance from the call site to the beginning
9206 of the function or translation unit, as the case may be, exceeds a
9207 predefined limit set by the branch type being used.  The limits for
9208 normal calls are 7,600,000 and 240,000 bytes, respectively for the
9209 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
9210 240,000 bytes.
9212 Distances are measured from the beginning of functions when using the
9213 @option{-ffunction-sections} option, or when using the @option{-mgas}
9214 and @option{-mno-portable-runtime} options together under HP-UX with
9215 the SOM linker.
9217 It is normally not desirable to use this option as it will degrade
9218 performance.  However, it may be useful in large applications,
9219 particularly when partial linking is used to build the application.
9221 The types of long calls used depends on the capabilities of the
9222 assembler and linker, and the type of code being generated.  The
9223 impact on systems that support long absolute calls, and long pic
9224 symbol-difference or pc-relative calls should be relatively small.
9225 However, an indirect call is used on 32-bit ELF systems in pic code
9226 and it is quite long.
9228 @item -munix=@var{unix-std}
9229 @opindex march
9230 Generate compiler predefines and select a startfile for the specified
9231 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
9232 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
9233 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
9234 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
9235 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
9236 and later.
9238 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
9239 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
9240 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
9241 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
9242 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
9243 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
9245 It is @emph{important} to note that this option changes the interfaces
9246 for various library routines.  It also affects the operational behavior
9247 of the C library.  Thus, @emph{extreme} care is needed in using this
9248 option.
9250 Library code that is intended to operate with more than one UNIX
9251 standard must test, set and restore the variable @var{__xpg4_extended_mask}
9252 as appropriate.  Most GNU software doesn't provide this capability.
9254 @item -nolibdld
9255 @opindex nolibdld
9256 Suppress the generation of link options to search libdld.sl when the
9257 @option{-static} option is specified on HP-UX 10 and later.
9259 @item -static
9260 @opindex static
9261 The HP-UX implementation of setlocale in libc has a dependency on
9262 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9263 when the @option{-static} option is specified, special link options
9264 are needed to resolve this dependency.
9266 On HP-UX 10 and later, the GCC driver adds the necessary options to
9267 link with libdld.sl when the @option{-static} option is specified.
9268 This causes the resulting binary to be dynamic.  On the 64-bit port,
9269 the linkers generate dynamic binaries by default in any case.  The
9270 @option{-nolibdld} option can be used to prevent the GCC driver from
9271 adding these link options.
9273 @item -threads
9274 @opindex threads
9275 Add support for multithreading with the @dfn{dce thread} library
9276 under HP-UX@.  This option sets flags for both the preprocessor and
9277 linker.
9278 @end table
9280 @node i386 and x86-64 Options
9281 @subsection Intel 386 and AMD x86-64 Options
9282 @cindex i386 Options
9283 @cindex x86-64 Options
9284 @cindex Intel 386 Options
9285 @cindex AMD x86-64 Options
9287 These @samp{-m} options are defined for the i386 and x86-64 family of
9288 computers:
9290 @table @gcctabopt
9291 @item -mtune=@var{cpu-type}
9292 @opindex mtune
9293 Tune to @var{cpu-type} everything applicable about the generated code, except
9294 for the ABI and the set of available instructions.  The choices for
9295 @var{cpu-type} are:
9296 @table @emph
9297 @item generic
9298 Produce code optimized for the most common IA32/AMD64/EM64T processors.
9299 If you know the CPU on which your code will run, then you should use
9300 the corresponding @option{-mtune} option instead of
9301 @option{-mtune=generic}.  But, if you do not know exactly what CPU users
9302 of your application will have, then you should use this option.
9304 As new processors are deployed in the marketplace, the behavior of this
9305 option will change.  Therefore, if you upgrade to a newer version of
9306 GCC, the code generated option will change to reflect the processors
9307 that were most common when that version of GCC was released.
9309 There is no @option{-march=generic} option because @option{-march}
9310 indicates the instruction set the compiler can use, and there is no
9311 generic instruction set applicable to all processors.  In contrast,
9312 @option{-mtune} indicates the processor (or, in this case, collection of
9313 processors) for which the code is optimized.
9314 @item native
9315 This selects the CPU to tune for at compilation time by determining
9316 the processor type of the compiling machine.  Using @option{-mtune=native}
9317 will produce code optimized for the local machine under the constraints
9318 of the selected instruction set.  Using @option{-march=native} will
9319 enable all instruction subsets supported by the local machine (hence
9320 the result might not run on different machines).
9321 @item i386
9322 Original Intel's i386 CPU@.
9323 @item i486
9324 Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
9325 @item i586, pentium
9326 Intel Pentium CPU with no MMX support.
9327 @item pentium-mmx
9328 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
9329 @item pentiumpro
9330 Intel PentiumPro CPU@.
9331 @item i686
9332 Same as @code{generic}, but when used as @code{march} option, PentiumPro
9333 instruction set will be used, so the code will run on all i686 family chips.
9334 @item pentium2
9335 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
9336 @item pentium3, pentium3m
9337 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
9338 support.
9339 @item pentium-m
9340 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
9341 support.  Used by Centrino notebooks.
9342 @item pentium4, pentium4m
9343 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
9344 @item prescott
9345 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
9346 set support.
9347 @item nocona
9348 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
9349 SSE2 and SSE3 instruction set support.
9350 @item core2
9351 Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
9352 instruction set support.
9353 @item k6
9354 AMD K6 CPU with MMX instruction set support.
9355 @item k6-2, k6-3
9356 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
9357 @item athlon, athlon-tbird
9358 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
9359 support.
9360 @item athlon-4, athlon-xp, athlon-mp
9361 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
9362 instruction set support.
9363 @item k8, opteron, athlon64, athlon-fx
9364 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
9365 MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
9366 @item winchip-c6
9367 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
9368 set support.
9369 @item winchip2
9370 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
9371 instruction set support.
9372 @item c3
9373 Via C3 CPU with MMX and 3dNOW! instruction set support.  (No scheduling is
9374 implemented for this chip.)
9375 @item c3-2
9376 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
9377 implemented for this chip.)
9378 @item geode
9379 Embedded AMD CPU with MMX and 3dNOW! instruction set support.
9380 @end table
9382 While picking a specific @var{cpu-type} will schedule things appropriately
9383 for that particular chip, the compiler will not generate any code that
9384 does not run on the i386 without the @option{-march=@var{cpu-type}} option
9385 being used.
9387 @item -march=@var{cpu-type}
9388 @opindex march
9389 Generate instructions for the machine type @var{cpu-type}.  The choices
9390 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
9391 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
9393 @item -mcpu=@var{cpu-type}
9394 @opindex mcpu
9395 A deprecated synonym for @option{-mtune}.
9397 @item -m386
9398 @itemx -m486
9399 @itemx -mpentium
9400 @itemx -mpentiumpro
9401 @opindex m386
9402 @opindex m486
9403 @opindex mpentium
9404 @opindex mpentiumpro
9405 These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
9406 @option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
9407 These synonyms are deprecated.
9409 @item -mfpmath=@var{unit}
9410 @opindex march
9411 Generate floating point arithmetics for selected unit @var{unit}.  The choices
9412 for @var{unit} are:
9414 @table @samp
9415 @item 387
9416 Use the standard 387 floating point coprocessor present majority of chips and
9417 emulated otherwise.  Code compiled with this option will run almost everywhere.
9418 The temporary results are computed in 80bit precision instead of precision
9419 specified by the type resulting in slightly different results compared to most
9420 of other chips.  See @option{-ffloat-store} for more detailed description.
9422 This is the default choice for i386 compiler.
9424 @item sse
9425 Use scalar floating point instructions present in the SSE instruction set.
9426 This instruction set is supported by Pentium3 and newer chips, in the AMD line
9427 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
9428 instruction set supports only single precision arithmetics, thus the double and
9429 extended precision arithmetics is still done using 387.  Later version, present
9430 only in Pentium4 and the future AMD x86-64 chips supports double precision
9431 arithmetics too.
9433 For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
9434 or @option{-msse2} switches to enable SSE extensions and make this option
9435 effective.  For the x86-64 compiler, these extensions are enabled by default.
9437 The resulting code should be considerably faster in the majority of cases and avoid
9438 the numerical instability problems of 387 code, but may break some existing
9439 code that expects temporaries to be 80bit.
9441 This is the default choice for the x86-64 compiler.
9443 @item sse,387
9444 Attempt to utilize both instruction sets at once.  This effectively double the
9445 amount of available registers and on chips with separate execution units for
9446 387 and SSE the execution resources too.  Use this option with care, as it is
9447 still experimental, because the GCC register allocator does not model separate
9448 functional units well resulting in instable performance.
9449 @end table
9451 @item -masm=@var{dialect}
9452 @opindex masm=@var{dialect}
9453 Output asm instructions using selected @var{dialect}.  Supported
9454 choices are @samp{intel} or @samp{att} (the default one).  Darwin does
9455 not support @samp{intel}.
9457 @item -mieee-fp
9458 @itemx -mno-ieee-fp
9459 @opindex mieee-fp
9460 @opindex mno-ieee-fp
9461 Control whether or not the compiler uses IEEE floating point
9462 comparisons.  These handle correctly the case where the result of a
9463 comparison is unordered.
9465 @item -msoft-float
9466 @opindex msoft-float
9467 Generate output containing library calls for floating point.
9468 @strong{Warning:} the requisite libraries are not part of GCC@.
9469 Normally the facilities of the machine's usual C compiler are used, but
9470 this can't be done directly in cross-compilation.  You must make your
9471 own arrangements to provide suitable library functions for
9472 cross-compilation.
9474 On machines where a function returns floating point results in the 80387
9475 register stack, some floating point opcodes may be emitted even if
9476 @option{-msoft-float} is used.
9478 @item -mno-fp-ret-in-387
9479 @opindex mno-fp-ret-in-387
9480 Do not use the FPU registers for return values of functions.
9482 The usual calling convention has functions return values of types
9483 @code{float} and @code{double} in an FPU register, even if there
9484 is no FPU@.  The idea is that the operating system should emulate
9485 an FPU@.
9487 The option @option{-mno-fp-ret-in-387} causes such values to be returned
9488 in ordinary CPU registers instead.
9490 @item -mno-fancy-math-387
9491 @opindex mno-fancy-math-387
9492 Some 387 emulators do not support the @code{sin}, @code{cos} and
9493 @code{sqrt} instructions for the 387.  Specify this option to avoid
9494 generating those instructions.  This option is the default on FreeBSD,
9495 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
9496 indicates that the target cpu will always have an FPU and so the
9497 instruction will not need emulation.  As of revision 2.6.1, these
9498 instructions are not generated unless you also use the
9499 @option{-funsafe-math-optimizations} switch.
9501 @item -malign-double
9502 @itemx -mno-align-double
9503 @opindex malign-double
9504 @opindex mno-align-double
9505 Control whether GCC aligns @code{double}, @code{long double}, and
9506 @code{long long} variables on a two word boundary or a one word
9507 boundary.  Aligning @code{double} variables on a two word boundary will
9508 produce code that runs somewhat faster on a @samp{Pentium} at the
9509 expense of more memory.
9511 On x86-64, @option{-malign-double} is enabled by default.
9513 @strong{Warning:} if you use the @option{-malign-double} switch,
9514 structures containing the above types will be aligned differently than
9515 the published application binary interface specifications for the 386
9516 and will not be binary compatible with structures in code compiled
9517 without that switch.
9519 @item -m96bit-long-double
9520 @itemx -m128bit-long-double
9521 @opindex m96bit-long-double
9522 @opindex m128bit-long-double
9523 These switches control the size of @code{long double} type.  The i386
9524 application binary interface specifies the size to be 96 bits,
9525 so @option{-m96bit-long-double} is the default in 32 bit mode.
9527 Modern architectures (Pentium and newer) would prefer @code{long double}
9528 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9529 conforming to the ABI, this would not be possible.  So specifying a
9530 @option{-m128bit-long-double} will align @code{long double}
9531 to a 16 byte boundary by padding the @code{long double} with an additional
9532 32 bit zero.
9534 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
9535 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
9537 Notice that neither of these options enable any extra precision over the x87
9538 standard of 80 bits for a @code{long double}.
9540 @strong{Warning:} if you override the default value for your target ABI, the
9541 structures and arrays containing @code{long double} variables will change
9542 their size as well as function calling convention for function taking
9543 @code{long double} will be modified.  Hence they will not be binary
9544 compatible with arrays or structures in code compiled without that switch.
9546 @item -mmlarge-data-threshold=@var{number}
9547 @opindex mlarge-data-threshold=@var{number}
9548 When @option{-mcmodel=medium} is specified, the data greater than
9549 @var{threshold} are placed in large data section.  This value must be the
9550 same across all object linked into the binary and defaults to 65535.
9552 @item -msvr3-shlib
9553 @itemx -mno-svr3-shlib
9554 @opindex msvr3-shlib
9555 @opindex mno-svr3-shlib
9556 Control whether GCC places uninitialized local variables into the
9557 @code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
9558 into @code{bss}.  These options are meaningful only on System V Release 3.
9560 @item -mrtd
9561 @opindex mrtd
9562 Use a different function-calling convention, in which functions that
9563 take a fixed number of arguments return with the @code{ret} @var{num}
9564 instruction, which pops their arguments while returning.  This saves one
9565 instruction in the caller since there is no need to pop the arguments
9566 there.
9568 You can specify that an individual function is called with this calling
9569 sequence with the function attribute @samp{stdcall}.  You can also
9570 override the @option{-mrtd} option by using the function attribute
9571 @samp{cdecl}.  @xref{Function Attributes}.
9573 @strong{Warning:} this calling convention is incompatible with the one
9574 normally used on Unix, so you cannot use it if you need to call
9575 libraries compiled with the Unix compiler.
9577 Also, you must provide function prototypes for all functions that
9578 take variable numbers of arguments (including @code{printf});
9579 otherwise incorrect code will be generated for calls to those
9580 functions.
9582 In addition, seriously incorrect code will result if you call a
9583 function with too many arguments.  (Normally, extra arguments are
9584 harmlessly ignored.)
9586 @item -mregparm=@var{num}
9587 @opindex mregparm
9588 Control how many registers are used to pass integer arguments.  By
9589 default, no registers are used to pass arguments, and at most 3
9590 registers can be used.  You can control this behavior for a specific
9591 function by using the function attribute @samp{regparm}.
9592 @xref{Function Attributes}.
9594 @strong{Warning:} if you use this switch, and
9595 @var{num} is nonzero, then you must build all modules with the same
9596 value, including any libraries.  This includes the system libraries and
9597 startup modules.
9599 @item -mx87regparm
9600 @opindex mx87regparm
9601 Use 80387 register passing conventions for floating point arguments.
9602 You can control this behavior for a specific function by using the
9603 function attribute @samp{x87regparm}.
9604 @xref{Function Attributes}.
9606 @strong{Warning:} if you use this switch then you must build all
9607 modules with the same value, including any libraries.  This includes
9608 the system libraries and startup modules.
9610 @item -msseregparm
9611 @opindex msseregparm
9612 Use SSE register passing conventions for float and double arguments
9613 and return values.  You can control this behavior for a specific
9614 function by using the function attribute @samp{sseregparm}.
9615 @xref{Function Attributes}.
9617 @strong{Warning:} if you use this switch then you must build all
9618 modules with the same value, including any libraries.  This includes
9619 the system libraries and startup modules.
9621 @item -mstackrealign
9622 @opindex mstackrealign
9623 Realign the stack at entry.  On the Intel x86, the
9624 @option{-mstackrealign} option will generate an alternate prologue and
9625 epilogue that realigns the runtime stack.  This supports mixing legacy
9626 codes that keep a 4-byte aligned stack with modern codes that keep a
9627 16-byte stack for SSE compatibility.  The alternate prologue and
9628 epilogue are slower and bigger than the regular ones, and the
9629 alternate prologue requires an extra scratch register; this lowers the
9630 number of registers available if used in conjunction with the
9631 @code{regparm} attribute.  The @option{-mstackrealign} option is
9632 incompatible with the nested function prologue; this is considered a
9633 hard error.  See also the attribute @code{force_align_arg_pointer},
9634 applicable to individual functions.
9636 @item -mpreferred-stack-boundary=@var{num}
9637 @opindex mpreferred-stack-boundary
9638 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
9639 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
9640 the default is 4 (16 bytes or 128 bits).
9642 On Pentium and PentiumPro, @code{double} and @code{long double} values
9643 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
9644 suffer significant run time performance penalties.  On Pentium III, the
9645 Streaming SIMD Extension (SSE) data type @code{__m128} may not work
9646 properly if it is not 16 byte aligned.
9648 To ensure proper alignment of this values on the stack, the stack boundary
9649 must be as aligned as that required by any value stored on the stack.
9650 Further, every function must be generated such that it keeps the stack
9651 aligned.  Thus calling a function compiled with a higher preferred
9652 stack boundary from a function compiled with a lower preferred stack
9653 boundary will most likely misalign the stack.  It is recommended that
9654 libraries that use callbacks always use the default setting.
9656 This extra alignment does consume extra stack space, and generally
9657 increases code size.  Code that is sensitive to stack space usage, such
9658 as embedded systems and operating system kernels, may want to reduce the
9659 preferred alignment to @option{-mpreferred-stack-boundary=2}.
9661 @item -mmmx
9662 @itemx -mno-mmx
9663 @item -msse
9664 @itemx -mno-sse
9665 @item -msse2
9666 @itemx -mno-sse2
9667 @item -msse3
9668 @itemx -mno-sse3
9669 @item -mssse3
9670 @itemx -mno-ssse3
9671 @item -m3dnow
9672 @itemx -mno-3dnow
9673 @opindex mmmx
9674 @opindex mno-mmx
9675 @opindex msse
9676 @opindex mno-sse
9677 @opindex m3dnow
9678 @opindex mno-3dnow
9679 These switches enable or disable the use of instructions in the MMX,
9680 SSE, SSE2, SSE3, SSSE3 or 3DNow! extended instruction sets.
9681 These extensions are also available as built-in functions: see
9682 @ref{X86 Built-in Functions}, for details of the functions enabled and
9683 disabled by these switches.
9685 To have SSE/SSE2 instructions generated automatically from floating-point
9686 code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
9688 These options will enable GCC to use these extended instructions in
9689 generated code, even without @option{-mfpmath=sse}.  Applications which
9690 perform runtime CPU detection must compile separate files for each
9691 supported architecture, using the appropriate flags.  In particular,
9692 the file containing the CPU detection code should be compiled without
9693 these options.
9695 @item -mpush-args
9696 @itemx -mno-push-args
9697 @opindex mpush-args
9698 @opindex mno-push-args
9699 Use PUSH operations to store outgoing parameters.  This method is shorter
9700 and usually equally fast as method using SUB/MOV operations and is enabled
9701 by default.  In some cases disabling it may improve performance because of
9702 improved scheduling and reduced dependencies.
9704 @item -maccumulate-outgoing-args
9705 @opindex maccumulate-outgoing-args
9706 If enabled, the maximum amount of space required for outgoing arguments will be
9707 computed in the function prologue.  This is faster on most modern CPUs
9708 because of reduced dependencies, improved scheduling and reduced stack usage
9709 when preferred stack boundary is not equal to 2.  The drawback is a notable
9710 increase in code size.  This switch implies @option{-mno-push-args}.
9712 @item -mthreads
9713 @opindex mthreads
9714 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
9715 on thread-safe exception handling must compile and link all code with the
9716 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
9717 @option{-D_MT}; when linking, it links in a special thread helper library
9718 @option{-lmingwthrd} which cleans up per thread exception handling data.
9720 @item -mno-align-stringops
9721 @opindex mno-align-stringops
9722 Do not align destination of inlined string operations.  This switch reduces
9723 code size and improves performance in case the destination is already aligned,
9724 but GCC doesn't know about it.
9726 @item -minline-all-stringops
9727 @opindex minline-all-stringops
9728 By default GCC inlines string operations only when destination is known to be
9729 aligned at least to 4 byte boundary.  This enables more inlining, increase code
9730 size, but may improve performance of code that depends on fast memcpy, strlen
9731 and memset for short lengths.
9733 @item -minline-stringops-dynamically
9734 @opindex minline-stringops-dynamically
9735 For string operation of unknown size, inline runtime checks so for small
9736 blocks inline code is used, while for large blocks library call is used.
9738 @item -mstringop-strategy=@var{alg}
9739 @opindex mstringop-strategy=@var{alg}
9740 Overwrite internal decision heuristic about particular algorithm to inline
9741 string operation with.  The allowed values are @code{rep_byte},
9742 @code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix
9743 of specified size, @code{loop}, @code{unrolled_loop} for expanding inline loop,
9744 @code{libcall} for always expanding library call.
9746 @item -momit-leaf-frame-pointer
9747 @opindex momit-leaf-frame-pointer
9748 Don't keep the frame pointer in a register for leaf functions.  This
9749 avoids the instructions to save, set up and restore frame pointers and
9750 makes an extra register available in leaf functions.  The option
9751 @option{-fomit-frame-pointer} removes the frame pointer for all functions
9752 which might make debugging harder.
9754 @item -mtls-direct-seg-refs
9755 @itemx -mno-tls-direct-seg-refs
9756 @opindex mtls-direct-seg-refs
9757 Controls whether TLS variables may be accessed with offsets from the
9758 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
9759 or whether the thread base pointer must be added.  Whether or not this
9760 is legal depends on the operating system, and whether it maps the
9761 segment to cover the entire TLS area.
9763 For systems that use GNU libc, the default is on.
9764 @end table
9766 These @samp{-m} switches are supported in addition to the above
9767 on AMD x86-64 processors in 64-bit environments.
9769 @table @gcctabopt
9770 @item -m32
9771 @itemx -m64
9772 @opindex m32
9773 @opindex m64
9774 Generate code for a 32-bit or 64-bit environment.
9775 The 32-bit environment sets int, long and pointer to 32 bits and
9776 generates code that runs on any i386 system.
9777 The 64-bit environment sets int to 32 bits and long and pointer
9778 to 64 bits and generates code for AMD's x86-64 architecture.
9780 @item -mno-red-zone
9781 @opindex no-red-zone
9782 Do not use a so called red zone for x86-64 code.  The red zone is mandated
9783 by the x86-64 ABI, it is a 128-byte area beyond the location of the
9784 stack pointer that will not be modified by signal or interrupt handlers
9785 and therefore can be used for temporary data without adjusting the stack
9786 pointer.  The flag @option{-mno-red-zone} disables this red zone.
9788 @item -mcmodel=small
9789 @opindex mcmodel=small
9790 Generate code for the small code model: the program and its symbols must
9791 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
9792 Programs can be statically or dynamically linked.  This is the default
9793 code model.
9795 @item -mcmodel=kernel
9796 @opindex mcmodel=kernel
9797 Generate code for the kernel code model.  The kernel runs in the
9798 negative 2 GB of the address space.
9799 This model has to be used for Linux kernel code.
9801 @item -mcmodel=medium
9802 @opindex mcmodel=medium
9803 Generate code for the medium model: The program is linked in the lower 2
9804 GB of the address space but symbols can be located anywhere in the
9805 address space.  Programs can be statically or dynamically linked, but
9806 building of shared libraries are not supported with the medium model.
9808 @item -mcmodel=large
9809 @opindex mcmodel=large
9810 Generate code for the large model: This model makes no assumptions
9811 about addresses and sizes of sections.  Currently GCC does not implement
9812 this model.
9813 @end table
9815 @node IA-64 Options
9816 @subsection IA-64 Options
9817 @cindex IA-64 Options
9819 These are the @samp{-m} options defined for the Intel IA-64 architecture.
9821 @table @gcctabopt
9822 @item -mbig-endian
9823 @opindex mbig-endian
9824 Generate code for a big endian target.  This is the default for HP-UX@.
9826 @item -mlittle-endian
9827 @opindex mlittle-endian
9828 Generate code for a little endian target.  This is the default for AIX5
9829 and GNU/Linux.
9831 @item -mgnu-as
9832 @itemx -mno-gnu-as
9833 @opindex mgnu-as
9834 @opindex mno-gnu-as
9835 Generate (or don't) code for the GNU assembler.  This is the default.
9836 @c Also, this is the default if the configure option @option{--with-gnu-as}
9837 @c is used.
9839 @item -mgnu-ld
9840 @itemx -mno-gnu-ld
9841 @opindex mgnu-ld
9842 @opindex mno-gnu-ld
9843 Generate (or don't) code for the GNU linker.  This is the default.
9844 @c Also, this is the default if the configure option @option{--with-gnu-ld}
9845 @c is used.
9847 @item -mno-pic
9848 @opindex mno-pic
9849 Generate code that does not use a global pointer register.  The result
9850 is not position independent code, and violates the IA-64 ABI@.
9852 @item -mvolatile-asm-stop
9853 @itemx -mno-volatile-asm-stop
9854 @opindex mvolatile-asm-stop
9855 @opindex mno-volatile-asm-stop
9856 Generate (or don't) a stop bit immediately before and after volatile asm
9857 statements.
9859 @item -mregister-names
9860 @itemx -mno-register-names
9861 @opindex mregister-names
9862 @opindex mno-register-names
9863 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
9864 the stacked registers.  This may make assembler output more readable.
9866 @item -mno-sdata
9867 @itemx -msdata
9868 @opindex mno-sdata
9869 @opindex msdata
9870 Disable (or enable) optimizations that use the small data section.  This may
9871 be useful for working around optimizer bugs.
9873 @item -mconstant-gp
9874 @opindex mconstant-gp
9875 Generate code that uses a single constant global pointer value.  This is
9876 useful when compiling kernel code.
9878 @item -mauto-pic
9879 @opindex mauto-pic
9880 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
9881 This is useful when compiling firmware code.
9883 @item -minline-float-divide-min-latency
9884 @opindex minline-float-divide-min-latency
9885 Generate code for inline divides of floating point values
9886 using the minimum latency algorithm.
9888 @item -minline-float-divide-max-throughput
9889 @opindex minline-float-divide-max-throughput
9890 Generate code for inline divides of floating point values
9891 using the maximum throughput algorithm.
9893 @item -minline-int-divide-min-latency
9894 @opindex minline-int-divide-min-latency
9895 Generate code for inline divides of integer values
9896 using the minimum latency algorithm.
9898 @item -minline-int-divide-max-throughput
9899 @opindex minline-int-divide-max-throughput
9900 Generate code for inline divides of integer values
9901 using the maximum throughput algorithm.
9903 @item -minline-sqrt-min-latency
9904 @opindex minline-sqrt-min-latency
9905 Generate code for inline square roots
9906 using the minimum latency algorithm.
9908 @item -minline-sqrt-max-throughput
9909 @opindex minline-sqrt-max-throughput
9910 Generate code for inline square roots
9911 using the maximum throughput algorithm.
9913 @item -mno-dwarf2-asm
9914 @itemx -mdwarf2-asm
9915 @opindex mno-dwarf2-asm
9916 @opindex mdwarf2-asm
9917 Don't (or do) generate assembler code for the DWARF2 line number debugging
9918 info.  This may be useful when not using the GNU assembler.
9920 @item -mearly-stop-bits
9921 @itemx -mno-early-stop-bits
9922 @opindex mearly-stop-bits
9923 @opindex mno-early-stop-bits
9924 Allow stop bits to be placed earlier than immediately preceding the
9925 instruction that triggered the stop bit.  This can improve instruction
9926 scheduling, but does not always do so.
9928 @item -mfixed-range=@var{register-range}
9929 @opindex mfixed-range
9930 Generate code treating the given register range as fixed registers.
9931 A fixed register is one that the register allocator can not use.  This is
9932 useful when compiling kernel code.  A register range is specified as
9933 two registers separated by a dash.  Multiple register ranges can be
9934 specified separated by a comma.
9936 @item -mtls-size=@var{tls-size}
9937 @opindex mtls-size
9938 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
9941 @item -mtune=@var{cpu-type}
9942 @opindex mtune
9943 Tune the instruction scheduling for a particular CPU, Valid values are
9944 itanium, itanium1, merced, itanium2, and mckinley.
9946 @item -mt
9947 @itemx -pthread
9948 @opindex mt
9949 @opindex pthread
9950 Add support for multithreading using the POSIX threads library.  This
9951 option sets flags for both the preprocessor and linker.  It does
9952 not affect the thread safety of object code produced by the compiler or
9953 that of libraries supplied with it.  These are HP-UX specific flags.
9955 @item -milp32
9956 @itemx -mlp64
9957 @opindex milp32
9958 @opindex mlp64
9959 Generate code for a 32-bit or 64-bit environment.
9960 The 32-bit environment sets int, long and pointer to 32 bits.
9961 The 64-bit environment sets int to 32 bits and long and pointer
9962 to 64 bits.  These are HP-UX specific flags.
9964 @item -mno-sched-br-data-spec
9965 @itemx -msched-br-data-spec
9966 @opindex -mno-sched-br-data-spec
9967 @opindex -msched-br-data-spec
9968 (Dis/En)able data speculative scheduling before reload.
9969 This will result in generation of the ld.a instructions and
9970 the corresponding check instructions (ld.c / chk.a).
9971 The default is 'disable'.
9973 @item -msched-ar-data-spec
9974 @itemx -mno-sched-ar-data-spec
9975 @opindex -msched-ar-data-spec
9976 @opindex -mno-sched-ar-data-spec
9977 (En/Dis)able data speculative scheduling after reload.
9978 This will result in generation of the ld.a instructions and
9979 the corresponding check instructions (ld.c / chk.a).
9980 The default is 'enable'.
9982 @item -mno-sched-control-spec
9983 @itemx -msched-control-spec
9984 @opindex -mno-sched-control-spec
9985 @opindex -msched-control-spec
9986 (Dis/En)able control speculative scheduling.  This feature is
9987 available only during region scheduling (i.e. before reload).
9988 This will result in generation of the ld.s instructions and
9989 the corresponding check instructions chk.s .
9990 The default is 'disable'.
9992 @item -msched-br-in-data-spec
9993 @itemx -mno-sched-br-in-data-spec
9994 @opindex -msched-br-in-data-spec
9995 @opindex -mno-sched-br-in-data-spec
9996 (En/Dis)able speculative scheduling of the instructions that
9997 are dependent on the data speculative loads before reload.
9998 This is effective only with @option{-msched-br-data-spec} enabled.
9999 The default is 'enable'.
10001 @item -msched-ar-in-data-spec
10002 @itemx -mno-sched-ar-in-data-spec
10003 @opindex -msched-ar-in-data-spec
10004 @opindex -mno-sched-ar-in-data-spec
10005 (En/Dis)able speculative scheduling of the instructions that
10006 are dependent on the data speculative loads after reload.
10007 This is effective only with @option{-msched-ar-data-spec} enabled.
10008 The default is 'enable'.
10010 @item -msched-in-control-spec
10011 @itemx -mno-sched-in-control-spec
10012 @opindex -msched-in-control-spec
10013 @opindex -mno-sched-in-control-spec
10014 (En/Dis)able speculative scheduling of the instructions that
10015 are dependent on the control speculative loads.
10016 This is effective only with @option{-msched-control-spec} enabled.
10017 The default is 'enable'.
10019 @item -msched-ldc
10020 @itemx -mno-sched-ldc
10021 @opindex -msched-ldc
10022 @opindex -mno-sched-ldc
10023 (En/Dis)able use of simple data speculation checks ld.c .
10024 If disabled, only chk.a instructions will be emitted to check
10025 data speculative loads.
10026 The default is 'enable'.
10028 @item -mno-sched-control-ldc
10029 @itemx -msched-control-ldc
10030 @opindex -mno-sched-control-ldc
10031 @opindex -msched-control-ldc 
10032 (Dis/En)able use of ld.c instructions to check control speculative loads.
10033 If enabled, in case of control speculative load with no speculatively
10034 scheduled dependent instructions this load will be emitted as ld.sa and
10035 ld.c will be used to check it.
10036 The default is 'disable'.
10038 @item -mno-sched-spec-verbose
10039 @itemx -msched-spec-verbose
10040 @opindex -mno-sched-spec-verbose
10041 @opindex -msched-spec-verbose
10042 (Dis/En)able printing of the information about speculative motions.
10044 @item -mno-sched-prefer-non-data-spec-insns
10045 @itemx -msched-prefer-non-data-spec-insns
10046 @opindex -mno-sched-prefer-non-data-spec-insns
10047 @opindex -msched-prefer-non-data-spec-insns
10048 If enabled, data speculative instructions will be chosen for schedule
10049 only if there are no other choices at the moment.  This will make
10050 the use of the data speculation much more conservative.
10051 The default is 'disable'.
10053 @item -mno-sched-prefer-non-control-spec-insns
10054 @itemx -msched-prefer-non-control-spec-insns
10055 @opindex -mno-sched-prefer-non-control-spec-insns
10056 @opindex -msched-prefer-non-control-spec-insns
10057 If enabled, control speculative instructions will be chosen for schedule
10058 only if there are no other choices at the moment.  This will make
10059 the use of the control speculation much more conservative.
10060 The default is 'disable'.
10062 @item -mno-sched-count-spec-in-critical-path
10063 @itemx -msched-count-spec-in-critical-path
10064 @opindex -mno-sched-count-spec-in-critical-path
10065 @opindex -msched-count-spec-in-critical-path
10066 If enabled, speculative dependencies will be considered during
10067 computation of the instructions priorities.  This will make the use of the
10068 speculation a bit more conservative.
10069 The default is 'disable'.
10071 @end table
10073 @node M32C Options
10074 @subsection M32C Options
10075 @cindex M32C options
10077 @table @gcctabopt
10078 @item -mcpu=@var{name}
10079 @opindex mcpu=
10080 Select the CPU for which code is generated.  @var{name} may be one of
10081 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
10082 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
10083 the M32C/80 series.
10085 @item -msim
10086 @opindex msim
10087 Specifies that the program will be run on the simulator.  This causes
10088 an alternate runtime library to be linked in which supports, for
10089 example, file I/O.  You must not use this option when generating
10090 programs that will run on real hardware; you must provide your own
10091 runtime library for whatever I/O functions are needed.
10093 @item -memregs=@var{number}
10094 @opindex memregs=
10095 Specifies the number of memory-based pseudo-registers GCC will use
10096 during code generation.  These pseudo-registers will be used like real
10097 registers, so there is a tradeoff between GCC's ability to fit the
10098 code into available registers, and the performance penalty of using
10099 memory instead of registers.  Note that all modules in a program must
10100 be compiled with the same value for this option.  Because of that, you
10101 must not use this option with the default runtime libraries gcc
10102 builds.
10104 @end table
10106 @node M32R/D Options
10107 @subsection M32R/D Options
10108 @cindex M32R/D options
10110 These @option{-m} options are defined for Renesas M32R/D architectures:
10112 @table @gcctabopt
10113 @item -m32r2
10114 @opindex m32r2
10115 Generate code for the M32R/2@.
10117 @item -m32rx
10118 @opindex m32rx
10119 Generate code for the M32R/X@.
10121 @item -m32r
10122 @opindex m32r
10123 Generate code for the M32R@.  This is the default.
10125 @item -mmodel=small
10126 @opindex mmodel=small
10127 Assume all objects live in the lower 16MB of memory (so that their addresses
10128 can be loaded with the @code{ld24} instruction), and assume all subroutines
10129 are reachable with the @code{bl} instruction.
10130 This is the default.
10132 The addressability of a particular object can be set with the
10133 @code{model} attribute.
10135 @item -mmodel=medium
10136 @opindex mmodel=medium
10137 Assume objects may be anywhere in the 32-bit address space (the compiler
10138 will generate @code{seth/add3} instructions to load their addresses), and
10139 assume all subroutines are reachable with the @code{bl} instruction.
10141 @item -mmodel=large
10142 @opindex mmodel=large
10143 Assume objects may be anywhere in the 32-bit address space (the compiler
10144 will generate @code{seth/add3} instructions to load their addresses), and
10145 assume subroutines may not be reachable with the @code{bl} instruction
10146 (the compiler will generate the much slower @code{seth/add3/jl}
10147 instruction sequence).
10149 @item -msdata=none
10150 @opindex msdata=none
10151 Disable use of the small data area.  Variables will be put into
10152 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
10153 @code{section} attribute has been specified).
10154 This is the default.
10156 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
10157 Objects may be explicitly put in the small data area with the
10158 @code{section} attribute using one of these sections.
10160 @item -msdata=sdata
10161 @opindex msdata=sdata
10162 Put small global and static data in the small data area, but do not
10163 generate special code to reference them.
10165 @item -msdata=use
10166 @opindex msdata=use
10167 Put small global and static data in the small data area, and generate
10168 special instructions to reference them.
10170 @item -G @var{num}
10171 @opindex G
10172 @cindex smaller data references
10173 Put global and static objects less than or equal to @var{num} bytes
10174 into the small data or bss sections instead of the normal data or bss
10175 sections.  The default value of @var{num} is 8.
10176 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
10177 for this option to have any effect.
10179 All modules should be compiled with the same @option{-G @var{num}} value.
10180 Compiling with different values of @var{num} may or may not work; if it
10181 doesn't the linker will give an error message---incorrect code will not be
10182 generated.
10184 @item -mdebug
10185 @opindex mdebug
10186 Makes the M32R specific code in the compiler display some statistics
10187 that might help in debugging programs.
10189 @item -malign-loops
10190 @opindex malign-loops
10191 Align all loops to a 32-byte boundary.
10193 @item -mno-align-loops
10194 @opindex mno-align-loops
10195 Do not enforce a 32-byte alignment for loops.  This is the default.
10197 @item -missue-rate=@var{number}
10198 @opindex missue-rate=@var{number}
10199 Issue @var{number} instructions per cycle.  @var{number} can only be 1
10200 or 2.
10202 @item -mbranch-cost=@var{number}
10203 @opindex mbranch-cost=@var{number}
10204 @var{number} can only be 1 or 2.  If it is 1 then branches will be
10205 preferred over conditional code, if it is 2, then the opposite will
10206 apply.
10208 @item -mflush-trap=@var{number}
10209 @opindex mflush-trap=@var{number}
10210 Specifies the trap number to use to flush the cache.  The default is
10211 12.  Valid numbers are between 0 and 15 inclusive.
10213 @item -mno-flush-trap
10214 @opindex mno-flush-trap
10215 Specifies that the cache cannot be flushed by using a trap.
10217 @item -mflush-func=@var{name}
10218 @opindex mflush-func=@var{name}
10219 Specifies the name of the operating system function to call to flush
10220 the cache.  The default is @emph{_flush_cache}, but a function call
10221 will only be used if a trap is not available.
10223 @item -mno-flush-func
10224 @opindex mno-flush-func
10225 Indicates that there is no OS function for flushing the cache.
10227 @end table
10229 @node M680x0 Options
10230 @subsection M680x0 Options
10231 @cindex M680x0 options
10233 These are the @samp{-m} options defined for the 68000 series.  The default
10234 values for these options depends on which style of 68000 was selected when
10235 the compiler was configured; the defaults for the most common choices are
10236 given below.
10238 @table @gcctabopt
10239 @item -m68000
10240 @itemx -mc68000
10241 @opindex m68000
10242 @opindex mc68000
10243 Generate output for a 68000.  This is the default
10244 when the compiler is configured for 68000-based systems.
10246 Use this option for microcontrollers with a 68000 or EC000 core,
10247 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
10249 @item -m68020
10250 @itemx -mc68020
10251 @opindex m68020
10252 @opindex mc68020
10253 Generate output for a 68020.  This is the default
10254 when the compiler is configured for 68020-based systems.
10256 @item -m68881
10257 @opindex m68881
10258 Generate output containing 68881 instructions for floating point.
10259 This is the default for most 68020 systems unless @option{--nfp} was
10260 specified when the compiler was configured.
10262 @item -m68030
10263 @opindex m68030
10264 Generate output for a 68030.  This is the default when the compiler is
10265 configured for 68030-based systems.
10267 @item -m68040
10268 @opindex m68040
10269 Generate output for a 68040.  This is the default when the compiler is
10270 configured for 68040-based systems.
10272 This option inhibits the use of 68881/68882 instructions that have to be
10273 emulated by software on the 68040.  Use this option if your 68040 does not
10274 have code to emulate those instructions.
10276 @item -m68060
10277 @opindex m68060
10278 Generate output for a 68060.  This is the default when the compiler is
10279 configured for 68060-based systems.
10281 This option inhibits the use of 68020 and 68881/68882 instructions that
10282 have to be emulated by software on the 68060.  Use this option if your 68060
10283 does not have code to emulate those instructions.
10285 @item -mcpu32
10286 @opindex mcpu32
10287 Generate output for a CPU32.  This is the default
10288 when the compiler is configured for CPU32-based systems.
10290 Use this option for microcontrollers with a
10291 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
10292 68336, 68340, 68341, 68349 and 68360.
10294 @item -m5200
10295 @opindex m5200
10296 Generate output for a 520X ``coldfire'' family cpu.  This is the default
10297 when the compiler is configured for 520X-based systems.
10299 Use this option for microcontroller with a 5200 core, including
10300 the MCF5202, MCF5203, MCF5204 and MCF5202.
10302 @item -mcfv4e
10303 @opindex mcfv4e
10304 Generate output for a ColdFire V4e family cpu (e.g.@: 547x/548x).
10305 This includes use of hardware floating point instructions.
10307 @item -m68020-40
10308 @opindex m68020-40
10309 Generate output for a 68040, without using any of the new instructions.
10310 This results in code which can run relatively efficiently on either a
10311 68020/68881 or a 68030 or a 68040.  The generated code does use the
10312 68881 instructions that are emulated on the 68040.
10314 @item -m68020-60
10315 @opindex m68020-60
10316 Generate output for a 68060, without using any of the new instructions.
10317 This results in code which can run relatively efficiently on either a
10318 68020/68881 or a 68030 or a 68040.  The generated code does use the
10319 68881 instructions that are emulated on the 68060.
10321 @item -msoft-float
10322 @opindex msoft-float
10323 Generate output containing library calls for floating point.
10324 @strong{Warning:} the requisite libraries are not available for all m68k
10325 targets.  Normally the facilities of the machine's usual C compiler are
10326 used, but this can't be done directly in cross-compilation.  You must
10327 make your own arrangements to provide suitable library functions for
10328 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
10329 @samp{m68k-*-coff} do provide software floating point support.
10331 @item -mshort
10332 @opindex mshort
10333 Consider type @code{int} to be 16 bits wide, like @code{short int}.
10334 Additionally, parameters passed on the stack are also aligned to a
10335 16-bit boundary even on targets whose API mandates promotion to 32-bit.
10337 @item -mnobitfield
10338 @opindex mnobitfield
10339 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
10340 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
10342 @item -mbitfield
10343 @opindex mbitfield
10344 Do use the bit-field instructions.  The @option{-m68020} option implies
10345 @option{-mbitfield}.  This is the default if you use a configuration
10346 designed for a 68020.
10348 @item -mrtd
10349 @opindex mrtd
10350 Use a different function-calling convention, in which functions
10351 that take a fixed number of arguments return with the @code{rtd}
10352 instruction, which pops their arguments while returning.  This
10353 saves one instruction in the caller since there is no need to pop
10354 the arguments there.
10356 This calling convention is incompatible with the one normally
10357 used on Unix, so you cannot use it if you need to call libraries
10358 compiled with the Unix compiler.
10360 Also, you must provide function prototypes for all functions that
10361 take variable numbers of arguments (including @code{printf});
10362 otherwise incorrect code will be generated for calls to those
10363 functions.
10365 In addition, seriously incorrect code will result if you call a
10366 function with too many arguments.  (Normally, extra arguments are
10367 harmlessly ignored.)
10369 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
10370 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10372 @item -malign-int
10373 @itemx -mno-align-int
10374 @opindex malign-int
10375 @opindex mno-align-int
10376 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
10377 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
10378 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
10379 Aligning variables on 32-bit boundaries produces code that runs somewhat
10380 faster on processors with 32-bit busses at the expense of more memory.
10382 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
10383 align structures containing the above types  differently than
10384 most published application binary interface specifications for the m68k.
10386 @item -mpcrel
10387 @opindex mpcrel
10388 Use the pc-relative addressing mode of the 68000 directly, instead of
10389 using a global offset table.  At present, this option implies @option{-fpic},
10390 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
10391 not presently supported with @option{-mpcrel}, though this could be supported for
10392 68020 and higher processors.
10394 @item -mno-strict-align
10395 @itemx -mstrict-align
10396 @opindex mno-strict-align
10397 @opindex mstrict-align
10398 Do not (do) assume that unaligned memory references will be handled by
10399 the system.
10401 @item -msep-data
10402 Generate code that allows the data segment to be located in a different
10403 area of memory from the text segment.  This allows for execute in place in
10404 an environment without virtual memory management.  This option implies
10405 @option{-fPIC}.
10407 @item -mno-sep-data
10408 Generate code that assumes that the data segment follows the text segment.
10409 This is the default.
10411 @item -mid-shared-library
10412 Generate code that supports shared libraries via the library ID method.
10413 This allows for execute in place and shared libraries in an environment
10414 without virtual memory management.  This option implies @option{-fPIC}.
10416 @item -mno-id-shared-library
10417 Generate code that doesn't assume ID based shared libraries are being used.
10418 This is the default.
10420 @item -mshared-library-id=n
10421 Specified the identification number of the ID based shared library being
10422 compiled.  Specifying a value of 0 will generate more compact code, specifying
10423 other values will force the allocation of that number to the current
10424 library but is no more space or time efficient than omitting this option.
10426 @end table
10428 @node M68hc1x Options
10429 @subsection M68hc1x Options
10430 @cindex M68hc1x options
10432 These are the @samp{-m} options defined for the 68hc11 and 68hc12
10433 microcontrollers.  The default values for these options depends on
10434 which style of microcontroller was selected when the compiler was configured;
10435 the defaults for the most common choices are given below.
10437 @table @gcctabopt
10438 @item -m6811
10439 @itemx -m68hc11
10440 @opindex m6811
10441 @opindex m68hc11
10442 Generate output for a 68HC11.  This is the default
10443 when the compiler is configured for 68HC11-based systems.
10445 @item -m6812
10446 @itemx -m68hc12
10447 @opindex m6812
10448 @opindex m68hc12
10449 Generate output for a 68HC12.  This is the default
10450 when the compiler is configured for 68HC12-based systems.
10452 @item -m68S12
10453 @itemx -m68hcs12
10454 @opindex m68S12
10455 @opindex m68hcs12
10456 Generate output for a 68HCS12.
10458 @item -mauto-incdec
10459 @opindex mauto-incdec
10460 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
10461 addressing modes.
10463 @item -minmax
10464 @itemx -nominmax
10465 @opindex minmax
10466 @opindex mnominmax
10467 Enable the use of 68HC12 min and max instructions.
10469 @item -mlong-calls
10470 @itemx -mno-long-calls
10471 @opindex mlong-calls
10472 @opindex mno-long-calls
10473 Treat all calls as being far away (near).  If calls are assumed to be
10474 far away, the compiler will use the @code{call} instruction to
10475 call a function and the @code{rtc} instruction for returning.
10477 @item -mshort
10478 @opindex mshort
10479 Consider type @code{int} to be 16 bits wide, like @code{short int}.
10481 @item -msoft-reg-count=@var{count}
10482 @opindex msoft-reg-count
10483 Specify the number of pseudo-soft registers which are used for the
10484 code generation.  The maximum number is 32.  Using more pseudo-soft
10485 register may or may not result in better code depending on the program.
10486 The default is 4 for 68HC11 and 2 for 68HC12.
10488 @end table
10490 @node MCore Options
10491 @subsection MCore Options
10492 @cindex MCore options
10494 These are the @samp{-m} options defined for the Motorola M*Core
10495 processors.
10497 @table @gcctabopt
10499 @item -mhardlit
10500 @itemx -mno-hardlit
10501 @opindex mhardlit
10502 @opindex mno-hardlit
10503 Inline constants into the code stream if it can be done in two
10504 instructions or less.
10506 @item -mdiv
10507 @itemx -mno-div
10508 @opindex mdiv
10509 @opindex mno-div
10510 Use the divide instruction.  (Enabled by default).
10512 @item -mrelax-immediate
10513 @itemx -mno-relax-immediate
10514 @opindex mrelax-immediate
10515 @opindex mno-relax-immediate
10516 Allow arbitrary sized immediates in bit operations.
10518 @item -mwide-bitfields
10519 @itemx -mno-wide-bitfields
10520 @opindex mwide-bitfields
10521 @opindex mno-wide-bitfields
10522 Always treat bit-fields as int-sized.
10524 @item -m4byte-functions
10525 @itemx -mno-4byte-functions
10526 @opindex m4byte-functions
10527 @opindex mno-4byte-functions
10528 Force all functions to be aligned to a four byte boundary.
10530 @item -mcallgraph-data
10531 @itemx -mno-callgraph-data
10532 @opindex mcallgraph-data
10533 @opindex mno-callgraph-data
10534 Emit callgraph information.
10536 @item -mslow-bytes
10537 @itemx -mno-slow-bytes
10538 @opindex mslow-bytes
10539 @opindex mno-slow-bytes
10540 Prefer word access when reading byte quantities.
10542 @item -mlittle-endian
10543 @itemx -mbig-endian
10544 @opindex mlittle-endian
10545 @opindex mbig-endian
10546 Generate code for a little endian target.
10548 @item -m210
10549 @itemx -m340
10550 @opindex m210
10551 @opindex m340
10552 Generate code for the 210 processor.
10553 @end table
10555 @node MIPS Options
10556 @subsection MIPS Options
10557 @cindex MIPS options
10559 @table @gcctabopt
10561 @item -EB
10562 @opindex EB
10563 Generate big-endian code.
10565 @item -EL
10566 @opindex EL
10567 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
10568 configurations.
10570 @item -march=@var{arch}
10571 @opindex march
10572 Generate code that will run on @var{arch}, which can be the name of a
10573 generic MIPS ISA, or the name of a particular processor.
10574 The ISA names are:
10575 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
10576 @samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
10577 The processor names are:
10578 @samp{4kc}, @samp{4km}, @samp{4kp},
10579 @samp{4kec}, @samp{4kem}, @samp{4kep},
10580 @samp{5kc}, @samp{5kf},
10581 @samp{20kc},
10582 @samp{24kc}, @samp{24kf}, @samp{24kx},
10583 @samp{24kec}, @samp{24kef}, @samp{24kex},
10584 @samp{34kc}, @samp{34kf}, @samp{34kx},
10585 @samp{m4k},
10586 @samp{orion},
10587 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
10588 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
10589 @samp{rm7000}, @samp{rm9000},
10590 @samp{sb1},
10591 @samp{sr71000},
10592 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
10593 @samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
10594 The special value @samp{from-abi} selects the
10595 most compatible architecture for the selected ABI (that is,
10596 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
10598 In processor names, a final @samp{000} can be abbreviated as @samp{k}
10599 (for example, @samp{-march=r2k}).  Prefixes are optional, and
10600 @samp{vr} may be written @samp{r}.
10602 GCC defines two macros based on the value of this option.  The first
10603 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
10604 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
10605 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
10606 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
10607 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
10609 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
10610 above.  In other words, it will have the full prefix and will not
10611 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
10612 the macro names the resolved architecture (either @samp{"mips1"} or
10613 @samp{"mips3"}).  It names the default architecture when no
10614 @option{-march} option is given.
10616 @item -mtune=@var{arch}
10617 @opindex mtune
10618 Optimize for @var{arch}.  Among other things, this option controls
10619 the way instructions are scheduled, and the perceived cost of arithmetic
10620 operations.  The list of @var{arch} values is the same as for
10621 @option{-march}.
10623 When this option is not used, GCC will optimize for the processor
10624 specified by @option{-march}.  By using @option{-march} and
10625 @option{-mtune} together, it is possible to generate code that will
10626 run on a family of processors, but optimize the code for one
10627 particular member of that family.
10629 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
10630 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
10631 @samp{-march} ones described above.
10633 @item -mips1
10634 @opindex mips1
10635 Equivalent to @samp{-march=mips1}.
10637 @item -mips2
10638 @opindex mips2
10639 Equivalent to @samp{-march=mips2}.
10641 @item -mips3
10642 @opindex mips3
10643 Equivalent to @samp{-march=mips3}.
10645 @item -mips4
10646 @opindex mips4
10647 Equivalent to @samp{-march=mips4}.
10649 @item -mips32
10650 @opindex mips32
10651 Equivalent to @samp{-march=mips32}.
10653 @item -mips32r2
10654 @opindex mips32r2
10655 Equivalent to @samp{-march=mips32r2}.
10657 @item -mips64
10658 @opindex mips64
10659 Equivalent to @samp{-march=mips64}.
10661 @item -mips16
10662 @itemx -mno-mips16
10663 @opindex mips16
10664 @opindex mno-mips16
10665 Generate (do not generate) MIPS16 code.  If GCC is targetting a
10666 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
10668 @item -mabi=32
10669 @itemx -mabi=o64
10670 @itemx -mabi=n32
10671 @itemx -mabi=64
10672 @itemx -mabi=eabi
10673 @opindex mabi=32
10674 @opindex mabi=o64
10675 @opindex mabi=n32
10676 @opindex mabi=64
10677 @opindex mabi=eabi
10678 Generate code for the given ABI@.
10680 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
10681 generates 64-bit code when you select a 64-bit architecture, but you
10682 can use @option{-mgp32} to get 32-bit code instead.
10684 For information about the O64 ABI, see
10685 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
10687 GCC supports a variant of the o32 ABI in which floating-point registers
10688 are 64 rather than 32 bits wide.  You can select this combination with
10689 @option{-mabi=32} @option{-mfp64}.  This ABI relies on the @samp{mthc1}
10690 and @samp{mfhc1} instructions and is therefore only supported for
10691 MIPS32R2 processors.
10693 The register assignments for arguments and return values remain the
10694 same, but each scalar value is passed in a single 64-bit register
10695 rather than a pair of 32-bit registers.  For example, scalar
10696 floating-point values are returned in @samp{$f0} only, not a
10697 @samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
10698 remains the same, but all 64 bits are saved.
10700 @item -mabicalls
10701 @itemx -mno-abicalls
10702 @opindex mabicalls
10703 @opindex mno-abicalls
10704 Generate (do not generate) code that is suitable for SVR4-style
10705 dynamic objects.  @option{-mabicalls} is the default for SVR4-based
10706 systems.
10708 @item -mshared
10709 @itemx -mno-shared
10710 Generate (do not generate) code that is fully position-independent,
10711 and that can therefore be linked into shared libraries.  This option
10712 only affects @option{-mabicalls}.
10714 All @option{-mabicalls} code has traditionally been position-independent,
10715 regardless of options like @option{-fPIC} and @option{-fpic}.  However,
10716 as an extension, the GNU toolchain allows executables to use absolute
10717 accesses for locally-binding symbols.  It can also use shorter GP
10718 initialization sequences and generate direct calls to locally-defined
10719 functions.  This mode is selected by @option{-mno-shared}.
10721 @option{-mno-shared} depends on binutils 2.16 or higher and generates
10722 objects that can only be linked by the GNU linker.  However, the option
10723 does not affect the ABI of the final executable; it only affects the ABI
10724 of relocatable objects.  Using @option{-mno-shared} will generally make
10725 executables both smaller and quicker.
10727 @option{-mshared} is the default.
10729 @item -mxgot
10730 @itemx -mno-xgot
10731 @opindex mxgot
10732 @opindex mno-xgot
10733 Lift (do not lift) the usual restrictions on the size of the global
10734 offset table.
10736 GCC normally uses a single instruction to load values from the GOT@.
10737 While this is relatively efficient, it will only work if the GOT
10738 is smaller than about 64k.  Anything larger will cause the linker
10739 to report an error such as:
10741 @cindex relocation truncated to fit (MIPS)
10742 @smallexample
10743 relocation truncated to fit: R_MIPS_GOT16 foobar
10744 @end smallexample
10746 If this happens, you should recompile your code with @option{-mxgot}.
10747 It should then work with very large GOTs, although it will also be
10748 less efficient, since it will take three instructions to fetch the
10749 value of a global symbol.
10751 Note that some linkers can create multiple GOTs.  If you have such a
10752 linker, you should only need to use @option{-mxgot} when a single object
10753 file accesses more than 64k's worth of GOT entries.  Very few do.
10755 These options have no effect unless GCC is generating position
10756 independent code.
10758 @item -mgp32
10759 @opindex mgp32
10760 Assume that general-purpose registers are 32 bits wide.
10762 @item -mgp64
10763 @opindex mgp64
10764 Assume that general-purpose registers are 64 bits wide.
10766 @item -mfp32
10767 @opindex mfp32
10768 Assume that floating-point registers are 32 bits wide.
10770 @item -mfp64
10771 @opindex mfp64
10772 Assume that floating-point registers are 64 bits wide.
10774 @item -mhard-float
10775 @opindex mhard-float
10776 Use floating-point coprocessor instructions.
10778 @item -msoft-float
10779 @opindex msoft-float
10780 Do not use floating-point coprocessor instructions.  Implement
10781 floating-point calculations using library calls instead.
10783 @item -msingle-float
10784 @opindex msingle-float
10785 Assume that the floating-point coprocessor only supports single-precision
10786 operations.
10788 @itemx -mdouble-float
10789 @opindex mdouble-float
10790 Assume that the floating-point coprocessor supports double-precision
10791 operations.  This is the default.
10793 @itemx -mdsp
10794 @itemx -mno-dsp
10795 @opindex mdsp
10796 @opindex mno-dsp
10797 Use (do not use) the MIPS DSP ASE.  @xref{MIPS DSP Built-in Functions}.
10799 @itemx -mpaired-single
10800 @itemx -mno-paired-single
10801 @opindex mpaired-single
10802 @opindex mno-paired-single
10803 Use (do not use) paired-single floating-point instructions.
10804 @xref{MIPS Paired-Single Support}.  This option can only be used
10805 when generating 64-bit code and requires hardware floating-point
10806 support to be enabled.
10808 @itemx -mips3d
10809 @itemx -mno-mips3d
10810 @opindex mips3d
10811 @opindex mno-mips3d
10812 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
10813 The option @option{-mips3d} implies @option{-mpaired-single}.
10815 @item -mlong64
10816 @opindex mlong64
10817 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
10818 an explanation of the default and the way that the pointer size is
10819 determined.
10821 @item -mlong32
10822 @opindex mlong32
10823 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
10825 The default size of @code{int}s, @code{long}s and pointers depends on
10826 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
10827 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
10828 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
10829 or the same size as integer registers, whichever is smaller.
10831 @item -msym32
10832 @itemx -mno-sym32
10833 @opindex msym32
10834 @opindex mno-sym32
10835 Assume (do not assume) that all symbols have 32-bit values, regardless
10836 of the selected ABI@.  This option is useful in combination with
10837 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
10838 to generate shorter and faster references to symbolic addresses.
10840 @item -G @var{num}
10841 @opindex G
10842 @cindex smaller data references (MIPS)
10843 @cindex gp-relative references (MIPS)
10844 Put global and static items less than or equal to @var{num} bytes into
10845 the small data or bss section instead of the normal data or bss section.
10846 This allows the data to be accessed using a single instruction.
10848 All modules should be compiled with the same @option{-G @var{num}}
10849 value.
10851 @item -membedded-data
10852 @itemx -mno-embedded-data
10853 @opindex membedded-data
10854 @opindex mno-embedded-data
10855 Allocate variables to the read-only data section first if possible, then
10856 next in the small data section if possible, otherwise in data.  This gives
10857 slightly slower code than the default, but reduces the amount of RAM required
10858 when executing, and thus may be preferred for some embedded systems.
10860 @item -muninit-const-in-rodata
10861 @itemx -mno-uninit-const-in-rodata
10862 @opindex muninit-const-in-rodata
10863 @opindex mno-uninit-const-in-rodata
10864 Put uninitialized @code{const} variables in the read-only data section.
10865 This option is only meaningful in conjunction with @option{-membedded-data}.
10867 @item -msplit-addresses
10868 @itemx -mno-split-addresses
10869 @opindex msplit-addresses
10870 @opindex mno-split-addresses
10871 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
10872 relocation operators.  This option has been superseded by
10873 @option{-mexplicit-relocs} but is retained for backwards compatibility.
10875 @item -mexplicit-relocs
10876 @itemx -mno-explicit-relocs
10877 @opindex mexplicit-relocs
10878 @opindex mno-explicit-relocs
10879 Use (do not use) assembler relocation operators when dealing with symbolic
10880 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
10881 is to use assembler macros instead.
10883 @option{-mexplicit-relocs} is the default if GCC was configured
10884 to use an assembler that supports relocation operators.
10886 @item -mcheck-zero-division
10887 @itemx -mno-check-zero-division
10888 @opindex mcheck-zero-division
10889 @opindex mno-check-zero-division
10890 Trap (do not trap) on integer division by zero.  The default is
10891 @option{-mcheck-zero-division}.
10893 @item -mdivide-traps
10894 @itemx -mdivide-breaks
10895 @opindex mdivide-traps
10896 @opindex mdivide-breaks
10897 MIPS systems check for division by zero by generating either a
10898 conditional trap or a break instruction.  Using traps results in
10899 smaller code, but is only supported on MIPS II and later.  Also, some
10900 versions of the Linux kernel have a bug that prevents trap from
10901 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
10902 allow conditional traps on architectures that support them and
10903 @option{-mdivide-breaks} to force the use of breaks.
10905 The default is usually @option{-mdivide-traps}, but this can be
10906 overridden at configure time using @option{--with-divide=breaks}.
10907 Divide-by-zero checks can be completely disabled using
10908 @option{-mno-check-zero-division}.
10910 @item -mmemcpy
10911 @itemx -mno-memcpy
10912 @opindex mmemcpy
10913 @opindex mno-memcpy
10914 Force (do not force) the use of @code{memcpy()} for non-trivial block
10915 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
10916 most constant-sized copies.
10918 @item -mlong-calls
10919 @itemx -mno-long-calls
10920 @opindex mlong-calls
10921 @opindex mno-long-calls
10922 Disable (do not disable) use of the @code{jal} instruction.  Calling
10923 functions using @code{jal} is more efficient but requires the caller
10924 and callee to be in the same 256 megabyte segment.
10926 This option has no effect on abicalls code.  The default is
10927 @option{-mno-long-calls}.
10929 @item -mmad
10930 @itemx -mno-mad
10931 @opindex mmad
10932 @opindex mno-mad
10933 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
10934 instructions, as provided by the R4650 ISA@.
10936 @item -mfused-madd
10937 @itemx -mno-fused-madd
10938 @opindex mfused-madd
10939 @opindex mno-fused-madd
10940 Enable (disable) use of the floating point multiply-accumulate
10941 instructions, when they are available.  The default is
10942 @option{-mfused-madd}.
10944 When multiply-accumulate instructions are used, the intermediate
10945 product is calculated to infinite precision and is not subject to
10946 the FCSR Flush to Zero bit.  This may be undesirable in some
10947 circumstances.
10949 @item -nocpp
10950 @opindex nocpp
10951 Tell the MIPS assembler to not run its preprocessor over user
10952 assembler files (with a @samp{.s} suffix) when assembling them.
10954 @item -mfix-r4000
10955 @itemx -mno-fix-r4000
10956 @opindex mfix-r4000
10957 @opindex mno-fix-r4000
10958 Work around certain R4000 CPU errata:
10959 @itemize @minus
10960 @item
10961 A double-word or a variable shift may give an incorrect result if executed
10962 immediately after starting an integer division.
10963 @item
10964 A double-word or a variable shift may give an incorrect result if executed
10965 while an integer multiplication is in progress.
10966 @item
10967 An integer division may give an incorrect result if started in a delay slot
10968 of a taken branch or a jump.
10969 @end itemize
10971 @item -mfix-r4400
10972 @itemx -mno-fix-r4400
10973 @opindex mfix-r4400
10974 @opindex mno-fix-r4400
10975 Work around certain R4400 CPU errata:
10976 @itemize @minus
10977 @item
10978 A double-word or a variable shift may give an incorrect result if executed
10979 immediately after starting an integer division.
10980 @end itemize
10982 @item -mfix-vr4120
10983 @itemx -mno-fix-vr4120
10984 @opindex mfix-vr4120
10985 Work around certain VR4120 errata:
10986 @itemize @minus
10987 @item
10988 @code{dmultu} does not always produce the correct result.
10989 @item
10990 @code{div} and @code{ddiv} do not always produce the correct result if one
10991 of the operands is negative.
10992 @end itemize
10993 The workarounds for the division errata rely on special functions in
10994 @file{libgcc.a}.  At present, these functions are only provided by
10995 the @code{mips64vr*-elf} configurations.
10997 Other VR4120 errata require a nop to be inserted between certain pairs of
10998 instructions.  These errata are handled by the assembler, not by GCC itself.
11000 @item -mfix-vr4130
11001 @opindex mfix-vr4130
11002 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
11003 workarounds are implemented by the assembler rather than by GCC,
11004 although GCC will avoid using @code{mflo} and @code{mfhi} if the
11005 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
11006 instructions are available instead.
11008 @item -mfix-sb1
11009 @itemx -mno-fix-sb1
11010 @opindex mfix-sb1
11011 Work around certain SB-1 CPU core errata.
11012 (This flag currently works around the SB-1 revision 2
11013 ``F1'' and ``F2'' floating point errata.)
11015 @item -mflush-func=@var{func}
11016 @itemx -mno-flush-func
11017 @opindex mflush-func
11018 Specifies the function to call to flush the I and D caches, or to not
11019 call any such function.  If called, the function must take the same
11020 arguments as the common @code{_flush_func()}, that is, the address of the
11021 memory range for which the cache is being flushed, the size of the
11022 memory range, and the number 3 (to flush both caches).  The default
11023 depends on the target GCC was configured for, but commonly is either
11024 @samp{_flush_func} or @samp{__cpu_flush}.
11026 @item -mbranch-likely
11027 @itemx -mno-branch-likely
11028 @opindex mbranch-likely
11029 @opindex mno-branch-likely
11030 Enable or disable use of Branch Likely instructions, regardless of the
11031 default for the selected architecture.  By default, Branch Likely
11032 instructions may be generated if they are supported by the selected
11033 architecture.  An exception is for the MIPS32 and MIPS64 architectures
11034 and processors which implement those architectures; for those, Branch
11035 Likely instructions will not be generated by default because the MIPS32
11036 and MIPS64 architectures specifically deprecate their use.
11038 @item -mfp-exceptions
11039 @itemx -mno-fp-exceptions
11040 @opindex mfp-exceptions
11041 Specifies whether FP exceptions are enabled.  This affects how we schedule
11042 FP instructions for some processors.  The default is that FP exceptions are
11043 enabled.
11045 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
11046 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
11047 FP pipe.
11049 @item -mvr4130-align
11050 @itemx -mno-vr4130-align
11051 @opindex mvr4130-align
11052 The VR4130 pipeline is two-way superscalar, but can only issue two
11053 instructions together if the first one is 8-byte aligned.  When this
11054 option is enabled, GCC will align pairs of instructions that it
11055 thinks should execute in parallel.
11057 This option only has an effect when optimizing for the VR4130.
11058 It normally makes code faster, but at the expense of making it bigger.
11059 It is enabled by default at optimization level @option{-O3}.
11060 @end table
11062 @node MMIX Options
11063 @subsection MMIX Options
11064 @cindex MMIX Options
11066 These options are defined for the MMIX:
11068 @table @gcctabopt
11069 @item -mlibfuncs
11070 @itemx -mno-libfuncs
11071 @opindex mlibfuncs
11072 @opindex mno-libfuncs
11073 Specify that intrinsic library functions are being compiled, passing all
11074 values in registers, no matter the size.
11076 @item -mepsilon
11077 @itemx -mno-epsilon
11078 @opindex mepsilon
11079 @opindex mno-epsilon
11080 Generate floating-point comparison instructions that compare with respect
11081 to the @code{rE} epsilon register.
11083 @item -mabi=mmixware
11084 @itemx -mabi=gnu
11085 @opindex mabi-mmixware
11086 @opindex mabi=gnu
11087 Generate code that passes function parameters and return values that (in
11088 the called function) are seen as registers @code{$0} and up, as opposed to
11089 the GNU ABI which uses global registers @code{$231} and up.
11091 @item -mzero-extend
11092 @itemx -mno-zero-extend
11093 @opindex mzero-extend
11094 @opindex mno-zero-extend
11095 When reading data from memory in sizes shorter than 64 bits, use (do not
11096 use) zero-extending load instructions by default, rather than
11097 sign-extending ones.
11099 @item -mknuthdiv
11100 @itemx -mno-knuthdiv
11101 @opindex mknuthdiv
11102 @opindex mno-knuthdiv
11103 Make the result of a division yielding a remainder have the same sign as
11104 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
11105 remainder follows the sign of the dividend.  Both methods are
11106 arithmetically valid, the latter being almost exclusively used.
11108 @item -mtoplevel-symbols
11109 @itemx -mno-toplevel-symbols
11110 @opindex mtoplevel-symbols
11111 @opindex mno-toplevel-symbols
11112 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
11113 code can be used with the @code{PREFIX} assembly directive.
11115 @item -melf
11116 @opindex melf
11117 Generate an executable in the ELF format, rather than the default
11118 @samp{mmo} format used by the @command{mmix} simulator.
11120 @item -mbranch-predict
11121 @itemx -mno-branch-predict
11122 @opindex mbranch-predict
11123 @opindex mno-branch-predict
11124 Use (do not use) the probable-branch instructions, when static branch
11125 prediction indicates a probable branch.
11127 @item -mbase-addresses
11128 @itemx -mno-base-addresses
11129 @opindex mbase-addresses
11130 @opindex mno-base-addresses
11131 Generate (do not generate) code that uses @emph{base addresses}.  Using a
11132 base address automatically generates a request (handled by the assembler
11133 and the linker) for a constant to be set up in a global register.  The
11134 register is used for one or more base address requests within the range 0
11135 to 255 from the value held in the register.  The generally leads to short
11136 and fast code, but the number of different data items that can be
11137 addressed is limited.  This means that a program that uses lots of static
11138 data may require @option{-mno-base-addresses}.
11140 @item -msingle-exit
11141 @itemx -mno-single-exit
11142 @opindex msingle-exit
11143 @opindex mno-single-exit
11144 Force (do not force) generated code to have a single exit point in each
11145 function.
11146 @end table
11148 @node MN10300 Options
11149 @subsection MN10300 Options
11150 @cindex MN10300 options
11152 These @option{-m} options are defined for Matsushita MN10300 architectures:
11154 @table @gcctabopt
11155 @item -mmult-bug
11156 @opindex mmult-bug
11157 Generate code to avoid bugs in the multiply instructions for the MN10300
11158 processors.  This is the default.
11160 @item -mno-mult-bug
11161 @opindex mno-mult-bug
11162 Do not generate code to avoid bugs in the multiply instructions for the
11163 MN10300 processors.
11165 @item -mam33
11166 @opindex mam33
11167 Generate code which uses features specific to the AM33 processor.
11169 @item -mno-am33
11170 @opindex mno-am33
11171 Do not generate code which uses features specific to the AM33 processor.  This
11172 is the default.
11174 @item -mreturn-pointer-on-d0
11175 @opindex mreturn-pointer-on-d0
11176 When generating a function which returns a pointer, return the pointer
11177 in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
11178 only in a0, and attempts to call such functions without a prototype
11179 would result in errors.  Note that this option is on by default; use
11180 @option{-mno-return-pointer-on-d0} to disable it.
11182 @item -mno-crt0
11183 @opindex mno-crt0
11184 Do not link in the C run-time initialization object file.
11186 @item -mrelax
11187 @opindex mrelax
11188 Indicate to the linker that it should perform a relaxation optimization pass
11189 to shorten branches, calls and absolute memory addresses.  This option only
11190 has an effect when used on the command line for the final link step.
11192 This option makes symbolic debugging impossible.
11193 @end table
11195 @node MT Options
11196 @subsection MT Options
11197 @cindex MT options
11199 These @option{-m} options are defined for Morpho MT architectures:
11201 @table @gcctabopt
11203 @item -march=@var{cpu-type}
11204 @opindex march
11205 Generate code that will run on @var{cpu-type}, which is the name of a system
11206 representing a certain processor type.  Possible values for
11207 @var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002},
11208 @samp{ms1-16-003} and @samp{ms2}.
11210 When this option is not used, the default is @option{-march=ms1-16-002}.
11212 @item -mbacc
11213 @opindex mbacc
11214 Use byte loads and stores when generating code.
11216 @item -mno-bacc
11217 @opindex mno-bacc
11218 Do not use byte loads and stores when generating code.
11220 @item -msim
11221 @opindex msim
11222 Use simulator runtime
11224 @item -mno-crt0
11225 @opindex mno-crt0
11226 Do not link in the C run-time initialization object file
11227 @file{crti.o}.  Other run-time initialization and termination files
11228 such as @file{startup.o} and @file{exit.o} are still included on the
11229 linker command line.
11231 @end table
11233 @node PDP-11 Options
11234 @subsection PDP-11 Options
11235 @cindex PDP-11 Options
11237 These options are defined for the PDP-11:
11239 @table @gcctabopt
11240 @item -mfpu
11241 @opindex mfpu
11242 Use hardware FPP floating point.  This is the default.  (FIS floating
11243 point on the PDP-11/40 is not supported.)
11245 @item -msoft-float
11246 @opindex msoft-float
11247 Do not use hardware floating point.
11249 @item -mac0
11250 @opindex mac0
11251 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
11253 @item -mno-ac0
11254 @opindex mno-ac0
11255 Return floating-point results in memory.  This is the default.
11257 @item -m40
11258 @opindex m40
11259 Generate code for a PDP-11/40.
11261 @item -m45
11262 @opindex m45
11263 Generate code for a PDP-11/45.  This is the default.
11265 @item -m10
11266 @opindex m10
11267 Generate code for a PDP-11/10.
11269 @item -mbcopy-builtin
11270 @opindex bcopy-builtin
11271 Use inline @code{movmemhi} patterns for copying memory.  This is the
11272 default.
11274 @item -mbcopy
11275 @opindex mbcopy
11276 Do not use inline @code{movmemhi} patterns for copying memory.
11278 @item -mint16
11279 @itemx -mno-int32
11280 @opindex mint16
11281 @opindex mno-int32
11282 Use 16-bit @code{int}.  This is the default.
11284 @item -mint32
11285 @itemx -mno-int16
11286 @opindex mint32
11287 @opindex mno-int16
11288 Use 32-bit @code{int}.
11290 @item -mfloat64
11291 @itemx -mno-float32
11292 @opindex mfloat64
11293 @opindex mno-float32
11294 Use 64-bit @code{float}.  This is the default.
11296 @item -mfloat32
11297 @itemx -mno-float64
11298 @opindex mfloat32
11299 @opindex mno-float64
11300 Use 32-bit @code{float}.
11302 @item -mabshi
11303 @opindex mabshi
11304 Use @code{abshi2} pattern.  This is the default.
11306 @item -mno-abshi
11307 @opindex mno-abshi
11308 Do not use @code{abshi2} pattern.
11310 @item -mbranch-expensive
11311 @opindex mbranch-expensive
11312 Pretend that branches are expensive.  This is for experimenting with
11313 code generation only.
11315 @item -mbranch-cheap
11316 @opindex mbranch-cheap
11317 Do not pretend that branches are expensive.  This is the default.
11319 @item -msplit
11320 @opindex msplit
11321 Generate code for a system with split I&D@.
11323 @item -mno-split
11324 @opindex mno-split
11325 Generate code for a system without split I&D@.  This is the default.
11327 @item -munix-asm
11328 @opindex munix-asm
11329 Use Unix assembler syntax.  This is the default when configured for
11330 @samp{pdp11-*-bsd}.
11332 @item -mdec-asm
11333 @opindex mdec-asm
11334 Use DEC assembler syntax.  This is the default when configured for any
11335 PDP-11 target other than @samp{pdp11-*-bsd}.
11336 @end table
11338 @node PowerPC Options
11339 @subsection PowerPC Options
11340 @cindex PowerPC options
11342 These are listed under @xref{RS/6000 and PowerPC Options}.
11344 @node RS/6000 and PowerPC Options
11345 @subsection IBM RS/6000 and PowerPC Options
11346 @cindex RS/6000 and PowerPC Options
11347 @cindex IBM RS/6000 and PowerPC Options
11349 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
11350 @table @gcctabopt
11351 @item -mpower
11352 @itemx -mno-power
11353 @itemx -mpower2
11354 @itemx -mno-power2
11355 @itemx -mpowerpc
11356 @itemx -mno-powerpc
11357 @itemx -mpowerpc-gpopt
11358 @itemx -mno-powerpc-gpopt
11359 @itemx -mpowerpc-gfxopt
11360 @itemx -mno-powerpc-gfxopt
11361 @itemx -mpowerpc64
11362 @itemx -mno-powerpc64
11363 @itemx -mmfcrf
11364 @itemx -mno-mfcrf
11365 @itemx -mpopcntb
11366 @itemx -mno-popcntb
11367 @itemx -mfprnd
11368 @itemx -mno-fprnd
11369 @itemx -mmfpgpr
11370 @itemx -mno-mfpgpr
11371 @opindex mpower
11372 @opindex mno-power
11373 @opindex mpower2
11374 @opindex mno-power2
11375 @opindex mpowerpc
11376 @opindex mno-powerpc
11377 @opindex mpowerpc-gpopt
11378 @opindex mno-powerpc-gpopt
11379 @opindex mpowerpc-gfxopt
11380 @opindex mno-powerpc-gfxopt
11381 @opindex mpowerpc64
11382 @opindex mno-powerpc64
11383 @opindex mmfcrf
11384 @opindex mno-mfcrf
11385 @opindex mpopcntb
11386 @opindex mno-popcntb
11387 @opindex mfprnd
11388 @opindex mno-fprnd
11389 @opindex mmfpgpr
11390 @opindex mno-mfpgpr
11391 GCC supports two related instruction set architectures for the
11392 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
11393 instructions supported by the @samp{rios} chip set used in the original
11394 RS/6000 systems and the @dfn{PowerPC} instruction set is the
11395 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
11396 the IBM 4xx, 6xx, and follow-on microprocessors.
11398 Neither architecture is a subset of the other.  However there is a
11399 large common subset of instructions supported by both.  An MQ
11400 register is included in processors supporting the POWER architecture.
11402 You use these options to specify which instructions are available on the
11403 processor you are using.  The default value of these options is
11404 determined when configuring GCC@.  Specifying the
11405 @option{-mcpu=@var{cpu_type}} overrides the specification of these
11406 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
11407 rather than the options listed above.
11409 The @option{-mpower} option allows GCC to generate instructions that
11410 are found only in the POWER architecture and to use the MQ register.
11411 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
11412 to generate instructions that are present in the POWER2 architecture but
11413 not the original POWER architecture.
11415 The @option{-mpowerpc} option allows GCC to generate instructions that
11416 are found only in the 32-bit subset of the PowerPC architecture.
11417 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
11418 GCC to use the optional PowerPC architecture instructions in the
11419 General Purpose group, including floating-point square root.  Specifying
11420 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
11421 use the optional PowerPC architecture instructions in the Graphics
11422 group, including floating-point select.
11424 The @option{-mmfcrf} option allows GCC to generate the move from
11425 condition register field instruction implemented on the POWER4
11426 processor and other processors that support the PowerPC V2.01
11427 architecture.
11428 The @option{-mpopcntb} option allows GCC to generate the popcount and
11429 double precision FP reciprocal estimate instruction implemented on the
11430 POWER5 processor and other processors that support the PowerPC V2.02
11431 architecture.
11432 The @option{-mfprnd} option allows GCC to generate the FP round to
11433 integer instructions implemented on the POWER5+ processor and other
11434 processors that support the PowerPC V2.03 architecture.
11435 The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
11436 general purpose register instructions implemented on the POWER6X
11437 processor and other processors that support the extended PowerPC V2.05
11438 architecture.
11440 The @option{-mpowerpc64} option allows GCC to generate the additional
11441 64-bit instructions that are found in the full PowerPC64 architecture
11442 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
11443 @option{-mno-powerpc64}.
11445 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
11446 will use only the instructions in the common subset of both
11447 architectures plus some special AIX common-mode calls, and will not use
11448 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
11449 permits GCC to use any instruction from either architecture and to
11450 allow use of the MQ register; specify this for the Motorola MPC601.
11452 @item -mnew-mnemonics
11453 @itemx -mold-mnemonics
11454 @opindex mnew-mnemonics
11455 @opindex mold-mnemonics
11456 Select which mnemonics to use in the generated assembler code.  With
11457 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
11458 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
11459 assembler mnemonics defined for the POWER architecture.  Instructions
11460 defined in only one architecture have only one mnemonic; GCC uses that
11461 mnemonic irrespective of which of these options is specified.
11463 GCC defaults to the mnemonics appropriate for the architecture in
11464 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
11465 value of these option.  Unless you are building a cross-compiler, you
11466 should normally not specify either @option{-mnew-mnemonics} or
11467 @option{-mold-mnemonics}, but should instead accept the default.
11469 @item -mcpu=@var{cpu_type}
11470 @opindex mcpu
11471 Set architecture type, register usage, choice of mnemonics, and
11472 instruction scheduling parameters for machine type @var{cpu_type}.
11473 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
11474 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
11475 @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
11476 @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
11477 @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
11478 @samp{860}, @samp{970}, @samp{8540}, @samp{ec603e}, @samp{G3},
11479 @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
11480 @samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6},
11481 @samp{power6x}, @samp{common}, @samp{powerpc}, @samp{powerpc64},
11482 @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
11484 @option{-mcpu=common} selects a completely generic processor.  Code
11485 generated under this option will run on any POWER or PowerPC processor.
11486 GCC will use only the instructions in the common subset of both
11487 architectures, and will not use the MQ register.  GCC assumes a generic
11488 processor model for scheduling purposes.
11490 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
11491 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
11492 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
11493 types, with an appropriate, generic processor model assumed for
11494 scheduling purposes.
11496 The other options specify a specific processor.  Code generated under
11497 those options will run best on that processor, and may not run at all on
11498 others.
11500 The @option{-mcpu} options automatically enable or disable the
11501 following options: @option{-maltivec}, @option{-mfprnd},
11502 @option{-mhard-float}, @option{-mmfcrf}, @option{-mmultiple},
11503 @option{-mnew-mnemonics}, @option{-mpopcntb}, @option{-mpower},
11504 @option{-mpower2}, @option{-mpowerpc64}, @option{-mpowerpc-gpopt},
11505 @option{-mpowerpc-gfxopt}, @option{-mstring}, @option{-mmulhw},
11506 @option{-mdlmzb}, @option{-mmfpgpr}.
11507 The particular options set for any particular CPU will vary between
11508 compiler versions, depending on what setting seems to produce optimal
11509 code for that CPU; it doesn't necessarily reflect the actual hardware's
11510 capabilities.  If you wish to set an individual option to a particular
11511 value, you may specify it after the @option{-mcpu} option, like
11512 @samp{-mcpu=970 -mno-altivec}.
11514 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
11515 not enabled or disabled by the @option{-mcpu} option at present because
11516 AIX does not have full support for these options.  You may still
11517 enable or disable them individually if you're sure it'll work in your
11518 environment.
11520 @item -mtune=@var{cpu_type}
11521 @opindex mtune
11522 Set the instruction scheduling parameters for machine type
11523 @var{cpu_type}, but do not set the architecture type, register usage, or
11524 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
11525 values for @var{cpu_type} are used for @option{-mtune} as for
11526 @option{-mcpu}.  If both are specified, the code generated will use the
11527 architecture, registers, and mnemonics set by @option{-mcpu}, but the
11528 scheduling parameters set by @option{-mtune}.
11530 @item -mswdiv
11531 @itemx -mno-swdiv
11532 @opindex mswdiv
11533 @opindex mno-swdiv
11534 Generate code to compute division as reciprocal estimate and iterative
11535 refinement, creating opportunities for increased throughput.  This
11536 feature requires: optional PowerPC Graphics instruction set for single
11537 precision and FRE instruction for double precision, assuming divides
11538 cannot generate user-visible traps, and the domain values not include
11539 Infinities, denormals or zero denominator.
11541 @item -maltivec
11542 @itemx -mno-altivec
11543 @opindex maltivec
11544 @opindex mno-altivec
11545 Generate code that uses (does not use) AltiVec instructions, and also
11546 enable the use of built-in functions that allow more direct access to
11547 the AltiVec instruction set.  You may also need to set
11548 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
11549 enhancements.
11551 @item -mvrsave
11552 @item -mno-vrsave
11553 @opindex mvrsave
11554 @opindex mno-vrsave
11555 Generate VRSAVE instructions when generating AltiVec code.
11557 @item -msecure-plt
11558 @opindex msecure-plt
11559 Generate code that allows ld and ld.so to build executables and shared
11560 libraries with non-exec .plt and .got sections.  This is a PowerPC
11561 32-bit SYSV ABI option.
11563 @item -mbss-plt
11564 @opindex mbss-plt
11565 Generate code that uses a BSS .plt section that ld.so fills in, and
11566 requires .plt and .got sections that are both writable and executable.
11567 This is a PowerPC 32-bit SYSV ABI option.
11569 @item -misel
11570 @itemx -mno-isel
11571 @opindex misel
11572 @opindex mno-isel
11573 This switch enables or disables the generation of ISEL instructions.
11575 @item -misel=@var{yes/no}
11576 This switch has been deprecated.  Use @option{-misel} and
11577 @option{-mno-isel} instead.
11579 @item -mspe
11580 @itemx -mno-spe
11581 @opindex mspe
11582 @opindex mno-spe
11583 This switch enables or disables the generation of SPE simd
11584 instructions.
11586 @item -mspe=@var{yes/no}
11587 This option has been deprecated.  Use @option{-mspe} and
11588 @option{-mno-spe} instead.
11590 @item -mfloat-gprs=@var{yes/single/double/no}
11591 @itemx -mfloat-gprs
11592 @opindex mfloat-gprs
11593 This switch enables or disables the generation of floating point
11594 operations on the general purpose registers for architectures that
11595 support it.
11597 The argument @var{yes} or @var{single} enables the use of
11598 single-precision floating point operations.
11600 The argument @var{double} enables the use of single and
11601 double-precision floating point operations.
11603 The argument @var{no} disables floating point operations on the
11604 general purpose registers.
11606 This option is currently only available on the MPC854x.
11608 @item -m32
11609 @itemx -m64
11610 @opindex m32
11611 @opindex m64
11612 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11613 targets (including GNU/Linux).  The 32-bit environment sets int, long
11614 and pointer to 32 bits and generates code that runs on any PowerPC
11615 variant.  The 64-bit environment sets int to 32 bits and long and
11616 pointer to 64 bits, and generates code for PowerPC64, as for
11617 @option{-mpowerpc64}.
11619 @item -mfull-toc
11620 @itemx -mno-fp-in-toc
11621 @itemx -mno-sum-in-toc
11622 @itemx -mminimal-toc
11623 @opindex mfull-toc
11624 @opindex mno-fp-in-toc
11625 @opindex mno-sum-in-toc
11626 @opindex mminimal-toc
11627 Modify generation of the TOC (Table Of Contents), which is created for
11628 every executable file.  The @option{-mfull-toc} option is selected by
11629 default.  In that case, GCC will allocate at least one TOC entry for
11630 each unique non-automatic variable reference in your program.  GCC
11631 will also place floating-point constants in the TOC@.  However, only
11632 16,384 entries are available in the TOC@.
11634 If you receive a linker error message that saying you have overflowed
11635 the available TOC space, you can reduce the amount of TOC space used
11636 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
11637 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
11638 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
11639 generate code to calculate the sum of an address and a constant at
11640 run-time instead of putting that sum into the TOC@.  You may specify one
11641 or both of these options.  Each causes GCC to produce very slightly
11642 slower and larger code at the expense of conserving TOC space.
11644 If you still run out of space in the TOC even when you specify both of
11645 these options, specify @option{-mminimal-toc} instead.  This option causes
11646 GCC to make only one TOC entry for every file.  When you specify this
11647 option, GCC will produce code that is slower and larger but which
11648 uses extremely little TOC space.  You may wish to use this option
11649 only on files that contain less frequently executed code.
11651 @item -maix64
11652 @itemx -maix32
11653 @opindex maix64
11654 @opindex maix32
11655 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
11656 @code{long} type, and the infrastructure needed to support them.
11657 Specifying @option{-maix64} implies @option{-mpowerpc64} and
11658 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
11659 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
11661 @item -mxl-compat
11662 @itemx -mno-xl-compat
11663 @opindex mxl-compat
11664 @opindex mno-xl-compat
11665 Produce code that conforms more closely to IBM XL compiler semantics
11666 when using AIX-compatible ABI.  Pass floating-point arguments to
11667 prototyped functions beyond the register save area (RSA) on the stack
11668 in addition to argument FPRs.  Do not assume that most significant
11669 double in 128-bit long double value is properly rounded when comparing
11670 values and converting to double.  Use XL symbol names for long double
11671 support routines.
11673 The AIX calling convention was extended but not initially documented to
11674 handle an obscure K&R C case of calling a function that takes the
11675 address of its arguments with fewer arguments than declared.  IBM XL
11676 compilers access floating point arguments which do not fit in the
11677 RSA from the stack when a subroutine is compiled without
11678 optimization.  Because always storing floating-point arguments on the
11679 stack is inefficient and rarely needed, this option is not enabled by
11680 default and only is necessary when calling subroutines compiled by IBM
11681 XL compilers without optimization.
11683 @item -mpe
11684 @opindex mpe
11685 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
11686 application written to use message passing with special startup code to
11687 enable the application to run.  The system must have PE installed in the
11688 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
11689 must be overridden with the @option{-specs=} option to specify the
11690 appropriate directory location.  The Parallel Environment does not
11691 support threads, so the @option{-mpe} option and the @option{-pthread}
11692 option are incompatible.
11694 @item -malign-natural
11695 @itemx -malign-power
11696 @opindex malign-natural
11697 @opindex malign-power
11698 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11699 @option{-malign-natural} overrides the ABI-defined alignment of larger
11700 types, such as floating-point doubles, on their natural size-based boundary.
11701 The option @option{-malign-power} instructs GCC to follow the ABI-specified
11702 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
11704 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
11705 is not supported.
11707 @item -msoft-float
11708 @itemx -mhard-float
11709 @opindex msoft-float
11710 @opindex mhard-float
11711 Generate code that does not use (uses) the floating-point register set.
11712 Software floating point emulation is provided if you use the
11713 @option{-msoft-float} option, and pass the option to GCC when linking.
11715 @item -mmultiple
11716 @itemx -mno-multiple
11717 @opindex mmultiple
11718 @opindex mno-multiple
11719 Generate code that uses (does not use) the load multiple word
11720 instructions and the store multiple word instructions.  These
11721 instructions are generated by default on POWER systems, and not
11722 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
11723 endian PowerPC systems, since those instructions do not work when the
11724 processor is in little endian mode.  The exceptions are PPC740 and
11725 PPC750 which permit the instructions usage in little endian mode.
11727 @item -mstring
11728 @itemx -mno-string
11729 @opindex mstring
11730 @opindex mno-string
11731 Generate code that uses (does not use) the load string instructions
11732 and the store string word instructions to save multiple registers and
11733 do small block moves.  These instructions are generated by default on
11734 POWER systems, and not generated on PowerPC systems.  Do not use
11735 @option{-mstring} on little endian PowerPC systems, since those
11736 instructions do not work when the processor is in little endian mode.
11737 The exceptions are PPC740 and PPC750 which permit the instructions
11738 usage in little endian mode.
11740 @item -mupdate
11741 @itemx -mno-update
11742 @opindex mupdate
11743 @opindex mno-update
11744 Generate code that uses (does not use) the load or store instructions
11745 that update the base register to the address of the calculated memory
11746 location.  These instructions are generated by default.  If you use
11747 @option{-mno-update}, there is a small window between the time that the
11748 stack pointer is updated and the address of the previous frame is
11749 stored, which means code that walks the stack frame across interrupts or
11750 signals may get corrupted data.
11752 @item -mfused-madd
11753 @itemx -mno-fused-madd
11754 @opindex mfused-madd
11755 @opindex mno-fused-madd
11756 Generate code that uses (does not use) the floating point multiply and
11757 accumulate instructions.  These instructions are generated by default if
11758 hardware floating is used.
11760 @item -mmulhw
11761 @itemx -mno-mulhw
11762 @opindex mmulhw
11763 @opindex mno-mulhw
11764 Generate code that uses (does not use) the half-word multiply and
11765 multiply-accumulate instructions on the IBM 405 and 440 processors.
11766 These instructions are generated by default when targetting those
11767 processors.
11769 @item -mdlmzb
11770 @itemx -mno-dlmzb
11771 @opindex mdlmzb
11772 @opindex mno-dlmzb
11773 Generate code that uses (does not use) the string-search @samp{dlmzb}
11774 instruction on the IBM 405 and 440 processors.  This instruction is
11775 generated by default when targetting those processors.
11777 @item -mno-bit-align
11778 @itemx -mbit-align
11779 @opindex mno-bit-align
11780 @opindex mbit-align
11781 On System V.4 and embedded PowerPC systems do not (do) force structures
11782 and unions that contain bit-fields to be aligned to the base type of the
11783 bit-field.
11785 For example, by default a structure containing nothing but 8
11786 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
11787 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
11788 the structure would be aligned to a 1 byte boundary and be one byte in
11789 size.
11791 @item -mno-strict-align
11792 @itemx -mstrict-align
11793 @opindex mno-strict-align
11794 @opindex mstrict-align
11795 On System V.4 and embedded PowerPC systems do not (do) assume that
11796 unaligned memory references will be handled by the system.
11798 @item -mrelocatable
11799 @itemx -mno-relocatable
11800 @opindex mrelocatable
11801 @opindex mno-relocatable
11802 On embedded PowerPC systems generate code that allows (does not allow)
11803 the program to be relocated to a different address at runtime.  If you
11804 use @option{-mrelocatable} on any module, all objects linked together must
11805 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
11807 @item -mrelocatable-lib
11808 @itemx -mno-relocatable-lib
11809 @opindex mrelocatable-lib
11810 @opindex mno-relocatable-lib
11811 On embedded PowerPC systems generate code that allows (does not allow)
11812 the program to be relocated to a different address at runtime.  Modules
11813 compiled with @option{-mrelocatable-lib} can be linked with either modules
11814 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
11815 with modules compiled with the @option{-mrelocatable} options.
11817 @item -mno-toc
11818 @itemx -mtoc
11819 @opindex mno-toc
11820 @opindex mtoc
11821 On System V.4 and embedded PowerPC systems do not (do) assume that
11822 register 2 contains a pointer to a global area pointing to the addresses
11823 used in the program.
11825 @item -mlittle
11826 @itemx -mlittle-endian
11827 @opindex mlittle
11828 @opindex mlittle-endian
11829 On System V.4 and embedded PowerPC systems compile code for the
11830 processor in little endian mode.  The @option{-mlittle-endian} option is
11831 the same as @option{-mlittle}.
11833 @item -mbig
11834 @itemx -mbig-endian
11835 @opindex mbig
11836 @opindex mbig-endian
11837 On System V.4 and embedded PowerPC systems compile code for the
11838 processor in big endian mode.  The @option{-mbig-endian} option is
11839 the same as @option{-mbig}.
11841 @item -mdynamic-no-pic
11842 @opindex mdynamic-no-pic
11843 On Darwin and Mac OS X systems, compile code so that it is not
11844 relocatable, but that its external references are relocatable.  The
11845 resulting code is suitable for applications, but not shared
11846 libraries.
11848 @item -mprioritize-restricted-insns=@var{priority}
11849 @opindex mprioritize-restricted-insns
11850 This option controls the priority that is assigned to
11851 dispatch-slot restricted instructions during the second scheduling
11852 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
11853 @var{no/highest/second-highest} priority to dispatch slot restricted
11854 instructions.
11856 @item -msched-costly-dep=@var{dependence_type}
11857 @opindex msched-costly-dep
11858 This option controls which dependences are considered costly
11859 by the target during instruction scheduling.  The argument
11860 @var{dependence_type} takes one of the following values:
11861 @var{no}: no dependence is costly,
11862 @var{all}: all dependences are costly,
11863 @var{true_store_to_load}: a true dependence from store to load is costly,
11864 @var{store_to_load}: any dependence from store to load is costly,
11865 @var{number}: any dependence which latency >= @var{number} is costly.
11867 @item -minsert-sched-nops=@var{scheme}
11868 @opindex minsert-sched-nops
11869 This option controls which nop insertion scheme will be used during
11870 the second scheduling pass.  The argument @var{scheme} takes one of the
11871 following values:
11872 @var{no}: Don't insert nops.
11873 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
11874 according to the scheduler's grouping.
11875 @var{regroup_exact}: Insert nops to force costly dependent insns into
11876 separate groups.  Insert exactly as many nops as needed to force an insn
11877 to a new group, according to the estimated processor grouping.
11878 @var{number}: Insert nops to force costly dependent insns into
11879 separate groups.  Insert @var{number} nops to force an insn to a new group.
11881 @item -mcall-sysv
11882 @opindex mcall-sysv
11883 On System V.4 and embedded PowerPC systems compile code using calling
11884 conventions that adheres to the March 1995 draft of the System V
11885 Application Binary Interface, PowerPC processor supplement.  This is the
11886 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
11888 @item -mcall-sysv-eabi
11889 @opindex mcall-sysv-eabi
11890 Specify both @option{-mcall-sysv} and @option{-meabi} options.
11892 @item -mcall-sysv-noeabi
11893 @opindex mcall-sysv-noeabi
11894 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
11896 @item -mcall-solaris
11897 @opindex mcall-solaris
11898 On System V.4 and embedded PowerPC systems compile code for the Solaris
11899 operating system.
11901 @item -mcall-linux
11902 @opindex mcall-linux
11903 On System V.4 and embedded PowerPC systems compile code for the
11904 Linux-based GNU system.
11906 @item -mcall-gnu
11907 @opindex mcall-gnu
11908 On System V.4 and embedded PowerPC systems compile code for the
11909 Hurd-based GNU system.
11911 @item -mcall-netbsd
11912 @opindex mcall-netbsd
11913 On System V.4 and embedded PowerPC systems compile code for the
11914 NetBSD operating system.
11916 @item -maix-struct-return
11917 @opindex maix-struct-return
11918 Return all structures in memory (as specified by the AIX ABI)@.
11920 @item -msvr4-struct-return
11921 @opindex msvr4-struct-return
11922 Return structures smaller than 8 bytes in registers (as specified by the
11923 SVR4 ABI)@.
11925 @item -mabi=@var{abi-type}
11926 @opindex mabi
11927 Extend the current ABI with a particular extension, or remove such extension.
11928 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
11929 @var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
11931 @item -mabi=spe
11932 @opindex mabi=spe
11933 Extend the current ABI with SPE ABI extensions.  This does not change
11934 the default ABI, instead it adds the SPE ABI extensions to the current
11935 ABI@.
11937 @item -mabi=no-spe
11938 @opindex mabi=no-spe
11939 Disable Booke SPE ABI extensions for the current ABI@.
11941 @item -mabi=ibmlongdouble
11942 @opindex mabi=ibmlongdouble
11943 Change the current ABI to use IBM extended precision long double.
11944 This is a PowerPC 32-bit SYSV ABI option.
11946 @item -mabi=ieeelongdouble
11947 @opindex mabi=ieeelongdouble
11948 Change the current ABI to use IEEE extended precision long double.
11949 This is a PowerPC 32-bit Linux ABI option.
11951 @item -mprototype
11952 @itemx -mno-prototype
11953 @opindex mprototype
11954 @opindex mno-prototype
11955 On System V.4 and embedded PowerPC systems assume that all calls to
11956 variable argument functions are properly prototyped.  Otherwise, the
11957 compiler must insert an instruction before every non prototyped call to
11958 set or clear bit 6 of the condition code register (@var{CR}) to
11959 indicate whether floating point values were passed in the floating point
11960 registers in case the function takes a variable arguments.  With
11961 @option{-mprototype}, only calls to prototyped variable argument functions
11962 will set or clear the bit.
11964 @item -msim
11965 @opindex msim
11966 On embedded PowerPC systems, assume that the startup module is called
11967 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
11968 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
11969 configurations.
11971 @item -mmvme
11972 @opindex mmvme
11973 On embedded PowerPC systems, assume that the startup module is called
11974 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
11975 @file{libc.a}.
11977 @item -mads
11978 @opindex mads
11979 On embedded PowerPC systems, assume that the startup module is called
11980 @file{crt0.o} and the standard C libraries are @file{libads.a} and
11981 @file{libc.a}.
11983 @item -myellowknife
11984 @opindex myellowknife
11985 On embedded PowerPC systems, assume that the startup module is called
11986 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
11987 @file{libc.a}.
11989 @item -mvxworks
11990 @opindex mvxworks
11991 On System V.4 and embedded PowerPC systems, specify that you are
11992 compiling for a VxWorks system.
11994 @item -mwindiss
11995 @opindex mwindiss
11996 Specify that you are compiling for the WindISS simulation environment.
11998 @item -memb
11999 @opindex memb
12000 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
12001 header to indicate that @samp{eabi} extended relocations are used.
12003 @item -meabi
12004 @itemx -mno-eabi
12005 @opindex meabi
12006 @opindex mno-eabi
12007 On System V.4 and embedded PowerPC systems do (do not) adhere to the
12008 Embedded Applications Binary Interface (eabi) which is a set of
12009 modifications to the System V.4 specifications.  Selecting @option{-meabi}
12010 means that the stack is aligned to an 8 byte boundary, a function
12011 @code{__eabi} is called to from @code{main} to set up the eabi
12012 environment, and the @option{-msdata} option can use both @code{r2} and
12013 @code{r13} to point to two separate small data areas.  Selecting
12014 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
12015 do not call an initialization function from @code{main}, and the
12016 @option{-msdata} option will only use @code{r13} to point to a single
12017 small data area.  The @option{-meabi} option is on by default if you
12018 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
12020 @item -msdata=eabi
12021 @opindex msdata=eabi
12022 On System V.4 and embedded PowerPC systems, put small initialized
12023 @code{const} global and static data in the @samp{.sdata2} section, which
12024 is pointed to by register @code{r2}.  Put small initialized
12025 non-@code{const} global and static data in the @samp{.sdata} section,
12026 which is pointed to by register @code{r13}.  Put small uninitialized
12027 global and static data in the @samp{.sbss} section, which is adjacent to
12028 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
12029 incompatible with the @option{-mrelocatable} option.  The
12030 @option{-msdata=eabi} option also sets the @option{-memb} option.
12032 @item -msdata=sysv
12033 @opindex msdata=sysv
12034 On System V.4 and embedded PowerPC systems, put small global and static
12035 data in the @samp{.sdata} section, which is pointed to by register
12036 @code{r13}.  Put small uninitialized global and static data in the
12037 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
12038 The @option{-msdata=sysv} option is incompatible with the
12039 @option{-mrelocatable} option.
12041 @item -msdata=default
12042 @itemx -msdata
12043 @opindex msdata=default
12044 @opindex msdata
12045 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
12046 compile code the same as @option{-msdata=eabi}, otherwise compile code the
12047 same as @option{-msdata=sysv}.
12049 @item -msdata-data
12050 @opindex msdata-data
12051 On System V.4 and embedded PowerPC systems, put small global
12052 data in the @samp{.sdata} section.  Put small uninitialized global
12053 data in the @samp{.sbss} section.  Do not use register @code{r13}
12054 to address small data however.  This is the default behavior unless
12055 other @option{-msdata} options are used.
12057 @item -msdata=none
12058 @itemx -mno-sdata
12059 @opindex msdata=none
12060 @opindex mno-sdata
12061 On embedded PowerPC systems, put all initialized global and static data
12062 in the @samp{.data} section, and all uninitialized data in the
12063 @samp{.bss} section.
12065 @item -G @var{num}
12066 @opindex G
12067 @cindex smaller data references (PowerPC)
12068 @cindex .sdata/.sdata2 references (PowerPC)
12069 On embedded PowerPC systems, put global and static items less than or
12070 equal to @var{num} bytes into the small data or bss sections instead of
12071 the normal data or bss section.  By default, @var{num} is 8.  The
12072 @option{-G @var{num}} switch is also passed to the linker.
12073 All modules should be compiled with the same @option{-G @var{num}} value.
12075 @item -mregnames
12076 @itemx -mno-regnames
12077 @opindex mregnames
12078 @opindex mno-regnames
12079 On System V.4 and embedded PowerPC systems do (do not) emit register
12080 names in the assembly language output using symbolic forms.
12082 @item -mlongcall
12083 @itemx -mno-longcall
12084 @opindex mlongcall
12085 @opindex mno-longcall
12086 By default assume that all calls are far away so that a longer more
12087 expensive calling sequence is required.  This is required for calls
12088 further than 32 megabytes (33,554,432 bytes) from the current location.
12089 A short call will be generated if the compiler knows
12090 the call cannot be that far away.  This setting can be overridden by
12091 the @code{shortcall} function attribute, or by @code{#pragma
12092 longcall(0)}.
12094 Some linkers are capable of detecting out-of-range calls and generating
12095 glue code on the fly.  On these systems, long calls are unnecessary and
12096 generate slower code.  As of this writing, the AIX linker can do this,
12097 as can the GNU linker for PowerPC/64.  It is planned to add this feature
12098 to the GNU linker for 32-bit PowerPC systems as well.
12100 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
12101 callee, L42'', plus a ``branch island'' (glue code).  The two target
12102 addresses represent the callee and the ``branch island''.  The
12103 Darwin/PPC linker will prefer the first address and generate a ``bl
12104 callee'' if the PPC ``bl'' instruction will reach the callee directly;
12105 otherwise, the linker will generate ``bl L42'' to call the ``branch
12106 island''.  The ``branch island'' is appended to the body of the
12107 calling function; it computes the full 32-bit address of the callee
12108 and jumps to it.
12110 On Mach-O (Darwin) systems, this option directs the compiler emit to
12111 the glue for every direct call, and the Darwin linker decides whether
12112 to use or discard it.
12114 In the future, we may cause GCC to ignore all longcall specifications
12115 when the linker is known to generate glue.
12117 @item -pthread
12118 @opindex pthread
12119 Adds support for multithreading with the @dfn{pthreads} library.
12120 This option sets flags for both the preprocessor and linker.
12122 @end table
12124 @node S/390 and zSeries Options
12125 @subsection S/390 and zSeries Options
12126 @cindex S/390 and zSeries Options
12128 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
12130 @table @gcctabopt
12131 @item -mhard-float
12132 @itemx -msoft-float
12133 @opindex mhard-float
12134 @opindex msoft-float
12135 Use (do not use) the hardware floating-point instructions and registers
12136 for floating-point operations.  When @option{-msoft-float} is specified,
12137 functions in @file{libgcc.a} will be used to perform floating-point
12138 operations.  When @option{-mhard-float} is specified, the compiler
12139 generates IEEE floating-point instructions.  This is the default.
12141 @item -mlong-double-64
12142 @itemx -mlong-double-128
12143 @opindex mlong-double-64
12144 @opindex mlong-double-128
12145 These switches control the size of @code{long double} type. A size
12146 of 64bit makes the @code{long double} type equivalent to the @code{double}
12147 type. This is the default.
12149 @item -mbackchain
12150 @itemx -mno-backchain
12151 @opindex mbackchain
12152 @opindex mno-backchain
12153 Store (do not store) the address of the caller's frame as backchain pointer
12154 into the callee's stack frame.
12155 A backchain may be needed to allow debugging using tools that do not understand
12156 DWARF-2 call frame information.
12157 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
12158 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
12159 the backchain is placed into the topmost word of the 96/160 byte register
12160 save area.
12162 In general, code compiled with @option{-mbackchain} is call-compatible with
12163 code compiled with @option{-mmo-backchain}; however, use of the backchain
12164 for debugging purposes usually requires that the whole binary is built with
12165 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
12166 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
12167 to build a linux kernel use @option{-msoft-float}.
12169 The default is to not maintain the backchain.
12171 @item -mpacked-stack
12172 @item -mno-packed-stack
12173 @opindex mpacked-stack
12174 @opindex mno-packed-stack
12175 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
12176 specified, the compiler uses the all fields of the 96/160 byte register save
12177 area only for their default purpose; unused fields still take up stack space.
12178 When @option{-mpacked-stack} is specified, register save slots are densely
12179 packed at the top of the register save area; unused space is reused for other
12180 purposes, allowing for more efficient use of the available stack space.
12181 However, when @option{-mbackchain} is also in effect, the topmost word of
12182 the save area is always used to store the backchain, and the return address
12183 register is always saved two words below the backchain.
12185 As long as the stack frame backchain is not used, code generated with
12186 @option{-mpacked-stack} is call-compatible with code generated with
12187 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
12188 S/390 or zSeries generated code that uses the stack frame backchain at run
12189 time, not just for debugging purposes.  Such code is not call-compatible
12190 with code compiled with @option{-mpacked-stack}.  Also, note that the
12191 combination of @option{-mbackchain},
12192 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
12193 to build a linux kernel use @option{-msoft-float}.
12195 The default is to not use the packed stack layout.
12197 @item -msmall-exec
12198 @itemx -mno-small-exec
12199 @opindex msmall-exec
12200 @opindex mno-small-exec
12201 Generate (or do not generate) code using the @code{bras} instruction
12202 to do subroutine calls.
12203 This only works reliably if the total executable size does not
12204 exceed 64k.  The default is to use the @code{basr} instruction instead,
12205 which does not have this limitation.
12207 @item -m64
12208 @itemx -m31
12209 @opindex m64
12210 @opindex m31
12211 When @option{-m31} is specified, generate code compliant to the
12212 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
12213 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
12214 particular to generate 64-bit instructions.  For the @samp{s390}
12215 targets, the default is @option{-m31}, while the @samp{s390x}
12216 targets default to @option{-m64}.
12218 @item -mzarch
12219 @itemx -mesa
12220 @opindex mzarch
12221 @opindex mesa
12222 When @option{-mzarch} is specified, generate code using the
12223 instructions available on z/Architecture.
12224 When @option{-mesa} is specified, generate code using the
12225 instructions available on ESA/390.  Note that @option{-mesa} is
12226 not possible with @option{-m64}.
12227 When generating code compliant to the GNU/Linux for S/390 ABI,
12228 the default is @option{-mesa}.  When generating code compliant
12229 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
12231 @item -mmvcle
12232 @itemx -mno-mvcle
12233 @opindex mmvcle
12234 @opindex mno-mvcle
12235 Generate (or do not generate) code using the @code{mvcle} instruction
12236 to perform block moves.  When @option{-mno-mvcle} is specified,
12237 use a @code{mvc} loop instead.  This is the default unless optimizing for
12238 size.
12240 @item -mdebug
12241 @itemx -mno-debug
12242 @opindex mdebug
12243 @opindex mno-debug
12244 Print (or do not print) additional debug information when compiling.
12245 The default is to not print debug information.
12247 @item -march=@var{cpu-type}
12248 @opindex march
12249 Generate code that will run on @var{cpu-type}, which is the name of a system
12250 representing a certain processor type.  Possible values for
12251 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
12252 When generating code using the instructions available on z/Architecture,
12253 the default is @option{-march=z900}.  Otherwise, the default is
12254 @option{-march=g5}.
12256 @item -mtune=@var{cpu-type}
12257 @opindex mtune
12258 Tune to @var{cpu-type} everything applicable about the generated code,
12259 except for the ABI and the set of available instructions.
12260 The list of @var{cpu-type} values is the same as for @option{-march}.
12261 The default is the value used for @option{-march}.
12263 @item -mtpf-trace
12264 @itemx -mno-tpf-trace
12265 @opindex mtpf-trace
12266 @opindex mno-tpf-trace
12267 Generate code that adds (does not add) in TPF OS specific branches to trace
12268 routines in the operating system.  This option is off by default, even
12269 when compiling for the TPF OS@.
12271 @item -mfused-madd
12272 @itemx -mno-fused-madd
12273 @opindex mfused-madd
12274 @opindex mno-fused-madd
12275 Generate code that uses (does not use) the floating point multiply and
12276 accumulate instructions.  These instructions are generated by default if
12277 hardware floating point is used.
12279 @item -mwarn-framesize=@var{framesize}
12280 @opindex mwarn-framesize
12281 Emit a warning if the current function exceeds the given frame size.  Because
12282 this is a compile time check it doesn't need to be a real problem when the program
12283 runs.  It is intended to identify functions which most probably cause
12284 a stack overflow.  It is useful to be used in an environment with limited stack
12285 size e.g.@: the linux kernel.
12287 @item -mwarn-dynamicstack
12288 @opindex mwarn-dynamicstack
12289 Emit a warning if the function calls alloca or uses dynamically
12290 sized arrays.  This is generally a bad idea with a limited stack size.
12292 @item -mstack-guard=@var{stack-guard}
12293 @item -mstack-size=@var{stack-size}
12294 @opindex mstack-guard
12295 @opindex mstack-size
12296 These arguments always have to be used in conjunction.  If they are present the s390
12297 back end emits additional instructions in the function prologue which trigger a trap
12298 if the stack size is @var{stack-guard} bytes above the @var{stack-size}
12299 (remember that the stack on s390 grows downward).  These options are intended to
12300 be used to help debugging stack overflow problems.  The additionally emitted code
12301 causes only little overhead and hence can also be used in production like systems
12302 without greater performance degradation.  The given values have to be exact
12303 powers of 2 and @var{stack-size} has to be greater than @var{stack-guard} without
12304 exceeding 64k.
12305 In order to be efficient the extra code makes the assumption that the stack starts
12306 at an address aligned to the value given by @var{stack-size}.
12307 @end table
12309 @node Score Options
12310 @subsection Score Options
12311 @cindex Score Options
12313 These options are defined for Score implementations:
12315 @table @gcctabopt
12316 @item -mel
12317 @opindex -mel
12318 Compile code for little endian mode. 
12320 @item -meb
12321 @opindex meb
12322 Compile code for big endian mode.  This is the default.
12324 @item -mmac
12325 @opindex mmac
12326 Enable the use of multiply-accumulate instructions. Disabled by default. 
12328 @item -mscore5u
12329 @opindex mscore5u
12330 Specify the SCORE5U of the target architecture.
12332 @item -mscore7
12333 @opindex mscore7
12334 Specify the SCORE7 of the target architecture. This is the default.
12335 @end table
12337 @node SH Options
12338 @subsection SH Options
12340 These @samp{-m} options are defined for the SH implementations:
12342 @table @gcctabopt
12343 @item -m1
12344 @opindex m1
12345 Generate code for the SH1.
12347 @item -m2
12348 @opindex m2
12349 Generate code for the SH2.
12351 @item -m2e
12352 Generate code for the SH2e.
12354 @item -m3
12355 @opindex m3
12356 Generate code for the SH3.
12358 @item -m3e
12359 @opindex m3e
12360 Generate code for the SH3e.
12362 @item -m4-nofpu
12363 @opindex m4-nofpu
12364 Generate code for the SH4 without a floating-point unit.
12366 @item -m4-single-only
12367 @opindex m4-single-only
12368 Generate code for the SH4 with a floating-point unit that only
12369 supports single-precision arithmetic.
12371 @item -m4-single
12372 @opindex m4-single
12373 Generate code for the SH4 assuming the floating-point unit is in
12374 single-precision mode by default.
12376 @item -m4
12377 @opindex m4
12378 Generate code for the SH4.
12380 @item -m4a-nofpu
12381 @opindex m4a-nofpu
12382 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
12383 floating-point unit is not used.
12385 @item -m4a-single-only
12386 @opindex m4a-single-only
12387 Generate code for the SH4a, in such a way that no double-precision
12388 floating point operations are used.
12390 @item -m4a-single
12391 @opindex m4a-single
12392 Generate code for the SH4a assuming the floating-point unit is in
12393 single-precision mode by default.
12395 @item -m4a
12396 @opindex m4a
12397 Generate code for the SH4a.
12399 @item -m4al
12400 @opindex m4al
12401 Same as @option{-m4a-nofpu}, except that it implicitly passes
12402 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
12403 instructions at the moment.
12405 @item -mb
12406 @opindex mb
12407 Compile code for the processor in big endian mode.
12409 @item -ml
12410 @opindex ml
12411 Compile code for the processor in little endian mode.
12413 @item -mdalign
12414 @opindex mdalign
12415 Align doubles at 64-bit boundaries.  Note that this changes the calling
12416 conventions, and thus some functions from the standard C library will
12417 not work unless you recompile it first with @option{-mdalign}.
12419 @item -mrelax
12420 @opindex mrelax
12421 Shorten some address references at link time, when possible; uses the
12422 linker option @option{-relax}.
12424 @item -mbigtable
12425 @opindex mbigtable
12426 Use 32-bit offsets in @code{switch} tables.  The default is to use
12427 16-bit offsets.
12429 @item -mfmovd
12430 @opindex mfmovd
12431 Enable the use of the instruction @code{fmovd}.
12433 @item -mhitachi
12434 @opindex mhitachi
12435 Comply with the calling conventions defined by Renesas.
12437 @item -mrenesas
12438 @opindex mhitachi
12439 Comply with the calling conventions defined by Renesas.
12441 @item -mno-renesas
12442 @opindex mhitachi
12443 Comply with the calling conventions defined for GCC before the Renesas
12444 conventions were available.  This option is the default for all
12445 targets of the SH toolchain except for @samp{sh-symbianelf}.
12447 @item -mnomacsave
12448 @opindex mnomacsave
12449 Mark the @code{MAC} register as call-clobbered, even if
12450 @option{-mhitachi} is given.
12452 @item -mieee
12453 @opindex mieee
12454 Increase IEEE-compliance of floating-point code.
12455 At the moment, this is equivalent to @option{-fno-finite-math-only}.
12456 When generating 16 bit SH opcodes, getting IEEE-conforming results for
12457 comparisons of NANs / infinities incurs extra overhead in every
12458 floating point comparison, therefore the default is set to
12459 @option{-ffinite-math-only}.
12461 @item -minline-ic_invalidate
12462 @opindex minline-ic_invalidate
12463 Inline code to invalidate instruction cache entries after setting up
12464 nested function trampolines.
12465 This option has no effect if -musermode is in effect and the selected
12466 code generation option (e.g. -m4) does not allow the use of the icbi
12467 instruction.
12468 If the selected code generation option does not allow the use of the icbi
12469 instruction, and -musermode is not in effect, the inlined code will
12470 manipulate the instruction cache address array directly with an associative
12471 write.  This not only requires privileged mode, but it will also
12472 fail if the cache line had been mapped via the TLB and has become unmapped.
12474 @item -misize
12475 @opindex misize
12476 Dump instruction size and location in the assembly code.
12478 @item -mpadstruct
12479 @opindex mpadstruct
12480 This option is deprecated.  It pads structures to multiple of 4 bytes,
12481 which is incompatible with the SH ABI@.
12483 @item -mspace
12484 @opindex mspace
12485 Optimize for space instead of speed.  Implied by @option{-Os}.
12487 @item -mprefergot
12488 @opindex mprefergot
12489 When generating position-independent code, emit function calls using
12490 the Global Offset Table instead of the Procedure Linkage Table.
12492 @item -musermode
12493 @opindex musermode
12494 Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
12495 if the inlined code would not work in user mode.
12496 This is the default when the target is @code{sh-*-linux*}.
12498 @item -multcost=@var{number}
12499 @opindex multcost=@var{number}
12500 Set the cost to assume for a multiply insn.
12502 @item -mdiv=@var{strategy}
12503 @opindex mdiv=@var{strategy}
12504 Set the division strategy to use for SHmedia code.  @var{strategy} must be
12505 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
12506 inv:call2, inv:fp .
12507 "fp" performs the operation in floating point.  This has a very high latency,
12508 but needs only a few instructions, so it might be a good choice if
12509 your code has enough easily exploitable ILP to allow the compiler to
12510 schedule the floating point instructions together with other instructions.
12511 Division by zero causes a floating point exception.
12512 "inv" uses integer operations to calculate the inverse of the divisor,
12513 and then multiplies the dividend with the inverse.  This strategy allows
12514 cse and hoisting of the inverse calculation.  Division by zero calculates
12515 an unspecified result, but does not trap.
12516 "inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
12517 have been found, or if the entire operation has been hoisted to the same
12518 place, the last stages of the inverse calculation are intertwined with the
12519 final multiply to reduce the overall latency, at the expense of using a few
12520 more instructions, and thus offering fewer scheduling opportunities with
12521 other code.
12522 "call" calls a library function that usually implements the inv:minlat
12523 strategy.
12524 This gives high code density for m5-*media-nofpu compilations.
12525 "call2" uses a different entry point of the same library function, where it
12526 assumes that a pointer to a lookup table has already been set up, which
12527 exposes the pointer load to cse / code hoisting optimizations.
12528 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
12529 code generation, but if the code stays unoptimized, revert to the "call",
12530 "call2", or "fp" strategies, respectively.  Note that the
12531 potentially-trapping side effect of division by zero is carried by a
12532 separate instruction, so it is possible that all the integer instructions
12533 are hoisted out, but the marker for the side effect stays where it is.
12534 A recombination to fp operations or a call is not possible in that case.
12535 "inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
12536 that the inverse calculation was nor separated from the multiply, they speed
12537 up division where the dividend fits into 20 bits (plus sign where applicable),
12538 by inserting a test to skip a number of operations in this case; this test
12539 slows down the case of larger dividends.  inv20u assumes the case of a such
12540 a small dividend to be unlikely, and inv20l assumes it to be likely.
12542 @item -mdivsi3_libfunc=@var{name}
12543 @opindex mdivsi3_libfunc=@var{name}
12544 Set the name of the library function used for 32 bit signed division to
12545 @var{name}.  This only affect the name used in the call and inv:call
12546 division strategies, and the compiler will still expect the same
12547 sets of input/output/clobbered registers as if this option was not present.
12549 @item -madjust-unroll
12550 @opindex madjust-unroll
12551 Throttle unrolling to avoid thrashing target registers.
12552 This option only has an effect if the gcc code base supports the
12553 TARGET_ADJUST_UNROLL_MAX target hook.
12555 @item -mindexed-addressing
12556 @opindex mindexed-addressing
12557 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
12558 This is only safe if the hardware and/or OS implement 32 bit wrap-around
12559 semantics for the indexed addressing mode.  The architecture allows the
12560 implementation of processors with 64 bit MMU, which the OS could use to
12561 get 32 bit addressing, but since no current hardware implementation supports
12562 this or any other way to make the indexed addressing mode safe to use in
12563 the 32 bit ABI, the default is -mno-indexed-addressing.
12565 @item -mgettrcost=@var{number}
12566 @opindex mgettrcost=@var{number}
12567 Set the cost assumed for the gettr instruction to @var{number}.
12568 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
12570 @item -mpt-fixed
12571 @opindex mpt-fixed
12572 Assume pt* instructions won't trap.  This will generally generate better
12573 scheduled code, but is unsafe on current hardware.  The current architecture
12574 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
12575 This has the unintentional effect of making it unsafe to schedule ptabs /
12576 ptrel before a branch, or hoist it out of a loop.  For example,
12577 __do_global_ctors, a part of libgcc that runs constructors at program
12578 startup, calls functions in a list which is delimited by -1.  With the
12579 -mpt-fixed option, the ptabs will be done before testing against -1.
12580 That means that all the constructors will be run a bit quicker, but when
12581 the loop comes to the end of the list, the program crashes because ptabs
12582 loads -1 into a target register.  Since this option is unsafe for any
12583 hardware implementing the current architecture specification, the default
12584 is -mno-pt-fixed.  Unless the user specifies a specific cost with
12585 @option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
12586 this deters register allocation using target registers for storing
12587 ordinary integers.
12589 @item -minvalid-symbols
12590 @opindex minvalid-symbols
12591 Assume symbols might be invalid.  Ordinary function symbols generated by
12592 the compiler will always be valid to load with movi/shori/ptabs or
12593 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
12594 to generate symbols that will cause ptabs / ptrel to trap.
12595 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
12596 It will then prevent cross-basic-block cse, hoisting and most scheduling
12597 of symbol loads.  The default is @option{-mno-invalid-symbols}.
12598 @end table
12600 @node SPARC Options
12601 @subsection SPARC Options
12602 @cindex SPARC options
12604 These @samp{-m} options are supported on the SPARC:
12606 @table @gcctabopt
12607 @item -mno-app-regs
12608 @itemx -mapp-regs
12609 @opindex mno-app-regs
12610 @opindex mapp-regs
12611 Specify @option{-mapp-regs} to generate output using the global registers
12612 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
12613 is the default.
12615 To be fully SVR4 ABI compliant at the cost of some performance loss,
12616 specify @option{-mno-app-regs}.  You should compile libraries and system
12617 software with this option.
12619 @item -mfpu
12620 @itemx -mhard-float
12621 @opindex mfpu
12622 @opindex mhard-float
12623 Generate output containing floating point instructions.  This is the
12624 default.
12626 @item -mno-fpu
12627 @itemx -msoft-float
12628 @opindex mno-fpu
12629 @opindex msoft-float
12630 Generate output containing library calls for floating point.
12631 @strong{Warning:} the requisite libraries are not available for all SPARC
12632 targets.  Normally the facilities of the machine's usual C compiler are
12633 used, but this cannot be done directly in cross-compilation.  You must make
12634 your own arrangements to provide suitable library functions for
12635 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
12636 @samp{sparclite-*-*} do provide software floating point support.
12638 @option{-msoft-float} changes the calling convention in the output file;
12639 therefore, it is only useful if you compile @emph{all} of a program with
12640 this option.  In particular, you need to compile @file{libgcc.a}, the
12641 library that comes with GCC, with @option{-msoft-float} in order for
12642 this to work.
12644 @item -mhard-quad-float
12645 @opindex mhard-quad-float
12646 Generate output containing quad-word (long double) floating point
12647 instructions.
12649 @item -msoft-quad-float
12650 @opindex msoft-quad-float
12651 Generate output containing library calls for quad-word (long double)
12652 floating point instructions.  The functions called are those specified
12653 in the SPARC ABI@.  This is the default.
12655 As of this writing, there are no SPARC implementations that have hardware
12656 support for the quad-word floating point instructions.  They all invoke
12657 a trap handler for one of these instructions, and then the trap handler
12658 emulates the effect of the instruction.  Because of the trap handler overhead,
12659 this is much slower than calling the ABI library routines.  Thus the
12660 @option{-msoft-quad-float} option is the default.
12662 @item -mno-unaligned-doubles
12663 @itemx -munaligned-doubles
12664 @opindex mno-unaligned-doubles
12665 @opindex munaligned-doubles
12666 Assume that doubles have 8 byte alignment.  This is the default.
12668 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
12669 alignment only if they are contained in another type, or if they have an
12670 absolute address.  Otherwise, it assumes they have 4 byte alignment.
12671 Specifying this option avoids some rare compatibility problems with code
12672 generated by other compilers.  It is not the default because it results
12673 in a performance loss, especially for floating point code.
12675 @item -mno-faster-structs
12676 @itemx -mfaster-structs
12677 @opindex mno-faster-structs
12678 @opindex mfaster-structs
12679 With @option{-mfaster-structs}, the compiler assumes that structures
12680 should have 8 byte alignment.  This enables the use of pairs of
12681 @code{ldd} and @code{std} instructions for copies in structure
12682 assignment, in place of twice as many @code{ld} and @code{st} pairs.
12683 However, the use of this changed alignment directly violates the SPARC
12684 ABI@.  Thus, it's intended only for use on targets where the developer
12685 acknowledges that their resulting code will not be directly in line with
12686 the rules of the ABI@.
12688 @item -mimpure-text
12689 @opindex mimpure-text
12690 @option{-mimpure-text}, used in addition to @option{-shared}, tells
12691 the compiler to not pass @option{-z text} to the linker when linking a
12692 shared object.  Using this option, you can link position-dependent
12693 code into a shared object.
12695 @option{-mimpure-text} suppresses the ``relocations remain against
12696 allocatable but non-writable sections'' linker error message.
12697 However, the necessary relocations will trigger copy-on-write, and the
12698 shared object is not actually shared across processes.  Instead of
12699 using @option{-mimpure-text}, you should compile all source code with
12700 @option{-fpic} or @option{-fPIC}.
12702 This option is only available on SunOS and Solaris.
12704 @item -mcpu=@var{cpu_type}
12705 @opindex mcpu
12706 Set the instruction set, register set, and instruction scheduling parameters
12707 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
12708 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
12709 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
12710 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
12711 @samp{ultrasparc3}, and @samp{niagara}.
12713 Default instruction scheduling parameters are used for values that select
12714 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
12715 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
12717 Here is a list of each supported architecture and their supported
12718 implementations.
12720 @smallexample
12721     v7:             cypress
12722     v8:             supersparc, hypersparc
12723     sparclite:      f930, f934, sparclite86x
12724     sparclet:       tsc701
12725     v9:             ultrasparc, ultrasparc3, niagara
12726 @end smallexample
12728 By default (unless configured otherwise), GCC generates code for the V7
12729 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
12730 additionally optimizes it for the Cypress CY7C602 chip, as used in the
12731 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
12732 SPARCStation 1, 2, IPX etc.
12734 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
12735 architecture.  The only difference from V7 code is that the compiler emits
12736 the integer multiply and integer divide instructions which exist in SPARC-V8
12737 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
12738 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
12739 2000 series.
12741 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
12742 the SPARC architecture.  This adds the integer multiply, integer divide step
12743 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
12744 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
12745 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
12746 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
12747 MB86934 chip, which is the more recent SPARClite with FPU@.
12749 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
12750 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
12751 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
12752 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
12753 optimizes it for the TEMIC SPARClet chip.
12755 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
12756 architecture.  This adds 64-bit integer and floating-point move instructions,
12757 3 additional floating-point condition code registers and conditional move
12758 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
12759 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
12760 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
12761 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
12762 @option{-mcpu=niagara}, the compiler additionally optimizes it for
12763 Sun UltraSPARC T1 chips.
12765 @item -mtune=@var{cpu_type}
12766 @opindex mtune
12767 Set the instruction scheduling parameters for machine type
12768 @var{cpu_type}, but do not set the instruction set or register set that the
12769 option @option{-mcpu=@var{cpu_type}} would.
12771 The same values for @option{-mcpu=@var{cpu_type}} can be used for
12772 @option{-mtune=@var{cpu_type}}, but the only useful values are those
12773 that select a particular cpu implementation.  Those are @samp{cypress},
12774 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
12775 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
12776 @samp{ultrasparc3}, and @samp{niagara}.
12778 @item -mv8plus
12779 @itemx -mno-v8plus
12780 @opindex mv8plus
12781 @opindex mno-v8plus
12782 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
12783 difference from the V8 ABI is that the global and out registers are
12784 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
12785 mode for all SPARC-V9 processors.
12787 @item -mvis
12788 @itemx -mno-vis
12789 @opindex mvis
12790 @opindex mno-vis
12791 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
12792 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
12793 @end table
12795 These @samp{-m} options are supported in addition to the above
12796 on SPARC-V9 processors in 64-bit environments:
12798 @table @gcctabopt
12799 @item -mlittle-endian
12800 @opindex mlittle-endian
12801 Generate code for a processor running in little-endian mode.  It is only
12802 available for a few configurations and most notably not on Solaris and Linux.
12804 @item -m32
12805 @itemx -m64
12806 @opindex m32
12807 @opindex m64
12808 Generate code for a 32-bit or 64-bit environment.
12809 The 32-bit environment sets int, long and pointer to 32 bits.
12810 The 64-bit environment sets int to 32 bits and long and pointer
12811 to 64 bits.
12813 @item -mcmodel=medlow
12814 @opindex mcmodel=medlow
12815 Generate code for the Medium/Low code model: 64-bit addresses, programs
12816 must be linked in the low 32 bits of memory.  Programs can be statically
12817 or dynamically linked.
12819 @item -mcmodel=medmid
12820 @opindex mcmodel=medmid
12821 Generate code for the Medium/Middle code model: 64-bit addresses, programs
12822 must be linked in the low 44 bits of memory, the text and data segments must
12823 be less than 2GB in size and the data segment must be located within 2GB of
12824 the text segment.
12826 @item -mcmodel=medany
12827 @opindex mcmodel=medany
12828 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
12829 may be linked anywhere in memory, the text and data segments must be less
12830 than 2GB in size and the data segment must be located within 2GB of the
12831 text segment.
12833 @item -mcmodel=embmedany
12834 @opindex mcmodel=embmedany
12835 Generate code for the Medium/Anywhere code model for embedded systems:
12836 64-bit addresses, the text and data segments must be less than 2GB in
12837 size, both starting anywhere in memory (determined at link time).  The
12838 global register %g4 points to the base of the data segment.  Programs
12839 are statically linked and PIC is not supported.
12841 @item -mstack-bias
12842 @itemx -mno-stack-bias
12843 @opindex mstack-bias
12844 @opindex mno-stack-bias
12845 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
12846 frame pointer if present, are offset by @minus{}2047 which must be added back
12847 when making stack frame references.  This is the default in 64-bit mode.
12848 Otherwise, assume no such offset is present.
12849 @end table
12851 These switches are supported in addition to the above on Solaris:
12853 @table @gcctabopt
12854 @item -threads
12855 @opindex threads
12856 Add support for multithreading using the Solaris threads library.  This
12857 option sets flags for both the preprocessor and linker.  This option does
12858 not affect the thread safety of object code produced by the compiler or
12859 that of libraries supplied with it.
12861 @item -pthreads
12862 @opindex pthreads
12863 Add support for multithreading using the POSIX threads library.  This
12864 option sets flags for both the preprocessor and linker.  This option does
12865 not affect the thread safety of object code produced  by the compiler or
12866 that of libraries supplied with it.
12868 @item -pthread
12869 @opindex pthread
12870 This is a synonym for @option{-pthreads}.
12871 @end table
12873 @node SPU Options
12874 @subsection SPU Options
12875 @cindex SPU options
12877 These @samp{-m} options are supported on the SPU:
12879 @table @gcctabopt
12880 @item -mwarn-reloc
12881 @itemx -merror-reloc
12882 @opindex mwarn-reloc
12883 @opindex merror-reloc
12885 The loader for SPU does not handle dynamic relocations.  By default, GCC
12886 will give an error when it generates code that requires a dynamic
12887 relocation.  @option{-mno-error-reloc} disables the error,
12888 @option{-mwarn-reloc} will generate a warning instead.
12890 @item -msafe-dma
12891 @itemx -munsafe-dma
12892 @opindex msafe-dma
12893 @opindex munsafe-dma
12895 Instructions which initiate or test completion of DMA must not be
12896 reordered with respect to loads and stores of the memory which is being
12897 accessed.  Users typically address this problem using the volatile
12898 keyword, but that can lead to inefficient code in places where the
12899 memory is known to not change.  Rather than mark the memory as volatile
12900 we treat the DMA instructions as potentially effecting all memory.  With
12901 @option{-munsafe-dma} users must use the volatile keyword to protect
12902 memory accesses.
12904 @item -mbranch-hints
12905 @opindex mbranch-hints
12907 By default, GCC will generate a branch hint instruction to avoid
12908 pipeline stalls for always taken or probably taken branches.  A hint
12909 will not be generated closer than 8 instructions away from its branch.
12910 There is little reason to disable them, except for debugging purposes,
12911 or to make an object a little bit smaller.
12913 @item -msmall-mem
12914 @itemx -mlarge-mem
12915 @opindex msmall-mem
12916 @opindex mlarge-mem
12918 By default, GCC generates code assuming that addresses are never larger
12919 than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
12920 a full 32 bit address.
12922 @end table
12924 @node System V Options
12925 @subsection Options for System V
12927 These additional options are available on System V Release 4 for
12928 compatibility with other compilers on those systems:
12930 @table @gcctabopt
12931 @item -G
12932 @opindex G
12933 Create a shared object.
12934 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
12936 @item -Qy
12937 @opindex Qy
12938 Identify the versions of each tool used by the compiler, in a
12939 @code{.ident} assembler directive in the output.
12941 @item -Qn
12942 @opindex Qn
12943 Refrain from adding @code{.ident} directives to the output file (this is
12944 the default).
12946 @item -YP,@var{dirs}
12947 @opindex YP
12948 Search the directories @var{dirs}, and no others, for libraries
12949 specified with @option{-l}.
12951 @item -Ym,@var{dir}
12952 @opindex Ym
12953 Look in the directory @var{dir} to find the M4 preprocessor.
12954 The assembler uses this option.
12955 @c This is supposed to go with a -Yd for predefined M4 macro files, but
12956 @c the generic assembler that comes with Solaris takes just -Ym.
12957 @end table
12959 @node TMS320C3x/C4x Options
12960 @subsection TMS320C3x/C4x Options
12961 @cindex TMS320C3x/C4x Options
12963 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
12965 @table @gcctabopt
12967 @item -mcpu=@var{cpu_type}
12968 @opindex mcpu
12969 Set the instruction set, register set, and instruction scheduling
12970 parameters for machine type @var{cpu_type}.  Supported values for
12971 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
12972 @samp{c44}.  The default is @samp{c40} to generate code for the
12973 TMS320C40.
12975 @item -mbig-memory
12976 @itemx -mbig
12977 @itemx -msmall-memory
12978 @itemx -msmall
12979 @opindex mbig-memory
12980 @opindex mbig
12981 @opindex msmall-memory
12982 @opindex msmall
12983 Generates code for the big or small memory model.  The small memory
12984 model assumed that all data fits into one 64K word page.  At run-time
12985 the data page (DP) register must be set to point to the 64K page
12986 containing the .bss and .data program sections.  The big memory model is
12987 the default and requires reloading of the DP register for every direct
12988 memory access.
12990 @item -mbk
12991 @itemx -mno-bk
12992 @opindex mbk
12993 @opindex mno-bk
12994 Allow (disallow) allocation of general integer operands into the block
12995 count register BK@.
12997 @item -mdb
12998 @itemx -mno-db
12999 @opindex mdb
13000 @opindex mno-db
13001 Enable (disable) generation of code using decrement and branch,
13002 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
13003 on the safe side, this is disabled for the C3x, since the maximum
13004 iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
13005 @math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
13006 that it can utilize the decrement and branch instruction, but will give
13007 up if there is more than one memory reference in the loop.  Thus a loop
13008 where the loop counter is decremented can generate slightly more
13009 efficient code, in cases where the RPTB instruction cannot be utilized.
13011 @item -mdp-isr-reload
13012 @itemx -mparanoid
13013 @opindex mdp-isr-reload
13014 @opindex mparanoid
13015 Force the DP register to be saved on entry to an interrupt service
13016 routine (ISR), reloaded to point to the data section, and restored on
13017 exit from the ISR@.  This should not be required unless someone has
13018 violated the small memory model by modifying the DP register, say within
13019 an object library.
13021 @item -mmpyi
13022 @itemx -mno-mpyi
13023 @opindex mmpyi
13024 @opindex mno-mpyi
13025 For the C3x use the 24-bit MPYI instruction for integer multiplies
13026 instead of a library call to guarantee 32-bit results.  Note that if one
13027 of the operands is a constant, then the multiplication will be performed
13028 using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
13029 then squaring operations are performed inline instead of a library call.
13031 @item -mfast-fix
13032 @itemx -mno-fast-fix
13033 @opindex mfast-fix
13034 @opindex mno-fast-fix
13035 The C3x/C4x FIX instruction to convert a floating point value to an
13036 integer value chooses the nearest integer less than or equal to the
13037 floating point value rather than to the nearest integer.  Thus if the
13038 floating point number is negative, the result will be incorrectly
13039 truncated an additional code is necessary to detect and correct this
13040 case.  This option can be used to disable generation of the additional
13041 code required to correct the result.
13043 @item -mrptb
13044 @itemx -mno-rptb
13045 @opindex mrptb
13046 @opindex mno-rptb
13047 Enable (disable) generation of repeat block sequences using the RPTB
13048 instruction for zero overhead looping.  The RPTB construct is only used
13049 for innermost loops that do not call functions or jump across the loop
13050 boundaries.  There is no advantage having nested RPTB loops due to the
13051 overhead required to save and restore the RC, RS, and RE registers.
13052 This is enabled by default with @option{-O2}.
13054 @item -mrpts=@var{count}
13055 @itemx -mno-rpts
13056 @opindex mrpts
13057 @opindex mno-rpts
13058 Enable (disable) the use of the single instruction repeat instruction
13059 RPTS@.  If a repeat block contains a single instruction, and the loop
13060 count can be guaranteed to be less than the value @var{count}, GCC will
13061 emit a RPTS instruction instead of a RPTB@.  If no value is specified,
13062 then a RPTS will be emitted even if the loop count cannot be determined
13063 at compile time.  Note that the repeated instruction following RPTS does
13064 not have to be reloaded from memory each iteration, thus freeing up the
13065 CPU buses for operands.  However, since interrupts are blocked by this
13066 instruction, it is disabled by default.
13068 @item -mloop-unsigned
13069 @itemx -mno-loop-unsigned
13070 @opindex mloop-unsigned
13071 @opindex mno-loop-unsigned
13072 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
13073 is @math{2^{31} + 1} since these instructions test if the iteration count is
13074 negative to terminate the loop.  If the iteration count is unsigned
13075 there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
13076 exceeded.  This switch allows an unsigned iteration count.
13078 @item -mti
13079 @opindex mti
13080 Try to emit an assembler syntax that the TI assembler (asm30) is happy
13081 with.  This also enforces compatibility with the API employed by the TI
13082 C3x C compiler.  For example, long doubles are passed as structures
13083 rather than in floating point registers.
13085 @item -mregparm
13086 @itemx -mmemparm
13087 @opindex mregparm
13088 @opindex mmemparm
13089 Generate code that uses registers (stack) for passing arguments to functions.
13090 By default, arguments are passed in registers where possible rather
13091 than by pushing arguments on to the stack.
13093 @item -mparallel-insns
13094 @itemx -mno-parallel-insns
13095 @opindex mparallel-insns
13096 @opindex mno-parallel-insns
13097 Allow the generation of parallel instructions.  This is enabled by
13098 default with @option{-O2}.
13100 @item -mparallel-mpy
13101 @itemx -mno-parallel-mpy
13102 @opindex mparallel-mpy
13103 @opindex mno-parallel-mpy
13104 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
13105 provided @option{-mparallel-insns} is also specified.  These instructions have
13106 tight register constraints which can pessimize the code generation
13107 of large functions.
13109 @end table
13111 @node V850 Options
13112 @subsection V850 Options
13113 @cindex V850 Options
13115 These @samp{-m} options are defined for V850 implementations:
13117 @table @gcctabopt
13118 @item -mlong-calls
13119 @itemx -mno-long-calls
13120 @opindex mlong-calls
13121 @opindex mno-long-calls
13122 Treat all calls as being far away (near).  If calls are assumed to be
13123 far away, the compiler will always load the functions address up into a
13124 register, and call indirect through the pointer.
13126 @item -mno-ep
13127 @itemx -mep
13128 @opindex mno-ep
13129 @opindex mep
13130 Do not optimize (do optimize) basic blocks that use the same index
13131 pointer 4 or more times to copy pointer into the @code{ep} register, and
13132 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
13133 option is on by default if you optimize.
13135 @item -mno-prolog-function
13136 @itemx -mprolog-function
13137 @opindex mno-prolog-function
13138 @opindex mprolog-function
13139 Do not use (do use) external functions to save and restore registers
13140 at the prologue and epilogue of a function.  The external functions
13141 are slower, but use less code space if more than one function saves
13142 the same number of registers.  The @option{-mprolog-function} option
13143 is on by default if you optimize.
13145 @item -mspace
13146 @opindex mspace
13147 Try to make the code as small as possible.  At present, this just turns
13148 on the @option{-mep} and @option{-mprolog-function} options.
13150 @item -mtda=@var{n}
13151 @opindex mtda
13152 Put static or global variables whose size is @var{n} bytes or less into
13153 the tiny data area that register @code{ep} points to.  The tiny data
13154 area can hold up to 256 bytes in total (128 bytes for byte references).
13156 @item -msda=@var{n}
13157 @opindex msda
13158 Put static or global variables whose size is @var{n} bytes or less into
13159 the small data area that register @code{gp} points to.  The small data
13160 area can hold up to 64 kilobytes.
13162 @item -mzda=@var{n}
13163 @opindex mzda
13164 Put static or global variables whose size is @var{n} bytes or less into
13165 the first 32 kilobytes of memory.
13167 @item -mv850
13168 @opindex mv850
13169 Specify that the target processor is the V850.
13171 @item -mbig-switch
13172 @opindex mbig-switch
13173 Generate code suitable for big switch tables.  Use this option only if
13174 the assembler/linker complain about out of range branches within a switch
13175 table.
13177 @item -mapp-regs
13178 @opindex mapp-regs
13179 This option will cause r2 and r5 to be used in the code generated by
13180 the compiler.  This setting is the default.
13182 @item -mno-app-regs
13183 @opindex mno-app-regs
13184 This option will cause r2 and r5 to be treated as fixed registers.
13186 @item -mv850e1
13187 @opindex mv850e1
13188 Specify that the target processor is the V850E1.  The preprocessor
13189 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
13190 this option is used.
13192 @item -mv850e
13193 @opindex mv850e
13194 Specify that the target processor is the V850E@.  The preprocessor
13195 constant @samp{__v850e__} will be defined if this option is used.
13197 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
13198 are defined then a default target processor will be chosen and the
13199 relevant @samp{__v850*__} preprocessor constant will be defined.
13201 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
13202 defined, regardless of which processor variant is the target.
13204 @item -mdisable-callt
13205 @opindex mdisable-callt
13206 This option will suppress generation of the CALLT instruction for the
13207 v850e and v850e1 flavors of the v850 architecture.  The default is
13208 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
13210 @end table
13212 @node VAX Options
13213 @subsection VAX Options
13214 @cindex VAX options
13216 These @samp{-m} options are defined for the VAX:
13218 @table @gcctabopt
13219 @item -munix
13220 @opindex munix
13221 Do not output certain jump instructions (@code{aobleq} and so on)
13222 that the Unix assembler for the VAX cannot handle across long
13223 ranges.
13225 @item -mgnu
13226 @opindex mgnu
13227 Do output those jump instructions, on the assumption that you
13228 will assemble with the GNU assembler.
13230 @item -mg
13231 @opindex mg
13232 Output code for g-format floating point numbers instead of d-format.
13233 @end table
13235 @node x86-64 Options
13236 @subsection x86-64 Options
13237 @cindex x86-64 options
13239 These are listed under @xref{i386 and x86-64 Options}.
13241 @node Xstormy16 Options
13242 @subsection Xstormy16 Options
13243 @cindex Xstormy16 Options
13245 These options are defined for Xstormy16:
13247 @table @gcctabopt
13248 @item -msim
13249 @opindex msim
13250 Choose startup files and linker script suitable for the simulator.
13251 @end table
13253 @node Xtensa Options
13254 @subsection Xtensa Options
13255 @cindex Xtensa Options
13257 These options are supported for Xtensa targets:
13259 @table @gcctabopt
13260 @item -mconst16
13261 @itemx -mno-const16
13262 @opindex mconst16
13263 @opindex mno-const16
13264 Enable or disable use of @code{CONST16} instructions for loading
13265 constant values.  The @code{CONST16} instruction is currently not a
13266 standard option from Tensilica.  When enabled, @code{CONST16}
13267 instructions are always used in place of the standard @code{L32R}
13268 instructions.  The use of @code{CONST16} is enabled by default only if
13269 the @code{L32R} instruction is not available.
13271 @item -mfused-madd
13272 @itemx -mno-fused-madd
13273 @opindex mfused-madd
13274 @opindex mno-fused-madd
13275 Enable or disable use of fused multiply/add and multiply/subtract
13276 instructions in the floating-point option.  This has no effect if the
13277 floating-point option is not also enabled.  Disabling fused multiply/add
13278 and multiply/subtract instructions forces the compiler to use separate
13279 instructions for the multiply and add/subtract operations.  This may be
13280 desirable in some cases where strict IEEE 754-compliant results are
13281 required: the fused multiply add/subtract instructions do not round the
13282 intermediate result, thereby producing results with @emph{more} bits of
13283 precision than specified by the IEEE standard.  Disabling fused multiply
13284 add/subtract instructions also ensures that the program output is not
13285 sensitive to the compiler's ability to combine multiply and add/subtract
13286 operations.
13288 @item -mtext-section-literals
13289 @itemx -mno-text-section-literals
13290 @opindex mtext-section-literals
13291 @opindex mno-text-section-literals
13292 Control the treatment of literal pools.  The default is
13293 @option{-mno-text-section-literals}, which places literals in a separate
13294 section in the output file.  This allows the literal pool to be placed
13295 in a data RAM/ROM, and it also allows the linker to combine literal
13296 pools from separate object files to remove redundant literals and
13297 improve code size.  With @option{-mtext-section-literals}, the literals
13298 are interspersed in the text section in order to keep them as close as
13299 possible to their references.  This may be necessary for large assembly
13300 files.
13302 @item -mtarget-align
13303 @itemx -mno-target-align
13304 @opindex mtarget-align
13305 @opindex mno-target-align
13306 When this option is enabled, GCC instructs the assembler to
13307 automatically align instructions to reduce branch penalties at the
13308 expense of some code density.  The assembler attempts to widen density
13309 instructions to align branch targets and the instructions following call
13310 instructions.  If there are not enough preceding safe density
13311 instructions to align a target, no widening will be performed.  The
13312 default is @option{-mtarget-align}.  These options do not affect the
13313 treatment of auto-aligned instructions like @code{LOOP}, which the
13314 assembler will always align, either by widening density instructions or
13315 by inserting no-op instructions.
13317 @item -mlongcalls
13318 @itemx -mno-longcalls
13319 @opindex mlongcalls
13320 @opindex mno-longcalls
13321 When this option is enabled, GCC instructs the assembler to translate
13322 direct calls to indirect calls unless it can determine that the target
13323 of a direct call is in the range allowed by the call instruction.  This
13324 translation typically occurs for calls to functions in other source
13325 files.  Specifically, the assembler translates a direct @code{CALL}
13326 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
13327 The default is @option{-mno-longcalls}.  This option should be used in
13328 programs where the call target can potentially be out of range.  This
13329 option is implemented in the assembler, not the compiler, so the
13330 assembly code generated by GCC will still show direct call
13331 instructions---look at the disassembled object code to see the actual
13332 instructions.  Note that the assembler will use an indirect call for
13333 every cross-file call, not just those that really will be out of range.
13334 @end table
13336 @node zSeries Options
13337 @subsection zSeries Options
13338 @cindex zSeries options
13340 These are listed under @xref{S/390 and zSeries Options}.
13342 @node Code Gen Options
13343 @section Options for Code Generation Conventions
13344 @cindex code generation conventions
13345 @cindex options, code generation
13346 @cindex run-time options
13348 These machine-independent options control the interface conventions
13349 used in code generation.
13351 Most of them have both positive and negative forms; the negative form
13352 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
13353 one of the forms is listed---the one which is not the default.  You
13354 can figure out the other form by either removing @samp{no-} or adding
13357 @table @gcctabopt
13358 @item -fbounds-check
13359 @opindex fbounds-check
13360 For front-ends that support it, generate additional code to check that
13361 indices used to access arrays are within the declared range.  This is
13362 currently only supported by the Java and Fortran front-ends, where
13363 this option defaults to true and false respectively.
13365 @item -ftrapv
13366 @opindex ftrapv
13367 This option generates traps for signed overflow on addition, subtraction,
13368 multiplication operations.
13370 @item -fwrapv
13371 @opindex fwrapv
13372 This option instructs the compiler to assume that signed arithmetic
13373 overflow of addition, subtraction and multiplication wraps around
13374 using twos-complement representation.  This flag enables some optimizations
13375 and disables others.  This option is enabled by default for the Java
13376 front-end, as required by the Java language specification.
13378 @item -fexceptions
13379 @opindex fexceptions
13380 Enable exception handling.  Generates extra code needed to propagate
13381 exceptions.  For some targets, this implies GCC will generate frame
13382 unwind information for all functions, which can produce significant data
13383 size overhead, although it does not affect execution.  If you do not
13384 specify this option, GCC will enable it by default for languages like
13385 C++ which normally require exception handling, and disable it for
13386 languages like C that do not normally require it.  However, you may need
13387 to enable this option when compiling C code that needs to interoperate
13388 properly with exception handlers written in C++.  You may also wish to
13389 disable this option if you are compiling older C++ programs that don't
13390 use exception handling.
13392 @item -fnon-call-exceptions
13393 @opindex fnon-call-exceptions
13394 Generate code that allows trapping instructions to throw exceptions.
13395 Note that this requires platform-specific runtime support that does
13396 not exist everywhere.  Moreover, it only allows @emph{trapping}
13397 instructions to throw exceptions, i.e.@: memory references or floating
13398 point instructions.  It does not allow exceptions to be thrown from
13399 arbitrary signal handlers such as @code{SIGALRM}.
13401 @item -funwind-tables
13402 @opindex funwind-tables
13403 Similar to @option{-fexceptions}, except that it will just generate any needed
13404 static data, but will not affect the generated code in any other way.
13405 You will normally not enable this option; instead, a language processor
13406 that needs this handling would enable it on your behalf.
13408 @item -fasynchronous-unwind-tables
13409 @opindex fasynchronous-unwind-tables
13410 Generate unwind table in dwarf2 format, if supported by target machine.  The
13411 table is exact at each instruction boundary, so it can be used for stack
13412 unwinding from asynchronous events (such as debugger or garbage collector).
13414 @item -fpcc-struct-return
13415 @opindex fpcc-struct-return
13416 Return ``short'' @code{struct} and @code{union} values in memory like
13417 longer ones, rather than in registers.  This convention is less
13418 efficient, but it has the advantage of allowing intercallability between
13419 GCC-compiled files and files compiled with other compilers, particularly
13420 the Portable C Compiler (pcc).
13422 The precise convention for returning structures in memory depends
13423 on the target configuration macros.
13425 Short structures and unions are those whose size and alignment match
13426 that of some integer type.
13428 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
13429 switch is not binary compatible with code compiled with the
13430 @option{-freg-struct-return} switch.
13431 Use it to conform to a non-default application binary interface.
13433 @item -freg-struct-return
13434 @opindex freg-struct-return
13435 Return @code{struct} and @code{union} values in registers when possible.
13436 This is more efficient for small structures than
13437 @option{-fpcc-struct-return}.
13439 If you specify neither @option{-fpcc-struct-return} nor
13440 @option{-freg-struct-return}, GCC defaults to whichever convention is
13441 standard for the target.  If there is no standard convention, GCC
13442 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
13443 the principal compiler.  In those cases, we can choose the standard, and
13444 we chose the more efficient register return alternative.
13446 @strong{Warning:} code compiled with the @option{-freg-struct-return}
13447 switch is not binary compatible with code compiled with the
13448 @option{-fpcc-struct-return} switch.
13449 Use it to conform to a non-default application binary interface.
13451 @item -fshort-enums
13452 @opindex fshort-enums
13453 Allocate to an @code{enum} type only as many bytes as it needs for the
13454 declared range of possible values.  Specifically, the @code{enum} type
13455 will be equivalent to the smallest integer type which has enough room.
13457 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
13458 code that is not binary compatible with code generated without that switch.
13459 Use it to conform to a non-default application binary interface.
13461 @item -fshort-double
13462 @opindex fshort-double
13463 Use the same size for @code{double} as for @code{float}.
13465 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
13466 code that is not binary compatible with code generated without that switch.
13467 Use it to conform to a non-default application binary interface.
13469 @item -fshort-wchar
13470 @opindex fshort-wchar
13471 Override the underlying type for @samp{wchar_t} to be @samp{short
13472 unsigned int} instead of the default for the target.  This option is
13473 useful for building programs to run under WINE@.
13475 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
13476 code that is not binary compatible with code generated without that switch.
13477 Use it to conform to a non-default application binary interface.
13479 @item -fno-common
13480 @opindex fno-common
13481 In C, allocate even uninitialized global variables in the data section of the
13482 object file, rather than generating them as common blocks.  This has the
13483 effect that if the same variable is declared (without @code{extern}) in
13484 two different compilations, you will get an error when you link them.
13485 The only reason this might be useful is if you wish to verify that the
13486 program will work on other systems which always work this way.
13488 @item -fno-ident
13489 @opindex fno-ident
13490 Ignore the @samp{#ident} directive.
13492 @item -finhibit-size-directive
13493 @opindex finhibit-size-directive
13494 Don't output a @code{.size} assembler directive, or anything else that
13495 would cause trouble if the function is split in the middle, and the
13496 two halves are placed at locations far apart in memory.  This option is
13497 used when compiling @file{crtstuff.c}; you should not need to use it
13498 for anything else.
13500 @item -fverbose-asm
13501 @opindex fverbose-asm
13502 Put extra commentary information in the generated assembly code to
13503 make it more readable.  This option is generally only of use to those
13504 who actually need to read the generated assembly code (perhaps while
13505 debugging the compiler itself).
13507 @option{-fno-verbose-asm}, the default, causes the
13508 extra information to be omitted and is useful when comparing two assembler
13509 files.
13511 @item -fpic
13512 @opindex fpic
13513 @cindex global offset table
13514 @cindex PIC
13515 Generate position-independent code (PIC) suitable for use in a shared
13516 library, if supported for the target machine.  Such code accesses all
13517 constant addresses through a global offset table (GOT)@.  The dynamic
13518 loader resolves the GOT entries when the program starts (the dynamic
13519 loader is not part of GCC; it is part of the operating system).  If
13520 the GOT size for the linked executable exceeds a machine-specific
13521 maximum size, you get an error message from the linker indicating that
13522 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
13523 instead.  (These maximums are 8k on the SPARC and 32k
13524 on the m68k and RS/6000.  The 386 has no such limit.)
13526 Position-independent code requires special support, and therefore works
13527 only on certain machines.  For the 386, GCC supports PIC for System V
13528 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
13529 position-independent.
13531 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
13532 are defined to 1.
13534 @item -fPIC
13535 @opindex fPIC
13536 If supported for the target machine, emit position-independent code,
13537 suitable for dynamic linking and avoiding any limit on the size of the
13538 global offset table.  This option makes a difference on the m68k,
13539 PowerPC and SPARC@.
13541 Position-independent code requires special support, and therefore works
13542 only on certain machines.
13544 When this flag is set, the macros @code{__pic__} and @code{__PIC__}
13545 are defined to 2.
13547 @item -fpie
13548 @itemx -fPIE
13549 @opindex fpie
13550 @opindex fPIE
13551 These options are similar to @option{-fpic} and @option{-fPIC}, but
13552 generated position independent code can be only linked into executables.
13553 Usually these options are used when @option{-pie} GCC option will be
13554 used during linking.
13556 @item -fno-jump-tables
13557 @opindex fno-jump-tables
13558 Do not use jump tables for switch statements even where it would be
13559 more efficient than other code generation strategies.  This option is
13560 of use in conjunction with @option{-fpic} or @option{-fPIC} for
13561 building code which forms part of a dynamic linker and cannot
13562 reference the address of a jump table.  On some targets, jump tables
13563 do not require a GOT and this option is not needed.
13565 @item -ffixed-@var{reg}
13566 @opindex ffixed
13567 Treat the register named @var{reg} as a fixed register; generated code
13568 should never refer to it (except perhaps as a stack pointer, frame
13569 pointer or in some other fixed role).
13571 @var{reg} must be the name of a register.  The register names accepted
13572 are machine-specific and are defined in the @code{REGISTER_NAMES}
13573 macro in the machine description macro file.
13575 This flag does not have a negative form, because it specifies a
13576 three-way choice.
13578 @item -fcall-used-@var{reg}
13579 @opindex fcall-used
13580 Treat the register named @var{reg} as an allocable register that is
13581 clobbered by function calls.  It may be allocated for temporaries or
13582 variables that do not live across a call.  Functions compiled this way
13583 will not save and restore the register @var{reg}.
13585 It is an error to used this flag with the frame pointer or stack pointer.
13586 Use of this flag for other registers that have fixed pervasive roles in
13587 the machine's execution model will produce disastrous results.
13589 This flag does not have a negative form, because it specifies a
13590 three-way choice.
13592 @item -fcall-saved-@var{reg}
13593 @opindex fcall-saved
13594 Treat the register named @var{reg} as an allocable register saved by
13595 functions.  It may be allocated even for temporaries or variables that
13596 live across a call.  Functions compiled this way will save and restore
13597 the register @var{reg} if they use it.
13599 It is an error to used this flag with the frame pointer or stack pointer.
13600 Use of this flag for other registers that have fixed pervasive roles in
13601 the machine's execution model will produce disastrous results.
13603 A different sort of disaster will result from the use of this flag for
13604 a register in which function values may be returned.
13606 This flag does not have a negative form, because it specifies a
13607 three-way choice.
13609 @item -fpack-struct[=@var{n}]
13610 @opindex fpack-struct
13611 Without a value specified, pack all structure members together without
13612 holes.  When a value is specified (which must be a small power of two), pack
13613 structure members according to this value, representing the maximum
13614 alignment (that is, objects with default alignment requirements larger than
13615 this will be output potentially unaligned at the next fitting location.
13617 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
13618 code that is not binary compatible with code generated without that switch.
13619 Additionally, it makes the code suboptimal.
13620 Use it to conform to a non-default application binary interface.
13622 @item -finstrument-functions
13623 @opindex finstrument-functions
13624 Generate instrumentation calls for entry and exit to functions.  Just
13625 after function entry and just before function exit, the following
13626 profiling functions will be called with the address of the current
13627 function and its call site.  (On some platforms,
13628 @code{__builtin_return_address} does not work beyond the current
13629 function, so the call site information may not be available to the
13630 profiling functions otherwise.)
13632 @smallexample
13633 void __cyg_profile_func_enter (void *this_fn,
13634                                void *call_site);
13635 void __cyg_profile_func_exit  (void *this_fn,
13636                                void *call_site);
13637 @end smallexample
13639 The first argument is the address of the start of the current function,
13640 which may be looked up exactly in the symbol table.
13642 This instrumentation is also done for functions expanded inline in other
13643 functions.  The profiling calls will indicate where, conceptually, the
13644 inline function is entered and exited.  This means that addressable
13645 versions of such functions must be available.  If all your uses of a
13646 function are expanded inline, this may mean an additional expansion of
13647 code size.  If you use @samp{extern inline} in your C code, an
13648 addressable version of such functions must be provided.  (This is
13649 normally the case anyways, but if you get lucky and the optimizer always
13650 expands the functions inline, you might have gotten away without
13651 providing static copies.)
13653 A function may be given the attribute @code{no_instrument_function}, in
13654 which case this instrumentation will not be done.  This can be used, for
13655 example, for the profiling functions listed above, high-priority
13656 interrupt routines, and any functions from which the profiling functions
13657 cannot safely be called (perhaps signal handlers, if the profiling
13658 routines generate output or allocate memory).
13660 @item -fstack-check
13661 @opindex fstack-check
13662 Generate code to verify that you do not go beyond the boundary of the
13663 stack.  You should specify this flag if you are running in an
13664 environment with multiple threads, but only rarely need to specify it in
13665 a single-threaded environment since stack overflow is automatically
13666 detected on nearly all systems if there is only one stack.
13668 Note that this switch does not actually cause checking to be done; the
13669 operating system must do that.  The switch causes generation of code
13670 to ensure that the operating system sees the stack being extended.
13672 @item -fstack-limit-register=@var{reg}
13673 @itemx -fstack-limit-symbol=@var{sym}
13674 @itemx -fno-stack-limit
13675 @opindex fstack-limit-register
13676 @opindex fstack-limit-symbol
13677 @opindex fno-stack-limit
13678 Generate code to ensure that the stack does not grow beyond a certain value,
13679 either the value of a register or the address of a symbol.  If the stack
13680 would grow beyond the value, a signal is raised.  For most targets,
13681 the signal is raised before the stack overruns the boundary, so
13682 it is possible to catch the signal without taking special precautions.
13684 For instance, if the stack starts at absolute address @samp{0x80000000}
13685 and grows downwards, you can use the flags
13686 @option{-fstack-limit-symbol=__stack_limit} and
13687 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
13688 of 128KB@.  Note that this may only work with the GNU linker.
13690 @cindex aliasing of parameters
13691 @cindex parameters, aliased
13692 @item -fargument-alias
13693 @itemx -fargument-noalias
13694 @itemx -fargument-noalias-global
13695 @itemx -fargument-noalias-anything
13696 @opindex fargument-alias
13697 @opindex fargument-noalias
13698 @opindex fargument-noalias-global
13699 @opindex fargument-noalias-anything
13700 Specify the possible relationships among parameters and between
13701 parameters and global data.
13703 @option{-fargument-alias} specifies that arguments (parameters) may
13704 alias each other and may alias global storage.@*
13705 @option{-fargument-noalias} specifies that arguments do not alias
13706 each other, but may alias global storage.@*
13707 @option{-fargument-noalias-global} specifies that arguments do not
13708 alias each other and do not alias global storage.
13709 @option{-fargument-noalias-anything} specifies that arguments do not
13710 alias any other storage.
13712 Each language will automatically use whatever option is required by
13713 the language standard.  You should not need to use these options yourself.
13715 @item -fleading-underscore
13716 @opindex fleading-underscore
13717 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
13718 change the way C symbols are represented in the object file.  One use
13719 is to help link with legacy assembly code.
13721 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
13722 generate code that is not binary compatible with code generated without that
13723 switch.  Use it to conform to a non-default application binary interface.
13724 Not all targets provide complete support for this switch.
13726 @item -ftls-model=@var{model}
13727 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
13728 The @var{model} argument should be one of @code{global-dynamic},
13729 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
13731 The default without @option{-fpic} is @code{initial-exec}; with
13732 @option{-fpic} the default is @code{global-dynamic}.
13734 @item -fvisibility=@var{default|internal|hidden|protected}
13735 @opindex fvisibility
13736 Set the default ELF image symbol visibility to the specified option---all
13737 symbols will be marked with this unless overridden within the code.
13738 Using this feature can very substantially improve linking and
13739 load times of shared object libraries, produce more optimized
13740 code, provide near-perfect API export and prevent symbol clashes.
13741 It is @strong{strongly} recommended that you use this in any shared objects
13742 you distribute.
13744 Despite the nomenclature, @code{default} always means public ie;
13745 available to be linked against from outside the shared object.
13746 @code{protected} and @code{internal} are pretty useless in real-world
13747 usage so the only other commonly used option will be @code{hidden}.
13748 The default if @option{-fvisibility} isn't specified is
13749 @code{default}, i.e., make every
13750 symbol public---this causes the same behavior as previous versions of
13751 GCC@.
13753 A good explanation of the benefits offered by ensuring ELF
13754 symbols have the correct visibility is given by ``How To Write
13755 Shared Libraries'' by Ulrich Drepper (which can be found at
13756 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
13757 solution made possible by this option to marking things hidden when
13758 the default is public is to make the default hidden and mark things
13759 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
13760 and @code{__attribute__ ((visibility("default")))} instead of
13761 @code{__declspec(dllexport)} you get almost identical semantics with
13762 identical syntax.  This is a great boon to those working with
13763 cross-platform projects.
13765 For those adding visibility support to existing code, you may find
13766 @samp{#pragma GCC visibility} of use.  This works by you enclosing
13767 the declarations you wish to set visibility for with (for example)
13768 @samp{#pragma GCC visibility push(hidden)} and
13769 @samp{#pragma GCC visibility pop}.
13770 Bear in mind that symbol visibility should be viewed @strong{as
13771 part of the API interface contract} and thus all new code should
13772 always specify visibility when it is not the default ie; declarations
13773 only for use within the local DSO should @strong{always} be marked explicitly
13774 as hidden as so to avoid PLT indirection overheads---making this
13775 abundantly clear also aids readability and self-documentation of the code.
13776 Note that due to ISO C++ specification requirements, operator new and
13777 operator delete must always be of default visibility.
13779 Be aware that headers from outside your project, in particular system
13780 headers and headers from any other library you use, may not be
13781 expecting to be compiled with visibility other than the default.  You
13782 may need to explicitly say @samp{#pragma GCC visibility push(default)}
13783 before including any such headers.
13785 @samp{extern} declarations are not affected by @samp{-fvisibility}, so
13786 a lot of code can be recompiled with @samp{-fvisibility=hidden} with
13787 no modifications.  However, this means that calls to @samp{extern}
13788 functions with no explicit visibility will use the PLT, so it is more
13789 effective to use @samp{__attribute ((visibility))} and/or
13790 @samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
13791 declarations should be treated as hidden.
13793 Note that @samp{-fvisibility} does affect C++ vague linkage
13794 entities. This means that, for instance, an exception class that will
13795 be thrown between DSOs must be explicitly marked with default
13796 visibility so that the @samp{type_info} nodes will be unified between
13797 the DSOs.
13799 An overview of these techniques, their benefits and how to use them
13800 is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
13802 @end table
13804 @c man end
13806 @node Environment Variables
13807 @section Environment Variables Affecting GCC
13808 @cindex environment variables
13810 @c man begin ENVIRONMENT
13811 This section describes several environment variables that affect how GCC
13812 operates.  Some of them work by specifying directories or prefixes to use
13813 when searching for various kinds of files.  Some are used to specify other
13814 aspects of the compilation environment.
13816 Note that you can also specify places to search using options such as
13817 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
13818 take precedence over places specified using environment variables, which
13819 in turn take precedence over those specified by the configuration of GCC@.
13820 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
13821 GNU Compiler Collection (GCC) Internals}.
13823 @table @env
13824 @item LANG
13825 @itemx LC_CTYPE
13826 @c @itemx LC_COLLATE
13827 @itemx LC_MESSAGES
13828 @c @itemx LC_MONETARY
13829 @c @itemx LC_NUMERIC
13830 @c @itemx LC_TIME
13831 @itemx LC_ALL
13832 @findex LANG
13833 @findex LC_CTYPE
13834 @c @findex LC_COLLATE
13835 @findex LC_MESSAGES
13836 @c @findex LC_MONETARY
13837 @c @findex LC_NUMERIC
13838 @c @findex LC_TIME
13839 @findex LC_ALL
13840 @cindex locale
13841 These environment variables control the way that GCC uses
13842 localization information that allow GCC to work with different
13843 national conventions.  GCC inspects the locale categories
13844 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
13845 so.  These locale categories can be set to any value supported by your
13846 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
13847 Kingdom encoded in UTF-8.
13849 The @env{LC_CTYPE} environment variable specifies character
13850 classification.  GCC uses it to determine the character boundaries in
13851 a string; this is needed for some multibyte encodings that contain quote
13852 and escape characters that would otherwise be interpreted as a string
13853 end or escape.
13855 The @env{LC_MESSAGES} environment variable specifies the language to
13856 use in diagnostic messages.
13858 If the @env{LC_ALL} environment variable is set, it overrides the value
13859 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
13860 and @env{LC_MESSAGES} default to the value of the @env{LANG}
13861 environment variable.  If none of these variables are set, GCC
13862 defaults to traditional C English behavior.
13864 @item TMPDIR
13865 @findex TMPDIR
13866 If @env{TMPDIR} is set, it specifies the directory to use for temporary
13867 files.  GCC uses temporary files to hold the output of one stage of
13868 compilation which is to be used as input to the next stage: for example,
13869 the output of the preprocessor, which is the input to the compiler
13870 proper.
13872 @item GCC_EXEC_PREFIX
13873 @findex GCC_EXEC_PREFIX
13874 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
13875 names of the subprograms executed by the compiler.  No slash is added
13876 when this prefix is combined with the name of a subprogram, but you can
13877 specify a prefix that ends with a slash if you wish.
13879 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
13880 an appropriate prefix to use based on the pathname it was invoked with.
13882 If GCC cannot find the subprogram using the specified prefix, it
13883 tries looking in the usual places for the subprogram.
13885 The default value of @env{GCC_EXEC_PREFIX} is
13886 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
13887 of @code{prefix} when you ran the @file{configure} script.
13889 Other prefixes specified with @option{-B} take precedence over this prefix.
13891 This prefix is also used for finding files such as @file{crt0.o} that are
13892 used for linking.
13894 In addition, the prefix is used in an unusual way in finding the
13895 directories to search for header files.  For each of the standard
13896 directories whose name normally begins with @samp{/usr/local/lib/gcc}
13897 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
13898 replacing that beginning with the specified prefix to produce an
13899 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
13900 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
13901 These alternate directories are searched first; the standard directories
13902 come next.
13904 @item COMPILER_PATH
13905 @findex COMPILER_PATH
13906 The value of @env{COMPILER_PATH} is a colon-separated list of
13907 directories, much like @env{PATH}.  GCC tries the directories thus
13908 specified when searching for subprograms, if it can't find the
13909 subprograms using @env{GCC_EXEC_PREFIX}.
13911 @item LIBRARY_PATH
13912 @findex LIBRARY_PATH
13913 The value of @env{LIBRARY_PATH} is a colon-separated list of
13914 directories, much like @env{PATH}.  When configured as a native compiler,
13915 GCC tries the directories thus specified when searching for special
13916 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
13917 using GCC also uses these directories when searching for ordinary
13918 libraries for the @option{-l} option (but directories specified with
13919 @option{-L} come first).
13921 @item LANG
13922 @findex LANG
13923 @cindex locale definition
13924 This variable is used to pass locale information to the compiler.  One way in
13925 which this information is used is to determine the character set to be used
13926 when character literals, string literals and comments are parsed in C and C++.
13927 When the compiler is configured to allow multibyte characters,
13928 the following values for @env{LANG} are recognized:
13930 @table @samp
13931 @item C-JIS
13932 Recognize JIS characters.
13933 @item C-SJIS
13934 Recognize SJIS characters.
13935 @item C-EUCJP
13936 Recognize EUCJP characters.
13937 @end table
13939 If @env{LANG} is not defined, or if it has some other value, then the
13940 compiler will use mblen and mbtowc as defined by the default locale to
13941 recognize and translate multibyte characters.
13942 @end table
13944 @noindent
13945 Some additional environments variables affect the behavior of the
13946 preprocessor.
13948 @include cppenv.texi
13950 @c man end
13952 @node Precompiled Headers
13953 @section Using Precompiled Headers
13954 @cindex precompiled headers
13955 @cindex speed of compilation
13957 Often large projects have many header files that are included in every
13958 source file.  The time the compiler takes to process these header files
13959 over and over again can account for nearly all of the time required to
13960 build the project.  To make builds faster, GCC allows users to
13961 `precompile' a header file; then, if builds can use the precompiled
13962 header file they will be much faster.
13964 To create a precompiled header file, simply compile it as you would any
13965 other file, if necessary using the @option{-x} option to make the driver
13966 treat it as a C or C++ header file.  You will probably want to use a
13967 tool like @command{make} to keep the precompiled header up-to-date when
13968 the headers it contains change.
13970 A precompiled header file will be searched for when @code{#include} is
13971 seen in the compilation.  As it searches for the included file
13972 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
13973 compiler looks for a precompiled header in each directory just before it
13974 looks for the include file in that directory.  The name searched for is
13975 the name specified in the @code{#include} with @samp{.gch} appended.  If
13976 the precompiled header file can't be used, it is ignored.
13978 For instance, if you have @code{#include "all.h"}, and you have
13979 @file{all.h.gch} in the same directory as @file{all.h}, then the
13980 precompiled header file will be used if possible, and the original
13981 header will be used otherwise.
13983 Alternatively, you might decide to put the precompiled header file in a
13984 directory and use @option{-I} to ensure that directory is searched
13985 before (or instead of) the directory containing the original header.
13986 Then, if you want to check that the precompiled header file is always
13987 used, you can put a file of the same name as the original header in this
13988 directory containing an @code{#error} command.
13990 This also works with @option{-include}.  So yet another way to use
13991 precompiled headers, good for projects not designed with precompiled
13992 header files in mind, is to simply take most of the header files used by
13993 a project, include them from another header file, precompile that header
13994 file, and @option{-include} the precompiled header.  If the header files
13995 have guards against multiple inclusion, they will be skipped because
13996 they've already been included (in the precompiled header).
13998 If you need to precompile the same header file for different
13999 languages, targets, or compiler options, you can instead make a
14000 @emph{directory} named like @file{all.h.gch}, and put each precompiled
14001 header in the directory, perhaps using @option{-o}.  It doesn't matter
14002 what you call the files in the directory, every precompiled header in
14003 the directory will be considered.  The first precompiled header
14004 encountered in the directory that is valid for this compilation will
14005 be used; they're searched in no particular order.
14007 There are many other possibilities, limited only by your imagination,
14008 good sense, and the constraints of your build system.
14010 A precompiled header file can be used only when these conditions apply:
14012 @itemize
14013 @item
14014 Only one precompiled header can be used in a particular compilation.
14016 @item
14017 A precompiled header can't be used once the first C token is seen.  You
14018 can have preprocessor directives before a precompiled header; you can
14019 even include a precompiled header from inside another header, so long as
14020 there are no C tokens before the @code{#include}.
14022 @item
14023 The precompiled header file must be produced for the same language as
14024 the current compilation.  You can't use a C precompiled header for a C++
14025 compilation.
14027 @item
14028 The precompiled header file must have been produced by the same compiler
14029 binary as the current compilation is using.
14031 @item
14032 Any macros defined before the precompiled header is included must
14033 either be defined in the same way as when the precompiled header was
14034 generated, or must not affect the precompiled header, which usually
14035 means that they don't appear in the precompiled header at all.
14037 The @option{-D} option is one way to define a macro before a
14038 precompiled header is included; using a @code{#define} can also do it.
14039 There are also some options that define macros implicitly, like
14040 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
14041 defined this way.
14043 @item If debugging information is output when using the precompiled
14044 header, using @option{-g} or similar, the same kind of debugging information
14045 must have been output when building the precompiled header.  However,
14046 a precompiled header built using @option{-g} can be used in a compilation
14047 when no debugging information is being output.
14049 @item The same @option{-m} options must generally be used when building
14050 and using the precompiled header.  @xref{Submodel Options},
14051 for any cases where this rule is relaxed.
14053 @item Each of the following options must be the same when building and using
14054 the precompiled header:
14056 @gccoptlist{-fexceptions -funit-at-a-time}
14058 @item
14059 Some other command-line options starting with @option{-f},
14060 @option{-p}, or @option{-O} must be defined in the same way as when
14061 the precompiled header was generated.  At present, it's not clear
14062 which options are safe to change and which are not; the safest choice
14063 is to use exactly the same options when generating and using the
14064 precompiled header.  The following are known to be safe:
14066 @gccoptlist{-fmessage-length= -fpreprocessed
14067 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
14068 -fsched-verbose=<number> -fschedule-insns -fvisibility=
14069 -pedantic-errors}
14071 @end itemize
14073 For all of these except the last, the compiler will automatically
14074 ignore the precompiled header if the conditions aren't met.  If you
14075 find an option combination that doesn't work and doesn't cause the
14076 precompiled header to be ignored, please consider filing a bug report,
14077 see @ref{Bugs}.
14079 If you do use differing options when generating and using the
14080 precompiled header, the actual behavior will be a mixture of the
14081 behavior for the options.  For instance, if you use @option{-g} to
14082 generate the precompiled header but not when using it, you may or may
14083 not get debugging information for routines in the precompiled header.
14085 @node Running Protoize
14086 @section Running Protoize
14088 The program @code{protoize} is an optional part of GCC@.  You can use
14089 it to add prototypes to a program, thus converting the program to ISO
14090 C in one respect.  The companion program @code{unprotoize} does the
14091 reverse: it removes argument types from any prototypes that are found.
14093 When you run these programs, you must specify a set of source files as
14094 command line arguments.  The conversion programs start out by compiling
14095 these files to see what functions they define.  The information gathered
14096 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
14098 After scanning comes actual conversion.  The specified files are all
14099 eligible to be converted; any files they include (whether sources or
14100 just headers) are eligible as well.
14102 But not all the eligible files are converted.  By default,
14103 @code{protoize} and @code{unprotoize} convert only source and header
14104 files in the current directory.  You can specify additional directories
14105 whose files should be converted with the @option{-d @var{directory}}
14106 option.  You can also specify particular files to exclude with the
14107 @option{-x @var{file}} option.  A file is converted if it is eligible, its
14108 directory name matches one of the specified directory names, and its
14109 name within the directory has not been excluded.
14111 Basic conversion with @code{protoize} consists of rewriting most
14112 function definitions and function declarations to specify the types of
14113 the arguments.  The only ones not rewritten are those for varargs
14114 functions.
14116 @code{protoize} optionally inserts prototype declarations at the
14117 beginning of the source file, to make them available for any calls that
14118 precede the function's definition.  Or it can insert prototype
14119 declarations with block scope in the blocks where undeclared functions
14120 are called.
14122 Basic conversion with @code{unprotoize} consists of rewriting most
14123 function declarations to remove any argument types, and rewriting
14124 function definitions to the old-style pre-ISO form.
14126 Both conversion programs print a warning for any function declaration or
14127 definition that they can't convert.  You can suppress these warnings
14128 with @option{-q}.
14130 The output from @code{protoize} or @code{unprotoize} replaces the
14131 original source file.  The original file is renamed to a name ending
14132 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
14133 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
14134 for DOS) file already exists, then the source file is simply discarded.
14136 @code{protoize} and @code{unprotoize} both depend on GCC itself to
14137 scan the program and collect information about the functions it uses.
14138 So neither of these programs will work until GCC is installed.
14140 Here is a table of the options you can use with @code{protoize} and
14141 @code{unprotoize}.  Each option works with both programs unless
14142 otherwise stated.
14144 @table @code
14145 @item -B @var{directory}
14146 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
14147 usual directory (normally @file{/usr/local/lib}).  This file contains
14148 prototype information about standard system functions.  This option
14149 applies only to @code{protoize}.
14151 @item -c @var{compilation-options}
14152 Use @var{compilation-options} as the options when running @command{gcc} to
14153 produce the @samp{.X} files.  The special option @option{-aux-info} is
14154 always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
14156 Note that the compilation options must be given as a single argument to
14157 @code{protoize} or @code{unprotoize}.  If you want to specify several
14158 @command{gcc} options, you must quote the entire set of compilation options
14159 to make them a single word in the shell.
14161 There are certain @command{gcc} arguments that you cannot use, because they
14162 would produce the wrong kind of output.  These include @option{-g},
14163 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
14164 the @var{compilation-options}, they are ignored.
14166 @item -C
14167 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
14168 systems) instead of @samp{.c}.  This is convenient if you are converting
14169 a C program to C++.  This option applies only to @code{protoize}.
14171 @item -g
14172 Add explicit global declarations.  This means inserting explicit
14173 declarations at the beginning of each source file for each function
14174 that is called in the file and was not declared.  These declarations
14175 precede the first function definition that contains a call to an
14176 undeclared function.  This option applies only to @code{protoize}.
14178 @item -i @var{string}
14179 Indent old-style parameter declarations with the string @var{string}.
14180 This option applies only to @code{protoize}.
14182 @code{unprotoize} converts prototyped function definitions to old-style
14183 function definitions, where the arguments are declared between the
14184 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
14185 uses five spaces as the indentation.  If you want to indent with just
14186 one space instead, use @option{-i " "}.
14188 @item -k
14189 Keep the @samp{.X} files.  Normally, they are deleted after conversion
14190 is finished.
14192 @item -l
14193 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
14194 a prototype declaration for each function in each block which calls the
14195 function without any declaration.  This option applies only to
14196 @code{protoize}.
14198 @item -n
14199 Make no real changes.  This mode just prints information about the conversions
14200 that would have been done without @option{-n}.
14202 @item -N
14203 Make no @samp{.save} files.  The original files are simply deleted.
14204 Use this option with caution.
14206 @item -p @var{program}
14207 Use the program @var{program} as the compiler.  Normally, the name
14208 @file{gcc} is used.
14210 @item -q
14211 Work quietly.  Most warnings are suppressed.
14213 @item -v
14214 Print the version number, just like @option{-v} for @command{gcc}.
14215 @end table
14217 If you need special compiler options to compile one of your program's
14218 source files, then you should generate that file's @samp{.X} file
14219 specially, by running @command{gcc} on that source file with the
14220 appropriate options and the option @option{-aux-info}.  Then run
14221 @code{protoize} on the entire set of files.  @code{protoize} will use
14222 the existing @samp{.X} file because it is newer than the source file.
14223 For example:
14225 @smallexample
14226 gcc -Dfoo=bar file1.c -aux-info file1.X
14227 protoize *.c
14228 @end smallexample
14230 @noindent
14231 You need to include the special files along with the rest in the
14232 @code{protoize} command, even though their @samp{.X} files already
14233 exist, because otherwise they won't get converted.
14235 @xref{Protoize Caveats}, for more information on how to use
14236 @code{protoize} successfully.