OSDN Git Service

gcc:
[pf3gnuchains/gcc-fork.git] / gcc / doc / invoke.texi
1 @c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2 @c 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
3 @c This is part of the GCC manual.
4 @c For copying conditions, see the file gcc.texi.
5
6 @ignore
7 @c man begin COPYRIGHT
8 Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
9 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
10
11 Permission is granted to copy, distribute and/or modify this document
12 under the terms of the GNU Free Documentation License, Version 1.2 or
13 any later version published by the Free Software Foundation; with the
14 Invariant Sections being ``GNU General Public License'' and ``Funding
15 Free Software'', the Front-Cover texts being (a) (see below), and with
16 the Back-Cover Texts being (b) (see below).  A copy of the license is
17 included in the gfdl(7) man page.
18
19 (a) The FSF's Front-Cover Text is:
20
21      A GNU Manual
22
23 (b) The FSF's Back-Cover Text is:
24
25      You have freedom to copy and modify this GNU Manual, like GNU
26      software.  Copies published by the Free Software Foundation raise
27      funds for GNU development.
28 @c man end
29 @c Set file name and title for the man page.
30 @setfilename gcc
31 @settitle GNU project C and C++ compiler
32 @c man begin SYNOPSIS
33 gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
34     [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
35     [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
36     [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
37     [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
38     [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
39     [@option{-o} @var{outfile}] @var{infile}@dots{}
40
41 Only the most useful options are listed here; see below for the
42 remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
43 @c man end
44 @c man begin SEEALSO
45 gpl(7), gfdl(7), fsf-funding(7),
46 cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
47 and the Info entries for @file{gcc}, @file{cpp}, @file{as},
48 @file{ld}, @file{binutils} and @file{gdb}.
49 @c man end
50 @c man begin BUGS
51 For instructions on reporting bugs, see
52 @w{@uref{http://gcc.gnu.org/bugs.html}}.
53 @c man end
54 @c man begin AUTHOR
55 See the Info entry for @command{gcc}, or
56 @w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
57 for contributors to GCC@.
58 @c man end
59 @end ignore
60
61 @node Invoking GCC
62 @chapter GCC Command Options
63 @cindex GCC command options
64 @cindex command options
65 @cindex options, GCC command
66
67 @c man begin DESCRIPTION
68 When you invoke GCC, it normally does preprocessing, compilation,
69 assembly and linking.  The ``overall options'' allow you to stop this
70 process at an intermediate stage.  For example, the @option{-c} option
71 says not to run the linker.  Then the output consists of object files
72 output by the assembler.
73
74 Other options are passed on to one stage of processing.  Some options
75 control the preprocessor and others the compiler itself.  Yet other
76 options control the assembler and linker; most of these are not
77 documented here, since you rarely need to use any of them.
78
79 @cindex C compilation options
80 Most of the command line options that you can use with GCC are useful
81 for C programs; when an option is only useful with another language
82 (usually C++), the explanation says so explicitly.  If the description
83 for a particular option does not mention a source language, you can use
84 that option with all supported languages.
85
86 @cindex C++ compilation options
87 @xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
88 options for compiling C++ programs.
89
90 @cindex grouping options
91 @cindex options, grouping
92 The @command{gcc} program accepts options and file names as operands.  Many
93 options have multi-letter names; therefore multiple single-letter options
94 may @emph{not} be grouped: @option{-dr} is very different from @w{@samp{-d
95 -r}}.
96
97 @cindex order of options
98 @cindex options, order
99 You can mix options and other arguments.  For the most part, the order
100 you use doesn't matter.  Order does matter when you use several options
101 of the same kind; for example, if you specify @option{-L} more than once,
102 the directories are searched in the order specified.
103
104 Many options have long names starting with @samp{-f} or with
105 @samp{-W}---for example, 
106 @option{-fstrength-reduce}, @option{-Wformat} and so on.  Most of
107 these have both positive and negative forms; the negative form of
108 @option{-ffoo} would be @option{-fno-foo}.  This manual documents
109 only one of these two forms, whichever one is not the default.
110
111 @c man end
112
113 @xref{Option Index}, for an index to GCC's options.
114
115 @menu
116 * Option Summary::      Brief list of all options, without explanations.
117 * Overall Options::     Controlling the kind of output:
118                         an executable, object files, assembler files,
119                         or preprocessed source.
120 * Invoking G++::        Compiling C++ programs.
121 * C Dialect Options::   Controlling the variant of C language compiled.
122 * C++ Dialect Options:: Variations on C++.
123 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
124                         and Objective-C++.
125 * Language Independent Options:: Controlling how diagnostics should be
126                         formatted.
127 * Warning Options::     How picky should the compiler be?
128 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
129 * Optimize Options::    How much optimization?
130 * Preprocessor Options:: Controlling header files and macro definitions.
131                          Also, getting dependency information for Make.
132 * Assembler Options::   Passing options to the assembler.
133 * Link Options::        Specifying libraries and so on.
134 * Directory Options::   Where to find header files and libraries.
135                         Where to find the compiler executable files.
136 * Spec Files::          How to pass switches to sub-processes.
137 * Target Options::      Running a cross-compiler, or an old version of GCC.
138 * Submodel Options::    Specifying minor hardware or convention variations,
139                         such as 68010 vs 68020.
140 * Code Gen Options::    Specifying conventions for function calls, data layout
141                         and register usage.
142 * Environment Variables:: Env vars that affect GCC.
143 * Precompiled Headers:: Compiling a header once, and using it many times.
144 * Running Protoize::    Automatically adding or removing function prototypes.
145 @end menu
146
147 @c man begin OPTIONS
148
149 @node Option Summary
150 @section Option Summary
151
152 Here is a summary of all the options, grouped by type.  Explanations are
153 in the following sections.
154
155 @table @emph
156 @item Overall Options
157 @xref{Overall Options,,Options Controlling the Kind of Output}.
158 @gccoptlist{-c  -S  -E  -o @var{file}  -combine -pipe  -pass-exit-codes  @gol
159 -x @var{language}  -v  -###  --help  --target-help  --version}
160
161 @item C Language Options
162 @xref{C Dialect Options,,Options Controlling C Dialect}.
163 @gccoptlist{-ansi  -std=@var{standard}  -aux-info @var{filename} @gol
164 -fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
165 -fhosted  -ffreestanding  -fms-extensions @gol
166 -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
167 -fallow-single-precision  -fcond-mismatch @gol
168 -fsigned-bitfields  -fsigned-char @gol
169 -funsigned-bitfields  -funsigned-char}
170
171 @item C++ Language Options
172 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
173 @gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
174 -fconserve-space  -fno-const-strings @gol
175 -fno-elide-constructors @gol
176 -fno-enforce-eh-specs @gol
177 -ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
178 -fno-implicit-templates @gol
179 -fno-implicit-inline-templates @gol
180 -fno-implement-inlines  -fms-extensions @gol
181 -fno-nonansi-builtins  -fno-operator-names @gol
182 -fno-optional-diags  -fpermissive @gol
183 -frepo  -fno-rtti  -fstats  -ftemplate-depth-@var{n} @gol
184 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
185 -fno-default-inline  -fvisibility-inlines-hidden @gol
186 -Wabi  -Wctor-dtor-privacy @gol
187 -Wnon-virtual-dtor  -Wreorder @gol
188 -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel @gol
189 -Wno-non-template-friend  -Wold-style-cast @gol
190 -Woverloaded-virtual  -Wno-pmf-conversions @gol
191 -Wsign-promo}
192
193 @item Objective-C and Objective-C++ Language Options
194 @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
195 Objective-C and Objective-C++ Dialects}.
196 @gccoptlist{
197 -fconstant-string-class=@var{class-name} @gol
198 -fgnu-runtime  -fnext-runtime @gol
199 -fno-nil-receivers @gol
200 -fobjc-call-cxx-cdtors @gol
201 -fobjc-direct-dispatch @gol
202 -fobjc-exceptions @gol
203 -fobjc-gc @gol
204 -freplace-objc-classes @gol
205 -fzero-link @gol
206 -gen-decls @gol
207 -Wassign-intercept @gol
208 -Wno-protocol  -Wselector @gol
209 -Wstrict-selector-match @gol
210 -Wundeclared-selector}
211
212 @item Language Independent Options
213 @xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
214 @gccoptlist{-fmessage-length=@var{n}  @gol
215 -fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}} @gol
216 -fdiagnostics-show-options
217
218 @item Warning Options
219 @xref{Warning Options,,Options to Request or Suppress Warnings}.
220 @gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
221 -w  -Wextra  -Wall  -Waggregate-return -Wno-attributes @gol
222 -Wc++-compat -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment @gol
223 -Wconversion  -Wno-deprecated-declarations @gol
224 -Wdisabled-optimization  -Wno-div-by-zero  -Wno-endif-labels @gol
225 -Werror  -Werror-implicit-function-declaration @gol
226 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
227 -Wno-format-extra-args -Wformat-nonliteral @gol
228 -Wformat-security  -Wformat-y2k @gol
229 -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
230 -Wimport  -Wno-import  -Winit-self  -Winline @gol
231 -Wno-int-to-pointer-cast @gol
232 -Wno-invalid-offsetof  -Winvalid-pch @gol
233 -Wlarger-than-@var{len}  -Wunsafe-loop-optimizations  -Wlong-long @gol
234 -Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
235 -Wmissing-format-attribute  -Wmissing-include-dirs @gol
236 -Wmissing-noreturn @gol
237 -Wno-multichar  -Wnonnull  -Wpacked  -Wpadded @gol
238 -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast @gol
239 -Wredundant-decls @gol
240 -Wreturn-type  -Wsequence-point  -Wshadow @gol
241 -Wsign-compare  -Wstrict-aliasing -Wstrict-aliasing=2 @gol
242 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
243 -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
244 -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
245 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
246 -Wunused-value  -Wunused-variable  -Wwrite-strings @gol
247 -Wvariadic-macros}
248
249 @item C-only Warning Options
250 @gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
251 -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition @gol
252 -Wstrict-prototypes  -Wtraditional @gol
253 -Wdeclaration-after-statement -Wno-pointer-sign}
254
255 @item Debugging Options
256 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
257 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
258 -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
259 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
260 -fdump-ipa-all -fdump-ipa-cgraph @gol
261 -fdump-tree-all @gol
262 -fdump-tree-original@r{[}-@var{n}@r{]}  @gol
263 -fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
264 -fdump-tree-inlined@r{[}-@var{n}@r{]} @gol
265 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
266 -fdump-tree-ch @gol
267 -fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
268 -fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
269 -fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
270 -fdump-tree-dom@r{[}-@var{n}@r{]} @gol
271 -fdump-tree-dse@r{[}-@var{n}@r{]} @gol
272 -fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
273 -fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
274 -fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
275 -fdump-tree-nrv -fdump-tree-vect @gol
276 -fdump-tree-sink @gol
277 -fdump-tree-sra@r{[}-@var{n}@r{]} @gol
278 -fdump-tree-salias @gol
279 -fdump-tree-fre@r{[}-@var{n}@r{]} @gol
280 -fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
281 -ftree-vectorizer-verbose=@var{n} @gol
282 -fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
283 -feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
284 -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs -ftree-based-profiling @gol
285 -frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
286 -ftest-coverage  -ftime-report -fvar-tracking @gol
287 -g  -g@var{level}  -gcoff -gdwarf-2 @gol
288 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ @gol
289 -p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
290 -print-multi-directory  -print-multi-lib @gol
291 -print-prog-name=@var{program}  -print-search-dirs  -Q @gol
292 -save-temps  -time}
293
294 @item Optimization Options
295 @xref{Optimize Options,,Options that Control Optimization}.
296 @gccoptlist{-falign-functions=@var{n}  -falign-jumps=@var{n} @gol
297 -falign-labels=@var{n}  -falign-loops=@var{n}  @gol
298 -fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
299 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
300 -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
301 -fcaller-saves  -fcprop-registers  -fcse-follow-jumps @gol
302 -fcse-skip-blocks  -fcx-limited-range  -fdata-sections @gol
303 -fdelayed-branch  -fdelete-null-pointer-checks -fearly-inlining @gol
304 -fexpensive-optimizations  -ffast-math  -ffloat-store @gol
305 -fforce-addr  -ffunction-sections @gol
306 -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -fgcse-after-reload @gol
307 -floop-optimize -fcrossjumping  -fif-conversion  -fif-conversion2 @gol
308 -finline-functions  -finline-limit=@var{n}  -fkeep-inline-functions @gol
309 -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants @gol
310 -fmodulo-sched -fno-branch-count-reg @gol
311 -fno-default-inline  -fno-defer-pop -floop-optimize2 -fmove-loop-invariants @gol
312 -fno-function-cse  -fno-guess-branch-probability @gol
313 -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 @gol
314 -funsafe-math-optimizations  -funsafe-loop-optimizations  -ffinite-math-only @gol
315 -fno-trapping-math  -fno-zero-initialized-in-bss @gol
316 -fomit-frame-pointer  -foptimize-register-move @gol
317 -foptimize-sibling-calls  -fprefetch-loop-arrays @gol
318 -fprofile-generate -fprofile-use @gol
319 -fregmove  -frename-registers @gol
320 -freorder-blocks  -freorder-blocks-and-partition -freorder-functions @gol
321 -frerun-cse-after-loop  -frerun-loop-opt @gol
322 -frounding-math -fschedule-insns  -fschedule-insns2 @gol
323 -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load @gol
324 -fsched-spec-load-dangerous  @gol
325 -fsched-stalled-insns=@var{n} -sched-stalled-insns-dep=@var{n} @gol
326 -fsched2-use-superblocks @gol
327 -fsched2-use-traces -freschedule-modulo-scheduled-loops @gol
328 -fsignaling-nans -fsingle-precision-constant  -fspeculative-prefetching @gol
329 -fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps @gol
330 -funroll-all-loops  -funroll-loops  -fpeel-loops @gol
331 -fsplit-ivs-in-unroller -funswitch-loops @gol
332 -fvariable-expansion-in-unroller @gol
333 -ftree-pre  -ftree-ccp  -ftree-dce -ftree-loop-optimize @gol
334 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol
335 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink @gol
336 -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize @gol
337 -ftree-salias -fweb @gol
338 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program @gol
339 --param @var{name}=@var{value}
340 -O  -O0  -O1  -O2  -O3  -Os}
341
342 @item Preprocessor Options
343 @xref{Preprocessor Options,,Options Controlling the Preprocessor}.
344 @gccoptlist{-A@var{question}=@var{answer} @gol
345 -A-@var{question}@r{[}=@var{answer}@r{]} @gol
346 -C  -dD  -dI  -dM  -dN @gol
347 -D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
348 -idirafter @var{dir} @gol
349 -include @var{file}  -imacros @var{file} @gol
350 -iprefix @var{file}  -iwithprefix @var{dir} @gol
351 -iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
352 -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
353 -P  -fworking-directory  -remap @gol
354 -trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
355 -Xpreprocessor @var{option}}
356
357 @item Assembler Option
358 @xref{Assembler Options,,Passing Options to the Assembler}.
359 @gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
360
361 @item Linker Options
362 @xref{Link Options,,Options for Linking}.
363 @gccoptlist{@var{object-file-name}  -l@var{library} @gol
364 -nostartfiles  -nodefaultlibs  -nostdlib -pie @gol
365 -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic @gol
366 -Wl,@var{option}  -Xlinker @var{option} @gol
367 -u @var{symbol}}
368
369 @item Directory Options
370 @xref{Directory Options,,Options for Directory Search}.
371 @gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}  -specs=@var{file}  -I-}
372
373 @item Target Options
374 @c I wrote this xref this way to avoid overfull hbox. -- rms
375 @xref{Target Options}.
376 @gccoptlist{-V @var{version}  -b @var{machine}}
377
378 @item Machine Dependent Options
379 @xref{Submodel Options,,Hardware Models and Configurations}.
380 @c This list is ordered alphanumerically by subsection name.
381 @c Try and put the significant identifier (CPU or system) first,
382 @c so users have a clue at guessing where the ones they want will be.
383
384 @emph{ARC Options}
385 @gccoptlist{-EB  -EL @gol
386 -mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
387 -mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
388
389 @emph{ARM Options}
390 @gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
391 -mabi=@var{name} @gol
392 -mapcs-stack-check  -mno-apcs-stack-check @gol
393 -mapcs-float  -mno-apcs-float @gol
394 -mapcs-reentrant  -mno-apcs-reentrant @gol
395 -msched-prolog  -mno-sched-prolog @gol
396 -mlittle-endian  -mbig-endian  -mwords-little-endian @gol
397 -mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
398 -mthumb-interwork  -mno-thumb-interwork @gol
399 -mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
400 -mstructure-size-boundary=@var{n} @gol
401 -mabort-on-noreturn @gol
402 -mlong-calls  -mno-long-calls @gol
403 -msingle-pic-base  -mno-single-pic-base @gol
404 -mpic-register=@var{reg} @gol
405 -mnop-fun-dllimport @gol
406 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
407 -mpoke-function-name @gol
408 -mthumb  -marm @gol
409 -mtpcs-frame  -mtpcs-leaf-frame @gol
410 -mcaller-super-interworking  -mcallee-super-interworking}
411
412 @emph{AVR Options}
413 @gccoptlist{-mmcu=@var{mcu}  -msize  -minit-stack=@var{n}  -mno-interrupts @gol
414 -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8}
415
416 @emph{Blackfin Options}
417 @gccoptlist{-momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer @gol
418 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly @gol
419 -mlow-64k -mno-low64k -mid-shared-library @gol
420 -mno-id-shared-library -mshared-library-id=@var{n} @gol
421 -mlong-calls  -mno-long-calls}
422
423 @emph{CRIS Options}
424 @gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
425 -mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
426 -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
427 -mstack-align  -mdata-align  -mconst-align @gol
428 -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
429 -melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
430 -mmul-bug-workaround  -mno-mul-bug-workaround}
431
432 @emph{Darwin Options}
433 @gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
434 -arch_only  -bind_at_load  -bundle  -bundle_loader @gol
435 -client_name  -compatibility_version  -current_version @gol
436 -dead_strip @gol
437 -dependency-file  -dylib_file  -dylinker_install_name @gol
438 -dynamic  -dynamiclib  -exported_symbols_list @gol
439 -filelist  -flat_namespace  -force_cpusubtype_ALL @gol
440 -force_flat_namespace  -headerpad_max_install_names @gol
441 -image_base  -init  -install_name  -keep_private_externs @gol
442 -multi_module  -multiply_defined  -multiply_defined_unused @gol
443 -noall_load   -no_dead_strip_inits_and_terms @gol
444 -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
445 -pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
446 -private_bundle  -read_only_relocs  -sectalign @gol
447 -sectobjectsymbols  -whyload  -seg1addr @gol
448 -sectcreate  -sectobjectsymbols  -sectorder @gol
449 -segaddr -segs_read_only_addr -segs_read_write_addr @gol
450 -seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
451 -segprot  -segs_read_only_addr  -segs_read_write_addr @gol
452 -single_module  -static  -sub_library  -sub_umbrella @gol
453 -twolevel_namespace  -umbrella  -undefined @gol
454 -unexported_symbols_list  -weak_reference_mismatches @gol
455 -whatsloaded -F -gused -gfull -mmacosx-min-version=@var{version} @gol
456 -mone-byte-bool}
457
458 @emph{DEC Alpha Options}
459 @gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
460 -mieee  -mieee-with-inexact  -mieee-conformant @gol
461 -mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
462 -mtrap-precision=@var{mode}  -mbuild-constants @gol
463 -mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
464 -mbwx  -mmax  -mfix  -mcix @gol
465 -mfloat-vax  -mfloat-ieee @gol
466 -mexplicit-relocs  -msmall-data  -mlarge-data @gol
467 -msmall-text  -mlarge-text @gol
468 -mmemory-latency=@var{time}}
469
470 @emph{DEC Alpha/VMS Options}
471 @gccoptlist{-mvms-return-codes}
472
473 @emph{FRV Options}
474 @gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
475 -mhard-float  -msoft-float @gol
476 -malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
477 -mdouble  -mno-double @gol
478 -mmedia  -mno-media  -mmuladd  -mno-muladd @gol
479 -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
480 -mlinked-fp  -mlong-calls  -malign-labels @gol
481 -mlibrary-pic  -macc-4  -macc-8 @gol
482 -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
483 -mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
484 -mvliw-branch  -mno-vliw-branch @gol
485 -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
486 -mno-nested-cond-exec  -mtomcat-stats @gol
487 -mTLS -mtls @gol
488 -mcpu=@var{cpu}}
489
490 @emph{H8/300 Options}
491 @gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
492
493 @emph{HPPA Options}
494 @gccoptlist{-march=@var{architecture-type} @gol
495 -mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
496 -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
497 -mfixed-range=@var{register-range} @gol
498 -mjump-in-delay -mlinker-opt -mlong-calls @gol
499 -mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
500 -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
501 -mno-jump-in-delay  -mno-long-load-store @gol
502 -mno-portable-runtime  -mno-soft-float @gol
503 -mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
504 -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
505 -mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
506 -munix=@var{unix-std}  -nolibdld  -static  -threads}
507
508 @emph{i386 and x86-64 Options}
509 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
510 -mfpmath=@var{unit} @gol
511 -masm=@var{dialect}  -mno-fancy-math-387 @gol
512 -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib @gol
513 -mno-wide-multiply  -mrtd  -malign-double @gol
514 -mpreferred-stack-boundary=@var{num} @gol
515 -mmmx  -msse  -msse2 -msse3 -m3dnow @gol
516 -mthreads  -mno-align-stringops  -minline-all-stringops @gol
517 -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
518 -m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
519 -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
520 -mcmodel=@var{code-model} @gol
521 -m32  -m64}
522
523 @emph{IA-64 Options}
524 @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
525 -mvolatile-asm-stop  -mregister-names  -mno-sdata @gol
526 -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency @gol
527 -minline-float-divide-max-throughput @gol
528 -minline-int-divide-min-latency @gol
529 -minline-int-divide-max-throughput  @gol
530 -minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
531 -mno-dwarf2-asm -mearly-stop-bits @gol
532 -mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
533 -mtune=@var{cpu-type} -mt -pthread -milp32 -mlp64}
534
535 @emph{M32R/D Options}
536 @gccoptlist{-m32r2 -m32rx -m32r @gol
537 -mdebug @gol
538 -malign-loops -mno-align-loops @gol
539 -missue-rate=@var{number} @gol
540 -mbranch-cost=@var{number} @gol
541 -mmodel=@var{code-size-model-type} @gol
542 -msdata=@var{sdata-type} @gol
543 -mno-flush-func -mflush-func=@var{name} @gol
544 -mno-flush-trap -mflush-trap=@var{number} @gol
545 -G @var{num}}
546
547 @emph{M32C Options}
548 @gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
549
550 @emph{M680x0 Options}
551 @gccoptlist{-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
552 -m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   @gol
553 -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel @gol
554 -malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
555 -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library}
556
557 @emph{M68hc1x Options}
558 @gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
559 -mauto-incdec  -minmax  -mlong-calls  -mshort @gol
560 -msoft-reg-count=@var{count}}
561
562 @emph{MCore Options}
563 @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
564 -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
565 -m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
566 -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
567 -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
568
569 @emph{MIPS Options}
570 @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
571 -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 @gol
572 -mips16  -mno-mips16  -mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
573 -mxgot  -mno-xgot  -mgp32  -mgp64  -mfp32  -mfp64 @gol
574 -mhard-float  -msoft-float  -msingle-float  -mdouble-float @gol
575 -mpaired-single  -mips3d @gol
576 -mlong64  -mlong32  -msym32  -mno-sym32 @gol
577 -G@var{num}  -membedded-data  -mno-embedded-data @gol
578 -muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
579 -msplit-addresses  -mno-split-addresses  @gol
580 -mexplicit-relocs  -mno-explicit-relocs  @gol
581 -mcheck-zero-division  -mno-check-zero-division @gol
582 -mdivide-traps  -mdivide-breaks @gol
583 -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
584 -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
585 -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
586 -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130 @gol
587 -mfix-sb1  -mno-fix-sb1 @gol
588 -mflush-func=@var{func}  -mno-flush-func @gol
589 -mbranch-likely  -mno-branch-likely @gol
590 -mfp-exceptions -mno-fp-exceptions @gol
591 -mvr4130-align -mno-vr4130-align}
592
593 @emph{MMIX Options}
594 @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
595 -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
596 -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
597 -mno-base-addresses  -msingle-exit  -mno-single-exit}
598
599 @emph{MN10300 Options}
600 @gccoptlist{-mmult-bug  -mno-mult-bug @gol
601 -mam33  -mno-am33 @gol
602 -mam33-2  -mno-am33-2 @gol
603 -mno-crt0  -mrelax}
604
605 @emph{PDP-11 Options}
606 @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
607 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
608 -mint16  -mno-int32  -mfloat32  -mno-float64 @gol
609 -mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
610 -mbranch-expensive  -mbranch-cheap @gol
611 -msplit  -mno-split  -munix-asm  -mdec-asm}
612
613 @emph{PowerPC Options}
614 See RS/6000 and PowerPC Options.
615
616 @emph{RS/6000 and PowerPC Options}
617 @gccoptlist{-mcpu=@var{cpu-type} @gol
618 -mtune=@var{cpu-type} @gol
619 -mpower  -mno-power  -mpower2  -mno-power2 @gol
620 -mpowerpc  -mpowerpc64  -mno-powerpc @gol
621 -maltivec  -mno-altivec @gol
622 -mpowerpc-gpopt  -mno-powerpc-gpopt @gol
623 -mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
624 -mnew-mnemonics  -mold-mnemonics @gol
625 -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
626 -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
627 -malign-power  -malign-natural @gol
628 -msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
629 -mstring  -mno-string  -mupdate  -mno-update @gol
630 -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
631 -mstrict-align  -mno-strict-align  -mrelocatable @gol
632 -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
633 -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
634 -mdynamic-no-pic  -maltivec  -mswdiv @gol
635 -mprioritize-restricted-insns=@var{priority} @gol
636 -msched-costly-dep=@var{dependence_type} @gol
637 -minsert-sched-nops=@var{scheme} @gol
638 -mcall-sysv  -mcall-netbsd @gol
639 -maix-struct-return  -msvr4-struct-return @gol
640 -mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
641 -misel -mno-isel @gol
642 -misel=yes  -misel=no @gol
643 -mspe -mno-spe @gol
644 -mspe=yes  -mspe=no @gol
645 -mvrsave -mno-vrsave @gol
646 -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
647 -mprototype  -mno-prototype @gol
648 -msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
649 -msdata=@var{opt}  -mvxworks  -mwindiss  -G @var{num}  -pthread}
650
651 @emph{S/390 and zSeries Options}
652 @gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
653 -mhard-float  -msoft-float  -mbackchain  -mno-backchain @gol
654 -mpacked-stack  -mno-packed-stack @gol
655 -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
656 -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
657 -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
658 -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
659
660 @emph{SH Options}
661 @gccoptlist{-m1  -m2  -m2e  -m3  -m3e @gol
662 -m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
663 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
664 -m5-64media  -m5-64media-nofpu @gol
665 -m5-32media  -m5-32media-nofpu @gol
666 -m5-compact  -m5-compact-nofpu @gol
667 -mb  -ml  -mdalign  -mrelax @gol
668 -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
669 -mieee  -misize  -mpadstruct  -mspace @gol
670 -mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
671 -mdivsi3_libfunc=@var{name}  @gol
672 -madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
673  -minvalid-symbols}
674
675 @emph{SPARC Options}
676 @gccoptlist{-mcpu=@var{cpu-type} @gol
677 -mtune=@var{cpu-type} @gol
678 -mcmodel=@var{code-model} @gol
679 -m32  -m64  -mapp-regs  -mno-app-regs @gol
680 -mfaster-structs  -mno-faster-structs @gol
681 -mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
682 -mhard-quad-float  -msoft-quad-float @gol
683 -mimpure-text  -mno-impure-text  -mlittle-endian @gol
684 -mstack-bias  -mno-stack-bias @gol
685 -munaligned-doubles  -mno-unaligned-doubles @gol
686 -mv8plus  -mno-v8plus  -mvis  -mno-vis
687 -threads -pthreads}
688
689 @emph{System V Options}
690 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
691
692 @emph{TMS320C3x/C4x Options}
693 @gccoptlist{-mcpu=@var{cpu}  -mbig  -msmall  -mregparm  -mmemparm @gol
694 -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload @gol
695 -mrpts=@var{count}  -mrptb  -mdb  -mloop-unsigned @gol
696 -mparallel-insns  -mparallel-mpy  -mpreserve-float}
697
698 @emph{V850 Options}
699 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
700 -mprolog-function  -mno-prolog-function  -mspace @gol
701 -mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
702 -mapp-regs  -mno-app-regs @gol
703 -mdisable-callt  -mno-disable-callt @gol
704 -mv850e1 @gol
705 -mv850e @gol
706 -mv850  -mbig-switch}
707
708 @emph{VAX Options}
709 @gccoptlist{-mg  -mgnu  -munix}
710
711 @emph{x86-64 Options}
712 See i386 and x86-64 Options.
713
714 @emph{Xstormy16 Options}
715 @gccoptlist{-msim}
716
717 @emph{Xtensa Options}
718 @gccoptlist{-mconst16 -mno-const16 @gol
719 -mfused-madd  -mno-fused-madd @gol
720 -mtext-section-literals  -mno-text-section-literals @gol
721 -mtarget-align  -mno-target-align @gol
722 -mlongcalls  -mno-longcalls}
723
724 @emph{zSeries Options}
725 See S/390 and zSeries Options.
726
727 @item Code Generation Options
728 @xref{Code Gen Options,,Options for Code Generation Conventions}.
729 @gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
730 -ffixed-@var{reg}  -fexceptions @gol
731 -fnon-call-exceptions  -funwind-tables @gol
732 -fasynchronous-unwind-tables @gol
733 -finhibit-size-directive  -finstrument-functions @gol
734 -fno-common  -fno-ident @gol
735 -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
736 -fno-jump-tables @gol
737 -freg-struct-return  -fshared-data  -fshort-enums @gol
738 -fshort-double  -fshort-wchar @gol
739 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
740 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
741 -fargument-alias  -fargument-noalias @gol
742 -fargument-noalias-global  -fleading-underscore @gol
743 -ftls-model=@var{model} @gol
744 -ftrapv  -fwrapv  -fbounds-check @gol
745 -fvisibility}
746 @end table
747
748 @menu
749 * Overall Options::     Controlling the kind of output:
750                         an executable, object files, assembler files,
751                         or preprocessed source.
752 * C Dialect Options::   Controlling the variant of C language compiled.
753 * C++ Dialect Options:: Variations on C++.
754 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
755                         and Objective-C++.
756 * Language Independent Options:: Controlling how diagnostics should be
757                         formatted.
758 * Warning Options::     How picky should the compiler be?
759 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
760 * Optimize Options::    How much optimization?
761 * Preprocessor Options:: Controlling header files and macro definitions.
762                          Also, getting dependency information for Make.
763 * Assembler Options::   Passing options to the assembler.
764 * Link Options::        Specifying libraries and so on.
765 * Directory Options::   Where to find header files and libraries.
766                         Where to find the compiler executable files.
767 * Spec Files::          How to pass switches to sub-processes.
768 * Target Options::      Running a cross-compiler, or an old version of GCC.
769 @end menu
770
771 @node Overall Options
772 @section Options Controlling the Kind of Output
773
774 Compilation can involve up to four stages: preprocessing, compilation
775 proper, assembly and linking, always in that order.  GCC is capable of
776 preprocessing and compiling several files either into several
777 assembler input files, or into one assembler input file; then each
778 assembler input file produces an object file, and linking combines all
779 the object files (those newly compiled, and those specified as input)
780 into an executable file.
781
782 @cindex file name suffix
783 For any given input file, the file name suffix determines what kind of
784 compilation is done:
785
786 @table @gcctabopt
787 @item @var{file}.c
788 C source code which must be preprocessed.
789
790 @item @var{file}.i
791 C source code which should not be preprocessed.
792
793 @item @var{file}.ii
794 C++ source code which should not be preprocessed.
795
796 @item @var{file}.m
797 Objective-C source code.  Note that you must link with the @file{libobjc}
798 library to make an Objective-C program work.
799
800 @item @var{file}.mi
801 Objective-C source code which should not be preprocessed.
802
803 @item @var{file}.mm
804 @itemx @var{file}.M
805 Objective-C++ source code.  Note that you must link with the @file{libobjc}
806 library to make an Objective-C++ program work.  Note that @samp{.M} refers
807 to a literal capital M@.
808
809 @item @var{file}.mii
810 Objective-C++ source code which should not be preprocessed.
811
812 @item @var{file}.h
813 C, C++, Objective-C or Objective-C++ header file to be turned into a
814 precompiled header.
815
816 @item @var{file}.cc
817 @itemx @var{file}.cp
818 @itemx @var{file}.cxx
819 @itemx @var{file}.cpp
820 @itemx @var{file}.CPP
821 @itemx @var{file}.c++
822 @itemx @var{file}.C
823 C++ source code which must be preprocessed.  Note that in @samp{.cxx},
824 the last two letters must both be literally @samp{x}.  Likewise,
825 @samp{.C} refers to a literal capital C@.
826
827 @item @var{file}.mm
828 @itemx @var{file}.M
829 Objective-C++ source code which must be preprocessed.
830
831 @item @var{file}.mii
832 Objective-C++ source code which should not be preprocessed.
833
834 @item @var{file}.hh
835 @itemx @var{file}.H
836 C++ header file to be turned into a precompiled header.
837
838 @item @var{file}.f
839 @itemx @var{file}.for
840 @itemx @var{file}.FOR
841 Fortran source code which should not be preprocessed.
842
843 @item @var{file}.F
844 @itemx @var{file}.fpp
845 @itemx @var{file}.FPP
846 Fortran source code which must be preprocessed (with the traditional
847 preprocessor).
848
849 @item @var{file}.r
850 Fortran source code which must be preprocessed with a RATFOR
851 preprocessor (not included with GCC)@.
852
853 @item @var{file}.f90
854 @itemx @var{file}.f95
855 Fortran 90/95 source code which should not be preprocessed.
856
857 @c FIXME: Descriptions of Java file types.
858 @c @var{file}.java
859 @c @var{file}.class
860 @c @var{file}.zip
861 @c @var{file}.jar
862
863 @item @var{file}.ads
864 Ada source code file which contains a library unit declaration (a
865 declaration of a package, subprogram, or generic, or a generic
866 instantiation), or a library unit renaming declaration (a package,
867 generic, or subprogram renaming declaration).  Such files are also
868 called @dfn{specs}.
869
870 @itemx @var{file}.adb
871 Ada source code file containing a library unit body (a subprogram or
872 package body).  Such files are also called @dfn{bodies}.
873
874 @c GCC also knows about some suffixes for languages not yet included:
875 @c Pascal:
876 @c @var{file}.p
877 @c @var{file}.pas
878
879 @item @var{file}.s
880 Assembler code.
881
882 @item @var{file}.S
883 Assembler code which must be preprocessed.
884
885 @item @var{other}
886 An object file to be fed straight into linking.
887 Any file name with no recognized suffix is treated this way.
888 @end table
889
890 @opindex x
891 You can specify the input language explicitly with the @option{-x} option:
892
893 @table @gcctabopt
894 @item -x @var{language}
895 Specify explicitly the @var{language} for the following input files
896 (rather than letting the compiler choose a default based on the file
897 name suffix).  This option applies to all following input files until
898 the next @option{-x} option.  Possible values for @var{language} are:
899 @smallexample
900 c  c-header  c-cpp-output
901 c++  c++-header  c++-cpp-output
902 objective-c  objective-c-header  objective-c-cpp-output
903 objective-c++ objective-c++-header objective-c++-cpp-output
904 assembler  assembler-with-cpp
905 ada
906 f77  f77-cpp-input  ratfor
907 f95
908 java
909 treelang
910 @end smallexample
911
912 @item -x none
913 Turn off any specification of a language, so that subsequent files are
914 handled according to their file name suffixes (as they are if @option{-x}
915 has not been used at all).
916
917 @item -pass-exit-codes
918 @opindex pass-exit-codes
919 Normally the @command{gcc} program will exit with the code of 1 if any
920 phase of the compiler returns a non-success return code.  If you specify
921 @option{-pass-exit-codes}, the @command{gcc} program will instead return with
922 numerically highest error produced by any phase that returned an error
923 indication.
924 @end table
925
926 If you only want some of the stages of compilation, you can use
927 @option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
928 one of the options @option{-c}, @option{-S}, or @option{-E} to say where
929 @command{gcc} is to stop.  Note that some combinations (for example,
930 @samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
931
932 @table @gcctabopt
933 @item -c
934 @opindex c
935 Compile or assemble the source files, but do not link.  The linking
936 stage simply is not done.  The ultimate output is in the form of an
937 object file for each source file.
938
939 By default, the object file name for a source file is made by replacing
940 the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
941
942 Unrecognized input files, not requiring compilation or assembly, are
943 ignored.
944
945 @item -S
946 @opindex S
947 Stop after the stage of compilation proper; do not assemble.  The output
948 is in the form of an assembler code file for each non-assembler input
949 file specified.
950
951 By default, the assembler file name for a source file is made by
952 replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
953
954 Input files that don't require compilation are ignored.
955
956 @item -E
957 @opindex E
958 Stop after the preprocessing stage; do not run the compiler proper.  The
959 output is in the form of preprocessed source code, which is sent to the
960 standard output.
961
962 Input files which don't require preprocessing are ignored.
963
964 @cindex output file option
965 @item -o @var{file}
966 @opindex o
967 Place output in file @var{file}.  This applies regardless to whatever
968 sort of output is being produced, whether it be an executable file,
969 an object file, an assembler file or preprocessed C code.
970
971 If @option{-o} is not specified, the default is to put an executable
972 file in @file{a.out}, the object file for
973 @file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
974 assembler file in @file{@var{source}.s}, a precompiled header file in
975 @file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
976 standard output.
977
978 @item -v
979 @opindex v
980 Print (on standard error output) the commands executed to run the stages
981 of compilation.  Also print the version number of the compiler driver
982 program and of the preprocessor and the compiler proper.
983
984 @item -###
985 @opindex ###
986 Like @option{-v} except the commands are not executed and all command
987 arguments are quoted.  This is useful for shell scripts to capture the
988 driver-generated command lines.
989
990 @item -pipe
991 @opindex pipe
992 Use pipes rather than temporary files for communication between the
993 various stages of compilation.  This fails to work on some systems where
994 the assembler is unable to read from a pipe; but the GNU assembler has
995 no trouble.
996
997 @item -combine
998 @opindex combine
999 If you are compiling multiple source files, this option tells the driver
1000 to pass all the source files to the compiler at once (for those
1001 languages for which the compiler can handle this).  This will allow
1002 intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1003 language for which this is supported is C@.  If you pass source files for
1004 multiple languages to the driver, using this option, the driver will invoke
1005 the compiler(s) that support IMA once each, passing each compiler all the
1006 source files appropriate for it.  For those languages that do not support
1007 IMA this option will be ignored, and the compiler will be invoked once for
1008 each source file in that language.  If you use this option in conjunction
1009 with @option{-save-temps}, the compiler will generate multiple
1010 pre-processed files
1011 (one for each source file), but only one (combined) @file{.o} or
1012 @file{.s} file.
1013
1014 @item --help
1015 @opindex help
1016 Print (on the standard output) a description of the command line options
1017 understood by @command{gcc}.  If the @option{-v} option is also specified
1018 then @option{--help} will also be passed on to the various processes
1019 invoked by @command{gcc}, so that they can display the command line options
1020 they accept.  If the @option{-Wextra} option is also specified then command
1021 line options which have no documentation associated with them will also
1022 be displayed.
1023
1024 @item --target-help
1025 @opindex target-help
1026 Print (on the standard output) a description of target specific command
1027 line options for each tool.
1028
1029 @item --version
1030 @opindex version
1031 Display the version number and copyrights of the invoked GCC@.
1032 @end table
1033
1034 @node Invoking G++
1035 @section Compiling C++ Programs
1036
1037 @cindex suffixes for C++ source
1038 @cindex C++ source file suffixes
1039 C++ source files conventionally use one of the suffixes @samp{.C},
1040 @samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1041 @samp{.cxx}; C++ header files often use @samp{.hh} or @samp{.H}; and
1042 preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1043 files with these names and compiles them as C++ programs even if you
1044 call the compiler the same way as for compiling C programs (usually
1045 with the name @command{gcc}).
1046
1047 @findex g++
1048 @findex c++
1049 However, C++ programs often require class libraries as well as a
1050 compiler that understands the C++ language---and under some
1051 circumstances, you might want to compile programs or header files from
1052 standard input, or otherwise without a suffix that flags them as C++
1053 programs.  You might also like to precompile a C header file with a
1054 @samp{.h} extension to be used in C++ compilations.  @command{g++} is a
1055 program that calls GCC with the default language set to C++, and
1056 automatically specifies linking against the C++ library.  On many
1057 systems, @command{g++} is also installed with the name @command{c++}.
1058
1059 @cindex invoking @command{g++}
1060 When you compile C++ programs, you may specify many of the same
1061 command-line options that you use for compiling programs in any
1062 language; or command-line options meaningful for C and related
1063 languages; or options that are meaningful only for C++ programs.
1064 @xref{C Dialect Options,,Options Controlling C Dialect}, for
1065 explanations of options for languages related to C@.
1066 @xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1067 explanations of options that are meaningful only for C++ programs.
1068
1069 @node C Dialect Options
1070 @section Options Controlling C Dialect
1071 @cindex dialect options
1072 @cindex language dialect options
1073 @cindex options, dialect
1074
1075 The following options control the dialect of C (or languages derived
1076 from C, such as C++, Objective-C and Objective-C++) that the compiler
1077 accepts:
1078
1079 @table @gcctabopt
1080 @cindex ANSI support
1081 @cindex ISO support
1082 @item -ansi
1083 @opindex ansi
1084 In C mode, support all ISO C90 programs.  In C++ mode,
1085 remove GNU extensions that conflict with ISO C++.
1086
1087 This turns off certain features of GCC that are incompatible with ISO
1088 C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1089 such as the @code{asm} and @code{typeof} keywords, and
1090 predefined macros such as @code{unix} and @code{vax} that identify the
1091 type of system you are using.  It also enables the undesirable and
1092 rarely used ISO trigraph feature.  For the C compiler,
1093 it disables recognition of C++ style @samp{//} comments as well as
1094 the @code{inline} keyword.
1095
1096 The alternate keywords @code{__asm__}, @code{__extension__},
1097 @code{__inline__} and @code{__typeof__} continue to work despite
1098 @option{-ansi}.  You would not want to use them in an ISO C program, of
1099 course, but it is useful to put them in header files that might be included
1100 in compilations done with @option{-ansi}.  Alternate predefined macros
1101 such as @code{__unix__} and @code{__vax__} are also available, with or
1102 without @option{-ansi}.
1103
1104 The @option{-ansi} option does not cause non-ISO programs to be
1105 rejected gratuitously.  For that, @option{-pedantic} is required in
1106 addition to @option{-ansi}.  @xref{Warning Options}.
1107
1108 The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1109 option is used.  Some header files may notice this macro and refrain
1110 from declaring certain functions or defining certain macros that the
1111 ISO standard doesn't call for; this is to avoid interfering with any
1112 programs that might use these names for other things.
1113
1114 Functions which would normally be built in but do not have semantics
1115 defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1116 functions with @option{-ansi} is used.  @xref{Other Builtins,,Other
1117 built-in functions provided by GCC}, for details of the functions
1118 affected.
1119
1120 @item -std=
1121 @opindex std
1122 Determine the language standard.  This option is currently only
1123 supported when compiling C or C++.  A value for this option must be
1124 provided; possible values are
1125
1126 @table @samp
1127 @item c89
1128 @itemx iso9899:1990
1129 ISO C90 (same as @option{-ansi}).
1130
1131 @item iso9899:199409
1132 ISO C90 as modified in amendment 1.
1133
1134 @item c99
1135 @itemx c9x
1136 @itemx iso9899:1999
1137 @itemx iso9899:199x
1138 ISO C99.  Note that this standard is not yet fully supported; see
1139 @w{@uref{http://gcc.gnu.org/c99status.html}} for more information.  The
1140 names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1141
1142 @item gnu89
1143 Default, ISO C90 plus GNU extensions (including some C99 features).
1144
1145 @item gnu99
1146 @itemx gnu9x
1147 ISO C99 plus GNU extensions.  When ISO C99 is fully implemented in GCC,
1148 this will become the default.  The name @samp{gnu9x} is deprecated.
1149
1150 @item c++98
1151 The 1998 ISO C++ standard plus amendments.
1152
1153 @item gnu++98
1154 The same as @option{-std=c++98} plus GNU extensions.  This is the
1155 default for C++ code.
1156 @end table
1157
1158 Even when this option is not specified, you can still use some of the
1159 features of newer standards in so far as they do not conflict with
1160 previous C standards.  For example, you may use @code{__restrict__} even
1161 when @option{-std=c99} is not specified.
1162
1163 The @option{-std} options specifying some version of ISO C have the same
1164 effects as @option{-ansi}, except that features that were not in ISO C90
1165 but are in the specified version (for example, @samp{//} comments and
1166 the @code{inline} keyword in ISO C99) are not disabled.
1167
1168 @xref{Standards,,Language Standards Supported by GCC}, for details of
1169 these standard versions.
1170
1171 @item -aux-info @var{filename}
1172 @opindex aux-info
1173 Output to the given filename prototyped declarations for all functions
1174 declared and/or defined in a translation unit, including those in header
1175 files.  This option is silently ignored in any language other than C@.
1176
1177 Besides declarations, the file indicates, in comments, the origin of
1178 each declaration (source file and line), whether the declaration was
1179 implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1180 @samp{O} for old, respectively, in the first character after the line
1181 number and the colon), and whether it came from a declaration or a
1182 definition (@samp{C} or @samp{F}, respectively, in the following
1183 character).  In the case of function definitions, a K&R-style list of
1184 arguments followed by their declarations is also provided, inside
1185 comments, after the declaration.
1186
1187 @item -fno-asm
1188 @opindex fno-asm
1189 Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1190 keyword, so that code can use these words as identifiers.  You can use
1191 the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1192 instead.  @option{-ansi} implies @option{-fno-asm}.
1193
1194 In C++, this switch only affects the @code{typeof} keyword, since
1195 @code{asm} and @code{inline} are standard keywords.  You may want to
1196 use the @option{-fno-gnu-keywords} flag instead, which has the same
1197 effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1198 switch only affects the @code{asm} and @code{typeof} keywords, since
1199 @code{inline} is a standard keyword in ISO C99.
1200
1201 @item -fno-builtin
1202 @itemx -fno-builtin-@var{function}
1203 @opindex fno-builtin
1204 @cindex built-in functions
1205 Don't recognize built-in functions that do not begin with
1206 @samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1207 functions provided by GCC}, for details of the functions affected,
1208 including those which are not built-in functions when @option{-ansi} or
1209 @option{-std} options for strict ISO C conformance are used because they
1210 do not have an ISO standard meaning.
1211
1212 GCC normally generates special code to handle certain built-in functions
1213 more efficiently; for instance, calls to @code{alloca} may become single
1214 instructions that adjust the stack directly, and calls to @code{memcpy}
1215 may become inline copy loops.  The resulting code is often both smaller
1216 and faster, but since the function calls no longer appear as such, you
1217 cannot set a breakpoint on those calls, nor can you change the behavior
1218 of the functions by linking with a different library.  In addition,
1219 when a function is recognized as a built-in function, GCC may use
1220 information about that function to warn about problems with calls to
1221 that function, or to generate more efficient code, even if the
1222 resulting code still contains calls to that function.  For example,
1223 warnings are given with @option{-Wformat} for bad calls to
1224 @code{printf}, when @code{printf} is built in, and @code{strlen} is
1225 known not to modify global memory.
1226
1227 With the @option{-fno-builtin-@var{function}} option
1228 only the built-in function @var{function} is
1229 disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1230 function is named this is not built-in in this version of GCC, this
1231 option is ignored.  There is no corresponding
1232 @option{-fbuiltin-@var{function}} option; if you wish to enable
1233 built-in functions selectively when using @option{-fno-builtin} or
1234 @option{-ffreestanding}, you may define macros such as:
1235
1236 @smallexample
1237 #define abs(n)          __builtin_abs ((n))
1238 #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1239 @end smallexample
1240
1241 @item -fhosted
1242 @opindex fhosted
1243 @cindex hosted environment
1244
1245 Assert that compilation takes place in a hosted environment.  This implies
1246 @option{-fbuiltin}.  A hosted environment is one in which the
1247 entire standard library is available, and in which @code{main} has a return
1248 type of @code{int}.  Examples are nearly everything except a kernel.
1249 This is equivalent to @option{-fno-freestanding}.
1250
1251 @item -ffreestanding
1252 @opindex ffreestanding
1253 @cindex hosted environment
1254
1255 Assert that compilation takes place in a freestanding environment.  This
1256 implies @option{-fno-builtin}.  A freestanding environment
1257 is one in which the standard library may not exist, and program startup may
1258 not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1259 This is equivalent to @option{-fno-hosted}.
1260
1261 @xref{Standards,,Language Standards Supported by GCC}, for details of
1262 freestanding and hosted environments.
1263
1264 @item -fms-extensions
1265 @opindex fms-extensions
1266 Accept some non-standard constructs used in Microsoft header files.
1267
1268 Some cases of unnamed fields in structures and unions are only
1269 accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1270 fields within structs/unions}, for details.
1271
1272 @item -trigraphs
1273 @opindex trigraphs
1274 Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1275 options for strict ISO C conformance) implies @option{-trigraphs}.
1276
1277 @item -no-integrated-cpp
1278 @opindex no-integrated-cpp
1279 Performs a compilation in two passes: preprocessing and compiling.  This
1280 option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1281 @option{-B} option.  The user supplied compilation step can then add in
1282 an additional preprocessing step after normal preprocessing but before
1283 compiling.  The default is to use the integrated cpp (internal cpp)
1284
1285 The semantics of this option will change if "cc1", "cc1plus", and
1286 "cc1obj" are merged.
1287
1288 @cindex traditional C language
1289 @cindex C language, traditional
1290 @item -traditional
1291 @itemx -traditional-cpp
1292 @opindex traditional-cpp
1293 @opindex traditional
1294 Formerly, these options caused GCC to attempt to emulate a pre-standard
1295 C compiler.  They are now only supported with the @option{-E} switch.
1296 The preprocessor continues to support a pre-standard mode.  See the GNU
1297 CPP manual for details.
1298
1299 @item -fcond-mismatch
1300 @opindex fcond-mismatch
1301 Allow conditional expressions with mismatched types in the second and
1302 third arguments.  The value of such an expression is void.  This option
1303 is not supported for C++.
1304
1305 @item -funsigned-char
1306 @opindex funsigned-char
1307 Let the type @code{char} be unsigned, like @code{unsigned char}.
1308
1309 Each kind of machine has a default for what @code{char} should
1310 be.  It is either like @code{unsigned char} by default or like
1311 @code{signed char} by default.
1312
1313 Ideally, a portable program should always use @code{signed char} or
1314 @code{unsigned char} when it depends on the signedness of an object.
1315 But many programs have been written to use plain @code{char} and
1316 expect it to be signed, or expect it to be unsigned, depending on the
1317 machines they were written for.  This option, and its inverse, let you
1318 make such a program work with the opposite default.
1319
1320 The type @code{char} is always a distinct type from each of
1321 @code{signed char} or @code{unsigned char}, even though its behavior
1322 is always just like one of those two.
1323
1324 @item -fsigned-char
1325 @opindex fsigned-char
1326 Let the type @code{char} be signed, like @code{signed char}.
1327
1328 Note that this is equivalent to @option{-fno-unsigned-char}, which is
1329 the negative form of @option{-funsigned-char}.  Likewise, the option
1330 @option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1331
1332 @item -fsigned-bitfields
1333 @itemx -funsigned-bitfields
1334 @itemx -fno-signed-bitfields
1335 @itemx -fno-unsigned-bitfields
1336 @opindex fsigned-bitfields
1337 @opindex funsigned-bitfields
1338 @opindex fno-signed-bitfields
1339 @opindex fno-unsigned-bitfields
1340 These options control whether a bit-field is signed or unsigned, when the
1341 declaration does not use either @code{signed} or @code{unsigned}.  By
1342 default, such a bit-field is signed, because this is consistent: the
1343 basic integer types such as @code{int} are signed types.
1344 @end table
1345
1346 @node C++ Dialect Options
1347 @section Options Controlling C++ Dialect
1348
1349 @cindex compiler options, C++
1350 @cindex C++ options, command line
1351 @cindex options, C++
1352 This section describes the command-line options that are only meaningful
1353 for C++ programs; but you can also use most of the GNU compiler options
1354 regardless of what language your program is in.  For example, you
1355 might compile a file @code{firstClass.C} like this:
1356
1357 @smallexample
1358 g++ -g -frepo -O -c firstClass.C
1359 @end smallexample
1360
1361 @noindent
1362 In this example, only @option{-frepo} is an option meant
1363 only for C++ programs; you can use the other options with any
1364 language supported by GCC@.
1365
1366 Here is a list of options that are @emph{only} for compiling C++ programs:
1367
1368 @table @gcctabopt
1369
1370 @item -fabi-version=@var{n}
1371 @opindex fabi-version
1372 Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1373 C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1374 the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1375 the version that conforms most closely to the C++ ABI specification.
1376 Therefore, the ABI obtained using version 0 will change as ABI bugs
1377 are fixed.
1378
1379 The default is version 2.
1380
1381 @item -fno-access-control
1382 @opindex fno-access-control
1383 Turn off all access checking.  This switch is mainly useful for working
1384 around bugs in the access control code.
1385
1386 @item -fcheck-new
1387 @opindex fcheck-new
1388 Check that the pointer returned by @code{operator new} is non-null
1389 before attempting to modify the storage allocated.  This check is
1390 normally unnecessary because the C++ standard specifies that
1391 @code{operator new} will only return @code{0} if it is declared
1392 @samp{throw()}, in which case the compiler will always check the
1393 return value even without this option.  In all other cases, when
1394 @code{operator new} has a non-empty exception specification, memory
1395 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1396 @samp{new (nothrow)}.
1397
1398 @item -fconserve-space
1399 @opindex fconserve-space
1400 Put uninitialized or runtime-initialized global variables into the
1401 common segment, as C does.  This saves space in the executable at the
1402 cost of not diagnosing duplicate definitions.  If you compile with this
1403 flag and your program mysteriously crashes after @code{main()} has
1404 completed, you may have an object that is being destroyed twice because
1405 two definitions were merged.
1406
1407 This option is no longer useful on most targets, now that support has
1408 been added for putting variables into BSS without making them common.
1409
1410 @item -fno-const-strings
1411 @opindex fno-const-strings
1412 Give string constants type @code{char *} instead of type @code{const
1413 char *}.  By default, G++ uses type @code{const char *} as required by
1414 the standard.  Even if you use @option{-fno-const-strings}, you cannot
1415 actually modify the value of a string constant.
1416
1417 This option might be removed in a future release of G++.  For maximum
1418 portability, you should structure your code so that it works with
1419 string constants that have type @code{const char *}.
1420
1421 @item -fno-elide-constructors
1422 @opindex fno-elide-constructors
1423 The C++ standard allows an implementation to omit creating a temporary
1424 which is only used to initialize another object of the same type.
1425 Specifying this option disables that optimization, and forces G++ to
1426 call the copy constructor in all cases.
1427
1428 @item -fno-enforce-eh-specs
1429 @opindex fno-enforce-eh-specs
1430 Don't check for violation of exception specifications at runtime.  This
1431 option violates the C++ standard, but may be useful for reducing code
1432 size in production builds, much like defining @samp{NDEBUG}.  The compiler
1433 will still optimize based on the exception specifications.
1434
1435 @item -ffor-scope
1436 @itemx -fno-for-scope
1437 @opindex ffor-scope
1438 @opindex fno-for-scope
1439 If @option{-ffor-scope} is specified, the scope of variables declared in
1440 a @i{for-init-statement} is limited to the @samp{for} loop itself,
1441 as specified by the C++ standard.
1442 If @option{-fno-for-scope} is specified, the scope of variables declared in
1443 a @i{for-init-statement} extends to the end of the enclosing scope,
1444 as was the case in old versions of G++, and other (traditional)
1445 implementations of C++.
1446
1447 The default if neither flag is given to follow the standard,
1448 but to allow and give a warning for old-style code that would
1449 otherwise be invalid, or have different behavior.
1450
1451 @item -fno-gnu-keywords
1452 @opindex fno-gnu-keywords
1453 Do not recognize @code{typeof} as a keyword, so that code can use this
1454 word as an identifier.  You can use the keyword @code{__typeof__} instead.
1455 @option{-ansi} implies @option{-fno-gnu-keywords}.
1456
1457 @item -fno-implicit-templates
1458 @opindex fno-implicit-templates
1459 Never emit code for non-inline templates which are instantiated
1460 implicitly (i.e.@: by use); only emit code for explicit instantiations.
1461 @xref{Template Instantiation}, for more information.
1462
1463 @item -fno-implicit-inline-templates
1464 @opindex fno-implicit-inline-templates
1465 Don't emit code for implicit instantiations of inline templates, either.
1466 The default is to handle inlines differently so that compiles with and
1467 without optimization will need the same set of explicit instantiations.
1468
1469 @item -fno-implement-inlines
1470 @opindex fno-implement-inlines
1471 To save space, do not emit out-of-line copies of inline functions
1472 controlled by @samp{#pragma implementation}.  This will cause linker
1473 errors if these functions are not inlined everywhere they are called.
1474
1475 @item -fms-extensions
1476 @opindex fms-extensions
1477 Disable pedantic warnings about constructs used in MFC, such as implicit
1478 int and getting a pointer to member function via non-standard syntax.
1479
1480 @item -fno-nonansi-builtins
1481 @opindex fno-nonansi-builtins
1482 Disable built-in declarations of functions that are not mandated by
1483 ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1484 @code{index}, @code{bzero}, @code{conjf}, and other related functions.
1485
1486 @item -fno-operator-names
1487 @opindex fno-operator-names
1488 Do not treat the operator name keywords @code{and}, @code{bitand},
1489 @code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1490 synonyms as keywords.
1491
1492 @item -fno-optional-diags
1493 @opindex fno-optional-diags
1494 Disable diagnostics that the standard says a compiler does not need to
1495 issue.  Currently, the only such diagnostic issued by G++ is the one for
1496 a name having multiple meanings within a class.
1497
1498 @item -fpermissive
1499 @opindex fpermissive
1500 Downgrade some diagnostics about nonconformant code from errors to
1501 warnings.  Thus, using @option{-fpermissive} will allow some
1502 nonconforming code to compile.
1503
1504 @item -frepo
1505 @opindex frepo
1506 Enable automatic template instantiation at link time.  This option also
1507 implies @option{-fno-implicit-templates}.  @xref{Template
1508 Instantiation}, for more information.
1509
1510 @item -fno-rtti
1511 @opindex fno-rtti
1512 Disable generation of information about every class with virtual
1513 functions for use by the C++ runtime type identification features
1514 (@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1515 of the language, you can save some space by using this flag.  Note that
1516 exception handling uses the same information, but it will generate it as
1517 needed.
1518
1519 @item -fstats
1520 @opindex fstats
1521 Emit statistics about front-end processing at the end of the compilation.
1522 This information is generally only useful to the G++ development team.
1523
1524 @item -ftemplate-depth-@var{n}
1525 @opindex ftemplate-depth
1526 Set the maximum instantiation depth for template classes to @var{n}.
1527 A limit on the template instantiation depth is needed to detect
1528 endless recursions during template class instantiation.  ANSI/ISO C++
1529 conforming programs must not rely on a maximum depth greater than 17.
1530
1531 @item -fno-threadsafe-statics
1532 @opindex fno-threadsafe-statics
1533 Do not emit the extra code to use the routines specified in the C++
1534 ABI for thread-safe initialization of local statics.  You can use this
1535 option to reduce code size slightly in code that doesn't need to be
1536 thread-safe.
1537
1538 @item -fuse-cxa-atexit
1539 @opindex fuse-cxa-atexit
1540 Register destructors for objects with static storage duration with the
1541 @code{__cxa_atexit} function rather than the @code{atexit} function.
1542 This option is required for fully standards-compliant handling of static
1543 destructors, but will only work if your C library supports
1544 @code{__cxa_atexit}.
1545
1546 @item -fvisibility-inlines-hidden
1547 @opindex fvisibility-inlines-hidden
1548 Causes all inlined methods to be marked with
1549 @code{__attribute__ ((visibility ("hidden")))} so that they do not
1550 appear in the export table of a DSO and do not require a PLT indirection
1551 when used within the DSO@.  Enabling this option can have a dramatic effect
1552 on load and link times of a DSO as it massively reduces the size of the
1553 dynamic export table when the library makes heavy use of templates.  While
1554 it can cause bloating through duplication of code within each DSO where
1555 it is used, often the wastage is less than the considerable space occupied
1556 by a long symbol name in the export table which is typical when using
1557 templates and namespaces.  For even more savings, combine with the
1558 @option{-fvisibility=hidden} switch.
1559
1560 @item -fno-weak
1561 @opindex fno-weak
1562 Do not use weak symbol support, even if it is provided by the linker.
1563 By default, G++ will use weak symbols if they are available.  This
1564 option exists only for testing, and should not be used by end-users;
1565 it will result in inferior code and has no benefits.  This option may
1566 be removed in a future release of G++.
1567
1568 @item -nostdinc++
1569 @opindex nostdinc++
1570 Do not search for header files in the standard directories specific to
1571 C++, but do still search the other standard directories.  (This option
1572 is used when building the C++ library.)
1573 @end table
1574
1575 In addition, these optimization, warning, and code generation options
1576 have meanings only for C++ programs:
1577
1578 @table @gcctabopt
1579 @item -fno-default-inline
1580 @opindex fno-default-inline
1581 Do not assume @samp{inline} for functions defined inside a class scope.
1582 @xref{Optimize Options,,Options That Control Optimization}.  Note that these
1583 functions will have linkage like inline functions; they just won't be
1584 inlined by default.
1585
1586 @item -Wabi @r{(C++ only)}
1587 @opindex Wabi
1588 Warn when G++ generates code that is probably not compatible with the
1589 vendor-neutral C++ ABI@.  Although an effort has been made to warn about
1590 all such cases, there are probably some cases that are not warned about,
1591 even though G++ is generating incompatible code.  There may also be
1592 cases where warnings are emitted even though the code that is generated
1593 will be compatible.
1594
1595 You should rewrite your code to avoid these warnings if you are
1596 concerned about the fact that code generated by G++ may not be binary
1597 compatible with code generated by other compilers.
1598
1599 The known incompatibilities at this point include:
1600
1601 @itemize @bullet
1602
1603 @item
1604 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1605 pack data into the same byte as a base class.  For example:
1606
1607 @smallexample
1608 struct A @{ virtual void f(); int f1 : 1; @};
1609 struct B : public A @{ int f2 : 1; @};
1610 @end smallexample
1611
1612 @noindent
1613 In this case, G++ will place @code{B::f2} into the same byte
1614 as@code{A::f1}; other compilers will not.  You can avoid this problem
1615 by explicitly padding @code{A} so that its size is a multiple of the
1616 byte size on your platform; that will cause G++ and other compilers to
1617 layout @code{B} identically.
1618
1619 @item
1620 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1621 tail padding when laying out virtual bases.  For example:
1622
1623 @smallexample
1624 struct A @{ virtual void f(); char c1; @};
1625 struct B @{ B(); char c2; @};
1626 struct C : public A, public virtual B @{@};
1627 @end smallexample
1628
1629 @noindent
1630 In this case, G++ will not place @code{B} into the tail-padding for
1631 @code{A}; other compilers will.  You can avoid this problem by
1632 explicitly padding @code{A} so that its size is a multiple of its
1633 alignment (ignoring virtual base classes); that will cause G++ and other
1634 compilers to layout @code{C} identically.
1635
1636 @item
1637 Incorrect handling of bit-fields with declared widths greater than that
1638 of their underlying types, when the bit-fields appear in a union.  For
1639 example:
1640
1641 @smallexample
1642 union U @{ int i : 4096; @};
1643 @end smallexample
1644
1645 @noindent
1646 Assuming that an @code{int} does not have 4096 bits, G++ will make the
1647 union too small by the number of bits in an @code{int}.
1648
1649 @item
1650 Empty classes can be placed at incorrect offsets.  For example:
1651
1652 @smallexample
1653 struct A @{@};
1654
1655 struct B @{
1656   A a;
1657   virtual void f ();
1658 @};
1659
1660 struct C : public B, public A @{@};
1661 @end smallexample
1662
1663 @noindent
1664 G++ will place the @code{A} base class of @code{C} at a nonzero offset;
1665 it should be placed at offset zero.  G++ mistakenly believes that the
1666 @code{A} data member of @code{B} is already at offset zero.
1667
1668 @item
1669 Names of template functions whose types involve @code{typename} or
1670 template template parameters can be mangled incorrectly.
1671
1672 @smallexample
1673 template <typename Q>
1674 void f(typename Q::X) @{@}
1675
1676 template <template <typename> class Q>
1677 void f(typename Q<int>::X) @{@}
1678 @end smallexample
1679
1680 @noindent
1681 Instantiations of these templates may be mangled incorrectly.
1682
1683 @end itemize
1684
1685 @item -Wctor-dtor-privacy @r{(C++ only)}
1686 @opindex Wctor-dtor-privacy
1687 Warn when a class seems unusable because all the constructors or
1688 destructors in that class are private, and it has neither friends nor
1689 public static member functions.
1690
1691 @item -Wnon-virtual-dtor @r{(C++ only)}
1692 @opindex Wnon-virtual-dtor
1693 Warn when a class appears to be polymorphic, thereby requiring a virtual
1694 destructor, yet it declares a non-virtual one.
1695 This warning is enabled by @option{-Wall}.
1696
1697 @item -Wreorder @r{(C++ only)}
1698 @opindex Wreorder
1699 @cindex reordering, warning
1700 @cindex warning for reordering of member initializers
1701 Warn when the order of member initializers given in the code does not
1702 match the order in which they must be executed.  For instance:
1703
1704 @smallexample
1705 struct A @{
1706   int i;
1707   int j;
1708   A(): j (0), i (1) @{ @}
1709 @};
1710 @end smallexample
1711
1712 The compiler will rearrange the member initializers for @samp{i}
1713 and @samp{j} to match the declaration order of the members, emitting
1714 a warning to that effect.  This warning is enabled by @option{-Wall}.
1715 @end table
1716
1717 The following @option{-W@dots{}} options are not affected by @option{-Wall}.
1718
1719 @table @gcctabopt
1720 @item -Weffc++ @r{(C++ only)}
1721 @opindex Weffc++
1722 Warn about violations of the following style guidelines from Scott Meyers'
1723 @cite{Effective C++} book:
1724
1725 @itemize @bullet
1726 @item
1727 Item 11:  Define a copy constructor and an assignment operator for classes
1728 with dynamically allocated memory.
1729
1730 @item
1731 Item 12:  Prefer initialization to assignment in constructors.
1732
1733 @item
1734 Item 14:  Make destructors virtual in base classes.
1735
1736 @item
1737 Item 15:  Have @code{operator=} return a reference to @code{*this}.
1738
1739 @item
1740 Item 23:  Don't try to return a reference when you must return an object.
1741
1742 @end itemize
1743
1744 Also warn about violations of the following style guidelines from
1745 Scott Meyers' @cite{More Effective C++} book:
1746
1747 @itemize @bullet
1748 @item
1749 Item 6:  Distinguish between prefix and postfix forms of increment and
1750 decrement operators.
1751
1752 @item
1753 Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
1754
1755 @end itemize
1756
1757 When selecting this option, be aware that the standard library
1758 headers do not obey all of these guidelines; use @samp{grep -v}
1759 to filter out those warnings.
1760
1761 @item -Wno-deprecated @r{(C++ only)}
1762 @opindex Wno-deprecated
1763 Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
1764
1765 @item -Wstrict-null-sentinel @r{(C++ only)}
1766 @opindex Wstrict-null-sentinel
1767 Warn also about the use of an uncasted @code{NULL} as sentinel.  When
1768 compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
1769 to @code{__null}.  Although it is a null pointer constant not a null pointer,
1770 it is guaranteed to of the same size as a pointer.  But this use is
1771 not portable across different compilers.
1772
1773 @item -Wno-non-template-friend @r{(C++ only)}
1774 @opindex Wno-non-template-friend
1775 Disable warnings when non-templatized friend functions are declared
1776 within a template.  Since the advent of explicit template specification
1777 support in G++, if the name of the friend is an unqualified-id (i.e.,
1778 @samp{friend foo(int)}), the C++ language specification demands that the
1779 friend declare or define an ordinary, nontemplate function.  (Section
1780 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
1781 could be interpreted as a particular specialization of a templatized
1782 function.  Because this non-conforming behavior is no longer the default
1783 behavior for G++, @option{-Wnon-template-friend} allows the compiler to
1784 check existing code for potential trouble spots and is on by default.
1785 This new compiler behavior can be turned off with
1786 @option{-Wno-non-template-friend} which keeps the conformant compiler code
1787 but disables the helpful warning.
1788
1789 @item -Wold-style-cast @r{(C++ only)}
1790 @opindex Wold-style-cast
1791 Warn if an old-style (C-style) cast to a non-void type is used within
1792 a C++ program.  The new-style casts (@samp{static_cast},
1793 @samp{reinterpret_cast}, and @samp{const_cast}) are less vulnerable to
1794 unintended effects and much easier to search for.
1795
1796 @item -Woverloaded-virtual @r{(C++ only)}
1797 @opindex Woverloaded-virtual
1798 @cindex overloaded virtual fn, warning
1799 @cindex warning for overloaded virtual fn
1800 Warn when a function declaration hides virtual functions from a
1801 base class.  For example, in:
1802
1803 @smallexample
1804 struct A @{
1805   virtual void f();
1806 @};
1807
1808 struct B: public A @{
1809   void f(int);
1810 @};
1811 @end smallexample
1812
1813 the @code{A} class version of @code{f} is hidden in @code{B}, and code
1814 like:
1815
1816 @smallexample
1817 B* b;
1818 b->f();
1819 @end smallexample
1820
1821 will fail to compile.
1822
1823 @item -Wno-pmf-conversions @r{(C++ only)}
1824 @opindex Wno-pmf-conversions
1825 Disable the diagnostic for converting a bound pointer to member function
1826 to a plain pointer.
1827
1828 @item -Wsign-promo @r{(C++ only)}
1829 @opindex Wsign-promo
1830 Warn when overload resolution chooses a promotion from unsigned or
1831 enumerated type to a signed type, over a conversion to an unsigned type of
1832 the same size.  Previous versions of G++ would try to preserve
1833 unsignedness, but the standard mandates the current behavior.
1834
1835 @smallexample
1836 struct A @{
1837   operator int ();
1838   A& operator = (int);
1839 @};
1840
1841 main ()
1842 @{
1843   A a,b;
1844   a = b;
1845 @}
1846 @end smallexample
1847
1848 In this example, G++ will synthesize a default @samp{A& operator =
1849 (const A&);}, while cfront will use the user-defined @samp{operator =}.
1850 @end table
1851
1852 @node Objective-C and Objective-C++ Dialect Options
1853 @section Options Controlling Objective-C and Objective-C++ Dialects
1854
1855 @cindex compiler options, Objective-C and Objective-C++
1856 @cindex Objective-C and Objective-C++ options, command line
1857 @cindex options, Objective-C and Objective-C++
1858 (NOTE: This manual does not describe the Objective-C and Objective-C++
1859 languages themselves.  See @xref{Standards,,Language Standards
1860 Supported by GCC}, for references.)
1861
1862 This section describes the command-line options that are only meaningful
1863 for Objective-C and Objective-C++ programs, but you can also use most of
1864 the language-independent GNU compiler options.
1865 For example, you might compile a file @code{some_class.m} like this:
1866
1867 @smallexample
1868 gcc -g -fgnu-runtime -O -c some_class.m
1869 @end smallexample
1870
1871 @noindent
1872 In this example, @option{-fgnu-runtime} is an option meant only for
1873 Objective-C and Objective-C++ programs; you can use the other options with
1874 any language supported by GCC@.
1875
1876 Note that since Objective-C is an extension of the C language, Objective-C
1877 compilations may also use options specific to the C front-end (e.g.,
1878 @option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
1879 C++-specific options (e.g., @option{-Wabi}).
1880
1881 Here is a list of options that are @emph{only} for compiling Objective-C
1882 and Objective-C++ programs:
1883
1884 @table @gcctabopt
1885 @item -fconstant-string-class=@var{class-name}
1886 @opindex fconstant-string-class
1887 Use @var{class-name} as the name of the class to instantiate for each
1888 literal string specified with the syntax @code{@@"@dots{}"}.  The default
1889 class name is @code{NXConstantString} if the GNU runtime is being used, and
1890 @code{NSConstantString} if the NeXT runtime is being used (see below).  The
1891 @option{-fconstant-cfstrings} option, if also present, will override the
1892 @option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
1893 to be laid out as constant CoreFoundation strings.
1894
1895 @item -fgnu-runtime
1896 @opindex fgnu-runtime
1897 Generate object code compatible with the standard GNU Objective-C
1898 runtime.  This is the default for most types of systems.
1899
1900 @item -fnext-runtime
1901 @opindex fnext-runtime
1902 Generate output compatible with the NeXT runtime.  This is the default
1903 for NeXT-based systems, including Darwin and Mac OS X@.  The macro
1904 @code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
1905 used.
1906
1907 @item -fno-nil-receivers
1908 @opindex fno-nil-receivers
1909 Assume that all Objective-C message dispatches (e.g.,
1910 @code{[receiver message:arg]}) in this translation unit ensure that the receiver
1911 is not @code{nil}.  This allows for more efficient entry points in the runtime
1912 to be used.  Currently, this option is only available in conjunction with
1913 the NeXT runtime on Mac OS X 10.3 and later.
1914
1915 @item -fobjc-call-cxx-cdtors
1916 @opindex fobjc-call-cxx-cdtors
1917 For each Objective-C class, check if any of its instance variables is a
1918 C++ object with a non-trivial default constructor.  If so, synthesize a
1919 special @code{- (id) .cxx_construct} instance method that will run
1920 non-trivial default constructors on any such instance variables, in order,
1921 and then return @code{self}.  Similarly, check if any instance variable
1922 is a C++ object with a non-trivial destructor, and if so, synthesize a
1923 special @code{- (void) .cxx_destruct} method that will run
1924 all such default destructors, in reverse order.
1925
1926 The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
1927 thusly generated will only operate on instance variables declared in the
1928 current Objective-C class, and not those inherited from superclasses.  It
1929 is the responsibility of the Objective-C runtime to invoke all such methods
1930 in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
1931 will be invoked by the runtime immediately after a new object
1932 instance is allocated; the @code{- (void) .cxx_destruct} methods will
1933 be invoked immediately before the runtime deallocates an object instance.
1934
1935 As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
1936 support for invoking the @code{- (id) .cxx_construct} and
1937 @code{- (void) .cxx_destruct} methods.
1938
1939 @item -fobjc-direct-dispatch
1940 @opindex fobjc-direct-dispatch
1941 Allow fast jumps to the message dispatcher.  On Darwin this is
1942 accomplished via the comm page.
1943
1944 @item -fobjc-exceptions
1945 @opindex fobjc-exceptions
1946 Enable syntactic support for structured exception handling in Objective-C,
1947 similar to what is offered by C++ and Java.  Currently, this option is only
1948 available in conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1949
1950 @smallexample
1951   @@try @{
1952     @dots{}
1953        @@throw expr;
1954     @dots{}
1955   @}
1956   @@catch (AnObjCClass *exc) @{
1957     @dots{}
1958       @@throw expr;
1959     @dots{}
1960       @@throw;
1961     @dots{}
1962   @}
1963   @@catch (AnotherClass *exc) @{
1964     @dots{}
1965   @}
1966   @@catch (id allOthers) @{
1967     @dots{}
1968   @}
1969   @@finally @{
1970     @dots{}
1971       @@throw expr;
1972     @dots{}
1973   @}
1974 @end smallexample
1975
1976 The @code{@@throw} statement may appear anywhere in an Objective-C or
1977 Objective-C++ program; when used inside of a @code{@@catch} block, the
1978 @code{@@throw} may appear without an argument (as shown above), in which case
1979 the object caught by the @code{@@catch} will be rethrown.
1980
1981 Note that only (pointers to) Objective-C objects may be thrown and
1982 caught using this scheme.  When an object is thrown, it will be caught
1983 by the nearest @code{@@catch} clause capable of handling objects of that type,
1984 analogously to how @code{catch} blocks work in C++ and Java.  A
1985 @code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
1986 any and all Objective-C exceptions not caught by previous @code{@@catch}
1987 clauses (if any).
1988
1989 The @code{@@finally} clause, if present, will be executed upon exit from the
1990 immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
1991 regardless of whether any exceptions are thrown, caught or rethrown
1992 inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
1993 of the @code{finally} clause in Java.
1994
1995 There are several caveats to using the new exception mechanism:
1996
1997 @itemize @bullet
1998 @item
1999 Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2000 idioms provided by the @code{NSException} class, the new
2001 exceptions can only be used on Mac OS X 10.3 (Panther) and later
2002 systems, due to additional functionality needed in the (NeXT) Objective-C
2003 runtime.
2004
2005 @item
2006 As mentioned above, the new exceptions do not support handling
2007 types other than Objective-C objects.   Furthermore, when used from
2008 Objective-C++, the Objective-C exception model does not interoperate with C++
2009 exceptions at this time.  This means you cannot @code{@@throw} an exception
2010 from Objective-C and @code{catch} it in C++, or vice versa
2011 (i.e., @code{throw @dots{} @@catch}).
2012 @end itemize
2013
2014 The @option{-fobjc-exceptions} switch also enables the use of synchronization
2015 blocks for thread-safe execution:
2016
2017 @smallexample
2018   @@synchronized (ObjCClass *guard) @{
2019     @dots{}
2020   @}
2021 @end smallexample
2022
2023 Upon entering the @code{@@synchronized} block, a thread of execution shall
2024 first check whether a lock has been placed on the corresponding @code{guard}
2025 object by another thread.  If it has, the current thread shall wait until
2026 the other thread relinquishes its lock.  Once @code{guard} becomes available,
2027 the current thread will place its own lock on it, execute the code contained in
2028 the @code{@@synchronized} block, and finally relinquish the lock (thereby
2029 making @code{guard} available to other threads).
2030
2031 Unlike Java, Objective-C does not allow for entire methods to be marked
2032 @code{@@synchronized}.  Note that throwing exceptions out of
2033 @code{@@synchronized} blocks is allowed, and will cause the guarding object
2034 to be unlocked properly.
2035
2036 @item -fobjc-gc
2037 @opindex fobjc-gc
2038 Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2039
2040 @item -freplace-objc-classes
2041 @opindex freplace-objc-classes
2042 Emit a special marker instructing @command{ld(1)} not to statically link in
2043 the resulting object file, and allow @command{dyld(1)} to load it in at
2044 run time instead.  This is used in conjunction with the Fix-and-Continue
2045 debugging mode, where the object file in question may be recompiled and
2046 dynamically reloaded in the course of program execution, without the need
2047 to restart the program itself.  Currently, Fix-and-Continue functionality
2048 is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2049 and later.
2050
2051 @item -fzero-link
2052 @opindex fzero-link
2053 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2054 to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2055 compile time) with static class references that get initialized at load time,
2056 which improves run-time performance.  Specifying the @option{-fzero-link} flag
2057 suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2058 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2059 for individual class implementations to be modified during program execution.
2060
2061 @item -gen-decls
2062 @opindex gen-decls
2063 Dump interface declarations for all classes seen in the source file to a
2064 file named @file{@var{sourcename}.decl}.
2065
2066 @item -Wassign-intercept
2067 @opindex Wassign-intercept
2068 Warn whenever an Objective-C assignment is being intercepted by the
2069 garbage collector.
2070
2071 @item -Wno-protocol
2072 @opindex Wno-protocol
2073 If a class is declared to implement a protocol, a warning is issued for
2074 every method in the protocol that is not implemented by the class.  The
2075 default behavior is to issue a warning for every method not explicitly
2076 implemented in the class, even if a method implementation is inherited
2077 from the superclass.  If you use the @option{-Wno-protocol} option, then
2078 methods inherited from the superclass are considered to be implemented,
2079 and no warning is issued for them.
2080
2081 @item -Wselector
2082 @opindex Wselector
2083 Warn if multiple methods of different types for the same selector are
2084 found during compilation.  The check is performed on the list of methods
2085 in the final stage of compilation.  Additionally, a check is performed
2086 for each selector appearing in a @code{@@selector(@dots{})}
2087 expression, and a corresponding method for that selector has been found
2088 during compilation.  Because these checks scan the method table only at
2089 the end of compilation, these warnings are not produced if the final
2090 stage of compilation is not reached, for example because an error is
2091 found during compilation, or because the @option{-fsyntax-only} option is
2092 being used.
2093
2094 @item -Wstrict-selector-match
2095 @opindex Wstrict-selector-match
2096 Warn if multiple methods with differing argument and/or return types are
2097 found for a given selector when attempting to send a message using this
2098 selector to a receiver of type @code{id} or @code{Class}.  When this flag
2099 is off (which is the default behavior), the compiler will omit such warnings
2100 if any differences found are confined to types which share the same size
2101 and alignment.
2102
2103 @item -Wundeclared-selector
2104 @opindex Wundeclared-selector
2105 Warn if a @code{@@selector(@dots{})} expression referring to an
2106 undeclared selector is found.  A selector is considered undeclared if no
2107 method with that name has been declared before the
2108 @code{@@selector(@dots{})} expression, either explicitly in an
2109 @code{@@interface} or @code{@@protocol} declaration, or implicitly in
2110 an @code{@@implementation} section.  This option always performs its
2111 checks as soon as a @code{@@selector(@dots{})} expression is found,
2112 while @option{-Wselector} only performs its checks in the final stage of
2113 compilation.  This also enforces the coding style convention
2114 that methods and selectors must be declared before being used.
2115
2116 @item -print-objc-runtime-info
2117 @opindex print-objc-runtime-info
2118 Generate C header describing the largest structure that is passed by
2119 value, if any.
2120
2121 @end table
2122
2123 @node Language Independent Options
2124 @section Options to Control Diagnostic Messages Formatting
2125 @cindex options to control diagnostics formatting
2126 @cindex diagnostic messages
2127 @cindex message formatting
2128
2129 Traditionally, diagnostic messages have been formatted irrespective of
2130 the output device's aspect (e.g.@: its width, @dots{}).  The options described
2131 below can be used to control the diagnostic messages formatting
2132 algorithm, e.g.@: how many characters per line, how often source location
2133 information should be reported.  Right now, only the C++ front end can
2134 honor these options.  However it is expected, in the near future, that
2135 the remaining front ends would be able to digest them correctly.
2136
2137 @table @gcctabopt
2138 @item -fmessage-length=@var{n}
2139 @opindex fmessage-length
2140 Try to format error messages so that they fit on lines of about @var{n}
2141 characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2142 the front ends supported by GCC@.  If @var{n} is zero, then no
2143 line-wrapping will be done; each error message will appear on a single
2144 line.
2145
2146 @opindex fdiagnostics-show-location
2147 @item -fdiagnostics-show-location=once
2148 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2149 reporter to emit @emph{once} source location information; that is, in
2150 case the message is too long to fit on a single physical line and has to
2151 be wrapped, the source location won't be emitted (as prefix) again,
2152 over and over, in subsequent continuation lines.  This is the default
2153 behavior.
2154
2155 @item -fdiagnostics-show-location=every-line
2156 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2157 messages reporter to emit the same source location information (as
2158 prefix) for physical lines that result from the process of breaking
2159 a message which is too long to fit on a single line.
2160
2161 @item -fdiagnostics-show-options
2162 @opindex fdiagnostics-show-options
2163 This option instructs the diagnostic machinery to add text to each
2164 diagnostic emitted, which indicates which command line option directly
2165 controls that diagnostic, when such an option is known to the
2166 diagnostic machinery.
2167
2168 @end table
2169
2170 @node Warning Options
2171 @section Options to Request or Suppress Warnings
2172 @cindex options to control warnings
2173 @cindex warning messages
2174 @cindex messages, warning
2175 @cindex suppressing warnings
2176
2177 Warnings are diagnostic messages that report constructions which
2178 are not inherently erroneous but which are risky or suggest there
2179 may have been an error.
2180
2181 You can request many specific warnings with options beginning @samp{-W},
2182 for example @option{-Wimplicit} to request warnings on implicit
2183 declarations.  Each of these specific warning options also has a
2184 negative form beginning @samp{-Wno-} to turn off warnings;
2185 for example, @option{-Wno-implicit}.  This manual lists only one of the
2186 two forms, whichever is not the default.
2187
2188 The following options control the amount and kinds of warnings produced
2189 by GCC; for further, language-specific options also refer to
2190 @ref{C++ Dialect Options} and @ref{Objective-C and Objective-C++ Dialect
2191 Options}.
2192
2193 @table @gcctabopt
2194 @cindex syntax checking
2195 @item -fsyntax-only
2196 @opindex fsyntax-only
2197 Check the code for syntax errors, but don't do anything beyond that.
2198
2199 @item -pedantic
2200 @opindex pedantic
2201 Issue all the warnings demanded by strict ISO C and ISO C++;
2202 reject all programs that use forbidden extensions, and some other
2203 programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2204 version of the ISO C standard specified by any @option{-std} option used.
2205
2206 Valid ISO C and ISO C++ programs should compile properly with or without
2207 this option (though a rare few will require @option{-ansi} or a
2208 @option{-std} option specifying the required version of ISO C)@.  However,
2209 without this option, certain GNU extensions and traditional C and C++
2210 features are supported as well.  With this option, they are rejected.
2211
2212 @option{-pedantic} does not cause warning messages for use of the
2213 alternate keywords whose names begin and end with @samp{__}.  Pedantic
2214 warnings are also disabled in the expression that follows
2215 @code{__extension__}.  However, only system header files should use
2216 these escape routes; application programs should avoid them.
2217 @xref{Alternate Keywords}.
2218
2219 Some users try to use @option{-pedantic} to check programs for strict ISO
2220 C conformance.  They soon find that it does not do quite what they want:
2221 it finds some non-ISO practices, but not all---only those for which
2222 ISO C @emph{requires} a diagnostic, and some others for which
2223 diagnostics have been added.
2224
2225 A feature to report any failure to conform to ISO C might be useful in
2226 some instances, but would require considerable additional work and would
2227 be quite different from @option{-pedantic}.  We don't have plans to
2228 support such a feature in the near future.
2229
2230 Where the standard specified with @option{-std} represents a GNU
2231 extended dialect of C, such as @samp{gnu89} or @samp{gnu99}, there is a
2232 corresponding @dfn{base standard}, the version of ISO C on which the GNU
2233 extended dialect is based.  Warnings from @option{-pedantic} are given
2234 where they are required by the base standard.  (It would not make sense
2235 for such warnings to be given only for features not in the specified GNU
2236 C dialect, since by definition the GNU dialects of C include all
2237 features the compiler supports with the given option, and there would be
2238 nothing to warn about.)
2239
2240 @item -pedantic-errors
2241 @opindex pedantic-errors
2242 Like @option{-pedantic}, except that errors are produced rather than
2243 warnings.
2244
2245 @item -w
2246 @opindex w
2247 Inhibit all warning messages.
2248
2249 @item -Wno-import
2250 @opindex Wno-import
2251 Inhibit warning messages about the use of @samp{#import}.
2252
2253 @item -Wchar-subscripts
2254 @opindex Wchar-subscripts
2255 Warn if an array subscript has type @code{char}.  This is a common cause
2256 of error, as programmers often forget that this type is signed on some
2257 machines.
2258 This warning is enabled by @option{-Wall}.
2259
2260 @item -Wcomment
2261 @opindex Wcomment
2262 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2263 comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2264 This warning is enabled by @option{-Wall}.
2265
2266 @item -Wfatal-errors
2267 @opindex Wfatal-errors
2268 This option causes the compiler to abort compilation on the first error
2269 occurred rather than trying to keep going and printing further error
2270 messages.
2271
2272 @item -Wformat
2273 @opindex Wformat
2274 @opindex ffreestanding
2275 @opindex fno-builtin
2276 Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2277 the arguments supplied have types appropriate to the format string
2278 specified, and that the conversions specified in the format string make
2279 sense.  This includes standard functions, and others specified by format
2280 attributes (@pxref{Function Attributes}), in the @code{printf},
2281 @code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2282 not in the C standard) families (or other target-specific families).
2283 Which functions are checked without format attributes having been
2284 specified depends on the standard version selected, and such checks of
2285 functions without the attribute specified are disabled by
2286 @option{-ffreestanding} or @option{-fno-builtin}.
2287
2288 The formats are checked against the format features supported by GNU
2289 libc version 2.2.  These include all ISO C90 and C99 features, as well
2290 as features from the Single Unix Specification and some BSD and GNU
2291 extensions.  Other library implementations may not support all these
2292 features; GCC does not support warning about features that go beyond a
2293 particular library's limitations.  However, if @option{-pedantic} is used
2294 with @option{-Wformat}, warnings will be given about format features not
2295 in the selected standard version (but not for @code{strfmon} formats,
2296 since those are not in any version of the C standard).  @xref{C Dialect
2297 Options,,Options Controlling C Dialect}.
2298
2299 Since @option{-Wformat} also checks for null format arguments for
2300 several functions, @option{-Wformat} also implies @option{-Wnonnull}.
2301
2302 @option{-Wformat} is included in @option{-Wall}.  For more control over some
2303 aspects of format checking, the options @option{-Wformat-y2k},
2304 @option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
2305 @option{-Wformat-nonliteral}, @option{-Wformat-security}, and
2306 @option{-Wformat=2} are available, but are not included in @option{-Wall}.
2307
2308 @item -Wformat-y2k
2309 @opindex Wformat-y2k
2310 If @option{-Wformat} is specified, also warn about @code{strftime}
2311 formats which may yield only a two-digit year.
2312
2313 @item -Wno-format-extra-args
2314 @opindex Wno-format-extra-args
2315 If @option{-Wformat} is specified, do not warn about excess arguments to a
2316 @code{printf} or @code{scanf} format function.  The C standard specifies
2317 that such arguments are ignored.
2318
2319 Where the unused arguments lie between used arguments that are
2320 specified with @samp{$} operand number specifications, normally
2321 warnings are still given, since the implementation could not know what
2322 type to pass to @code{va_arg} to skip the unused arguments.  However,
2323 in the case of @code{scanf} formats, this option will suppress the
2324 warning if the unused arguments are all pointers, since the Single
2325 Unix Specification says that such unused arguments are allowed.
2326
2327 @item -Wno-format-zero-length
2328 @opindex Wno-format-zero-length
2329 If @option{-Wformat} is specified, do not warn about zero-length formats.
2330 The C standard specifies that zero-length formats are allowed.
2331
2332 @item -Wformat-nonliteral
2333 @opindex Wformat-nonliteral
2334 If @option{-Wformat} is specified, also warn if the format string is not a
2335 string literal and so cannot be checked, unless the format function
2336 takes its format arguments as a @code{va_list}.
2337
2338 @item -Wformat-security
2339 @opindex Wformat-security
2340 If @option{-Wformat} is specified, also warn about uses of format
2341 functions that represent possible security problems.  At present, this
2342 warns about calls to @code{printf} and @code{scanf} functions where the
2343 format string is not a string literal and there are no format arguments,
2344 as in @code{printf (foo);}.  This may be a security hole if the format
2345 string came from untrusted input and contains @samp{%n}.  (This is
2346 currently a subset of what @option{-Wformat-nonliteral} warns about, but
2347 in future warnings may be added to @option{-Wformat-security} that are not
2348 included in @option{-Wformat-nonliteral}.)
2349
2350 @item -Wformat=2
2351 @opindex Wformat=2
2352 Enable @option{-Wformat} plus format checks not included in
2353 @option{-Wformat}.  Currently equivalent to @samp{-Wformat
2354 -Wformat-nonliteral -Wformat-security -Wformat-y2k}.
2355
2356 @item -Wnonnull
2357 @opindex Wnonnull
2358 Warn about passing a null pointer for arguments marked as
2359 requiring a non-null value by the @code{nonnull} function attribute.
2360
2361 @option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
2362 can be disabled with the @option{-Wno-nonnull} option.
2363
2364 @item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
2365 @opindex Winit-self
2366 Warn about uninitialized variables which are initialized with themselves.
2367 Note this option can only be used with the @option{-Wuninitialized} option,
2368 which in turn only works with @option{-O1} and above.
2369
2370 For example, GCC will warn about @code{i} being uninitialized in the
2371 following snippet only when @option{-Winit-self} has been specified:
2372 @smallexample
2373 @group
2374 int f()
2375 @{
2376   int i = i;
2377   return i;
2378 @}
2379 @end group
2380 @end smallexample
2381
2382 @item -Wimplicit-int
2383 @opindex Wimplicit-int
2384 Warn when a declaration does not specify a type.
2385 This warning is enabled by @option{-Wall}.
2386
2387 @item -Wimplicit-function-declaration
2388 @itemx -Werror-implicit-function-declaration
2389 @opindex Wimplicit-function-declaration
2390 @opindex Werror-implicit-function-declaration
2391 Give a warning (or error) whenever a function is used before being
2392 declared.  The form @option{-Wno-error-implicit-function-declaration}
2393 is not supported.
2394 This warning is enabled by @option{-Wall} (as a warning, not an error).
2395
2396 @item -Wimplicit
2397 @opindex Wimplicit
2398 Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
2399 This warning is enabled by @option{-Wall}.
2400
2401 @item -Wmain
2402 @opindex Wmain
2403 Warn if the type of @samp{main} is suspicious.  @samp{main} should be a
2404 function with external linkage, returning int, taking either zero
2405 arguments, two, or three arguments of appropriate types.
2406 This warning is enabled by @option{-Wall}.
2407
2408 @item -Wmissing-braces
2409 @opindex Wmissing-braces
2410 Warn if an aggregate or union initializer is not fully bracketed.  In
2411 the following example, the initializer for @samp{a} is not fully
2412 bracketed, but that for @samp{b} is fully bracketed.
2413
2414 @smallexample
2415 int a[2][2] = @{ 0, 1, 2, 3 @};
2416 int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
2417 @end smallexample
2418
2419 This warning is enabled by @option{-Wall}.
2420
2421 @item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
2422 @opindex Wmissing-include-dirs
2423 Warn if a user-supplied include directory does not exist.
2424
2425 @item -Wparentheses
2426 @opindex Wparentheses
2427 Warn if parentheses are omitted in certain contexts, such
2428 as when there is an assignment in a context where a truth value
2429 is expected, or when operators are nested whose precedence people
2430 often get confused about.  Only the warning for an assignment used as
2431 a truth value is supported when compiling C++; the other warnings are
2432 only supported when compiling C@.
2433
2434 Also warn if a comparison like @samp{x<=y<=z} appears; this is
2435 equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
2436 interpretation from that of ordinary mathematical notation.
2437
2438 Also warn about constructions where there may be confusion to which
2439 @code{if} statement an @code{else} branch belongs.  Here is an example of
2440 such a case:
2441
2442 @smallexample
2443 @group
2444 @{
2445   if (a)
2446     if (b)
2447       foo ();
2448   else
2449     bar ();
2450 @}
2451 @end group
2452 @end smallexample
2453
2454 In C, every @code{else} branch belongs to the innermost possible @code{if}
2455 statement, which in this example is @code{if (b)}.  This is often not
2456 what the programmer expected, as illustrated in the above example by
2457 indentation the programmer chose.  When there is the potential for this
2458 confusion, GCC will issue a warning when this flag is specified.
2459 To eliminate the warning, add explicit braces around the innermost
2460 @code{if} statement so there is no way the @code{else} could belong to
2461 the enclosing @code{if}.  The resulting code would look like this:
2462
2463 @smallexample
2464 @group
2465 @{
2466   if (a)
2467     @{
2468       if (b)
2469         foo ();
2470       else
2471         bar ();
2472     @}
2473 @}
2474 @end group
2475 @end smallexample
2476
2477 This warning is enabled by @option{-Wall}.
2478
2479 @item -Wsequence-point
2480 @opindex Wsequence-point
2481 Warn about code that may have undefined semantics because of violations
2482 of sequence point rules in the C standard.
2483
2484 The C standard defines the order in which expressions in a C program are
2485 evaluated in terms of @dfn{sequence points}, which represent a partial
2486 ordering between the execution of parts of the program: those executed
2487 before the sequence point, and those executed after it.  These occur
2488 after the evaluation of a full expression (one which is not part of a
2489 larger expression), after the evaluation of the first operand of a
2490 @code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
2491 function is called (but after the evaluation of its arguments and the
2492 expression denoting the called function), and in certain other places.
2493 Other than as expressed by the sequence point rules, the order of
2494 evaluation of subexpressions of an expression is not specified.  All
2495 these rules describe only a partial order rather than a total order,
2496 since, for example, if two functions are called within one expression
2497 with no sequence point between them, the order in which the functions
2498 are called is not specified.  However, the standards committee have
2499 ruled that function calls do not overlap.
2500
2501 It is not specified when between sequence points modifications to the
2502 values of objects take effect.  Programs whose behavior depends on this
2503 have undefined behavior; the C standard specifies that ``Between the
2504 previous and next sequence point an object shall have its stored value
2505 modified at most once by the evaluation of an expression.  Furthermore,
2506 the prior value shall be read only to determine the value to be
2507 stored.''.  If a program breaks these rules, the results on any
2508 particular implementation are entirely unpredictable.
2509
2510 Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
2511 = b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
2512 diagnosed by this option, and it may give an occasional false positive
2513 result, but in general it has been found fairly effective at detecting
2514 this sort of problem in programs.
2515
2516 The present implementation of this option only works for C programs.  A
2517 future implementation may also work for C++ programs.
2518
2519 The C standard is worded confusingly, therefore there is some debate
2520 over the precise meaning of the sequence point rules in subtle cases.
2521 Links to discussions of the problem, including proposed formal
2522 definitions, may be found on the GCC readings page, at
2523 @w{@uref{http://gcc.gnu.org/readings.html}}.
2524
2525 This warning is enabled by @option{-Wall}.
2526
2527 @item -Wreturn-type
2528 @opindex Wreturn-type
2529 Warn whenever a function is defined with a return-type that defaults to
2530 @code{int}.  Also warn about any @code{return} statement with no
2531 return-value in a function whose return-type is not @code{void}.
2532
2533 For C, also warn if the return type of a function has a type qualifier
2534 such as @code{const}.  Such a type qualifier has no effect, since the
2535 value returned by a function is not an lvalue.  ISO C prohibits
2536 qualified @code{void} return types on function definitions, so such
2537 return types always receive a warning even without this option.
2538
2539 For C++, a function without return type always produces a diagnostic
2540 message, even when @option{-Wno-return-type} is specified.  The only
2541 exceptions are @samp{main} and functions defined in system headers.
2542
2543 This warning is enabled by @option{-Wall}.
2544
2545 @item -Wswitch
2546 @opindex Wswitch
2547 Warn whenever a @code{switch} statement has an index of enumerated type
2548 and lacks a @code{case} for one or more of the named codes of that
2549 enumeration.  (The presence of a @code{default} label prevents this
2550 warning.)  @code{case} labels outside the enumeration range also
2551 provoke warnings when this option is used.
2552 This warning is enabled by @option{-Wall}.
2553
2554 @item -Wswitch-default
2555 @opindex Wswitch-switch
2556 Warn whenever a @code{switch} statement does not have a @code{default}
2557 case.
2558
2559 @item -Wswitch-enum
2560 @opindex Wswitch-enum
2561 Warn whenever a @code{switch} statement has an index of enumerated type
2562 and lacks a @code{case} for one or more of the named codes of that
2563 enumeration.  @code{case} labels outside the enumeration range also
2564 provoke warnings when this option is used.
2565
2566 @item -Wtrigraphs
2567 @opindex Wtrigraphs
2568 Warn if any trigraphs are encountered that might change the meaning of
2569 the program (trigraphs within comments are not warned about).
2570 This warning is enabled by @option{-Wall}.
2571
2572 @item -Wunused-function
2573 @opindex Wunused-function
2574 Warn whenever a static function is declared but not defined or a
2575 non\-inline static function is unused.
2576 This warning is enabled by @option{-Wall}.
2577
2578 @item -Wunused-label
2579 @opindex Wunused-label
2580 Warn whenever a label is declared but not used.
2581 This warning is enabled by @option{-Wall}.
2582
2583 To suppress this warning use the @samp{unused} attribute
2584 (@pxref{Variable Attributes}).
2585
2586 @item -Wunused-parameter
2587 @opindex Wunused-parameter
2588 Warn whenever a function parameter is unused aside from its declaration.
2589
2590 To suppress this warning use the @samp{unused} attribute
2591 (@pxref{Variable Attributes}).
2592
2593 @item -Wunused-variable
2594 @opindex Wunused-variable
2595 Warn whenever a local variable or non-constant static variable is unused
2596 aside from its declaration
2597 This warning is enabled by @option{-Wall}.
2598
2599 To suppress this warning use the @samp{unused} attribute
2600 (@pxref{Variable Attributes}).
2601
2602 @item -Wunused-value
2603 @opindex Wunused-value
2604 Warn whenever a statement computes a result that is explicitly not used.
2605 This warning is enabled by @option{-Wall}.
2606
2607 To suppress this warning cast the expression to @samp{void}.
2608
2609 @item -Wunused
2610 @opindex Wunused
2611 All the above @option{-Wunused} options combined.
2612
2613 In order to get a warning about an unused function parameter, you must
2614 either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
2615 @samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
2616
2617 @item -Wuninitialized
2618 @opindex Wuninitialized
2619 Warn if an automatic variable is used without first being initialized or
2620 if a variable may be clobbered by a @code{setjmp} call.
2621
2622 These warnings are possible only in optimizing compilation,
2623 because they require data flow information that is computed only
2624 when optimizing.  If you don't specify @option{-O}, you simply won't
2625 get these warnings.
2626
2627 If you want to warn about code which uses the uninitialized value of the
2628 variable in its own initializer, use the @option{-Winit-self} option.
2629
2630 These warnings occur for individual uninitialized or clobbered
2631 elements of structure, union or array variables as well as for
2632 variables which are uninitialized or clobbered as a whole.  They do
2633 not occur for variables or elements declared @code{volatile}.  Because
2634 these warnings depend on optimization, the exact variables or elements
2635 for which there are warnings will depend on the precise optimization
2636 options and version of GCC used.
2637
2638 Note that there may be no warning about a variable that is used only
2639 to compute a value that itself is never used, because such
2640 computations may be deleted by data flow analysis before the warnings
2641 are printed.
2642
2643 These warnings are made optional because GCC is not smart
2644 enough to see all the reasons why the code might be correct
2645 despite appearing to have an error.  Here is one example of how
2646 this can happen:
2647
2648 @smallexample
2649 @group
2650 @{
2651   int x;
2652   switch (y)
2653     @{
2654     case 1: x = 1;
2655       break;
2656     case 2: x = 4;
2657       break;
2658     case 3: x = 5;
2659     @}
2660   foo (x);
2661 @}
2662 @end group
2663 @end smallexample
2664
2665 @noindent
2666 If the value of @code{y} is always 1, 2 or 3, then @code{x} is
2667 always initialized, but GCC doesn't know this.  Here is
2668 another common case:
2669
2670 @smallexample
2671 @{
2672   int save_y;
2673   if (change_y) save_y = y, y = new_y;
2674   @dots{}
2675   if (change_y) y = save_y;
2676 @}
2677 @end smallexample
2678
2679 @noindent
2680 This has no bug because @code{save_y} is used only if it is set.
2681
2682 @cindex @code{longjmp} warnings
2683 This option also warns when a non-volatile automatic variable might be
2684 changed by a call to @code{longjmp}.  These warnings as well are possible
2685 only in optimizing compilation.
2686
2687 The compiler sees only the calls to @code{setjmp}.  It cannot know
2688 where @code{longjmp} will be called; in fact, a signal handler could
2689 call it at any point in the code.  As a result, you may get a warning
2690 even when there is in fact no problem because @code{longjmp} cannot
2691 in fact be called at the place which would cause a problem.
2692
2693 Some spurious warnings can be avoided if you declare all the functions
2694 you use that never return as @code{noreturn}.  @xref{Function
2695 Attributes}.
2696
2697 This warning is enabled by @option{-Wall}.
2698
2699 @item -Wunknown-pragmas
2700 @opindex Wunknown-pragmas
2701 @cindex warning for unknown pragmas
2702 @cindex unknown pragmas, warning
2703 @cindex pragmas, warning of unknown
2704 Warn when a #pragma directive is encountered which is not understood by
2705 GCC@.  If this command line option is used, warnings will even be issued
2706 for unknown pragmas in system header files.  This is not the case if
2707 the warnings were only enabled by the @option{-Wall} command line option.
2708
2709 @item -Wno-pragmas
2710 @opindex Wno-pragmas
2711 @opindex Wpragmas
2712 Do not warn about misuses of pragmas, such as incorrect parameters,
2713 invalid syntax, or conflicts between pragmas.  See also
2714 @samp{-Wunknown-pragmas}.
2715
2716 @item -Wstrict-aliasing
2717 @opindex Wstrict-aliasing
2718 This option is only active when @option{-fstrict-aliasing} is active.
2719 It warns about code which might break the strict aliasing rules that the
2720 compiler is using for optimization.  The warning does not catch all
2721 cases, but does attempt to catch the more common pitfalls.  It is
2722 included in @option{-Wall}.
2723
2724 @item -Wstrict-aliasing=2
2725 @opindex Wstrict-aliasing=2
2726 This option is only active when @option{-fstrict-aliasing} is active.
2727 It warns about all code which might break the strict aliasing rules that the
2728 compiler is using for optimization.  This warning catches all cases, but
2729 it will also give a warning for some ambiguous cases that are safe.
2730
2731 @item -Wall
2732 @opindex Wall
2733 All of the above @samp{-W} options combined.  This enables all the
2734 warnings about constructions that some users consider questionable, and
2735 that are easy to avoid (or modify to prevent the warning), even in
2736 conjunction with macros.  This also enables some language-specific
2737 warnings described in @ref{C++ Dialect Options} and
2738 @ref{Objective-C and Objective-C++ Dialect Options}.
2739 @end table
2740
2741 The following @option{-W@dots{}} options are not implied by @option{-Wall}.
2742 Some of them warn about constructions that users generally do not
2743 consider questionable, but which occasionally you might wish to check
2744 for; others warn about constructions that are necessary or hard to avoid
2745 in some cases, and there is no simple way to modify the code to suppress
2746 the warning.
2747
2748 @table @gcctabopt
2749 @item -Wextra
2750 @opindex W
2751 @opindex Wextra
2752 (This option used to be called @option{-W}.  The older name is still
2753 supported, but the newer name is more descriptive.)  Print extra warning
2754 messages for these events:
2755
2756 @itemize @bullet
2757 @item
2758 A function can return either with or without a value.  (Falling
2759 off the end of the function body is considered returning without
2760 a value.)  For example, this function would evoke such a
2761 warning:
2762
2763 @smallexample
2764 @group
2765 foo (a)
2766 @{
2767   if (a > 0)
2768     return a;
2769 @}
2770 @end group
2771 @end smallexample
2772
2773 @item
2774 An expression-statement or the left-hand side of a comma expression
2775 contains no side effects.
2776 To suppress the warning, cast the unused expression to void.
2777 For example, an expression such as @samp{x[i,j]} will cause a warning,
2778 but @samp{x[(void)i,j]} will not.
2779
2780 @item
2781 An unsigned value is compared against zero with @samp{<} or @samp{>=}.
2782
2783 @item
2784 Storage-class specifiers like @code{static} are not the first things in
2785 a declaration.  According to the C Standard, this usage is obsolescent.
2786
2787 @item
2788 If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
2789 arguments.
2790
2791 @item
2792 A comparison between signed and unsigned values could produce an
2793 incorrect result when the signed value is converted to unsigned.
2794 (But don't warn if @option{-Wno-sign-compare} is also specified.)
2795
2796 @item
2797 An aggregate has an initializer which does not initialize all members.
2798 This warning can be independently controlled by
2799 @option{-Wmissing-field-initializers}.
2800
2801 @item
2802 A function parameter is declared without a type specifier in K&R-style
2803 functions:
2804
2805 @smallexample
2806 void foo(bar) @{ @}
2807 @end smallexample
2808
2809 @item
2810 An empty body occurs in an @samp{if} or @samp{else} statement.
2811
2812 @item
2813 A pointer is compared against integer zero with @samp{<}, @samp{<=},
2814 @samp{>}, or @samp{>=}.
2815
2816 @item
2817 A variable might be changed by @samp{longjmp} or @samp{vfork}.
2818
2819 @item
2820 Any of several floating-point events that often indicate errors, such as
2821 overflow, underflow, loss of precision, etc.
2822
2823 @item @r{(C++ only)}
2824 An enumerator and a non-enumerator both appear in a conditional expression.
2825
2826 @item @r{(C++ only)}
2827 A non-static reference or non-static @samp{const} member appears in a
2828 class without constructors.
2829
2830 @item @r{(C++ only)}
2831 Ambiguous virtual bases.
2832
2833 @item @r{(C++ only)}
2834 Subscripting an array which has been declared @samp{register}.
2835
2836 @item @r{(C++ only)}
2837 Taking the address of a variable which has been declared @samp{register}.
2838
2839 @item @r{(C++ only)}
2840 A base class is not initialized in a derived class' copy constructor.
2841 @end itemize
2842
2843 @item -Wno-div-by-zero
2844 @opindex Wno-div-by-zero
2845 @opindex Wdiv-by-zero
2846 Do not warn about compile-time integer division by zero.  Floating point
2847 division by zero is not warned about, as it can be a legitimate way of
2848 obtaining infinities and NaNs.
2849
2850 @item -Wsystem-headers
2851 @opindex Wsystem-headers
2852 @cindex warnings from system headers
2853 @cindex system headers, warnings from
2854 Print warning messages for constructs found in system header files.
2855 Warnings from system headers are normally suppressed, on the assumption
2856 that they usually do not indicate real problems and would only make the
2857 compiler output harder to read.  Using this command line option tells
2858 GCC to emit warnings from system headers as if they occurred in user
2859 code.  However, note that using @option{-Wall} in conjunction with this
2860 option will @emph{not} warn about unknown pragmas in system
2861 headers---for that, @option{-Wunknown-pragmas} must also be used.
2862
2863 @item -Wfloat-equal
2864 @opindex Wfloat-equal
2865 Warn if floating point values are used in equality comparisons.
2866
2867 The idea behind this is that sometimes it is convenient (for the
2868 programmer) to consider floating-point values as approximations to
2869 infinitely precise real numbers.  If you are doing this, then you need
2870 to compute (by analyzing the code, or in some other way) the maximum or
2871 likely maximum error that the computation introduces, and allow for it
2872 when performing comparisons (and when producing output, but that's a
2873 different problem).  In particular, instead of testing for equality, you
2874 would check to see whether the two values have ranges that overlap; and
2875 this is done with the relational operators, so equality comparisons are
2876 probably mistaken.
2877
2878 @item -Wtraditional @r{(C only)}
2879 @opindex Wtraditional
2880 Warn about certain constructs that behave differently in traditional and
2881 ISO C@.  Also warn about ISO C constructs that have no traditional C
2882 equivalent, and/or problematic constructs which should be avoided.
2883
2884 @itemize @bullet
2885 @item
2886 Macro parameters that appear within string literals in the macro body.
2887 In traditional C macro replacement takes place within string literals,
2888 but does not in ISO C@.
2889
2890 @item
2891 In traditional C, some preprocessor directives did not exist.
2892 Traditional preprocessors would only consider a line to be a directive
2893 if the @samp{#} appeared in column 1 on the line.  Therefore
2894 @option{-Wtraditional} warns about directives that traditional C
2895 understands but would ignore because the @samp{#} does not appear as the
2896 first character on the line.  It also suggests you hide directives like
2897 @samp{#pragma} not understood by traditional C by indenting them.  Some
2898 traditional implementations would not recognize @samp{#elif}, so it
2899 suggests avoiding it altogether.
2900
2901 @item
2902 A function-like macro that appears without arguments.
2903
2904 @item
2905 The unary plus operator.
2906
2907 @item
2908 The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
2909 constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
2910 constants.)  Note, these suffixes appear in macros defined in the system
2911 headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
2912 Use of these macros in user code might normally lead to spurious
2913 warnings, however GCC's integrated preprocessor has enough context to
2914 avoid warning in these cases.
2915
2916 @item
2917 A function declared external in one block and then used after the end of
2918 the block.
2919
2920 @item
2921 A @code{switch} statement has an operand of type @code{long}.
2922
2923 @item
2924 A non-@code{static} function declaration follows a @code{static} one.
2925 This construct is not accepted by some traditional C compilers.
2926
2927 @item
2928 The ISO type of an integer constant has a different width or
2929 signedness from its traditional type.  This warning is only issued if
2930 the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
2931 typically represent bit patterns, are not warned about.
2932
2933 @item
2934 Usage of ISO string concatenation is detected.
2935
2936 @item
2937 Initialization of automatic aggregates.
2938
2939 @item
2940 Identifier conflicts with labels.  Traditional C lacks a separate
2941 namespace for labels.
2942
2943 @item
2944 Initialization of unions.  If the initializer is zero, the warning is
2945 omitted.  This is done under the assumption that the zero initializer in
2946 user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
2947 initializer warnings and relies on default initialization to zero in the
2948 traditional C case.
2949
2950 @item
2951 Conversions by prototypes between fixed/floating point values and vice
2952 versa.  The absence of these prototypes when compiling with traditional
2953 C would cause serious problems.  This is a subset of the possible
2954 conversion warnings, for the full set use @option{-Wconversion}.
2955
2956 @item
2957 Use of ISO C style function definitions.  This warning intentionally is
2958 @emph{not} issued for prototype declarations or variadic functions
2959 because these ISO C features will appear in your code when using
2960 libiberty's traditional C compatibility macros, @code{PARAMS} and
2961 @code{VPARAMS}.  This warning is also bypassed for nested functions
2962 because that feature is already a GCC extension and thus not relevant to
2963 traditional C compatibility.
2964 @end itemize
2965
2966 @item -Wdeclaration-after-statement @r{(C only)}
2967 @opindex Wdeclaration-after-statement
2968 Warn when a declaration is found after a statement in a block.  This
2969 construct, known from C++, was introduced with ISO C99 and is by default
2970 allowed in GCC@.  It is not supported by ISO C90 and was not supported by
2971 GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
2972
2973 @item -Wundef
2974 @opindex Wundef
2975 Warn if an undefined identifier is evaluated in an @samp{#if} directive.
2976
2977 @item -Wno-endif-labels
2978 @opindex Wno-endif-labels
2979 @opindex Wendif-labels
2980 Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
2981
2982 @item -Wshadow
2983 @opindex Wshadow
2984 Warn whenever a local variable shadows another local variable, parameter or
2985 global variable or whenever a built-in function is shadowed.
2986
2987 @item -Wlarger-than-@var{len}
2988 @opindex Wlarger-than
2989 Warn whenever an object of larger than @var{len} bytes is defined.
2990
2991 @item -Wunsafe-loop-optimizations
2992 @opindex Wunsafe-loop-optimizations
2993 Warn if the loop cannot be optimized because the compiler could not
2994 assume anything on the bounds of the loop indices.  With
2995 @option{-funsafe-loop-optimizations} warn if the compiler made
2996 such assumptions.
2997
2998 @item -Wpointer-arith
2999 @opindex Wpointer-arith
3000 Warn about anything that depends on the ``size of'' a function type or
3001 of @code{void}.  GNU C assigns these types a size of 1, for
3002 convenience in calculations with @code{void *} pointers and pointers
3003 to functions.
3004
3005 @item -Wbad-function-cast @r{(C only)}
3006 @opindex Wbad-function-cast
3007 Warn whenever a function call is cast to a non-matching type.
3008 For example, warn if @code{int malloc()} is cast to @code{anything *}.
3009
3010 @item -Wc++-compat
3011 Warn about ISO C constructs that are outside of the common subset of
3012 ISO C and ISO C++, e.g.@: request for implicit conversion from
3013 @code{void *} to a pointer to non-@code{void} type.
3014
3015 @item -Wcast-qual
3016 @opindex Wcast-qual
3017 Warn whenever a pointer is cast so as to remove a type qualifier from
3018 the target type.  For example, warn if a @code{const char *} is cast
3019 to an ordinary @code{char *}.
3020
3021 @item -Wcast-align
3022 @opindex Wcast-align
3023 Warn whenever a pointer is cast such that the required alignment of the
3024 target is increased.  For example, warn if a @code{char *} is cast to
3025 an @code{int *} on machines where integers can only be accessed at
3026 two- or four-byte boundaries.
3027
3028 @item -Wwrite-strings
3029 @opindex Wwrite-strings
3030 When compiling C, give string constants the type @code{const
3031 char[@var{length}]} so that
3032 copying the address of one into a non-@code{const} @code{char *}
3033 pointer will get a warning; when compiling C++, warn about the
3034 deprecated conversion from string constants to @code{char *}.
3035 These warnings will help you find at
3036 compile time code that can try to write into a string constant, but
3037 only if you have been very careful about using @code{const} in
3038 declarations and prototypes.  Otherwise, it will just be a nuisance;
3039 this is why we did not make @option{-Wall} request these warnings.
3040
3041 @item -Wconversion
3042 @opindex Wconversion
3043 Warn if a prototype causes a type conversion that is different from what
3044 would happen to the same argument in the absence of a prototype.  This
3045 includes conversions of fixed point to floating and vice versa, and
3046 conversions changing the width or signedness of a fixed point argument
3047 except when the same as the default promotion.
3048
3049 Also, warn if a negative integer constant expression is implicitly
3050 converted to an unsigned type.  For example, warn about the assignment
3051 @code{x = -1} if @code{x} is unsigned.  But do not warn about explicit
3052 casts like @code{(unsigned) -1}.
3053
3054 @item -Wsign-compare
3055 @opindex Wsign-compare
3056 @cindex warning for comparison of signed and unsigned values
3057 @cindex comparison of signed and unsigned values, warning
3058 @cindex signed and unsigned values, comparison warning
3059 Warn when a comparison between signed and unsigned values could produce
3060 an incorrect result when the signed value is converted to unsigned.
3061 This warning is also enabled by @option{-Wextra}; to get the other warnings
3062 of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3063
3064 @item -Waggregate-return
3065 @opindex Waggregate-return
3066 Warn if any functions that return structures or unions are defined or
3067 called.  (In languages where you can return an array, this also elicits
3068 a warning.)
3069
3070 @item -Wno-attributes
3071 @opindex Wno-attributes
3072 @opindex Wattributes
3073 Do not warn if an unexpected @code{__attribute__} is used, such as
3074 unrecognized attributes, function attributes applied to variables,
3075 etc.  This will not stop errors for incorrect use of supported
3076 attributes.
3077
3078 @item -Wstrict-prototypes @r{(C only)}
3079 @opindex Wstrict-prototypes
3080 Warn if a function is declared or defined without specifying the
3081 argument types.  (An old-style function definition is permitted without
3082 a warning if preceded by a declaration which specifies the argument
3083 types.)
3084
3085 @item -Wold-style-definition @r{(C only)}
3086 @opindex Wold-style-definition
3087 Warn if an old-style function definition is used.  A warning is given
3088 even if there is a previous prototype.
3089
3090 @item -Wmissing-prototypes @r{(C only)}
3091 @opindex Wmissing-prototypes
3092 Warn if a global function is defined without a previous prototype
3093 declaration.  This warning is issued even if the definition itself
3094 provides a prototype.  The aim is to detect global functions that fail
3095 to be declared in header files.
3096
3097 @item -Wmissing-declarations @r{(C only)}
3098 @opindex Wmissing-declarations
3099 Warn if a global function is defined without a previous declaration.
3100 Do so even if the definition itself provides a prototype.
3101 Use this option to detect global functions that are not declared in
3102 header files.
3103
3104 @item -Wmissing-field-initializers
3105 @opindex Wmissing-field-initializers
3106 @opindex W
3107 @opindex Wextra
3108 Warn if a structure's initializer has some fields missing.  For
3109 example, the following code would cause such a warning, because
3110 @code{x.h} is implicitly zero:
3111
3112 @smallexample
3113 struct s @{ int f, g, h; @};
3114 struct s x = @{ 3, 4 @};
3115 @end smallexample
3116
3117 This option does not warn about designated initializers, so the following
3118 modification would not trigger a warning:
3119
3120 @smallexample
3121 struct s @{ int f, g, h; @};
3122 struct s x = @{ .f = 3, .g = 4 @};
3123 @end smallexample
3124
3125 This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
3126 warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
3127
3128 @item -Wmissing-noreturn
3129 @opindex Wmissing-noreturn
3130 Warn about functions which might be candidates for attribute @code{noreturn}.
3131 Note these are only possible candidates, not absolute ones.  Care should
3132 be taken to manually verify functions actually do not ever return before
3133 adding the @code{noreturn} attribute, otherwise subtle code generation
3134 bugs could be introduced.  You will not get a warning for @code{main} in
3135 hosted C environments.
3136
3137 @item -Wmissing-format-attribute
3138 @opindex Wmissing-format-attribute
3139 @opindex Wformat
3140 Warn about function pointers which might be candidates for @code{format}
3141 attributes.  Note these are only possible candidates, not absolute ones.
3142 GCC will guess that function pointers with @code{format} attributes that
3143 are used in assignment, initialization, parameter passing or return
3144 statements should have a corresponding @code{format} attribute in the
3145 resulting type.  I.e.@: the left-hand side of the assignment or
3146 initialization, the type of the parameter variable, or the return type
3147 of the containing function respectively should also have a @code{format}
3148 attribute to avoid the warning.
3149
3150 GCC will also warn about function definitions which might be
3151 candidates for @code{format} attributes.  Again, these are only
3152 possible candidates.  GCC will guess that @code{format} attributes
3153 might be appropriate for any function that calls a function like
3154 @code{vprintf} or @code{vscanf}, but this might not always be the
3155 case, and some functions for which @code{format} attributes are
3156 appropriate may not be detected.
3157
3158 @item -Wno-multichar
3159 @opindex Wno-multichar
3160 @opindex Wmultichar
3161 Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
3162 Usually they indicate a typo in the user's code, as they have
3163 implementation-defined values, and should not be used in portable code.
3164
3165 @item -Wnormalized=<none|id|nfc|nfkc>
3166 @opindex Wnormalized
3167 @cindex NFC
3168 @cindex NFKC
3169 @cindex character set, input normalization
3170 In ISO C and ISO C++, two identifiers are different if they are
3171 different sequences of characters.  However, sometimes when characters
3172 outside the basic ASCII character set are used, you can have two
3173 different character sequences that look the same.  To avoid confusion,
3174 the ISO 10646 standard sets out some @dfn{normalization rules} which
3175 when applied ensure that two sequences that look the same are turned into
3176 the same sequence.  GCC can warn you if you are using identifiers which
3177 have not been normalized; this option controls that warning.
3178
3179 There are four levels of warning that GCC supports.  The default is
3180 @option{-Wnormalized=nfc}, which warns about any identifier which is
3181 not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
3182 recommended form for most uses.
3183
3184 Unfortunately, there are some characters which ISO C and ISO C++ allow
3185 in identifiers that when turned into NFC aren't allowable as
3186 identifiers.  That is, there's no way to use these symbols in portable
3187 ISO C or C++ and have all your identifiers in NFC.
3188 @option{-Wnormalized=id} suppresses the warning for these characters.
3189 It is hoped that future versions of the standards involved will correct
3190 this, which is why this option is not the default.
3191
3192 You can switch the warning off for all characters by writing
3193 @option{-Wnormalized=none}.  You would only want to do this if you
3194 were using some other normalization scheme (like ``D''), because
3195 otherwise you can easily create bugs that are literally impossible to see.
3196
3197 Some characters in ISO 10646 have distinct meanings but look identical
3198 in some fonts or display methodologies, especially once formatting has
3199 been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
3200 LETTER N'', will display just like a regular @code{n} which has been
3201 placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
3202 normalisation scheme to convert all these into a standard form as
3203 well, and GCC will warn if your code is not in NFKC if you use
3204 @option{-Wnormalized=nfkc}.  This warning is comparable to warning
3205 about every identifier that contains the letter O because it might be
3206 confused with the digit 0, and so is not the default, but may be
3207 useful as a local coding convention if the programming environment is
3208 unable to be fixed to display these characters distinctly.
3209
3210 @item -Wno-deprecated-declarations
3211 @opindex Wno-deprecated-declarations
3212 Do not warn about uses of functions, variables, and types marked as
3213 deprecated by using the @code{deprecated} attribute.
3214 (@pxref{Function Attributes}, @pxref{Variable Attributes},
3215 @pxref{Type Attributes}.)
3216
3217 @item -Wpacked
3218 @opindex Wpacked
3219 Warn if a structure is given the packed attribute, but the packed
3220 attribute has no effect on the layout or size of the structure.
3221 Such structures may be mis-aligned for little benefit.  For
3222 instance, in this code, the variable @code{f.x} in @code{struct bar}
3223 will be misaligned even though @code{struct bar} does not itself
3224 have the packed attribute:
3225
3226 @smallexample
3227 @group
3228 struct foo @{
3229   int x;
3230   char a, b, c, d;
3231 @} __attribute__((packed));
3232 struct bar @{
3233   char z;
3234   struct foo f;
3235 @};
3236 @end group
3237 @end smallexample
3238
3239 @item -Wpadded
3240 @opindex Wpadded
3241 Warn if padding is included in a structure, either to align an element
3242 of the structure or to align the whole structure.  Sometimes when this
3243 happens it is possible to rearrange the fields of the structure to
3244 reduce the padding and so make the structure smaller.
3245
3246 @item -Wredundant-decls
3247 @opindex Wredundant-decls
3248 Warn if anything is declared more than once in the same scope, even in
3249 cases where multiple declaration is valid and changes nothing.
3250
3251 @item -Wnested-externs @r{(C only)}
3252 @opindex Wnested-externs
3253 Warn if an @code{extern} declaration is encountered within a function.
3254
3255 @item -Wunreachable-code
3256 @opindex Wunreachable-code
3257 Warn if the compiler detects that code will never be executed.
3258
3259 This option is intended to warn when the compiler detects that at
3260 least a whole line of source code will never be executed, because
3261 some condition is never satisfied or because it is after a
3262 procedure that never returns.
3263
3264 It is possible for this option to produce a warning even though there
3265 are circumstances under which part of the affected line can be executed,
3266 so care should be taken when removing apparently-unreachable code.
3267
3268 For instance, when a function is inlined, a warning may mean that the
3269 line is unreachable in only one inlined copy of the function.
3270
3271 This option is not made part of @option{-Wall} because in a debugging
3272 version of a program there is often substantial code which checks
3273 correct functioning of the program and is, hopefully, unreachable
3274 because the program does work.  Another common use of unreachable
3275 code is to provide behavior which is selectable at compile-time.
3276
3277 @item -Winline
3278 @opindex Winline
3279 Warn if a function can not be inlined and it was declared as inline.
3280 Even with this option, the compiler will not warn about failures to
3281 inline functions declared in system headers.
3282
3283 The compiler uses a variety of heuristics to determine whether or not
3284 to inline a function.  For example, the compiler takes into account
3285 the size of the function being inlined and the amount of inlining
3286 that has already been done in the current function.  Therefore,
3287 seemingly insignificant changes in the source program can cause the
3288 warnings produced by @option{-Winline} to appear or disappear.
3289
3290 @item -Wno-invalid-offsetof @r{(C++ only)}
3291 @opindex Wno-invalid-offsetof
3292 Suppress warnings from applying the @samp{offsetof} macro to a non-POD
3293 type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
3294 to a non-POD type is undefined.  In existing C++ implementations,
3295 however, @samp{offsetof} typically gives meaningful results even when
3296 applied to certain kinds of non-POD types. (Such as a simple
3297 @samp{struct} that fails to be a POD type only by virtue of having a
3298 constructor.)  This flag is for users who are aware that they are
3299 writing nonportable code and who have deliberately chosen to ignore the
3300 warning about it.
3301
3302 The restrictions on @samp{offsetof} may be relaxed in a future version
3303 of the C++ standard.
3304
3305 @item -Wno-int-to-pointer-cast @r{(C only)}
3306 @opindex Wno-int-to-pointer-cast
3307 Suppress warnings from casts to pointer type of an integer of a
3308 different size.
3309
3310 @item -Wno-pointer-to-int-cast @r{(C only)}
3311 @opindex Wno-pointer-to-int-cast
3312 Suppress warnings from casts from a pointer to an integer type of a
3313 different size.
3314
3315 @item -Winvalid-pch
3316 @opindex Winvalid-pch
3317 Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
3318 the search path but can't be used.
3319
3320 @item -Wlong-long
3321 @opindex Wlong-long
3322 @opindex Wno-long-long
3323 Warn if @samp{long long} type is used.  This is default.  To inhibit
3324 the warning messages, use @option{-Wno-long-long}.  Flags
3325 @option{-Wlong-long} and @option{-Wno-long-long} are taken into account
3326 only when @option{-pedantic} flag is used.
3327
3328 @item -Wvariadic-macros
3329 @opindex Wvariadic-macros
3330 @opindex Wno-variadic-macros
3331 Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
3332 alternate syntax when in pedantic ISO C99 mode.  This is default.
3333 To inhibit the warning messages, use @option{-Wno-variadic-macros}.
3334
3335 @item -Wdisabled-optimization
3336 @opindex Wdisabled-optimization
3337 Warn if a requested optimization pass is disabled.  This warning does
3338 not generally indicate that there is anything wrong with your code; it
3339 merely indicates that GCC's optimizers were unable to handle the code
3340 effectively.  Often, the problem is that your code is too big or too
3341 complex; GCC will refuse to optimize programs when the optimization
3342 itself is likely to take inordinate amounts of time.
3343
3344 @item -Wno-pointer-sign
3345 @opindex Wno-pointer-sign
3346 Don't warn for pointer argument passing or assignment with different signedness.
3347 Only useful in the negative form since this warning is enabled by default.
3348 This option is only supported for C and Objective-C@.
3349
3350 @item -Werror
3351 @opindex Werror
3352 Make all warnings into errors.
3353 @end table
3354
3355 @node Debugging Options
3356 @section Options for Debugging Your Program or GCC
3357 @cindex options, debugging
3358 @cindex debugging information options
3359
3360 GCC has various special options that are used for debugging
3361 either your program or GCC:
3362
3363 @table @gcctabopt
3364 @item -g
3365 @opindex g
3366 Produce debugging information in the operating system's native format
3367 (stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
3368 information.
3369
3370 On most systems that use stabs format, @option{-g} enables use of extra
3371 debugging information that only GDB can use; this extra information
3372 makes debugging work better in GDB but will probably make other debuggers
3373 crash or
3374 refuse to read the program.  If you want to control for certain whether
3375 to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
3376 @option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
3377
3378 GCC allows you to use @option{-g} with
3379 @option{-O}.  The shortcuts taken by optimized code may occasionally
3380 produce surprising results: some variables you declared may not exist
3381 at all; flow of control may briefly move where you did not expect it;
3382 some statements may not be executed because they compute constant
3383 results or their values were already at hand; some statements may
3384 execute in different places because they were moved out of loops.
3385
3386 Nevertheless it proves possible to debug optimized output.  This makes
3387 it reasonable to use the optimizer for programs that might have bugs.
3388
3389 The following options are useful when GCC is generated with the
3390 capability for more than one debugging format.
3391
3392 @item -ggdb
3393 @opindex ggdb
3394 Produce debugging information for use by GDB@.  This means to use the
3395 most expressive format available (DWARF 2, stabs, or the native format
3396 if neither of those are supported), including GDB extensions if at all
3397 possible.
3398
3399 @item -gstabs
3400 @opindex gstabs
3401 Produce debugging information in stabs format (if that is supported),
3402 without GDB extensions.  This is the format used by DBX on most BSD
3403 systems.  On MIPS, Alpha and System V Release 4 systems this option
3404 produces stabs debugging output which is not understood by DBX or SDB@.
3405 On System V Release 4 systems this option requires the GNU assembler.
3406
3407 @item -feliminate-unused-debug-symbols
3408 @opindex feliminate-unused-debug-symbols
3409 Produce debugging information in stabs format (if that is supported),
3410 for only symbols that are actually used.
3411
3412 @item -gstabs+
3413 @opindex gstabs+
3414 Produce debugging information in stabs format (if that is supported),
3415 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3416 use of these extensions is likely to make other debuggers crash or
3417 refuse to read the program.
3418
3419 @item -gcoff
3420 @opindex gcoff
3421 Produce debugging information in COFF format (if that is supported).
3422 This is the format used by SDB on most System V systems prior to
3423 System V Release 4.
3424
3425 @item -gxcoff
3426 @opindex gxcoff
3427 Produce debugging information in XCOFF format (if that is supported).
3428 This is the format used by the DBX debugger on IBM RS/6000 systems.
3429
3430 @item -gxcoff+
3431 @opindex gxcoff+
3432 Produce debugging information in XCOFF format (if that is supported),
3433 using GNU extensions understood only by the GNU debugger (GDB)@.  The
3434 use of these extensions is likely to make other debuggers crash or
3435 refuse to read the program, and may cause assemblers other than the GNU
3436 assembler (GAS) to fail with an error.
3437
3438 @item -gdwarf-2
3439 @opindex gdwarf-2
3440 Produce debugging information in DWARF version 2 format (if that is
3441 supported).  This is the format used by DBX on IRIX 6.  With this
3442 option, GCC uses features of DWARF version 3 when they are useful;
3443 version 3 is upward compatible with version 2, but may still cause
3444 problems for older debuggers.
3445
3446 @item -gvms
3447 @opindex gvms
3448 Produce debugging information in VMS debug format (if that is
3449 supported).  This is the format used by DEBUG on VMS systems.
3450
3451 @item -g@var{level}
3452 @itemx -ggdb@var{level}
3453 @itemx -gstabs@var{level}
3454 @itemx -gcoff@var{level}
3455 @itemx -gxcoff@var{level}
3456 @itemx -gvms@var{level}
3457 Request debugging information and also use @var{level} to specify how
3458 much information.  The default level is 2.
3459
3460 Level 1 produces minimal information, enough for making backtraces in
3461 parts of the program that you don't plan to debug.  This includes
3462 descriptions of functions and external variables, but no information
3463 about local variables and no line numbers.
3464
3465 Level 3 includes extra information, such as all the macro definitions
3466 present in the program.  Some debuggers support macro expansion when
3467 you use @option{-g3}.
3468
3469 @option{-gdwarf-2} does not accept a concatenated debug level, because
3470 GCC used to support an option @option{-gdwarf} that meant to generate
3471 debug information in version 1 of the DWARF format (which is very
3472 different from version 2), and it would have been too confusing.  That
3473 debug format is long obsolete, but the option cannot be changed now.
3474 Instead use an additional @option{-g@var{level}} option to change the
3475 debug level for DWARF2.
3476
3477 @item -feliminate-dwarf2-dups
3478 @opindex feliminate-dwarf2-dups
3479 Compress DWARF2 debugging information by eliminating duplicated
3480 information about each symbol.  This option only makes sense when
3481 generating DWARF2 debugging information with @option{-gdwarf-2}.
3482
3483 @cindex @command{prof}
3484 @item -p
3485 @opindex p
3486 Generate extra code to write profile information suitable for the
3487 analysis program @command{prof}.  You must use this option when compiling
3488 the source files you want data about, and you must also use it when
3489 linking.
3490
3491 @cindex @command{gprof}
3492 @item -pg
3493 @opindex pg
3494 Generate extra code to write profile information suitable for the
3495 analysis program @command{gprof}.  You must use this option when compiling
3496 the source files you want data about, and you must also use it when
3497 linking.
3498
3499 @item -Q
3500 @opindex Q
3501 Makes the compiler print out each function name as it is compiled, and
3502 print some statistics about each pass when it finishes.
3503
3504 @item -ftime-report
3505 @opindex ftime-report
3506 Makes the compiler print some statistics about the time consumed by each
3507 pass when it finishes.
3508
3509 @item -fmem-report
3510 @opindex fmem-report
3511 Makes the compiler print some statistics about permanent memory
3512 allocation when it finishes.
3513
3514 @item -fprofile-arcs
3515 @opindex fprofile-arcs
3516 Add code so that program flow @dfn{arcs} are instrumented.  During
3517 execution the program records how many times each branch and call is
3518 executed and how many times it is taken or returns.  When the compiled
3519 program exits it saves this data to a file called
3520 @file{@var{auxname}.gcda} for each source file.  The data may be used for
3521 profile-directed optimizations (@option{-fbranch-probabilities}), or for
3522 test coverage analysis (@option{-ftest-coverage}).  Each object file's
3523 @var{auxname} is generated from the name of the output file, if
3524 explicitly specified and it is not the final executable, otherwise it is
3525 the basename of the source file.  In both cases any suffix is removed
3526 (e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
3527 @file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
3528 @xref{Cross-profiling}.
3529
3530 @cindex @command{gcov}
3531 @item --coverage
3532 @opindex coverage
3533
3534 This option is used to compile and link code instrumented for coverage
3535 analysis.  The option is a synonym for @option{-fprofile-arcs}
3536 @option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
3537 linking).  See the documentation for those options for more details.
3538
3539 @itemize
3540
3541 @item
3542 Compile the source files with @option{-fprofile-arcs} plus optimization
3543 and code generation options.  For test coverage analysis, use the
3544 additional @option{-ftest-coverage} option.  You do not need to profile
3545 every source file in a program.
3546
3547 @item
3548 Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
3549 (the latter implies the former).
3550
3551 @item
3552 Run the program on a representative workload to generate the arc profile
3553 information.  This may be repeated any number of times.  You can run
3554 concurrent instances of your program, and provided that the file system
3555 supports locking, the data files will be correctly updated.  Also
3556 @code{fork} calls are detected and correctly handled (double counting
3557 will not happen).
3558
3559 @item
3560 For profile-directed optimizations, compile the source files again with
3561 the same optimization and code generation options plus
3562 @option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
3563 Control Optimization}).
3564
3565 @item
3566 For test coverage analysis, use @command{gcov} to produce human readable
3567 information from the @file{.gcno} and @file{.gcda} files.  Refer to the
3568 @command{gcov} documentation for further information.
3569
3570 @end itemize
3571
3572 With @option{-fprofile-arcs}, for each function of your program GCC
3573 creates a program flow graph, then finds a spanning tree for the graph.
3574 Only arcs that are not on the spanning tree have to be instrumented: the
3575 compiler adds code to count the number of times that these arcs are
3576 executed.  When an arc is the only exit or only entrance to a block, the
3577 instrumentation code can be added to the block; otherwise, a new basic
3578 block must be created to hold the instrumentation code.
3579
3580 @item -ftree-based-profiling
3581 @opindex ftree-based-profiling
3582 This option is used in addition to @option{-fprofile-arcs} or
3583 @option{-fbranch-probabilities} to control whether those optimizations
3584 are performed on a tree-based or rtl-based internal representation.
3585 If you use this option when compiling with @option{-fprofile-arcs},
3586 you must also use it when compiling later with @option{-fbranch-probabilities}.
3587 Currently the tree-based optimization is in an early stage of
3588 development, and this option is recommended only for those people
3589 working on improving it.
3590
3591 @need 2000
3592 @item -ftest-coverage
3593 @opindex ftest-coverage
3594 Produce a notes file that the @command{gcov} code-coverage utility
3595 (@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
3596 show program coverage.  Each source file's note file is called
3597 @file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
3598 above for a description of @var{auxname} and instructions on how to
3599 generate test coverage data.  Coverage data will match the source files
3600 more closely, if you do not optimize.
3601
3602 @item -d@var{letters}
3603 @item -fdump-rtl-@var{pass}
3604 @opindex d
3605 Says to make debugging dumps during compilation at times specified by
3606 @var{letters}.    This is used for debugging the RTL-based passes of the
3607 compiler.  The file names for most of the dumps are made by appending a
3608 pass number and a word to the @var{dumpname}.  @var{dumpname} is generated
3609 from the name of the output file, if explicitly specified and it is not
3610 an executable, otherwise it is the basename of the source file.
3611
3612 Most debug dumps can be enabled either passing a letter to the @option{-d}
3613 option, or with a long @option{-fdump-rtl} switch; here are the possible
3614 letters for use in @var{letters} and @var{pass}, and their meanings:
3615
3616 @table @gcctabopt
3617 @item -dA
3618 @opindex dA
3619 Annotate the assembler output with miscellaneous debugging information.
3620
3621 @item -db
3622 @itemx -fdump-rtl-bp
3623 @opindex db
3624 @opindex fdump-rtl-bp
3625 Dump after computing branch probabilities, to @file{@var{file}.09.bp}.
3626
3627 @item -dB
3628 @itemx -fdump-rtl-bbro
3629 @opindex dB
3630 @opindex fdump-rtl-bbro
3631 Dump after block reordering, to @file{@var{file}.30.bbro}.
3632
3633 @item -dc
3634 @itemx -fdump-rtl-combine
3635 @opindex dc
3636 @opindex fdump-rtl-combine
3637 Dump after instruction combination, to the file @file{@var{file}.17.combine}.
3638
3639 @item -dC
3640 @itemx -fdump-rtl-ce1
3641 @itemx -fdump-rtl-ce2
3642 @opindex dC
3643 @opindex fdump-rtl-ce1
3644 @opindex fdump-rtl-ce2
3645 @option{-dC} and @option{-fdump-rtl-ce1} enable dumping after the
3646 first if conversion, to the file @file{@var{file}.11.ce1}.  @option{-dC}
3647 and @option{-fdump-rtl-ce2} enable dumping after the second if
3648 conversion, to the file @file{@var{file}.18.ce2}.
3649
3650 @item -dd
3651 @itemx -fdump-rtl-btl
3652 @itemx -fdump-rtl-dbr
3653 @opindex dd
3654 @opindex fdump-rtl-btl
3655 @opindex fdump-rtl-dbr
3656 @option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch
3657 target load optimization, to @file{@var{file}.31.btl}.  @option{-dd}
3658 and @option{-fdump-rtl-dbr} enable dumping after delayed branch
3659 scheduling, to @file{@var{file}.36.dbr}.
3660
3661 @item -dD
3662 @opindex dD
3663 Dump all macro definitions, at the end of preprocessing, in addition to
3664 normal output.
3665
3666 @item -dE
3667 @itemx -fdump-rtl-ce3
3668 @opindex dE
3669 @opindex fdump-rtl-ce3
3670 Dump after the third if conversion, to @file{@var{file}.28.ce3}.
3671
3672 @item -df
3673 @itemx -fdump-rtl-cfg
3674 @itemx -fdump-rtl-life
3675 @opindex df
3676 @opindex fdump-rtl-cfg
3677 @opindex fdump-rtl-life
3678 @option{-df} and @option{-fdump-rtl-cfg} enable dumping after control
3679 and data flow analysis, to @file{@var{file}.08.cfg}.  @option{-df}
3680 and @option{-fdump-rtl-cfg} enable dumping dump after life analysis,
3681 to @file{@var{file}.16.life}.
3682
3683 @item -dg
3684 @itemx -fdump-rtl-greg
3685 @opindex dg
3686 @opindex fdump-rtl-greg
3687 Dump after global register allocation, to @file{@var{file}.23.greg}.
3688
3689 @item -dG
3690 @itemx -fdump-rtl-gcse
3691 @itemx -fdump-rtl-bypass
3692 @opindex dG
3693 @opindex fdump-rtl-gcse
3694 @opindex fdump-rtl-bypass
3695 @option{-dG} and @option{-fdump-rtl-gcse} enable dumping after GCSE, to
3696 @file{@var{file}.05.gcse}.  @option{-dG} and @option{-fdump-rtl-bypass}
3697 enable dumping after jump bypassing and control flow optimizations, to
3698 @file{@var{file}.07.bypass}.
3699
3700 @item -dh
3701 @itemx -fdump-rtl-eh
3702 @opindex dh
3703 @opindex fdump-rtl-eh
3704 Dump after finalization of EH handling code, to @file{@var{file}.02.eh}.
3705
3706 @item -di
3707 @itemx -fdump-rtl-sibling
3708 @opindex di
3709 @opindex fdump-rtl-sibling
3710 Dump after sibling call optimizations, to @file{@var{file}.01.sibling}.
3711
3712 @item -dj
3713 @itemx -fdump-rtl-jump
3714 @opindex dj
3715 @opindex fdump-rtl-jump
3716 Dump after the first jump optimization, to @file{@var{file}.03.jump}.
3717
3718 @item -dk
3719 @itemx -fdump-rtl-stack
3720 @opindex dk
3721 @opindex fdump-rtl-stack
3722 Dump after conversion from registers to stack, to @file{@var{file}.33.stack}.
3723
3724 @item -dl
3725 @itemx -fdump-rtl-lreg
3726 @opindex dl
3727 @opindex fdump-rtl-lreg
3728 Dump after local register allocation, to @file{@var{file}.22.lreg}.
3729
3730 @item -dL
3731 @itemx -fdump-rtl-loop
3732 @itemx -fdump-rtl-loop2
3733 @opindex dL
3734 @opindex fdump-rtl-loop
3735 @opindex fdump-rtl-loop2
3736 @option{-dL} and @option{-fdump-rtl-loop} enable dumping after the first
3737 loop optimization pass, to @file{@var{file}.06.loop}.  @option{-dL} and
3738 @option{-fdump-rtl-loop2} enable dumping after the second pass, to
3739 @file{@var{file}.13.loop2}.
3740
3741 @item -dm
3742 @itemx -fdump-rtl-sms
3743 @opindex dm
3744 @opindex fdump-rtl-sms
3745 Dump after modulo scheduling, to @file{@var{file}.20.sms}.
3746
3747 @item -dM
3748 @itemx -fdump-rtl-mach
3749 @opindex dM
3750 @opindex fdump-rtl-mach
3751 Dump after performing the machine dependent reorganization pass, to
3752 @file{@var{file}.35.mach}.
3753
3754 @item -dn
3755 @itemx -fdump-rtl-rnreg
3756 @opindex dn
3757 @opindex fdump-rtl-rnreg
3758 Dump after register renumbering, to @file{@var{file}.29.rnreg}.
3759
3760 @item -dN
3761 @itemx -fdump-rtl-regmove
3762 @opindex dN
3763 @opindex fdump-rtl-regmove
3764 Dump after the register move pass, to @file{@var{file}.19.regmove}.
3765
3766 @item -do
3767 @itemx -fdump-rtl-postreload
3768 @opindex do
3769 @opindex fdump-rtl-postreload
3770 Dump after post-reload optimizations, to @file{@var{file}.24.postreload}.
3771
3772 @item -dr
3773 @itemx -fdump-rtl-expand
3774 @opindex dr
3775 @opindex fdump-rtl-expand
3776 Dump after RTL generation, to @file{@var{file}.00.expand}.
3777
3778 @item -dR
3779 @itemx -fdump-rtl-sched2
3780 @opindex dR
3781 @opindex fdump-rtl-sched2
3782 Dump after the second scheduling pass, to @file{@var{file}.32.sched2}.
3783
3784 @item -ds
3785 @itemx -fdump-rtl-cse
3786 @opindex ds
3787 @opindex fdump-rtl-cse
3788 Dump after CSE (including the jump optimization that sometimes follows
3789 CSE), to @file{@var{file}.04.cse}.
3790
3791 @item -dS
3792 @itemx -fdump-rtl-sched
3793 @opindex dS
3794 @opindex fdump-rtl-sched
3795 Dump after the first scheduling pass, to @file{@var{file}.21.sched}.
3796
3797 @item -dt
3798 @itemx -fdump-rtl-cse2
3799 @opindex dt
3800 @opindex fdump-rtl-cse2
3801 Dump after the second CSE pass (including the jump optimization that
3802 sometimes follows CSE), to @file{@var{file}.15.cse2}.
3803
3804 @item -dT
3805 @itemx -fdump-rtl-tracer
3806 @opindex dT
3807 @opindex fdump-rtl-tracer
3808 Dump after running tracer, to @file{@var{file}.12.tracer}.
3809
3810 @item -dV
3811 @itemx -fdump-rtl-vpt
3812 @itemx -fdump-rtl-vartrack
3813 @opindex dV
3814 @opindex fdump-rtl-vpt
3815 @opindex fdump-rtl-vartrack
3816 @option{-dV} and @option{-fdump-rtl-vpt} enable dumping after the value
3817 profile transformations, to @file{@var{file}.10.vpt}.  @option{-dV}
3818 and @option{-fdump-rtl-vartrack} enable dumping after variable tracking,
3819 to @file{@var{file}.34.vartrack}.
3820
3821 @item -dw
3822 @itemx -fdump-rtl-flow2
3823 @opindex dw
3824 @opindex fdump-rtl-flow2
3825 Dump after the second flow pass, to @file{@var{file}.26.flow2}.
3826
3827 @item -dz
3828 @itemx -fdump-rtl-peephole2
3829 @opindex dz
3830 @opindex fdump-rtl-peephole2
3831 Dump after the peephole pass, to @file{@var{file}.27.peephole2}.
3832
3833 @item -dZ
3834 @itemx -fdump-rtl-web
3835 @opindex dZ
3836 @opindex fdump-rtl-web
3837 Dump after live range splitting, to @file{@var{file}.14.web}.
3838
3839 @item -da
3840 @itemx -fdump-rtl-all
3841 @opindex da
3842 @opindex fdump-rtl-all
3843 Produce all the dumps listed above.
3844
3845 @item -dH
3846 @opindex dH
3847 Produce a core dump whenever an error occurs.
3848
3849 @item -dm
3850 @opindex dm
3851 Print statistics on memory usage, at the end of the run, to
3852 standard error.
3853
3854 @item -dp
3855 @opindex dp
3856 Annotate the assembler output with a comment indicating which
3857 pattern and alternative was used.  The length of each instruction is
3858 also printed.
3859
3860 @item -dP
3861 @opindex dP
3862 Dump the RTL in the assembler output as a comment before each instruction.
3863 Also turns on @option{-dp} annotation.
3864
3865 @item -dv
3866 @opindex dv
3867 For each of the other indicated dump files (either with @option{-d} or
3868 @option{-fdump-rtl-@var{pass}}), dump a representation of the control flow
3869 graph suitable for viewing with VCG to @file{@var{file}.@var{pass}.vcg}.
3870
3871 @item -dx
3872 @opindex dx
3873 Just generate RTL for a function instead of compiling it.  Usually used
3874 with @samp{r} (@option{-fdump-rtl-expand}).
3875
3876 @item -dy
3877 @opindex dy
3878 Dump debugging information during parsing, to standard error.
3879 @end table
3880
3881 @item -fdump-unnumbered
3882 @opindex fdump-unnumbered
3883 When doing debugging dumps (see @option{-d} option above), suppress instruction
3884 numbers and line number note output.  This makes it more feasible to
3885 use diff on debugging dumps for compiler invocations with different
3886 options, in particular with and without @option{-g}.
3887
3888 @item -fdump-translation-unit @r{(C++ only)}
3889 @itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
3890 @opindex fdump-translation-unit
3891 Dump a representation of the tree structure for the entire translation
3892 unit to a file.  The file name is made by appending @file{.tu} to the
3893 source file name.  If the @samp{-@var{options}} form is used, @var{options}
3894 controls the details of the dump as described for the
3895 @option{-fdump-tree} options.
3896
3897 @item -fdump-class-hierarchy @r{(C++ only)}
3898 @itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
3899 @opindex fdump-class-hierarchy
3900 Dump a representation of each class's hierarchy and virtual function
3901 table layout to a file.  The file name is made by appending @file{.class}
3902 to the source file name.  If the @samp{-@var{options}} form is used,
3903 @var{options} controls the details of the dump as described for the
3904 @option{-fdump-tree} options.
3905
3906 @item -fdump-ipa-@var{switch}
3907 @opindex fdump-ipa
3908 Control the dumping at various stages of inter-procedural analysis
3909 language tree to a file.  The file name is generated by appending a switch
3910 specific suffix to the source file name.  The following dumps are possible:
3911
3912 @table @samp
3913 @item all
3914 Enables all inter-procedural analysis dumps; currently the only produced
3915 dump is the @samp{cgraph} dump.
3916
3917 @item cgraph
3918 Dumps information about call-graph optimization, unused function removal,
3919 and inlining decisions.
3920 @end table
3921
3922 @item -fdump-tree-@var{switch} @r{(C and C++ only)}
3923 @itemx -fdump-tree-@var{switch}-@var{options} @r{(C and C++ only)}
3924 @opindex fdump-tree
3925 Control the dumping at various stages of processing the intermediate
3926 language tree to a file.  The file name is generated by appending a switch
3927 specific suffix to the source file name.  If the @samp{-@var{options}}
3928 form is used, @var{options} is a list of @samp{-} separated options that
3929 control the details of the dump.  Not all options are applicable to all
3930 dumps, those which are not meaningful will be ignored.  The following
3931 options are available
3932
3933 @table @samp
3934 @item address
3935 Print the address of each node.  Usually this is not meaningful as it
3936 changes according to the environment and source file.  Its primary use
3937 is for tying up a dump file with a debug environment.
3938 @item slim
3939 Inhibit dumping of members of a scope or body of a function merely
3940 because that scope has been reached.  Only dump such items when they
3941 are directly reachable by some other path.  When dumping pretty-printed
3942 trees, this option inhibits dumping the bodies of control structures.
3943 @item raw
3944 Print a raw representation of the tree.  By default, trees are
3945 pretty-printed into a C-like representation.
3946 @item details
3947 Enable more detailed dumps (not honored by every dump option).
3948 @item stats
3949 Enable dumping various statistics about the pass (not honored by every dump
3950 option).
3951 @item blocks
3952 Enable showing basic block boundaries (disabled in raw dumps).
3953 @item vops
3954 Enable showing virtual operands for every statement.
3955 @item lineno
3956 Enable showing line numbers for statements.
3957 @item uid
3958 Enable showing the unique ID (@code{DECL_UID}) for each variable.
3959 @item all
3960 Turn on all options, except @option{raw}, @option{slim} and @option{lineno}.
3961 @end table
3962
3963 The following tree dumps are possible:
3964 @table @samp
3965
3966 @item original
3967 Dump before any tree based optimization, to @file{@var{file}.original}.
3968
3969 @item optimized
3970 Dump after all tree based optimization, to @file{@var{file}.optimized}.
3971
3972 @item inlined
3973 Dump after function inlining, to @file{@var{file}.inlined}.
3974
3975 @item gimple
3976 @opindex fdump-tree-gimple
3977 Dump each function before and after the gimplification pass to a file.  The
3978 file name is made by appending @file{.gimple} to the source file name.
3979
3980 @item cfg
3981 @opindex fdump-tree-cfg
3982 Dump the control flow graph of each function to a file.  The file name is
3983 made by appending @file{.cfg} to the source file name.
3984
3985 @item vcg
3986 @opindex fdump-tree-vcg
3987 Dump the control flow graph of each function to a file in VCG format.  The
3988 file name is made by appending @file{.vcg} to the source file name.  Note
3989 that if the file contains more than one function, the generated file cannot
3990 be used directly by VCG@.  You will need to cut and paste each function's
3991 graph into its own separate file first.
3992
3993 @item ch
3994 @opindex fdump-tree-ch
3995 Dump each function after copying loop headers.  The file name is made by
3996 appending @file{.ch} to the source file name.
3997
3998 @item ssa
3999 @opindex fdump-tree-ssa
4000 Dump SSA related information to a file.  The file name is made by appending
4001 @file{.ssa} to the source file name.
4002
4003 @item salias
4004 @opindex fdump-tree-salias
4005 Dump structure aliasing variable information to a file.  This file name
4006 is made by appending @file{.salias} to the source file name.
4007
4008 @item alias
4009 @opindex fdump-tree-alias
4010 Dump aliasing information for each function.  The file name is made by
4011 appending @file{.alias} to the source file name.
4012
4013 @item ccp
4014 @opindex fdump-tree-ccp
4015 Dump each function after CCP@.  The file name is made by appending
4016 @file{.ccp} to the source file name.
4017
4018 @item storeccp
4019 @opindex fdump-tree-storeccp
4020 Dump each function after STORE-CCP.  The file name is made by appending
4021 @file{.storeccp} to the source file name.
4022
4023 @item pre
4024 @opindex fdump-tree-pre
4025 Dump trees after partial redundancy elimination.  The file name is made
4026 by appending @file{.pre} to the source file name.
4027
4028 @item fre
4029 @opindex fdump-tree-fre
4030 Dump trees after full redundancy elimination.  The file name is made
4031 by appending @file{.fre} to the source file name.
4032
4033 @item copyprop
4034 @opindex fdump-tree-copyprop
4035 Dump trees after copy propagation.  The file name is made
4036 by appending @file{.copyprop} to the source file name.
4037
4038 @item store_copyprop
4039 @opindex fdump-tree-store_copyprop
4040 Dump trees after store copy-propagation.  The file name is made
4041 by appending @file{.store_copyprop} to the source file name.
4042
4043 @item dce
4044 @opindex fdump-tree-dce
4045 Dump each function after dead code elimination.  The file name is made by
4046 appending @file{.dce} to the source file name.
4047
4048 @item mudflap
4049 @opindex fdump-tree-mudflap
4050 Dump each function after adding mudflap instrumentation.  The file name is
4051 made by appending @file{.mudflap} to the source file name.
4052
4053 @item sra
4054 @opindex fdump-tree-sra
4055 Dump each function after performing scalar replacement of aggregates.  The
4056 file name is made by appending @file{.sra} to the source file name.
4057
4058 @item sink
4059 @opindex fdump-tree-sink
4060 Dump each function after performing code sinking.  The file name is made
4061 by appending @file{.sink} to the source file name. 
4062
4063 @item dom
4064 @opindex fdump-tree-dom
4065 Dump each function after applying dominator tree optimizations.  The file
4066 name is made by appending @file{.dom} to the source file name.
4067
4068 @item dse
4069 @opindex fdump-tree-dse
4070 Dump each function after applying dead store elimination.  The file
4071 name is made by appending @file{.dse} to the source file name.
4072
4073 @item phiopt
4074 @opindex fdump-tree-phiopt
4075 Dump each function after optimizing PHI nodes into straightline code.  The file
4076 name is made by appending @file{.phiopt} to the source file name.
4077
4078 @item forwprop
4079 @opindex fdump-tree-forwprop
4080 Dump each function after forward propagating single use variables.  The file
4081 name is made by appending @file{.forwprop} to the source file name.
4082
4083 @item copyrename
4084 @opindex fdump-tree-copyrename
4085 Dump each function after applying the copy rename optimization.  The file
4086 name is made by appending @file{.copyrename} to the source file name.
4087
4088 @item nrv
4089 @opindex fdump-tree-nrv
4090 Dump each function after applying the named return value optimization on
4091 generic trees.  The file name is made by appending @file{.nrv} to the source
4092 file name.
4093
4094 @item vect
4095 @opindex fdump-tree-vect
4096 Dump each function after applying vectorization of loops.  The file name is
4097 made by appending @file{.vect} to the source file name.
4098
4099 @item vrp
4100 @opindex fdump-tree-vrp
4101 Dump each function after Value Range Propagation (VRP).  The file name
4102 is made by appending @file{.vrp} to the source file name.
4103
4104 @item all
4105 @opindex fdump-tree-all
4106 Enable all the available tree dumps with the flags provided in this option.
4107 @end table
4108
4109 @item -ftree-vectorizer-verbose=@var{n}
4110 @opindex ftree-vectorizer-verbose
4111 This option controls the amount of debugging output the vectorizer prints.
4112 This information is written to standard error, unless @option{-fdump-tree-all}
4113 or @option{-fdump-tree-vect} is specified, in which case it is output to the
4114 usual dump listing file, @file{.vect}.
4115
4116 @item -frandom-seed=@var{string}
4117 @opindex frandom-string
4118 This option provides a seed that GCC uses when it would otherwise use
4119 random numbers.  It is used to generate certain symbol names
4120 that have to be different in every compiled file.  It is also used to
4121 place unique stamps in coverage data files and the object files that
4122 produce them.  You can use the @option{-frandom-seed} option to produce
4123 reproducibly identical object files.
4124
4125 The @var{string} should be different for every file you compile.
4126
4127 @item -fsched-verbose=@var{n}
4128 @opindex fsched-verbose
4129 On targets that use instruction scheduling, this option controls the
4130 amount of debugging output the scheduler prints.  This information is
4131 written to standard error, unless @option{-dS} or @option{-dR} is
4132 specified, in which case it is output to the usual dump
4133 listing file, @file{.sched} or @file{.sched2} respectively.  However
4134 for @var{n} greater than nine, the output is always printed to standard
4135 error.
4136
4137 For @var{n} greater than zero, @option{-fsched-verbose} outputs the
4138 same information as @option{-dRS}.  For @var{n} greater than one, it
4139 also output basic block probabilities, detailed ready list information
4140 and unit/insn info.  For @var{n} greater than two, it includes RTL
4141 at abort point, control-flow and regions info.  And for @var{n} over
4142 four, @option{-fsched-verbose} also includes dependence info.
4143
4144 @item -save-temps
4145 @opindex save-temps
4146 Store the usual ``temporary'' intermediate files permanently; place them
4147 in the current directory and name them based on the source file.  Thus,
4148 compiling @file{foo.c} with @samp{-c -save-temps} would produce files
4149 @file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
4150 preprocessed @file{foo.i} output file even though the compiler now
4151 normally uses an integrated preprocessor.
4152
4153 When used in combination with the @option{-x} command line option,
4154 @option{-save-temps} is sensible enough to avoid over writing an
4155 input source file with the same extension as an intermediate file.
4156 The corresponding intermediate file may be obtained by renaming the
4157 source file before using @option{-save-temps}.
4158
4159 @item -time
4160 @opindex time
4161 Report the CPU time taken by each subprocess in the compilation
4162 sequence.  For C source files, this is the compiler proper and assembler
4163 (plus the linker if linking is done).  The output looks like this:
4164
4165 @smallexample
4166 # cc1 0.12 0.01
4167 # as 0.00 0.01
4168 @end smallexample
4169
4170 The first number on each line is the ``user time'', that is time spent
4171 executing the program itself.  The second number is ``system time'',
4172 time spent executing operating system routines on behalf of the program.
4173 Both numbers are in seconds.
4174
4175 @item -fvar-tracking
4176 @opindex fvar-tracking
4177 Run variable tracking pass.  It computes where variables are stored at each
4178 position in code.  Better debugging information is then generated
4179 (if the debugging information format supports this information).
4180
4181 It is enabled by default when compiling with optimization (@option{-Os},
4182 @option{-O}, @option{-O2}, ...), debugging information (@option{-g}) and
4183 the debug info format supports it.
4184
4185 @item -print-file-name=@var{library}
4186 @opindex print-file-name
4187 Print the full absolute name of the library file @var{library} that
4188 would be used when linking---and don't do anything else.  With this
4189 option, GCC does not compile or link anything; it just prints the
4190 file name.
4191
4192 @item -print-multi-directory
4193 @opindex print-multi-directory
4194 Print the directory name corresponding to the multilib selected by any
4195 other switches present in the command line.  This directory is supposed
4196 to exist in @env{GCC_EXEC_PREFIX}.
4197
4198 @item -print-multi-lib
4199 @opindex print-multi-lib
4200 Print the mapping from multilib directory names to compiler switches
4201 that enable them.  The directory name is separated from the switches by
4202 @samp{;}, and each switch starts with an @samp{@@} instead of the
4203 @samp{-}, without spaces between multiple switches.  This is supposed to
4204 ease shell-processing.
4205
4206 @item -print-prog-name=@var{program}
4207 @opindex print-prog-name
4208 Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
4209
4210 @item -print-libgcc-file-name
4211 @opindex print-libgcc-file-name
4212 Same as @option{-print-file-name=libgcc.a}.
4213
4214 This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
4215 but you do want to link with @file{libgcc.a}.  You can do
4216
4217 @smallexample
4218 gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
4219 @end smallexample
4220
4221 @item -print-search-dirs
4222 @opindex print-search-dirs
4223 Print the name of the configured installation directory and a list of
4224 program and library directories @command{gcc} will search---and don't do anything else.
4225
4226 This is useful when @command{gcc} prints the error message
4227 @samp{installation problem, cannot exec cpp0: No such file or directory}.
4228 To resolve this you either need to put @file{cpp0} and the other compiler
4229 components where @command{gcc} expects to find them, or you can set the environment
4230 variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
4231 Don't forget the trailing @samp{/}.
4232 @xref{Environment Variables}.
4233
4234 @item -dumpmachine
4235 @opindex dumpmachine
4236 Print the compiler's target machine (for example,
4237 @samp{i686-pc-linux-gnu})---and don't do anything else.
4238
4239 @item -dumpversion
4240 @opindex dumpversion
4241 Print the compiler version (for example, @samp{3.0})---and don't do
4242 anything else.
4243
4244 @item -dumpspecs
4245 @opindex dumpspecs
4246 Print the compiler's built-in specs---and don't do anything else.  (This
4247 is used when GCC itself is being built.)  @xref{Spec Files}.
4248
4249 @item -feliminate-unused-debug-types
4250 @opindex feliminate-unused-debug-types
4251 Normally, when producing DWARF2 output, GCC will emit debugging
4252 information for all types declared in a compilation
4253 unit, regardless of whether or not they are actually used
4254 in that compilation unit.  Sometimes this is useful, such as
4255 if, in the debugger, you want to cast a value to a type that is
4256 not actually used in your program (but is declared).  More often,
4257 however, this results in a significant amount of wasted space.
4258 With this option, GCC will avoid producing debug symbol output
4259 for types that are nowhere used in the source file being compiled.
4260 @end table
4261
4262 @node Optimize Options
4263 @section Options That Control Optimization
4264 @cindex optimize options
4265 @cindex options, optimization
4266
4267 These options control various sorts of optimizations.
4268
4269 Without any optimization option, the compiler's goal is to reduce the
4270 cost of compilation and to make debugging produce the expected
4271 results.  Statements are independent: if you stop the program with a
4272 breakpoint between statements, you can then assign a new value to any
4273 variable or change the program counter to any other statement in the
4274 function and get exactly the results you would expect from the source
4275 code.
4276
4277 Turning on optimization flags makes the compiler attempt to improve
4278 the performance and/or code size at the expense of compilation time
4279 and possibly the ability to debug the program.
4280
4281 The compiler performs optimization based on the knowledge it has of
4282 the program.  Optimization levels @option{-O2} and above, in
4283 particular, enable @emph{unit-at-a-time} mode, which allows the
4284 compiler to consider information gained from later functions in
4285 the file when compiling a function.  Compiling multiple files at
4286 once to a single output file in @emph{unit-at-a-time} mode allows
4287 the compiler to use information gained from all of the files when
4288 compiling each of them.
4289
4290 Not all optimizations are controlled directly by a flag.  Only
4291 optimizations that have a flag are listed.
4292
4293 @table @gcctabopt
4294 @item -O
4295 @itemx -O1
4296 @opindex O
4297 @opindex O1
4298 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4299 more memory for a large function.
4300
4301 With @option{-O}, the compiler tries to reduce code size and execution
4302 time, without performing any optimizations that take a great deal of
4303 compilation time.
4304
4305 @option{-O} turns on the following optimization flags:
4306 @gccoptlist{-fdefer-pop @gol
4307 -fdelayed-branch @gol
4308 -fguess-branch-probability @gol
4309 -fcprop-registers @gol
4310 -floop-optimize @gol
4311 -fif-conversion @gol
4312 -fif-conversion2 @gol
4313 -ftree-ccp @gol
4314 -ftree-dce @gol
4315 -ftree-dominator-opts @gol
4316 -ftree-dse @gol
4317 -ftree-ter @gol
4318 -ftree-lrs @gol
4319 -ftree-sra @gol
4320 -ftree-copyrename @gol
4321 -ftree-fre @gol
4322 -ftree-ch @gol
4323 -fmerge-constants}
4324
4325 @option{-O} also turns on @option{-fomit-frame-pointer} on machines
4326 where doing so does not interfere with debugging.
4327
4328 @item -O2
4329 @opindex O2
4330 Optimize even more.  GCC performs nearly all supported optimizations
4331 that do not involve a space-speed tradeoff.  The compiler does not
4332 perform loop unrolling or function inlining when you specify @option{-O2}.
4333 As compared to @option{-O}, this option increases both compilation time
4334 and the performance of the generated code.
4335
4336 @option{-O2} turns on all optimization flags specified by @option{-O}.  It
4337 also turns on the following optimization flags:
4338 @gccoptlist{-fthread-jumps @gol
4339 -fcrossjumping @gol
4340 -foptimize-sibling-calls @gol
4341 -fcse-follow-jumps  -fcse-skip-blocks @gol
4342 -fgcse  -fgcse-lm  @gol
4343 -fexpensive-optimizations @gol
4344 -fstrength-reduce @gol
4345 -frerun-cse-after-loop  -frerun-loop-opt @gol
4346 -fcaller-saves @gol
4347 -fpeephole2 @gol
4348 -fschedule-insns  -fschedule-insns2 @gol
4349 -fsched-interblock  -fsched-spec @gol
4350 -fregmove @gol
4351 -fstrict-aliasing @gol
4352 -fdelete-null-pointer-checks @gol
4353 -freorder-blocks  -freorder-functions @gol
4354 -funit-at-a-time @gol
4355 -falign-functions  -falign-jumps @gol
4356 -falign-loops  -falign-labels @gol
4357 -ftree-vrp @gol
4358 -ftree-pre}
4359
4360 Please note the warning under @option{-fgcse} about
4361 invoking @option{-O2} on programs that use computed gotos.
4362
4363 @item -O3
4364 @opindex O3
4365 Optimize yet more.  @option{-O3} turns on all optimizations specified by
4366 @option{-O2} and also turns on the @option{-finline-functions},
4367 @option{-funswitch-loops} and @option{-fgcse-after-reload} options.
4368
4369 @item -O0
4370 @opindex O0
4371 Do not optimize.  This is the default.
4372
4373 @item -Os
4374 @opindex Os
4375 Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
4376 do not typically increase code size.  It also performs further
4377 optimizations designed to reduce code size.
4378
4379 @option{-Os} disables the following optimization flags:
4380 @gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
4381 -falign-labels  -freorder-blocks  -freorder-blocks-and-partition -fprefetch-loop-arrays}
4382
4383 If you use multiple @option{-O} options, with or without level numbers,
4384 the last such option is the one that is effective.
4385 @end table
4386
4387 Options of the form @option{-f@var{flag}} specify machine-independent
4388 flags.  Most flags have both positive and negative forms; the negative
4389 form of @option{-ffoo} would be @option{-fno-foo}.  In the table
4390 below, only one of the forms is listed---the one you typically will
4391 use.  You can figure out the other form by either removing @samp{no-}
4392 or adding it.
4393
4394 The following options control specific optimizations.  They are either
4395 activated by @option{-O} options or are related to ones that are.  You
4396 can use the following flags in the rare cases when ``fine-tuning'' of
4397 optimizations to be performed is desired.
4398
4399 @table @gcctabopt
4400 @item -fno-default-inline
4401 @opindex fno-default-inline
4402 Do not make member functions inline by default merely because they are
4403 defined inside the class scope (C++ only).  Otherwise, when you specify
4404 @w{@option{-O}}, member functions defined inside class scope are compiled
4405 inline by default; i.e., you don't need to add @samp{inline} in front of
4406 the member function name.
4407
4408 @item -fno-defer-pop
4409 @opindex fno-defer-pop
4410 Always pop the arguments to each function call as soon as that function
4411 returns.  For machines which must pop arguments after a function call,
4412 the compiler normally lets arguments accumulate on the stack for several
4413 function calls and pops them all at once.
4414
4415 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4416
4417 @item -fforce-mem
4418 @opindex fforce-mem
4419 Force memory operands to be copied into registers before doing
4420 arithmetic on them.  This produces better code by making all memory
4421 references potential common subexpressions.  When they are not common
4422 subexpressions, instruction combination should eliminate the separate
4423 register-load. This option is now a nop and will be removed in 4.2.
4424
4425 @item -fforce-addr
4426 @opindex fforce-addr
4427 Force memory address constants to be copied into registers before
4428 doing arithmetic on them.
4429
4430 @item -fomit-frame-pointer
4431 @opindex fomit-frame-pointer
4432 Don't keep the frame pointer in a register for functions that
4433 don't need one.  This avoids the instructions to save, set up and
4434 restore frame pointers; it also makes an extra register available
4435 in many functions.  @strong{It also makes debugging impossible on
4436 some machines.}
4437
4438 On some machines, such as the VAX, this flag has no effect, because
4439 the standard calling sequence automatically handles the frame pointer
4440 and nothing is saved by pretending it doesn't exist.  The
4441 machine-description macro @code{FRAME_POINTER_REQUIRED} controls
4442 whether a target machine supports this flag.  @xref{Registers,,Register
4443 Usage, gccint, GNU Compiler Collection (GCC) Internals}.
4444
4445 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4446
4447 @item -foptimize-sibling-calls
4448 @opindex foptimize-sibling-calls
4449 Optimize sibling and tail recursive calls.
4450
4451 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4452
4453 @item -fno-inline
4454 @opindex fno-inline
4455 Don't pay attention to the @code{inline} keyword.  Normally this option
4456 is used to keep the compiler from expanding any functions inline.
4457 Note that if you are not optimizing, no functions can be expanded inline.
4458
4459 @item -finline-functions
4460 @opindex finline-functions
4461 Integrate all simple functions into their callers.  The compiler
4462 heuristically decides which functions are simple enough to be worth
4463 integrating in this way.
4464
4465 If all calls to a given function are integrated, and the function is
4466 declared @code{static}, then the function is normally not output as
4467 assembler code in its own right.
4468
4469 Enabled at level @option{-O3}.
4470
4471 @item -fearly-inlining
4472 @opindex fearly-inlining
4473 Inline functions marked by @code{always_inline} and functions whose body seems
4474 smaller than the function call overhead early before doing
4475 @option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
4476 makes profiling significantly cheaper and usually inlining faster on programs
4477 having large chains of nested wrapper functions.
4478
4479 Enabled by default.
4480
4481 @item -finline-limit=@var{n}
4482 @opindex finline-limit
4483 By default, GCC limits the size of functions that can be inlined.  This flag
4484 allows the control of this limit for functions that are explicitly marked as
4485 inline (i.e., marked with the inline keyword or defined within the class
4486 definition in c++).  @var{n} is the size of functions that can be inlined in
4487 number of pseudo instructions (not counting parameter handling).  The default
4488 value of @var{n} is 600.
4489 Increasing this value can result in more inlined code at
4490 the cost of compilation time and memory consumption.  Decreasing usually makes
4491 the compilation faster and less code will be inlined (which presumably
4492 means slower programs).  This option is particularly useful for programs that
4493 use inlining heavily such as those based on recursive templates with C++.
4494
4495 Inlining is actually controlled by a number of parameters, which may be
4496 specified individually by using @option{--param @var{name}=@var{value}}.
4497 The @option{-finline-limit=@var{n}} option sets some of these parameters
4498 as follows:
4499
4500 @table @gcctabopt
4501  @item max-inline-insns-single
4502   is set to @var{n}/2.
4503  @item max-inline-insns-auto
4504   is set to @var{n}/2.
4505  @item min-inline-insns
4506   is set to 130 or @var{n}/4, whichever is smaller.
4507  @item max-inline-insns-rtl
4508   is set to @var{n}.
4509 @end table
4510
4511 See below for a documentation of the individual
4512 parameters controlling inlining.
4513
4514 @emph{Note:} pseudo instruction represents, in this particular context, an
4515 abstract measurement of function's size.  In no way does it represent a count
4516 of assembly instructions and as such its exact meaning might change from one
4517 release to an another.
4518
4519 @item -fkeep-inline-functions
4520 @opindex fkeep-inline-functions
4521 In C, emit @code{static} functions that are declared @code{inline}
4522 into the object file, even if the function has been inlined into all
4523 of its callers.  This switch does not affect functions using the
4524 @code{extern inline} extension in GNU C@.  In C++, emit any and all
4525 inline functions into the object file.
4526
4527 @item -fkeep-static-consts
4528 @opindex fkeep-static-consts
4529 Emit variables declared @code{static const} when optimization isn't turned
4530 on, even if the variables aren't referenced.
4531
4532 GCC enables this option by default.  If you want to force the compiler to
4533 check if the variable was referenced, regardless of whether or not
4534 optimization is turned on, use the @option{-fno-keep-static-consts} option.
4535
4536 @item -fmerge-constants
4537 Attempt to merge identical constants (string constants and floating point
4538 constants) across compilation units.
4539
4540 This option is the default for optimized compilation if the assembler and
4541 linker support it.  Use @option{-fno-merge-constants} to inhibit this
4542 behavior.
4543
4544 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4545
4546 @item -fmerge-all-constants
4547 Attempt to merge identical constants and identical variables.
4548
4549 This option implies @option{-fmerge-constants}.  In addition to
4550 @option{-fmerge-constants} this considers e.g.@: even constant initialized
4551 arrays or initialized constant variables with integral or floating point
4552 types.  Languages like C or C++ require each non-automatic variable to
4553 have distinct location, so using this option will result in non-conforming
4554 behavior.
4555
4556 @item -fmodulo-sched
4557 @opindex fmodulo-sched
4558 Perform swing modulo scheduling immediately before the first scheduling
4559 pass.  This pass looks at innermost loops and reorders their
4560 instructions by overlapping different iterations.
4561
4562 @item -fno-branch-count-reg
4563 @opindex fno-branch-count-reg
4564 Do not use ``decrement and branch'' instructions on a count register,
4565 but instead generate a sequence of instructions that decrement a
4566 register, compare it against zero, then branch based upon the result.
4567 This option is only meaningful on architectures that support such
4568 instructions, which include x86, PowerPC, IA-64 and S/390.
4569
4570 The default is @option{-fbranch-count-reg}, enabled when
4571 @option{-fstrength-reduce} is enabled.
4572
4573 @item -fno-function-cse
4574 @opindex fno-function-cse
4575 Do not put function addresses in registers; make each instruction that
4576 calls a constant function contain the function's address explicitly.
4577
4578 This option results in less efficient code, but some strange hacks
4579 that alter the assembler output may be confused by the optimizations
4580 performed when this option is not used.
4581
4582 The default is @option{-ffunction-cse}
4583
4584 @item -fno-zero-initialized-in-bss
4585 @opindex fno-zero-initialized-in-bss
4586 If the target supports a BSS section, GCC by default puts variables that
4587 are initialized to zero into BSS@.  This can save space in the resulting
4588 code.
4589
4590 This option turns off this behavior because some programs explicitly
4591 rely on variables going to the data section.  E.g., so that the
4592 resulting executable can find the beginning of that section and/or make
4593 assumptions based on that.
4594
4595 The default is @option{-fzero-initialized-in-bss}.
4596
4597 @item -fbounds-check
4598 @opindex fbounds-check
4599 For front-ends that support it, generate additional code to check that
4600 indices used to access arrays are within the declared range.  This is
4601 currently only supported by the Java and Fortran front-ends, where
4602 this option defaults to true and false respectively.
4603
4604 @item -fmudflap -fmudflapth -fmudflapir
4605 @opindex fmudflap
4606 @opindex fmudflapth
4607 @opindex fmudflapir
4608 @cindex bounds checking
4609 @cindex mudflap
4610 For front-ends that support it (C and C++), instrument all risky
4611 pointer/array dereferencing operations, some standard library
4612 string/heap functions, and some other associated constructs with
4613 range/validity tests.  Modules so instrumented should be immune to
4614 buffer overflows, invalid heap use, and some other classes of C/C++
4615 programming errors.  The instrumentation relies on a separate runtime
4616 library (@file{libmudflap}), which will be linked into a program if
4617 @option{-fmudflap} is given at link time.  Run-time behavior of the
4618 instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
4619 environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
4620 for its options.
4621
4622 Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
4623 link if your program is multi-threaded.  Use @option{-fmudflapir}, in
4624 addition to @option{-fmudflap} or @option{-fmudflapth}, if
4625 instrumentation should ignore pointer reads.  This produces less
4626 instrumentation (and therefore faster execution) and still provides
4627 some protection against outright memory corrupting writes, but allows
4628 erroneously read data to propagate within a program.
4629
4630 @item -fstrength-reduce
4631 @opindex fstrength-reduce
4632 Perform the optimizations of loop strength reduction and
4633 elimination of iteration variables.
4634
4635 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4636
4637 @item -fthread-jumps
4638 @opindex fthread-jumps
4639 Perform optimizations where we check to see if a jump branches to a
4640 location where another comparison subsumed by the first is found.  If
4641 so, the first branch is redirected to either the destination of the
4642 second branch or a point immediately following it, depending on whether
4643 the condition is known to be true or false.
4644
4645 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4646
4647 @item -fcse-follow-jumps
4648 @opindex fcse-follow-jumps
4649 In common subexpression elimination, scan through jump instructions
4650 when the target of the jump is not reached by any other path.  For
4651 example, when CSE encounters an @code{if} statement with an
4652 @code{else} clause, CSE will follow the jump when the condition
4653 tested is false.
4654
4655 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4656
4657 @item -fcse-skip-blocks
4658 @opindex fcse-skip-blocks
4659 This is similar to @option{-fcse-follow-jumps}, but causes CSE to
4660 follow jumps which conditionally skip over blocks.  When CSE
4661 encounters a simple @code{if} statement with no else clause,
4662 @option{-fcse-skip-blocks} causes CSE to follow the jump around the
4663 body of the @code{if}.
4664
4665 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4666
4667 @item -frerun-cse-after-loop
4668 @opindex frerun-cse-after-loop
4669 Re-run common subexpression elimination after loop optimizations has been
4670 performed.
4671
4672 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4673
4674 @item -frerun-loop-opt
4675 @opindex frerun-loop-opt
4676 Run the loop optimizer twice.
4677
4678 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4679
4680 @item -fgcse
4681 @opindex fgcse
4682 Perform a global common subexpression elimination pass.
4683 This pass also performs global constant and copy propagation.
4684
4685 @emph{Note:} When compiling a program using computed gotos, a GCC
4686 extension, you may get better runtime performance if you disable
4687 the global common subexpression elimination pass by adding
4688 @option{-fno-gcse} to the command line.
4689
4690 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4691
4692 @item -fgcse-lm
4693 @opindex fgcse-lm
4694 When @option{-fgcse-lm} is enabled, global common subexpression elimination will
4695 attempt to move loads which are only killed by stores into themselves.  This
4696 allows a loop containing a load/store sequence to be changed to a load outside
4697 the loop, and a copy/store within the loop.
4698
4699 Enabled by default when gcse is enabled.
4700
4701 @item -fgcse-sm
4702 @opindex fgcse-sm
4703 When @option{-fgcse-sm} is enabled, a store motion pass is run after
4704 global common subexpression elimination.  This pass will attempt to move
4705 stores out of loops.  When used in conjunction with @option{-fgcse-lm},
4706 loops containing a load/store sequence can be changed to a load before
4707 the loop and a store after the loop.
4708
4709 Not enabled at any optimization level.
4710
4711 @item -fgcse-las
4712 @opindex fgcse-las
4713 When @option{-fgcse-las} is enabled, the global common subexpression
4714 elimination pass eliminates redundant loads that come after stores to the
4715 same memory location (both partial and full redundancies).
4716
4717 Not enabled at any optimization level.
4718
4719 @item -fgcse-after-reload
4720 @opindex fgcse-after-reload
4721 When @option{-fgcse-after-reload} is enabled, a redundant load elimination
4722 pass is performed after reload.  The purpose of this pass is to cleanup
4723 redundant spilling.
4724
4725 @item -floop-optimize
4726 @opindex floop-optimize
4727 Perform loop optimizations: move constant expressions out of loops, simplify
4728 exit test conditions and optionally do strength-reduction as well.
4729
4730 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4731
4732 @item -floop-optimize2
4733 @opindex floop-optimize2
4734 Perform loop optimizations using the new loop optimizer.  The optimizations
4735 (loop unrolling, peeling and unswitching, loop invariant motion) are enabled
4736 by separate flags.
4737
4738 @item -funsafe-loop-optimizations
4739 @opindex funsafe-loop-optimizations
4740 If given, the loop optimizer will assume that loop indices do not
4741 overflow, and that the loops with nontrivial exit condition are not
4742 infinite.  This enables a wider range of loop optimizations even if
4743 the loop optimizer itself cannot prove that these assumptions are valid.
4744 Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
4745 if it finds this kind of loop.
4746
4747 @item -fcrossjumping
4748 @opindex crossjumping
4749 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
4750 resulting code may or may not perform better than without cross-jumping.
4751
4752 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4753
4754 @item -fif-conversion
4755 @opindex if-conversion
4756 Attempt to transform conditional jumps into branch-less equivalents.  This
4757 include use of conditional moves, min, max, set flags and abs instructions, and
4758 some tricks doable by standard arithmetics.  The use of conditional execution
4759 on chips where it is available is controlled by @code{if-conversion2}.
4760
4761 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4762
4763 @item -fif-conversion2
4764 @opindex if-conversion2
4765 Use conditional execution (where available) to transform conditional jumps into
4766 branch-less equivalents.
4767
4768 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4769
4770 @item -fdelete-null-pointer-checks
4771 @opindex fdelete-null-pointer-checks
4772 Use global dataflow analysis to identify and eliminate useless checks
4773 for null pointers.  The compiler assumes that dereferencing a null
4774 pointer would have halted the program.  If a pointer is checked after
4775 it has already been dereferenced, it cannot be null.
4776
4777 In some environments, this assumption is not true, and programs can
4778 safely dereference null pointers.  Use
4779 @option{-fno-delete-null-pointer-checks} to disable this optimization
4780 for programs which depend on that behavior.
4781
4782 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4783
4784 @item -fexpensive-optimizations
4785 @opindex fexpensive-optimizations
4786 Perform a number of minor optimizations that are relatively expensive.
4787
4788 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4789
4790 @item -foptimize-register-move
4791 @itemx -fregmove
4792 @opindex foptimize-register-move
4793 @opindex fregmove
4794 Attempt to reassign register numbers in move instructions and as
4795 operands of other simple instructions in order to maximize the amount of
4796 register tying.  This is especially helpful on machines with two-operand
4797 instructions.
4798
4799 Note @option{-fregmove} and @option{-foptimize-register-move} are the same
4800 optimization.
4801
4802 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4803
4804 @item -fdelayed-branch
4805 @opindex fdelayed-branch
4806 If supported for the target machine, attempt to reorder instructions
4807 to exploit instruction slots available after delayed branch
4808 instructions.
4809
4810 Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
4811
4812 @item -fschedule-insns
4813 @opindex fschedule-insns
4814 If supported for the target machine, attempt to reorder instructions to
4815 eliminate execution stalls due to required data being unavailable.  This
4816 helps machines that have slow floating point or memory load instructions
4817 by allowing other instructions to be issued until the result of the load
4818 or floating point instruction is required.
4819
4820 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4821
4822 @item -fschedule-insns2
4823 @opindex fschedule-insns2
4824 Similar to @option{-fschedule-insns}, but requests an additional pass of
4825 instruction scheduling after register allocation has been done.  This is
4826 especially useful on machines with a relatively small number of
4827 registers and where memory load instructions take more than one cycle.
4828
4829 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4830
4831 @item -fno-sched-interblock
4832 @opindex fno-sched-interblock
4833 Don't schedule instructions across basic blocks.  This is normally
4834 enabled by default when scheduling before register allocation, i.e.@:
4835 with @option{-fschedule-insns} or at @option{-O2} or higher.
4836
4837 @item -fno-sched-spec
4838 @opindex fno-sched-spec
4839 Don't allow speculative motion of non-load instructions.  This is normally
4840 enabled by default when scheduling before register allocation, i.e.@:
4841 with @option{-fschedule-insns} or at @option{-O2} or higher.
4842
4843 @item -fsched-spec-load
4844 @opindex fsched-spec-load
4845 Allow speculative motion of some load instructions.  This only makes
4846 sense when scheduling before register allocation, i.e.@: with
4847 @option{-fschedule-insns} or at @option{-O2} or higher.
4848
4849 @item -fsched-spec-load-dangerous
4850 @opindex fsched-spec-load-dangerous
4851 Allow speculative motion of more load instructions.  This only makes
4852 sense when scheduling before register allocation, i.e.@: with
4853 @option{-fschedule-insns} or at @option{-O2} or higher.
4854
4855 @item -fsched-stalled-insns=@var{n}
4856 @opindex fsched-stalled-insns
4857 Define how many insns (if any) can be moved prematurely from the queue
4858 of stalled insns into the ready list, during the second scheduling pass.
4859
4860 @item -fsched-stalled-insns-dep=@var{n}
4861 @opindex fsched-stalled-insns-dep
4862 Define how many insn groups (cycles) will be examined for a dependency
4863 on a stalled insn that is candidate for premature removal from the queue
4864 of stalled insns.  Has an effect only during the second scheduling pass,
4865 and only if @option{-fsched-stalled-insns} is used and its value is not zero.
4866
4867 @item -fsched2-use-superblocks
4868 @opindex fsched2-use-superblocks
4869 When scheduling after register allocation, do use superblock scheduling
4870 algorithm.  Superblock scheduling allows motion across basic block boundaries
4871 resulting on faster schedules.  This option is experimental, as not all machine
4872 descriptions used by GCC model the CPU closely enough to avoid unreliable
4873 results from the algorithm.
4874
4875 This only makes sense when scheduling after register allocation, i.e.@: with
4876 @option{-fschedule-insns2} or at @option{-O2} or higher.
4877
4878 @item -fsched2-use-traces
4879 @opindex fsched2-use-traces
4880 Use @option{-fsched2-use-superblocks} algorithm when scheduling after register
4881 allocation and additionally perform code duplication in order to increase the
4882 size of superblocks using tracer pass.  See @option{-ftracer} for details on
4883 trace formation.
4884
4885 This mode should produce faster but significantly longer programs.  Also
4886 without @option{-fbranch-probabilities} the traces constructed may not
4887 match the reality and hurt the performance.  This only makes
4888 sense when scheduling after register allocation, i.e.@: with
4889 @option{-fschedule-insns2} or at @option{-O2} or higher.
4890
4891 @item -freschedule-modulo-scheduled-loops
4892 @opindex fscheduling-in-modulo-scheduled-loops
4893 The modulo scheduling comes before the traditional scheduling, if a loop was modulo scheduled
4894 we may want to prevent the later scheduling passes from changing its schedule, we use this
4895 option to control that.
4896
4897 @item -fcaller-saves
4898 @opindex fcaller-saves
4899 Enable values to be allocated in registers that will be clobbered by
4900 function calls, by emitting extra instructions to save and restore the
4901 registers around such calls.  Such allocation is done only when it
4902 seems to result in better code than would otherwise be produced.
4903
4904 This option is always enabled by default on certain machines, usually
4905 those which have no call-preserved registers to use instead.
4906
4907 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
4908
4909 @item -ftree-pre
4910 Perform Partial Redundancy Elimination (PRE) on trees.  This flag is
4911 enabled by default at @option{-O2} and @option{-O3}.
4912
4913 @item -ftree-fre
4914 Perform Full Redundancy Elimination (FRE) on trees.  The difference
4915 between FRE and PRE is that FRE only considers expressions
4916 that are computed on all paths leading to the redundant computation.
4917 This analysis faster than PRE, though it exposes fewer redundancies.
4918 This flag is enabled by default at @option{-O} and higher.
4919
4920 @item -ftree-copy-prop
4921 Perform copy propagation on trees.  This pass eliminates unnecessary
4922 copy operations.  This flag is enabled by default at @option{-O} and
4923 higher.
4924
4925 @item -ftree-store-copy-prop
4926 Perform copy propagation of memory loads and stores.  This pass
4927 eliminates unnecessary copy operations in memory references
4928 (structures, global variables, arrays, etc).  This flag is enabled by
4929 default at @option{-O2} and higher.
4930
4931 @item -ftree-salias
4932 Perform structural alias analysis on trees.  This flag
4933 is enabled by default at @option{-O} and higher.
4934
4935 @item -ftree-sink
4936 Perform forward store motion  on trees.  This flag is
4937 enabled by default at @option{-O} and higher.
4938
4939 @item -ftree-ccp
4940 Perform sparse conditional constant propagation (CCP) on trees.  This
4941 pass only operates on local scalar variables and is enabled by default
4942 at @option{-O} and higher.
4943
4944 @item -ftree-store-ccp
4945 Perform sparse conditional constant propagation (CCP) on trees.  This
4946 pass operates on both local scalar variables and memory stores and
4947 loads (global variables, structures, arrays, etc).  This flag is
4948 enabled by default at @option{-O2} and higher.
4949
4950 @item -ftree-dce
4951 Perform dead code elimination (DCE) on trees.  This flag is enabled by
4952 default at @option{-O} and higher.
4953
4954 @item -ftree-dominator-opts
4955 Perform dead code elimination (DCE) on trees.  This flag is enabled by
4956 default at @option{-O} and higher.
4957
4958 @item -ftree-ch
4959 Perform loop header copying on trees.  This is beneficial since it increases
4960 effectiveness of code motion optimizations.  It also saves one jump.  This flag
4961 is enabled by default at @option{-O} and higher.  It is not enabled
4962 for @option{-Os}, since it usually increases code size.
4963
4964 @item -ftree-loop-optimize
4965 Perform loop optimizations on trees.  This flag is enabled by default
4966 at @option{-O} and higher.
4967
4968 @item -ftree-loop-linear
4969 Perform linear loop transformations on tree.  This flag can improve cache
4970 performance and allow further loop optimizations to take place.
4971
4972 @item -ftree-loop-im
4973 Perform loop invariant motion on trees.  This pass moves only invariants that
4974 would be hard to handle at RTL level (function calls, operations that expand to
4975 nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
4976 operands of conditions that are invariant out of the loop, so that we can use
4977 just trivial invariantness analysis in loop unswitching.  The pass also includes
4978 store motion.
4979
4980 @item -ftree-loop-ivcanon
4981 Create a canonical counter for number of iterations in the loop for that
4982 determining number of iterations requires complicated analysis.  Later
4983 optimizations then may determine the number easily.  Useful especially
4984 in connection with unrolling.
4985
4986 @item -fivopts
4987 Perform induction variable optimizations (strength reduction, induction
4988 variable merging and induction variable elimination) on trees.
4989
4990 @item -ftree-sra
4991 Perform scalar replacement of aggregates.  This pass replaces structure
4992 references with scalars to prevent committing structures to memory too
4993 early.  This flag is enabled by default at @option{-O} and higher.
4994
4995 @item -ftree-copyrename
4996 Perform copy renaming on trees.  This pass attempts to rename compiler
4997 temporaries to other variables at copy locations, usually resulting in
4998 variable names which more closely resemble the original variables.  This flag
4999 is enabled by default at @option{-O} and higher.
5000
5001 @item -ftree-ter
5002 Perform temporary expression replacement during the SSA->normal phase.  Single
5003 use/single def temporaries are replaced at their use location with their
5004 defining expression.  This results in non-GIMPLE code, but gives the expanders
5005 much more complex trees to work on resulting in better RTL generation.  This is
5006 enabled by default at @option{-O} and higher.
5007
5008 @item -ftree-lrs
5009 Perform live range splitting during the SSA->normal phase.  Distinct live
5010 ranges of a variable are split into unique variables, allowing for better
5011 optimization later.  This is enabled by default at @option{-O} and higher.
5012
5013 @item -ftree-vectorize
5014 Perform loop vectorization on trees.
5015
5016 @item -ftree-vrp
5017 Perform Value Range Propagation on trees.  This is similar to the
5018 constant propagation pass, but instead of values, ranges of values are
5019 propagated.  This allows the optimizers to remove unnecessary range
5020 checks like array bound checks and null pointer checks.  This is
5021 enabled by default at @option{-O2} and higher.  Null pointer check
5022 elimination is only done if @option{-fdelete-null-pointer-checks} is
5023 enabled.
5024
5025 @item -ftracer
5026 @opindex ftracer
5027 Perform tail duplication to enlarge superblock size.  This transformation
5028 simplifies the control flow of the function allowing other optimizations to do
5029 better job.
5030
5031 @item -funroll-loops
5032 @opindex funroll-loops
5033 Unroll loops whose number of iterations can be determined at compile
5034 time or upon entry to the loop.  @option{-funroll-loops} implies both
5035 @option{-fstrength-reduce} and @option{-frerun-cse-after-loop}.  This
5036 option makes code larger, and may or may not make it run faster.
5037
5038 @item -funroll-all-loops
5039 @opindex funroll-all-loops
5040 Unroll all loops, even if their number of iterations is uncertain when
5041 the loop is entered.  This usually makes programs run more slowly.
5042 @option{-funroll-all-loops} implies the same options as
5043 @option{-funroll-loops},
5044
5045 @item -fsplit-ivs-in-unroller
5046 @opindex -fsplit-ivs-in-unroller
5047 Enables expressing of values of induction variables in later iterations
5048 of the unrolled loop using the value in the first iteration.  This breaks
5049 long dependency chains, thus improving efficiency of the scheduling passes.
5050
5051 Combination of @option{-fweb} and CSE is often sufficient to obtain the
5052 same effect.  However in cases the loop body is more complicated than
5053 a single basic block, this is not reliable.  It also does not work at all
5054 on some of the architectures due to restrictions in the CSE pass.
5055
5056 This optimization is enabled by default.
5057
5058 @item -fvariable-expansion-in-unroller
5059 @opindex -fvariable-expansion-in-unroller
5060 With this option, the compiler will create multiple copies of some
5061 local variables when unrolling a loop which can result in superior code.
5062
5063 @item -fprefetch-loop-arrays
5064 @opindex fprefetch-loop-arrays
5065 If supported by the target machine, generate instructions to prefetch
5066 memory to improve the performance of loops that access large arrays.
5067
5068 These options may generate better or worse code; results are highly
5069 dependent on the structure of loops within the source code.
5070
5071 @item -fno-peephole
5072 @itemx -fno-peephole2
5073 @opindex fno-peephole
5074 @opindex fno-peephole2
5075 Disable any machine-specific peephole optimizations.  The difference
5076 between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
5077 are implemented in the compiler; some targets use one, some use the
5078 other, a few use both.
5079
5080 @option{-fpeephole} is enabled by default.
5081 @option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5082
5083 @item -fno-guess-branch-probability
5084 @opindex fno-guess-branch-probability
5085 Do not guess branch probabilities using heuristics.
5086
5087 GCC will use heuristics to guess branch probabilities if they are
5088 not provided by profiling feedback (@option{-fprofile-arcs}).  These
5089 heuristics are based on the control flow graph.  If some branch probabilities
5090 are specified by @samp{__builtin_expect}, then the heuristics will be
5091 used to guess branch probabilities for the rest of the control flow graph,
5092 taking the @samp{__builtin_expect} info into account.  The interactions
5093 between the heuristics and @samp{__builtin_expect} can be complex, and in
5094 some cases, it may be useful to disable the heuristics so that the effects
5095 of @samp{__builtin_expect} are easier to understand.
5096
5097 The default is @option{-fguess-branch-probability} at levels
5098 @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5099
5100 @item -freorder-blocks
5101 @opindex freorder-blocks
5102 Reorder basic blocks in the compiled function in order to reduce number of
5103 taken branches and improve code locality.
5104
5105 Enabled at levels @option{-O2}, @option{-O3}.
5106
5107 @item -freorder-blocks-and-partition
5108 @opindex freorder-blocks-and-partition
5109 In addition to reordering basic blocks in the compiled function, in order
5110 to reduce number of taken branches, partitions hot and cold basic blocks
5111 into separate sections of the assembly and .o files, to improve
5112 paging and cache locality performance.
5113
5114 This optimization is automatically turned off in the presence of
5115 exception handling, for linkonce sections, for functions with a user-defined
5116 section attribute and on any architecture that does not support named
5117 sections.
5118
5119 @item -freorder-functions
5120 @opindex freorder-functions
5121 Reorder functions in the object file in order to
5122 improve code locality.  This is implemented by using special
5123 subsections @code{.text.hot} for most frequently executed functions and
5124 @code{.text.unlikely} for unlikely executed functions.  Reordering is done by
5125 the linker so object file format must support named sections and linker must
5126 place them in a reasonable way.
5127
5128 Also profile feedback must be available in to make this option effective.  See
5129 @option{-fprofile-arcs} for details.
5130
5131 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5132
5133 @item -fstrict-aliasing
5134 @opindex fstrict-aliasing
5135 Allows the compiler to assume the strictest aliasing rules applicable to
5136 the language being compiled.  For C (and C++), this activates
5137 optimizations based on the type of expressions.  In particular, an
5138 object of one type is assumed never to reside at the same address as an
5139 object of a different type, unless the types are almost the same.  For
5140 example, an @code{unsigned int} can alias an @code{int}, but not a
5141 @code{void*} or a @code{double}.  A character type may alias any other
5142 type.
5143
5144 Pay special attention to code like this:
5145 @smallexample
5146 union a_union @{
5147   int i;
5148   double d;
5149 @};
5150
5151 int f() @{
5152   a_union t;
5153   t.d = 3.0;
5154   return t.i;
5155 @}
5156 @end smallexample
5157 The practice of reading from a different union member than the one most
5158 recently written to (called ``type-punning'') is common.  Even with
5159 @option{-fstrict-aliasing}, type-punning is allowed, provided the memory
5160 is accessed through the union type.  So, the code above will work as
5161 expected.  However, this code might not:
5162 @smallexample
5163 int f() @{
5164   a_union t;
5165   int* ip;
5166   t.d = 3.0;
5167   ip = &t.i;
5168   return *ip;
5169 @}
5170 @end smallexample
5171
5172 Every language that wishes to perform language-specific alias analysis
5173 should define a function that computes, given an @code{tree}
5174 node, an alias set for the node.  Nodes in different alias sets are not
5175 allowed to alias.  For an example, see the C front-end function
5176 @code{c_get_alias_set}.
5177
5178 Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5179
5180 @item -falign-functions
5181 @itemx -falign-functions=@var{n}
5182 @opindex falign-functions
5183 Align the start of functions to the next power-of-two greater than
5184 @var{n}, skipping up to @var{n} bytes.  For instance,
5185 @option{-falign-functions=32} aligns functions to the next 32-byte
5186 boundary, but @option{-falign-functions=24} would align to the next
5187 32-byte boundary only if this can be done by skipping 23 bytes or less.
5188
5189 @option{-fno-align-functions} and @option{-falign-functions=1} are
5190 equivalent and mean that functions will not be aligned.
5191
5192 Some assemblers only support this flag when @var{n} is a power of two;
5193 in that case, it is rounded up.
5194
5195 If @var{n} is not specified or is zero, use a machine-dependent default.
5196
5197 Enabled at levels @option{-O2}, @option{-O3}.
5198
5199 @item -falign-labels
5200 @itemx -falign-labels=@var{n}
5201 @opindex falign-labels
5202 Align all branch targets to a power-of-two boundary, skipping up to
5203 @var{n} bytes like @option{-falign-functions}.  This option can easily
5204 make code slower, because it must insert dummy operations for when the
5205 branch target is reached in the usual flow of the code.
5206
5207 @option{-fno-align-labels} and @option{-falign-labels=1} are
5208 equivalent and mean that labels will not be aligned.
5209
5210 If @option{-falign-loops} or @option{-falign-jumps} are applicable and
5211 are greater than this value, then their values are used instead.
5212
5213 If @var{n} is not specified or is zero, use a machine-dependent default
5214 which is very likely to be @samp{1}, meaning no alignment.
5215
5216 Enabled at levels @option{-O2}, @option{-O3}.
5217
5218 @item -falign-loops
5219 @itemx -falign-loops=@var{n}
5220 @opindex falign-loops
5221 Align loops to a power-of-two boundary, skipping up to @var{n} bytes
5222 like @option{-falign-functions}.  The hope is that the loop will be
5223 executed many times, which will make up for any execution of the dummy
5224 operations.
5225
5226 @option{-fno-align-loops} and @option{-falign-loops=1} are
5227 equivalent and mean that loops will not be aligned.
5228
5229 If @var{n} is not specified or is zero, use a machine-dependent default.
5230
5231 Enabled at levels @option{-O2}, @option{-O3}.
5232
5233 @item -falign-jumps
5234 @itemx -falign-jumps=@var{n}
5235 @opindex falign-jumps
5236 Align branch targets to a power-of-two boundary, for branch targets
5237 where the targets can only be reached by jumping, skipping up to @var{n}
5238 bytes like @option{-falign-functions}.  In this case, no dummy operations
5239 need be executed.
5240
5241 @option{-fno-align-jumps} and @option{-falign-jumps=1} are
5242 equivalent and mean that loops will not be aligned.
5243
5244 If @var{n} is not specified or is zero, use a machine-dependent default.
5245
5246 Enabled at levels @option{-O2}, @option{-O3}.
5247
5248 @item -funit-at-a-time
5249 @opindex funit-at-a-time
5250 Parse the whole compilation unit before starting to produce code.
5251 This allows some extra optimizations to take place but consumes
5252 more memory (in general).  There are some compatibility issues
5253 with @emph{unit-at-at-time} mode:
5254 @itemize @bullet
5255 @item
5256 enabling @emph{unit-at-a-time} mode may change the order
5257 in which functions, variables, and top-level @code{asm} statements
5258 are emitted, and will likely break code relying on some particular
5259 ordering.  The majority of such top-level @code{asm} statements,
5260 though, can be replaced by @code{section} attributes.
5261
5262 @item
5263 @emph{unit-at-a-time} mode removes unreferenced static variables
5264 and functions.  This may result in undefined references
5265 when an @code{asm} statement refers directly to variables or functions
5266 that are otherwise unused.  In that case either the variable/function
5267 shall be listed as an operand of the @code{asm} statement operand or,
5268 in the case of top-level @code{asm} statements the attribute @code{used}
5269 shall be used on the declaration.
5270
5271 @item
5272 Static functions now can use non-standard passing conventions that
5273 may break @code{asm} statements calling functions directly.  Again,
5274 attribute @code{used} will prevent this behavior.
5275 @end itemize
5276
5277 As a temporary workaround, @option{-fno-unit-at-a-time} can be used,
5278 but this scheme may not be supported by future releases of GCC@.
5279
5280 Enabled at levels @option{-O2}, @option{-O3}.
5281
5282 @item -fweb
5283 @opindex fweb
5284 Constructs webs as commonly used for register allocation purposes and assign
5285 each web individual pseudo register.  This allows the register allocation pass
5286 to operate on pseudos directly, but also strengthens several other optimization
5287 passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
5288 however, make debugging impossible, since variables will no longer stay in a
5289 ``home register''.
5290
5291 Enabled by default with @option{-funroll-loops}.
5292
5293 @item -fwhole-program
5294 @opindex fwhole-program
5295 Assume that the current compilation unit represents whole program being
5296 compiled.  All public functions and variables with the exception of @code{main}
5297 and those merged by attribute @code{externally_visible} become static functions
5298 and in a affect gets more aggressively optimized by interprocedural optimizers.
5299 While this option is equivalent to proper use of @code{static} keyword for
5300 programs consisting of single file, in combination with option
5301 @option{--combine} this flag can be used to compile most of smaller scale C
5302 programs since the functions and variables become local for the whole combined
5303 compilation unit, not for the single source file itself.
5304
5305
5306 @item -fno-cprop-registers
5307 @opindex fno-cprop-registers
5308 After register allocation and post-register allocation instruction splitting,
5309 we perform a copy-propagation pass to try to reduce scheduling dependencies
5310 and occasionally eliminate the copy.
5311
5312 Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5313
5314 @item -fprofile-generate
5315 @opindex fprofile-generate
5316
5317 Enable options usually used for instrumenting application to produce
5318 profile useful for later recompilation with profile feedback based
5319 optimization.  You must use @option{-fprofile-generate} both when
5320 compiling and when linking your program.
5321
5322 The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
5323
5324 @item -fprofile-use
5325 @opindex fprofile-use
5326 Enable profile feedback directed optimizations, and optimizations
5327 generally profitable only with profile feedback available.
5328
5329 The following options are enabled: @code{-fbranch-probabilities},
5330 @code{-fvpt}, @code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}.
5331
5332 @end table
5333
5334 The following options control compiler behavior regarding floating
5335 point arithmetic.  These options trade off between speed and
5336 correctness.  All must be specifically enabled.
5337
5338 @table @gcctabopt
5339 @item -ffloat-store
5340 @opindex ffloat-store
5341 Do not store floating point variables in registers, and inhibit other
5342 options that might change whether a floating point value is taken from a
5343 register or memory.
5344
5345 @cindex floating point precision
5346 This option prevents undesirable excess precision on machines such as
5347 the 68000 where the floating registers (of the 68881) keep more
5348 precision than a @code{double} is supposed to have.  Similarly for the
5349 x86 architecture.  For most programs, the excess precision does only
5350 good, but a few programs rely on the precise definition of IEEE floating
5351 point.  Use @option{-ffloat-store} for such programs, after modifying
5352 them to store all pertinent intermediate computations into variables.
5353
5354 @item -ffast-math
5355 @opindex ffast-math
5356 Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
5357 @option{-fno-trapping-math}, @option{-ffinite-math-only},
5358 @option{-fno-rounding-math}, @option{-fno-signaling-nans}
5359 and @option{fcx-limited-range}.
5360
5361 This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
5362
5363 This option should never be turned on by any @option{-O} option since
5364 it can result in incorrect output for programs which depend on
5365 an exact implementation of IEEE or ISO rules/specifications for
5366 math functions.
5367
5368 @item -fno-math-errno
5369 @opindex fno-math-errno
5370 Do not set ERRNO after calling math functions that are executed
5371 with a single instruction, e.g., sqrt.  A program that relies on
5372 IEEE exceptions for math error handling may want to use this flag
5373 for speed while maintaining IEEE arithmetic compatibility.
5374
5375 This option should never be turned on by any @option{-O} option since
5376 it can result in incorrect output for programs which depend on
5377 an exact implementation of IEEE or ISO rules/specifications for
5378 math functions.
5379
5380 The default is @option{-fmath-errno}.
5381
5382 On Darwin systems, the math library never sets @code{errno}.  There is therefore
5383 no reason for the compiler to consider the possibility that it might,
5384 and @option{-fno-math-errno} is the default.
5385
5386 @item -funsafe-math-optimizations
5387 @opindex funsafe-math-optimizations
5388 Allow optimizations for floating-point arithmetic that (a) assume
5389 that arguments and results are valid and (b) may violate IEEE or
5390 ANSI standards.  When used at link-time, it may include libraries
5391 or startup files that change the default FPU control word or other
5392 similar optimizations.
5393
5394 This option should never be turned on by any @option{-O} option since
5395 it can result in incorrect output for programs which depend on
5396 an exact implementation of IEEE or ISO rules/specifications for
5397 math functions.
5398
5399 The default is @option{-fno-unsafe-math-optimizations}.
5400
5401 @item -ffinite-math-only
5402 @opindex ffinite-math-only
5403 Allow optimizations for floating-point arithmetic that assume
5404 that arguments and results are not NaNs or +-Infs.
5405
5406 This option should never be turned on by any @option{-O} option since
5407 it can result in incorrect output for programs which depend on
5408 an exact implementation of IEEE or ISO rules/specifications.
5409
5410 The default is @option{-fno-finite-math-only}.
5411
5412 @item -fno-trapping-math
5413 @opindex fno-trapping-math
5414 Compile code assuming that floating-point operations cannot generate
5415 user-visible traps.  These traps include division by zero, overflow,
5416 underflow, inexact result and invalid operation.  This option implies
5417 @option{-fno-signaling-nans}.  Setting this option may allow faster
5418 code if one relies on ``non-stop'' IEEE arithmetic, for example.
5419
5420 This option should never be turned on by any @option{-O} option since
5421 it can result in incorrect output for programs which depend on
5422 an exact implementation of IEEE or ISO rules/specifications for
5423 math functions.
5424
5425 The default is @option{-ftrapping-math}.
5426
5427 @item -frounding-math
5428 @opindex frounding-math
5429 Disable transformations and optimizations that assume default floating
5430 point rounding behavior.  This is round-to-zero for all floating point
5431 to integer conversions, and round-to-nearest for all other arithmetic
5432 truncations.  This option should be specified for programs that change
5433 the FP rounding mode dynamically, or that may be executed with a
5434 non-default rounding mode.  This option disables constant folding of
5435 floating point expressions at compile-time (which may be affected by
5436 rounding mode) and arithmetic transformations that are unsafe in the
5437 presence of sign-dependent rounding modes.
5438
5439 The default is @option{-fno-rounding-math}.
5440
5441 This option is experimental and does not currently guarantee to
5442 disable all GCC optimizations that are affected by rounding mode.
5443 Future versions of GCC may provide finer control of this setting
5444 using C99's @code{FENV_ACCESS} pragma.  This command line option
5445 will be used to specify the default state for @code{FENV_ACCESS}.
5446
5447 @item -fsignaling-nans
5448 @opindex fsignaling-nans
5449 Compile code assuming that IEEE signaling NaNs may generate user-visible
5450 traps during floating-point operations.  Setting this option disables
5451 optimizations that may change the number of exceptions visible with
5452 signaling NaNs.  This option implies @option{-ftrapping-math}.
5453
5454 This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
5455 be defined.
5456
5457 The default is @option{-fno-signaling-nans}.
5458
5459 This option is experimental and does not currently guarantee to
5460 disable all GCC optimizations that affect signaling NaN behavior.
5461
5462 @item -fsingle-precision-constant
5463 @opindex fsingle-precision-constant
5464 Treat floating point constant as single precision constant instead of
5465 implicitly converting it to double precision constant.
5466
5467 @item -fcx-limited-range
5468 @itemx -fno-cx-limited-range
5469 @opindex fcx-limited-range
5470 @opindex fno-cx-limited-range
5471 When enabled, this option states that a range reduction step is not
5472 needed when performing complex division.  The default is
5473 @option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.
5474
5475 This option controls the default setting of the ISO C99 
5476 @code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
5477 all languages.
5478
5479 @end table
5480
5481 The following options control optimizations that may improve
5482 performance, but are not enabled by any @option{-O} options.  This
5483 section includes experimental options that may produce broken code.
5484
5485 @table @gcctabopt
5486 @item -fbranch-probabilities
5487 @opindex fbranch-probabilities
5488 After running a program compiled with @option{-fprofile-arcs}
5489 (@pxref{Debugging Options,, Options for Debugging Your Program or
5490 @command{gcc}}), you can compile it a second time using
5491 @option{-fbranch-probabilities}, to improve optimizations based on
5492 the number of times each branch was taken.  When the program
5493 compiled with @option{-fprofile-arcs} exits it saves arc execution
5494 counts to a file called @file{@var{sourcename}.gcda} for each source
5495 file  The information in this data file is very dependent on the
5496 structure of the generated code, so you must use the same source code
5497 and the same optimization options for both compilations.
5498
5499 With @option{-fbranch-probabilities}, GCC puts a
5500 @samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
5501 These can be used to improve optimization.  Currently, they are only
5502 used in one place: in @file{reorg.c}, instead of guessing which path a
5503 branch is mostly to take, the @samp{REG_BR_PROB} values are used to
5504 exactly determine which path is taken more often.
5505
5506 @item -fprofile-values
5507 @opindex fprofile-values
5508 If combined with @option{-fprofile-arcs}, it adds code so that some
5509 data about values of expressions in the program is gathered.
5510
5511 With @option{-fbranch-probabilities}, it reads back the data gathered
5512 from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
5513 notes to instructions for their later usage in optimizations.
5514
5515 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
5516
5517 @item -fvpt
5518 @opindex fvpt
5519 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
5520 a code to gather information about values of expressions.
5521
5522 With @option{-fbranch-probabilities}, it reads back the data gathered
5523 and actually performs the optimizations based on them.
5524 Currently the optimizations include specialization of division operation
5525 using the knowledge about the value of the denominator.
5526
5527 @item -fspeculative-prefetching
5528 @opindex fspeculative-prefetching
5529 If combined with @option{-fprofile-arcs}, it instructs the compiler to add
5530 a code to gather information about addresses of memory references in the
5531 program.
5532
5533 With @option{-fbranch-probabilities}, it reads back the data gathered
5534 and issues prefetch instructions according to them.  In addition to the opportunities
5535 noticed by @option{-fprefetch-loop-arrays}, it also notices more complicated
5536 memory access patterns---for example accesses to the data stored in linked
5537 list whose elements are usually allocated sequentially.
5538
5539 In order to prevent issuing double prefetches, usage of
5540 @option{-fspeculative-prefetching} implies @option{-fno-prefetch-loop-arrays}.
5541
5542 Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
5543
5544 @item -frename-registers
5545 @opindex frename-registers
5546 Attempt to avoid false dependencies in scheduled code by making use
5547 of registers left over after register allocation.  This optimization
5548 will most benefit processors with lots of registers.  Depending on the
5549 debug information format adopted by the target, however, it can
5550 make debugging impossible, since variables will no longer stay in
5551 a ``home register''.
5552
5553 Enabled by default with @option{-funroll-loops}.
5554
5555 @item -ftracer
5556 @opindex ftracer
5557 Perform tail duplication to enlarge superblock size.  This transformation
5558 simplifies the control flow of the function allowing other optimizations to do
5559 better job.
5560
5561 Enabled with @option{-fprofile-use}.
5562
5563 @item -funroll-loops
5564 @opindex funroll-loops
5565 Unroll loops whose number of iterations can be determined at compile time or
5566 upon entry to the loop.  @option{-funroll-loops} implies
5567 @option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}. 
5568 It also turns on complete loop peeling (i.e.@: complete removal of loops with
5569 small constant number of iterations).  This option makes code larger, and may
5570 or may not make it run faster.
5571
5572 Enabled with @option{-fprofile-use}.
5573
5574 @item -funroll-all-loops
5575 @opindex funroll-all-loops
5576 Unroll all loops, even if their number of iterations is uncertain when
5577 the loop is entered.  This usually makes programs run more slowly.
5578 @option{-funroll-all-loops} implies the same options as
5579 @option{-funroll-loops}.
5580
5581 @item -fpeel-loops
5582 @opindex fpeel-loops
5583 Peels the loops for that there is enough information that they do not
5584 roll much (from profile feedback).  It also turns on complete loop peeling
5585 (i.e.@: complete removal of loops with small constant number of iterations).
5586
5587 Enabled with @option{-fprofile-use}.
5588
5589 @item -fmove-loop-invariants
5590 @opindex fmove-loop-invariants
5591 Enables the loop invariant motion pass in the new loop optimizer.  Enabled
5592 at level @option{-O1}
5593
5594 @item -funswitch-loops
5595 @opindex funswitch-loops
5596 Move branches with loop invariant conditions out of the loop, with duplicates
5597 of the loop on both branches (modified according to result of the condition).
5598
5599 @item -fprefetch-loop-arrays
5600 @opindex fprefetch-loop-arrays
5601 If supported by the target machine, generate instructions to prefetch
5602 memory to improve the performance of loops that access large arrays.
5603
5604 Disabled at level @option{-Os}.
5605
5606 @item -ffunction-sections
5607 @itemx -fdata-sections
5608 @opindex ffunction-sections
5609 @opindex fdata-sections
5610 Place each function or data item into its own section in the output
5611 file if the target supports arbitrary sections.  The name of the
5612 function or the name of the data item determines the section's name
5613 in the output file.
5614
5615 Use these options on systems where the linker can perform optimizations
5616 to improve locality of reference in the instruction space.  Most systems
5617 using the ELF object format and SPARC processors running Solaris 2 have
5618 linkers with such optimizations.  AIX may have these optimizations in
5619 the future.
5620
5621 Only use these options when there are significant benefits from doing
5622 so.  When you specify these options, the assembler and linker will
5623 create larger object and executable files and will also be slower.
5624 You will not be able to use @code{gprof} on all systems if you
5625 specify this option and you may have problems with debugging if
5626 you specify both this option and @option{-g}.
5627
5628 @item -fbranch-target-load-optimize
5629 @opindex fbranch-target-load-optimize
5630 Perform branch target register load optimization before prologue / epilogue
5631 threading.
5632 The use of target registers can typically be exposed only during reload,
5633 thus hoisting loads out of loops and doing inter-block scheduling needs
5634 a separate optimization pass.
5635
5636 @item -fbranch-target-load-optimize2
5637 @opindex fbranch-target-load-optimize2
5638 Perform branch target register load optimization after prologue / epilogue
5639 threading.
5640
5641 @item -fbtr-bb-exclusive
5642 @opindex fbtr-bb-exclusive
5643 When performing branch target register load optimization, don't reuse
5644 branch target registers in within any basic block.
5645
5646 @item --param @var{name}=@var{value}
5647 @opindex param
5648 In some places, GCC uses various constants to control the amount of
5649 optimization that is done.  For example, GCC will not inline functions
5650 that contain more that a certain number of instructions.  You can
5651 control some of these constants on the command-line using the
5652 @option{--param} option.
5653
5654 The names of specific parameters, and the meaning of the values, are
5655 tied to the internals of the compiler, and are subject to change
5656 without notice in future releases.
5657
5658 In each case, the @var{value} is an integer.  The allowable choices for
5659 @var{name} are given in the following table:
5660
5661 @table @gcctabopt
5662 @item salias-max-implicit-fields
5663 The maximum number of fields in a variable without direct
5664 structure accesses for which structure aliasing will consider trying 
5665 to track each field.  The default is 5
5666
5667 @item sra-max-structure-size
5668 The maximum structure size, in bytes, at which the scalar replacement
5669 of aggregates (SRA) optimization will perform block copies.  The
5670 default value, 0, implies that GCC will select the most appropriate
5671 size itself.
5672
5673 @item sra-field-structure-ratio
5674 The threshold ratio (as a percentage) between instantiated fields and
5675 the complete structure size.  We say that if the ratio of the number
5676 of bytes in instantiated fields to the number of bytes in the complete
5677 structure exceeds this parameter, then block copies are not used.  The
5678 default is 75.
5679
5680 @item max-crossjump-edges
5681 The maximum number of incoming edges to consider for crossjumping.
5682 The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
5683 the number of edges incoming to each block.  Increasing values mean
5684 more aggressive optimization, making the compile time increase with
5685 probably small improvement in executable size.
5686
5687 @item min-crossjump-insns
5688 The minimum number of instructions which must be matched at the end
5689 of two blocks before crossjumping will be performed on them.  This
5690 value is ignored in the case where all instructions in the block being
5691 crossjumped from are matched.  The default value is 5.
5692
5693 @item max-goto-duplication-insns
5694 The maximum number of instructions to duplicate to a block that jumps
5695 to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
5696 passes, GCC factors computed gotos early in the compilation process,
5697 and unfactors them as late as possible.  Only computed jumps at the
5698 end of a basic blocks with no more than max-goto-duplication-insns are
5699 unfactored.  The default value is 8.
5700
5701 @item max-delay-slot-insn-search
5702 The maximum number of instructions to consider when looking for an
5703 instruction to fill a delay slot.  If more than this arbitrary number of
5704 instructions is searched, the time savings from filling the delay slot
5705 will be minimal so stop searching.  Increasing values mean more
5706 aggressive optimization, making the compile time increase with probably
5707 small improvement in executable run time.
5708
5709 @item max-delay-slot-live-search
5710 When trying to fill delay slots, the maximum number of instructions to
5711 consider when searching for a block with valid live register
5712 information.  Increasing this arbitrarily chosen value means more
5713 aggressive optimization, increasing the compile time.  This parameter
5714 should be removed when the delay slot code is rewritten to maintain the
5715 control-flow graph.
5716
5717 @item max-gcse-memory
5718 The approximate maximum amount of memory that will be allocated in
5719 order to perform the global common subexpression elimination
5720 optimization.  If more memory than specified is required, the
5721 optimization will not be done.
5722
5723 @item max-gcse-passes
5724 The maximum number of passes of GCSE to run.  The default is 1.
5725
5726 @item max-pending-list-length
5727 The maximum number of pending dependencies scheduling will allow
5728 before flushing the current state and starting over.  Large functions
5729 with few branches or calls can create excessively large lists which
5730 needlessly consume memory and resources.
5731
5732 @item max-inline-insns-single
5733 Several parameters control the tree inliner used in gcc.
5734 This number sets the maximum number of instructions (counted in GCC's
5735 internal representation) in a single function that the tree inliner
5736 will consider for inlining.  This only affects functions declared
5737 inline and methods implemented in a class declaration (C++).
5738 The default value is 450.
5739
5740 @item max-inline-insns-auto
5741 When you use @option{-finline-functions} (included in @option{-O3}),
5742 a lot of functions that would otherwise not be considered for inlining
5743 by the compiler will be investigated.  To those functions, a different
5744 (more restrictive) limit compared to functions declared inline can
5745 be applied.
5746 The default value is 90.
5747
5748 @item large-function-insns
5749 The limit specifying really large functions.  For functions larger than this
5750 limit after inlining inlining is constrained by
5751 @option{--param large-function-growth}.  This parameter is useful primarily
5752 to avoid extreme compilation time caused by non-linear algorithms used by the
5753 backend.
5754 This parameter is ignored when @option{-funit-at-a-time} is not used.
5755 The default value is 2700.
5756
5757 @item large-function-growth
5758 Specifies maximal growth of large function caused by inlining in percents.
5759 This parameter is ignored when @option{-funit-at-a-time} is not used.
5760 The default value is 100 which limits large function growth to 2.0 times
5761 the original size.
5762
5763 @item inline-unit-growth
5764 Specifies maximal overall growth of the compilation unit caused by inlining.
5765 This parameter is ignored when @option{-funit-at-a-time} is not used.
5766 The default value is 50 which limits unit growth to 1.5 times the original
5767 size.
5768
5769 @item max-inline-insns-recursive
5770 @itemx max-inline-insns-recursive-auto
5771 Specifies maximum number of instructions out-of-line copy of self recursive inline
5772 function can grow into by performing recursive inlining.
5773
5774 For functions declared inline @option{--param max-inline-insns-recursive} is
5775 taken into acount.  For function not declared inline, recursive inlining
5776 happens only when @option{-finline-functions} (included in @option{-O3}) is
5777 enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
5778 default value is 450.
5779
5780 @item max-inline-recursive-depth
5781 @itemx max-inline-recursive-depth-auto
5782 Specifies maximum recursion depth used by the recursive inlining.
5783
5784 For functions declared inline @option{--param max-inline-recursive-depth} is
5785 taken into acount.  For function not declared inline, recursive inlining
5786 happens only when @option{-finline-functions} (included in @option{-O3}) is
5787 enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
5788 default value is 450.
5789
5790 @item inline-call-cost
5791 Specify cost of call instruction relative to simple arithmetics operations
5792 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
5793 functions and at the same time increases size of leaf function that is believed to
5794 reduce function size by being inlined.  In effect it increases amount of
5795 inlining for code having large abstraction penalty (many functions that just
5796 pass the arguments to other functions) and decrease inlining for code with low
5797 abstraction penalty.  The default value is 16.
5798
5799 @item max-unrolled-insns
5800 The maximum number of instructions that a loop should have if that loop
5801 is unrolled, and if the loop is unrolled, it determines how many times
5802 the loop code is unrolled.
5803
5804 @item max-average-unrolled-insns
5805 The maximum number of instructions biased by probabilities of their execution
5806 that a loop should have if that loop is unrolled, and if the loop is unrolled,
5807 it determines how many times the loop code is unrolled.
5808
5809 @item max-unroll-times
5810 The maximum number of unrollings of a single loop.
5811
5812 @item max-peeled-insns
5813 The maximum number of instructions that a loop should have if that loop
5814 is peeled, and if the loop is peeled, it determines how many times
5815 the loop code is peeled.
5816
5817 @item max-peel-times
5818 The maximum number of peelings of a single loop.
5819
5820 @item max-completely-peeled-insns
5821 The maximum number of insns of a completely peeled loop.
5822
5823 @item max-completely-peel-times
5824 The maximum number of iterations of a loop to be suitable for complete peeling.
5825
5826 @item max-unswitch-insns
5827 The maximum number of insns of an unswitched loop.
5828
5829 @item max-unswitch-level
5830 The maximum number of branches unswitched in a single loop.
5831
5832 @item lim-expensive
5833 The minimum cost of an expensive expression in the loop invariant motion.
5834
5835 @item iv-consider-all-candidates-bound
5836 Bound on number of candidates for induction variables below that
5837 all candidates are considered for each use in induction variable
5838 optimizations.  Only the most relevant candidates are considered
5839 if there are more candidates, to avoid quadratic time complexity.
5840
5841 @item iv-max-considered-uses
5842 The induction variable optimizations give up on loops that contain more
5843 induction variable uses.
5844
5845 @item iv-always-prune-cand-set-bound
5846 If number of candidates in the set is smaller than this value,
5847 we always try to remove unnecessary ivs from the set during its
5848 optimization when a new iv is added to the set.
5849
5850 @item scev-max-expr-size
5851 Bound on size of expressions used in the scalar evolutions analyzer.
5852 Large expressions slow the analyzer.
5853
5854 @item max-iterations-to-track
5855
5856 The maximum number of iterations of a loop the brute force algorithm
5857 for analysis of # of iterations of the loop tries to evaluate.
5858
5859 @item hot-bb-count-fraction
5860 Select fraction of the maximal count of repetitions of basic block in program
5861 given basic block needs to have to be considered hot.
5862
5863 @item hot-bb-frequency-fraction
5864 Select fraction of the maximal frequency of executions of basic block in
5865 function given basic block needs to have to be considered hot
5866
5867 @item tracer-dynamic-coverage
5868 @itemx tracer-dynamic-coverage-feedback
5869
5870 This value is used to limit superblock formation once the given percentage of
5871 executed instructions is covered.  This limits unnecessary code size
5872 expansion.
5873
5874 The @option{tracer-dynamic-coverage-feedback} is used only when profile
5875 feedback is available.  The real profiles (as opposed to statically estimated
5876 ones) are much less balanced allowing the threshold to be larger value.
5877
5878 @item tracer-max-code-growth
5879 Stop tail duplication once code growth has reached given percentage.  This is
5880 rather hokey argument, as most of the duplicates will be eliminated later in
5881 cross jumping, so it may be set to much higher values than is the desired code
5882 growth.
5883
5884 @item tracer-min-branch-ratio
5885
5886 Stop reverse growth when the reverse probability of best edge is less than this
5887 threshold (in percent).
5888
5889 @item tracer-min-branch-ratio
5890 @itemx tracer-min-branch-ratio-feedback
5891
5892 Stop forward growth if the best edge do have probability lower than this
5893 threshold.
5894
5895 Similarly to @option{tracer-dynamic-coverage} two values are present, one for
5896 compilation for profile feedback and one for compilation without.  The value
5897 for compilation with profile feedback needs to be more conservative (higher) in
5898 order to make tracer effective.
5899
5900 @item max-cse-path-length
5901
5902 Maximum number of basic blocks on path that cse considers.  The default is 10.
5903
5904 @item global-var-threshold
5905
5906 Counts the number of function calls (@var{n}) and the number of
5907 call-clobbered variables (@var{v}).  If @var{n}x@var{v} is larger than this limit, a
5908 single artificial variable will be created to represent all the
5909 call-clobbered variables at function call sites.  This artificial
5910 variable will then be made to alias every call-clobbered variable.
5911 (done as @code{int * size_t} on the host machine; beware overflow).
5912
5913 @item max-aliased-vops
5914
5915 Maximum number of virtual operands allowed to represent aliases
5916 before triggering the alias grouping heuristic.  Alias grouping
5917 reduces compile times and memory consumption needed for aliasing at
5918 the expense of precision loss in alias information.
5919
5920 @item ggc-min-expand
5921
5922 GCC uses a garbage collector to manage its own memory allocation.  This
5923 parameter specifies the minimum percentage by which the garbage
5924 collector's heap should be allowed to expand between collections.
5925 Tuning this may improve compilation speed; it has no effect on code
5926 generation.
5927
5928 The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
5929 RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
5930 the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
5931 GCC is not able to calculate RAM on a particular platform, the lower
5932 bound of 30% is used.  Setting this parameter and
5933 @option{ggc-min-heapsize} to zero causes a full collection to occur at
5934 every opportunity.  This is extremely slow, but can be useful for
5935 debugging.
5936
5937 @item ggc-min-heapsize
5938
5939 Minimum size of the garbage collector's heap before it begins bothering
5940 to collect garbage.  The first collection occurs after the heap expands
5941 by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
5942 tuning this may improve compilation speed, and has no effect on code
5943 generation.
5944
5945 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
5946 tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
5947 with a lower bound of 4096 (four megabytes) and an upper bound of
5948 131072 (128 megabytes).  If GCC is not able to calculate RAM on a
5949 particular platform, the lower bound is used.  Setting this parameter
5950 very large effectively disables garbage collection.  Setting this
5951 parameter and @option{ggc-min-expand} to zero causes a full collection
5952 to occur at every opportunity.
5953
5954 @item max-reload-search-insns
5955 The maximum number of instruction reload should look backward for equivalent
5956 register.  Increasing values mean more aggressive optimization, making the
5957 compile time increase with probably slightly better performance.  The default
5958 value is 100.
5959
5960 @item max-cselib-memory-location
5961 The maximum number of memory locations cselib should take into acount.
5962 Increasing values mean more aggressive optimization, making the compile time
5963 increase with probably slightly better performance.  The default value is 500.
5964
5965 @item reorder-blocks-duplicate
5966 @itemx reorder-blocks-duplicate-feedback
5967
5968 Used by basic block reordering pass to decide whether to use unconditional
5969 branch or duplicate the code on its destination.  Code is duplicated when its
5970 estimated size is smaller than this value multiplied by the estimated size of
5971 unconditional jump in the hot spots of the program.
5972
5973 The @option{reorder-block-duplicate-feedback} is used only when profile
5974 feedback is available and may be set to higher values than
5975 @option{reorder-block-duplicate} since information about the hot spots is more
5976 accurate.
5977
5978 @item max-sched-region-blocks
5979 The maximum number of blocks in a region to be considered for
5980 interblock scheduling.  The default value is 10.
5981
5982 @item max-sched-region-insns
5983 The maximum number of insns in a region to be considered for
5984 interblock scheduling.  The default value is 100.
5985
5986 @item max-last-value-rtl
5987
5988 The maximum size measured as number of RTLs that can be recorded in an expression
5989 in combiner for a pseudo register as last known value of that register.  The default
5990 is 10000.
5991
5992 @item integer-share-limit
5993 Small integer constants can use a shared data structure, reducing the
5994 compiler's memory usage and increasing its speed.  This sets the maximum
5995 value of a shared integer constant's.  The default value is 256.
5996
5997 @item min-virtual-mappings
5998 Specifies the minimum number of virtual mappings in the incremental
5999 SSA updater that should be registered to trigger the virtual mappings
6000 heuristic defined by virtual-mappings-ratio.  The default value is
6001 100.
6002
6003 @item virtual-mappings-ratio
6004 If the number of virtual mappings is virtual-mappings-ratio bigger
6005 than the number of virtual symbols to be updated, then the incremental
6006 SSA updater switches to a full update for those symbols.  The default
6007 ratio is 3.
6008
6009 @end table
6010 @end table
6011
6012 @node Preprocessor Options
6013 @section Options Controlling the Preprocessor
6014 @cindex preprocessor options
6015 @cindex options, preprocessor
6016
6017 These options control the C preprocessor, which is run on each C source
6018 file before actual compilation.
6019
6020 If you use the @option{-E} option, nothing is done except preprocessing.
6021 Some of these options make sense only together with @option{-E} because
6022 they cause the preprocessor output to be unsuitable for actual
6023 compilation.
6024
6025 @table @gcctabopt
6026 @opindex Wp
6027 You can use @option{-Wp,@var{option}} to bypass the compiler driver
6028 and pass @var{option} directly through to the preprocessor.  If
6029 @var{option} contains commas, it is split into multiple options at the
6030 commas.  However, many options are modified, translated or interpreted
6031 by the compiler driver before being passed to the preprocessor, and
6032 @option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
6033 interface is undocumented and subject to change, so whenever possible
6034 you should avoid using @option{-Wp} and let the driver handle the
6035 options instead.
6036
6037 @item -Xpreprocessor @var{option}
6038 @opindex preprocessor
6039 Pass @var{option} as an option to the preprocessor.  You can use this to
6040 supply system-specific preprocessor options which GCC does not know how to
6041 recognize.
6042
6043 If you want to pass an option that takes an argument, you must use
6044 @option{-Xpreprocessor} twice, once for the option and once for the argument.
6045 @end table
6046
6047 @include cppopts.texi
6048
6049 @node Assembler Options
6050 @section Passing Options to the Assembler
6051
6052 @c prevent bad page break with this line
6053 You can pass options to the assembler.
6054
6055 @table @gcctabopt
6056 @item -Wa,@var{option}
6057 @opindex Wa
6058 Pass @var{option} as an option to the assembler.  If @var{option}
6059 contains commas, it is split into multiple options at the commas.
6060
6061 @item -Xassembler @var{option}
6062 @opindex Xassembler
6063 Pass @var{option} as an option to the assembler.  You can use this to
6064 supply system-specific assembler options which GCC does not know how to
6065 recognize.
6066
6067 If you want to pass an option that takes an argument, you must use
6068 @option{-Xassembler} twice, once for the option and once for the argument.
6069
6070 @end table
6071
6072 @node Link Options
6073 @section Options for Linking
6074 @cindex link options
6075 @cindex options, linking
6076
6077 These options come into play when the compiler links object files into
6078 an executable output file.  They are meaningless if the compiler is
6079 not doing a link step.
6080
6081 @table @gcctabopt
6082 @cindex file names
6083 @item @var{object-file-name}
6084 A file name that does not end in a special recognized suffix is
6085 considered to name an object file or library.  (Object files are
6086 distinguished from libraries by the linker according to the file
6087 contents.)  If linking is done, these object files are used as input
6088 to the linker.
6089
6090 @item -c
6091 @itemx -S
6092 @itemx -E
6093 @opindex c
6094 @opindex S
6095 @opindex E
6096 If any of these options is used, then the linker is not run, and
6097 object file names should not be used as arguments.  @xref{Overall
6098 Options}.
6099
6100 @cindex Libraries
6101 @item -l@var{library}
6102 @itemx -l @var{library}
6103 @opindex l
6104 Search the library named @var{library} when linking.  (The second
6105 alternative with the library as a separate argument is only for
6106 POSIX compliance and is not recommended.)
6107
6108 It makes a difference where in the command you write this option; the
6109 linker searches and processes libraries and object files in the order they
6110 are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
6111 after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
6112 to functions in @samp{z}, those functions may not be loaded.
6113
6114 The linker searches a standard list of directories for the library,
6115 which is actually a file named @file{lib@var{library}.a}.  The linker
6116 then uses this file as if it had been specified precisely by name.
6117
6118 The directories searched include several standard system directories
6119 plus any that you specify with @option{-L}.
6120
6121 Normally the files found this way are library files---archive files
6122 whose members are object files.  The linker handles an archive file by
6123 scanning through it for members which define symbols that have so far
6124 been referenced but not defined.  But if the file that is found is an
6125 ordinary object file, it is linked in the usual fashion.  The only
6126 difference between using an @option{-l} option and specifying a file name
6127 is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
6128 and searches several directories.
6129
6130 @item -lobjc
6131 @opindex lobjc
6132 You need this special case of the @option{-l} option in order to
6133 link an Objective-C or Objective-C++ program.
6134
6135 @item -nostartfiles
6136 @opindex nostartfiles
6137 Do not use the standard system startup files when linking.
6138 The standard system libraries are used normally, unless @option{-nostdlib}
6139 or @option{-nodefaultlibs} is used.
6140
6141 @item -nodefaultlibs
6142 @opindex nodefaultlibs
6143 Do not use the standard system libraries when linking.
6144 Only the libraries you specify will be passed to the linker.
6145 The standard startup files are used normally, unless @option{-nostartfiles}
6146 is used.  The compiler may generate calls to @code{memcmp},
6147 @code{memset}, @code{memcpy} and @code{memmove}.
6148 These entries are usually resolved by entries in
6149 libc.  These entry points should be supplied through some other
6150 mechanism when this option is specified.
6151
6152 @item -nostdlib
6153 @opindex nostdlib
6154 Do not use the standard system startup files or libraries when linking.
6155 No startup files and only the libraries you specify will be passed to
6156 the linker.  The compiler may generate calls to @code{memcmp}, @code{memset},
6157 @code{memcpy} and @code{memmove}.
6158 These entries are usually resolved by entries in
6159 libc.  These entry points should be supplied through some other
6160 mechanism when this option is specified.
6161
6162 @cindex @option{-lgcc}, use with @option{-nostdlib}
6163 @cindex @option{-nostdlib} and unresolved references
6164 @cindex unresolved references and @option{-nostdlib}
6165 @cindex @option{-lgcc}, use with @option{-nodefaultlibs}
6166 @cindex @option{-nodefaultlibs} and unresolved references
6167 @cindex unresolved references and @option{-nodefaultlibs}
6168 One of the standard libraries bypassed by @option{-nostdlib} and
6169 @option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
6170 that GCC uses to overcome shortcomings of particular machines, or special
6171 needs for some languages.
6172 (@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
6173 Collection (GCC) Internals},
6174 for more discussion of @file{libgcc.a}.)
6175 In most cases, you need @file{libgcc.a} even when you want to avoid
6176 other standard libraries.  In other words, when you specify @option{-nostdlib}
6177 or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
6178 This ensures that you have no unresolved references to internal GCC
6179 library subroutines.  (For example, @samp{__main}, used to ensure C++
6180 constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
6181 GNU Compiler Collection (GCC) Internals}.)
6182
6183 @item -pie
6184 @opindex pie
6185 Produce a position independent executable on targets which support it.
6186 For predictable results, you must also specify the same set of options
6187 that were used to generate code (@option{-fpie}, @option{-fPIE},
6188 or model suboptions) when you specify this option.
6189
6190 @item -s
6191 @opindex s
6192 Remove all symbol table and relocation information from the executable.
6193
6194 @item -static
6195 @opindex static
6196 On systems that support dynamic linking, this prevents linking with the shared
6197 libraries.  On other systems, this option has no effect.
6198
6199 @item -shared
6200 @opindex shared
6201 Produce a shared object which can then be linked with other objects to
6202 form an executable.  Not all systems support this option.  For predictable
6203 results, you must also specify the same set of options that were used to
6204 generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
6205 when you specify this option.@footnote{On some systems, @samp{gcc -shared}
6206 needs to build supplementary stub code for constructors to work.  On
6207 multi-libbed systems, @samp{gcc -shared} must select the correct support
6208 libraries to link against.  Failing to supply the correct flags may lead
6209 to subtle defects.  Supplying them in cases where they are not necessary
6210 is innocuous.}
6211
6212 @item -shared-libgcc
6213 @itemx -static-libgcc
6214 @opindex shared-libgcc
6215 @opindex static-libgcc
6216 On systems that provide @file{libgcc} as a shared library, these options
6217 force the use of either the shared or static version respectively.
6218 If no shared version of @file{libgcc} was built when the compiler was
6219 configured, these options have no effect.
6220
6221 There are several situations in which an application should use the
6222 shared @file{libgcc} instead of the static version.  The most common
6223 of these is when the application wishes to throw and catch exceptions
6224 across different shared libraries.  In that case, each of the libraries
6225 as well as the application itself should use the shared @file{libgcc}.
6226
6227 Therefore, the G++ and GCJ drivers automatically add
6228 @option{-shared-libgcc} whenever you build a shared library or a main
6229 executable, because C++ and Java programs typically use exceptions, so
6230 this is the right thing to do.
6231
6232 If, instead, you use the GCC driver to create shared libraries, you may
6233 find that they will not always be linked with the shared @file{libgcc}.
6234 If GCC finds, at its configuration time, that you have a non-GNU linker
6235 or a GNU linker that does not support option @option{--eh-frame-hdr},
6236 it will link the shared version of @file{libgcc} into shared libraries
6237 by default.  Otherwise, it will take advantage of the linker and optimize
6238 away the linking with the shared version of @file{libgcc}, linking with
6239 the static version of libgcc by default.  This allows exceptions to
6240 propagate through such shared libraries, without incurring relocation
6241 costs at library load time.
6242
6243 However, if a library or main executable is supposed to throw or catch
6244 exceptions, you must link it using the G++ or GCJ driver, as appropriate
6245 for the languages used in the program, or using the option
6246 @option{-shared-libgcc}, such that it is linked with the shared
6247 @file{libgcc}.
6248
6249 @item -symbolic
6250 @opindex symbolic
6251 Bind references to global symbols when building a shared object.  Warn
6252 about any unresolved references (unless overridden by the link editor
6253 option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
6254 this option.
6255
6256 @item -Xlinker @var{option}
6257 @opindex Xlinker
6258 Pass @var{option} as an option to the linker.  You can use this to
6259 supply system-specific linker options which GCC does not know how to
6260 recognize.
6261
6262 If you want to pass an option that takes an argument, you must use
6263 @option{-Xlinker} twice, once for the option and once for the argument.
6264 For example, to pass @option{-assert definitions}, you must write
6265 @samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
6266 @option{-Xlinker "-assert definitions"}, because this passes the entire
6267 string as a single argument, which is not what the linker expects.
6268
6269 @item -Wl,@var{option}
6270 @opindex Wl
6271 Pass @var{option} as an option to the linker.  If @var{option} contains
6272 commas, it is split into multiple options at the commas.
6273
6274 @item -u @var{symbol}
6275 @opindex u
6276 Pretend the symbol @var{symbol} is undefined, to force linking of
6277 library modules to define it.  You can use @option{-u} multiple times with
6278 different symbols to force loading of additional library modules.
6279 @end table
6280
6281 @node Directory Options
6282 @section Options for Directory Search
6283 @cindex directory options
6284 @cindex options, directory search
6285 @cindex search path
6286
6287 These options specify directories to search for header files, for
6288 libraries and for parts of the compiler:
6289
6290 @table @gcctabopt
6291 @item -I@var{dir}
6292 @opindex I
6293 Add the directory @var{dir} to the head of the list of directories to be
6294 searched for header files.  This can be used to override a system header
6295 file, substituting your own version, since these directories are
6296 searched before the system header file directories.  However, you should
6297 not use this option to add directories that contain vendor-supplied
6298 system header files (use @option{-isystem} for that).  If you use more than
6299 one @option{-I} option, the directories are scanned in left-to-right
6300 order; the standard system directories come after.
6301
6302 If a standard system include directory, or a directory specified with
6303 @option{-isystem}, is also specified with @option{-I}, the @option{-I}
6304 option will be ignored.  The directory will still be searched but as a
6305 system directory at its normal position in the system include chain.
6306 This is to ensure that GCC's procedure to fix buggy system headers and
6307 the ordering for the include_next directive are not inadvertently changed.
6308 If you really need to change the search order for system directories,
6309 use the @option{-nostdinc} and/or @option{-isystem} options.
6310
6311 @item -iquote@var{dir}
6312 @opindex iquote
6313 Add the directory @var{dir} to the head of the list of directories to
6314 be searched for header files only for the case of @samp{#include
6315 "@var{file}"}; they are not searched for @samp{#include <@var{file}>},
6316 otherwise just like @option{-I}.
6317
6318 @item -L@var{dir}
6319 @opindex L
6320 Add directory @var{dir} to the list of directories to be searched
6321 for @option{-l}.
6322
6323 @item -B@var{prefix}
6324 @opindex B
6325 This option specifies where to find the executables, libraries,
6326 include files, and data files of the compiler itself.
6327
6328 The compiler driver program runs one or more of the subprograms
6329 @file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
6330 @var{prefix} as a prefix for each program it tries to run, both with and
6331 without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
6332
6333 For each subprogram to be run, the compiler driver first tries the
6334 @option{-B} prefix, if any.  If that name is not found, or if @option{-B}
6335 was not specified, the driver tries two standard prefixes, which are
6336 @file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
6337 those results in a file name that is found, the unmodified program
6338 name is searched for using the directories specified in your
6339 @env{PATH} environment variable.
6340
6341 The compiler will check to see if the path provided by the @option{-B}
6342 refers to a directory, and if necessary it will add a directory
6343 separator character at the end of the path.
6344
6345 @option{-B} prefixes that effectively specify directory names also apply
6346 to libraries in the linker, because the compiler translates these
6347 options into @option{-L} options for the linker.  They also apply to
6348 includes files in the preprocessor, because the compiler translates these
6349 options into @option{-isystem} options for the preprocessor.  In this case,
6350 the compiler appends @samp{include} to the prefix.
6351
6352 The run-time support file @file{libgcc.a} can also be searched for using
6353 the @option{-B} prefix, if needed.  If it is not found there, the two
6354 standard prefixes above are tried, and that is all.  The file is left
6355 out of the link if it is not found by those means.
6356
6357 Another way to specify a prefix much like the @option{-B} prefix is to use
6358 the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
6359 Variables}.
6360
6361 As a special kludge, if the path provided by @option{-B} is
6362 @file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
6363 9, then it will be replaced by @file{[dir/]include}.  This is to help
6364 with boot-strapping the compiler.
6365
6366 @item -specs=@var{file}
6367 @opindex specs
6368 Process @var{file} after the compiler reads in the standard @file{specs}
6369 file, in order to override the defaults that the @file{gcc} driver
6370 program uses when determining what switches to pass to @file{cc1},
6371 @file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
6372 @option{-specs=@var{file}} can be specified on the command line, and they
6373 are processed in order, from left to right.
6374
6375 @item -I-
6376 @opindex I-
6377 This option has been deprecated.  Please use @option{-iquote} instead for
6378 @option{-I} directories before the @option{-I-} and remove the @option{-I-}.
6379 Any directories you specify with @option{-I} options before the @option{-I-}
6380 option are searched only for the case of @samp{#include "@var{file}"};
6381 they are not searched for @samp{#include <@var{file}>}.
6382
6383 If additional directories are specified with @option{-I} options after
6384 the @option{-I-}, these directories are searched for all @samp{#include}
6385 directives.  (Ordinarily @emph{all} @option{-I} directories are used
6386 this way.)
6387
6388 In addition, the @option{-I-} option inhibits the use of the current
6389 directory (where the current input file came from) as the first search
6390 directory for @samp{#include "@var{file}"}.  There is no way to
6391 override this effect of @option{-I-}.  With @option{-I.} you can specify
6392 searching the directory which was current when the compiler was
6393 invoked.  That is not exactly the same as what the preprocessor does
6394 by default, but it is often satisfactory.
6395
6396 @option{-I-} does not inhibit the use of the standard system directories
6397 for header files.  Thus, @option{-I-} and @option{-nostdinc} are
6398 independent.
6399 @end table
6400
6401 @c man end
6402
6403 @node Spec Files
6404 @section Specifying subprocesses and the switches to pass to them
6405 @cindex Spec Files
6406
6407 @command{gcc} is a driver program.  It performs its job by invoking a
6408 sequence of other programs to do the work of compiling, assembling and
6409 linking.  GCC interprets its command-line parameters and uses these to
6410 deduce which programs it should invoke, and which command-line options
6411 it ought to place on their command lines.  This behavior is controlled
6412 by @dfn{spec strings}.  In most cases there is one spec string for each
6413 program that GCC can invoke, but a few programs have multiple spec
6414 strings to control their behavior.  The spec strings built into GCC can
6415 be overridden by using the @option{-specs=} command-line switch to specify
6416 a spec file.
6417
6418 @dfn{Spec files} are plaintext files that are used to construct spec
6419 strings.  They consist of a sequence of directives separated by blank
6420 lines.  The type of directive is determined by the first non-whitespace
6421 character on the line and it can be one of the following:
6422
6423 @table @code
6424 @item %@var{command}
6425 Issues a @var{command} to the spec file processor.  The commands that can
6426 appear here are:
6427
6428 @table @code
6429 @item %include <@var{file}>
6430 @cindex %include
6431 Search for @var{file} and insert its text at the current point in the
6432 specs file.
6433
6434 @item %include_noerr <@var{file}>
6435 @cindex %include_noerr
6436 Just like @samp{%include}, but do not generate an error message if the include
6437 file cannot be found.
6438
6439 @item %rename @var{old_name} @var{new_name}
6440 @cindex %rename
6441 Rename the spec string @var{old_name} to @var{new_name}.
6442
6443 @end table
6444
6445 @item *[@var{spec_name}]:
6446 This tells the compiler to create, override or delete the named spec
6447 string.  All lines after this directive up to the next directive or
6448 blank line are considered to be the text for the spec string.  If this
6449 results in an empty string then the spec will be deleted.  (Or, if the
6450 spec did not exist, then nothing will happened.)  Otherwise, if the spec
6451 does not currently exist a new spec will be created.  If the spec does
6452 exist then its contents will be overridden by the text of this
6453 directive, unless the first character of that text is the @samp{+}
6454 character, in which case the text will be appended to the spec.
6455
6456 @item [@var{suffix}]:
6457 Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
6458 and up to the next directive or blank line are considered to make up the
6459 spec string for the indicated suffix.  When the compiler encounters an
6460 input file with the named suffix, it will processes the spec string in
6461 order to work out how to compile that file.  For example:
6462
6463 @smallexample
6464 .ZZ:
6465 z-compile -input %i
6466 @end smallexample
6467
6468 This says that any input file whose name ends in @samp{.ZZ} should be
6469 passed to the program @samp{z-compile}, which should be invoked with the
6470 command-line switch @option{-input} and with the result of performing the
6471 @samp{%i} substitution.  (See below.)
6472
6473 As an alternative to providing a spec string, the text that follows a
6474 suffix directive can be one of the following:
6475
6476 @table @code
6477 @item @@@var{language}
6478 This says that the suffix is an alias for a known @var{language}.  This is
6479 similar to using the @option{-x} command-line switch to GCC to specify a
6480 language explicitly.  For example:
6481
6482 @smallexample
6483 .ZZ:
6484 @@c++
6485 @end smallexample
6486
6487 Says that .ZZ files are, in fact, C++ source files.
6488
6489 @item #@var{name}
6490 This causes an error messages saying:
6491
6492 @smallexample
6493 @var{name} compiler not installed on this system.
6494 @end smallexample
6495 @end table
6496
6497 GCC already has an extensive list of suffixes built into it.
6498 This directive will add an entry to the end of the list of suffixes, but
6499 since the list is searched from the end backwards, it is effectively
6500 possible to override earlier entries using this technique.
6501
6502 @end table
6503
6504 GCC has the following spec strings built into it.  Spec files can
6505 override these strings or create their own.  Note that individual
6506 targets can also add their own spec strings to this list.
6507
6508 @smallexample
6509 asm          Options to pass to the assembler
6510 asm_final    Options to pass to the assembler post-processor
6511 cpp          Options to pass to the C preprocessor
6512 cc1          Options to pass to the C compiler
6513 cc1plus      Options to pass to the C++ compiler
6514 endfile      Object files to include at the end of the link
6515 link         Options to pass to the linker
6516 lib          Libraries to include on the command line to the linker
6517 libgcc       Decides which GCC support library to pass to the linker
6518 linker       Sets the name of the linker
6519 predefines   Defines to be passed to the C preprocessor
6520 signed_char  Defines to pass to CPP to say whether @code{char} is signed
6521              by default
6522 startfile    Object files to include at the start of the link
6523 @end smallexample
6524
6525 Here is a small example of a spec file:
6526
6527 @smallexample
6528 %rename lib                 old_lib
6529
6530 *lib:
6531 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
6532 @end smallexample
6533
6534 This example renames the spec called @samp{lib} to @samp{old_lib} and
6535 then overrides the previous definition of @samp{lib} with a new one.
6536 The new definition adds in some extra command-line options before
6537 including the text of the old definition.
6538
6539 @dfn{Spec strings} are a list of command-line options to be passed to their
6540 corresponding program.  In addition, the spec strings can contain
6541 @samp{%}-prefixed sequences to substitute variable text or to
6542 conditionally insert text into the command line.  Using these constructs
6543 it is possible to generate quite complex command lines.
6544
6545 Here is a table of all defined @samp{%}-sequences for spec
6546 strings.  Note that spaces are not generated automatically around the
6547 results of expanding these sequences.  Therefore you can concatenate them
6548 together or combine them with constant text in a single argument.
6549
6550 @table @code
6551 @item %%
6552 Substitute one @samp{%} into the program name or argument.
6553
6554 @item %i
6555 Substitute the name of the input file being processed.
6556
6557 @item %b
6558 Substitute the basename of the input file being processed.
6559 This is the substring up to (and not including) the last period
6560 and not including the directory.
6561
6562 @item %B
6563 This is the same as @samp{%b}, but include the file suffix (text after
6564 the last period).
6565
6566 @item %d
6567 Marks the argument containing or following the @samp{%d} as a
6568 temporary file name, so that that file will be deleted if GCC exits
6569 successfully.  Unlike @samp{%g}, this contributes no text to the
6570 argument.
6571
6572 @item %g@var{suffix}
6573 Substitute a file name that has suffix @var{suffix} and is chosen
6574 once per compilation, and mark the argument in the same way as
6575 @samp{%d}.  To reduce exposure to denial-of-service attacks, the file
6576 name is now chosen in a way that is hard to predict even when previously
6577 chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
6578 might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
6579 the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
6580 treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
6581 was simply substituted with a file name chosen once per compilation,
6582 without regard to any appended suffix (which was therefore treated
6583 just like ordinary text), making such attacks more likely to succeed.
6584
6585 @item %u@var{suffix}
6586 Like @samp{%g}, but generates a new temporary file name even if
6587 @samp{%u@var{suffix}} was already seen.
6588
6589 @item %U@var{suffix}
6590 Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
6591 new one if there is no such last file name.  In the absence of any
6592 @samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
6593 the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
6594 would involve the generation of two distinct file names, one
6595 for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
6596 simply substituted with a file name chosen for the previous @samp{%u},
6597 without regard to any appended suffix.
6598
6599 @item %j@var{suffix}
6600 Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
6601 writable, and if save-temps is off; otherwise, substitute the name
6602 of a temporary file, just like @samp{%u}.  This temporary file is not
6603 meant for communication between processes, but rather as a junk
6604 disposal mechanism.
6605
6606 @item %|@var{suffix}
6607 @itemx %m@var{suffix}
6608 Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
6609 @samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
6610 all.  These are the two most common ways to instruct a program that it
6611 should read from standard input or write to standard output.  If you
6612 need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
6613 construct: see for example @file{f/lang-specs.h}.
6614
6615 @item %.@var{SUFFIX}
6616 Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
6617 when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
6618 terminated by the next space or %.
6619
6620 @item %w
6621 Marks the argument containing or following the @samp{%w} as the
6622 designated output file of this compilation.  This puts the argument
6623 into the sequence of arguments that @samp{%o} will substitute later.
6624
6625 @item %o
6626 Substitutes the names of all the output files, with spaces
6627 automatically placed around them.  You should write spaces
6628 around the @samp{%o} as well or the results are undefined.
6629 @samp{%o} is for use in the specs for running the linker.
6630 Input files whose names have no recognized suffix are not compiled
6631 at all, but they are included among the output files, so they will
6632 be linked.
6633
6634 @item %O
6635 Substitutes the suffix for object files.  Note that this is
6636 handled specially when it immediately follows @samp{%g, %u, or %U},
6637 because of the need for those to form complete file names.  The
6638 handling is such that @samp{%O} is treated exactly as if it had already
6639 been substituted, except that @samp{%g, %u, and %U} do not currently
6640 support additional @var{suffix} characters following @samp{%O} as they would
6641 following, for example, @samp{.o}.
6642
6643 @item %p
6644 Substitutes the standard macro predefinitions for the
6645 current target machine.  Use this when running @code{cpp}.
6646
6647 @item %P
6648 Like @samp{%p}, but puts @samp{__} before and after the name of each
6649 predefined macro, except for macros that start with @samp{__} or with
6650 @samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
6651 C@.
6652
6653 @item %I
6654 Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
6655 @option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}), and
6656 @option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
6657 as necessary.
6658
6659 @item %s
6660 Current argument is the name of a library or startup file of some sort.
6661 Search for that file in a standard list of directories and substitute
6662 the full name found.
6663
6664 @item %e@var{str}
6665 Print @var{str} as an error message.  @var{str} is terminated by a newline.
6666 Use this when inconsistent options are detected.
6667
6668 @item %(@var{name})
6669 Substitute the contents of spec string @var{name} at this point.
6670
6671 @item %[@var{name}]
6672 Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
6673
6674 @item %x@{@var{option}@}
6675 Accumulate an option for @samp{%X}.
6676
6677 @item %X
6678 Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
6679 spec string.
6680
6681 @item %Y
6682 Output the accumulated assembler options specified by @option{-Wa}.
6683
6684 @item %Z
6685 Output the accumulated preprocessor options specified by @option{-Wp}.
6686
6687 @item %a
6688 Process the @code{asm} spec.  This is used to compute the
6689 switches to be passed to the assembler.
6690
6691 @item %A
6692 Process the @code{asm_final} spec.  This is a spec string for
6693 passing switches to an assembler post-processor, if such a program is
6694 needed.
6695
6696 @item %l
6697 Process the @code{link} spec.  This is the spec for computing the
6698 command line passed to the linker.  Typically it will make use of the
6699 @samp{%L %G %S %D and %E} sequences.
6700
6701 @item %D
6702 Dump out a @option{-L} option for each directory that GCC believes might
6703 contain startup files.  If the target supports multilibs then the
6704 current multilib directory will be prepended to each of these paths.
6705
6706 @item %L
6707 Process the @code{lib} spec.  This is a spec string for deciding which
6708 libraries should be included on the command line to the linker.
6709
6710 @item %G
6711 Process the @code{libgcc} spec.  This is a spec string for deciding
6712 which GCC support library should be included on the command line to the linker.
6713
6714 @item %S
6715 Process the @code{startfile} spec.  This is a spec for deciding which
6716 object files should be the first ones passed to the linker.  Typically
6717 this might be a file named @file{crt0.o}.
6718
6719 @item %E
6720 Process the @code{endfile} spec.  This is a spec string that specifies
6721 the last object files that will be passed to the linker.
6722
6723 @item %C
6724 Process the @code{cpp} spec.  This is used to construct the arguments
6725 to be passed to the C preprocessor.
6726
6727 @item %1
6728 Process the @code{cc1} spec.  This is used to construct the options to be
6729 passed to the actual C compiler (@samp{cc1}).
6730
6731 @item %2
6732 Process the @code{cc1plus} spec.  This is used to construct the options to be
6733 passed to the actual C++ compiler (@samp{cc1plus}).
6734
6735 @item %*
6736 Substitute the variable part of a matched option.  See below.
6737 Note that each comma in the substituted string is replaced by
6738 a single space.
6739
6740 @item %<@code{S}
6741 Remove all occurrences of @code{-S} from the command line.  Note---this
6742 command is position dependent.  @samp{%} commands in the spec string
6743 before this one will see @code{-S}, @samp{%} commands in the spec string
6744 after this one will not.
6745
6746 @item %:@var{function}(@var{args})
6747 Call the named function @var{function}, passing it @var{args}.
6748 @var{args} is first processed as a nested spec string, then split
6749 into an argument vector in the usual fashion.  The function returns
6750 a string which is processed as if it had appeared literally as part
6751 of the current spec.
6752
6753 The following built-in spec functions are provided:
6754
6755 @table @code
6756 @item @code{if-exists}
6757 The @code{if-exists} spec function takes one argument, an absolute
6758 pathname to a file.  If the file exists, @code{if-exists} returns the
6759 pathname.  Here is a small example of its usage:
6760
6761 @smallexample
6762 *startfile:
6763 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
6764 @end smallexample
6765
6766 @item @code{if-exists-else}
6767 The @code{if-exists-else} spec function is similar to the @code{if-exists}
6768 spec function, except that it takes two arguments.  The first argument is
6769 an absolute pathname to a file.  If the file exists, @code{if-exists-else}
6770 returns the pathname.  If it does not exist, it returns the second argument.
6771 This way, @code{if-exists-else} can be used to select one file or another,
6772 based on the existence of the first.  Here is a small example of its usage:
6773
6774 @smallexample
6775 *startfile:
6776 crt0%O%s %:if-exists(crti%O%s) \
6777 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
6778 @end smallexample
6779
6780 @item @code{replace-outfile}
6781 The @code{replace-outfile} spec function takes two arguments.  It looks for the
6782 first argument in the outfiles array and replaces it with the second argument.  Here
6783 is a small example of its usage:
6784
6785 @smallexample
6786 %@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
6787 @end smallexample
6788
6789 @end table
6790
6791 @item %@{@code{S}@}
6792 Substitutes the @code{-S} switch, if that switch was given to GCC@.
6793 If that switch was not specified, this substitutes nothing.  Note that
6794 the leading dash is omitted when specifying this option, and it is
6795 automatically inserted if the substitution is performed.  Thus the spec
6796 string @samp{%@{foo@}} would match the command-line option @option{-foo}
6797 and would output the command line option @option{-foo}.
6798
6799 @item %W@{@code{S}@}
6800 Like %@{@code{S}@} but mark last argument supplied within as a file to be
6801 deleted on failure.
6802
6803 @item %@{@code{S}*@}
6804 Substitutes all the switches specified to GCC whose names start
6805 with @code{-S}, but which also take an argument.  This is used for
6806 switches like @option{-o}, @option{-D}, @option{-I}, etc.
6807 GCC considers @option{-o foo} as being
6808 one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
6809 text, including the space.  Thus two arguments would be generated.
6810
6811 @item %@{@code{S}*&@code{T}*@}
6812 Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
6813 (the order of @code{S} and @code{T} in the spec is not significant).
6814 There can be any number of ampersand-separated variables; for each the
6815 wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
6816
6817 @item %@{@code{S}:@code{X}@}
6818 Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
6819
6820 @item %@{!@code{S}:@code{X}@}
6821 Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
6822
6823 @item %@{@code{S}*:@code{X}@}
6824 Substitutes @code{X} if one or more switches whose names start with
6825 @code{-S} are specified to GCC@.  Normally @code{X} is substituted only
6826 once, no matter how many such switches appeared.  However, if @code{%*}
6827 appears somewhere in @code{X}, then @code{X} will be substituted once
6828 for each matching switch, with the @code{%*} replaced by the part of
6829 that switch that matched the @code{*}.
6830
6831 @item %@{.@code{S}:@code{X}@}
6832 Substitutes @code{X}, if processing a file with suffix @code{S}.
6833
6834 @item %@{!.@code{S}:@code{X}@}
6835 Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
6836
6837 @item %@{@code{S}|@code{P}:@code{X}@}
6838 Substitutes @code{X} if either @code{-S} or @code{-P} was given to GCC@.
6839 This may be combined with @samp{!}, @samp{.}, and @code{*} sequences as well,
6840 although they have a stronger binding than the @samp{|}.  If @code{%*}
6841 appears in @code{X}, all of the alternatives must be starred, and only
6842 the first matching alternative is substituted.
6843
6844 For example, a spec string like this:
6845
6846 @smallexample
6847 %@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
6848 @end smallexample
6849
6850 will output the following command-line options from the following input
6851 command-line options:
6852
6853 @smallexample
6854 fred.c        -foo -baz
6855 jim.d         -bar -boggle
6856 -d fred.c     -foo -baz -boggle
6857 -d jim.d      -bar -baz -boggle
6858 @end smallexample
6859
6860 @item %@{S:X; T:Y; :D@}
6861
6862 If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
6863 given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
6864 be as many clauses as you need.  This may be combined with @code{.},
6865 @code{!}, @code{|}, and @code{*} as needed.
6866
6867
6868 @end table
6869
6870 The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
6871 construct may contain other nested @samp{%} constructs or spaces, or
6872 even newlines.  They are processed as usual, as described above.
6873 Trailing white space in @code{X} is ignored.  White space may also
6874 appear anywhere on the left side of the colon in these constructs,
6875 except between @code{.} or @code{*} and the corresponding word.
6876
6877 The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
6878 handled specifically in these constructs.  If another value of
6879 @option{-O} or the negated form of a @option{-f}, @option{-m}, or
6880 @option{-W} switch is found later in the command line, the earlier
6881 switch value is ignored, except with @{@code{S}*@} where @code{S} is
6882 just one letter, which passes all matching options.
6883
6884 The character @samp{|} at the beginning of the predicate text is used to
6885 indicate that a command should be piped to the following command, but
6886 only if @option{-pipe} is specified.
6887
6888 It is built into GCC which switches take arguments and which do not.
6889 (You might think it would be useful to generalize this to allow each
6890 compiler's spec to say which switches take arguments.  But this cannot
6891 be done in a consistent fashion.  GCC cannot even decide which input
6892 files have been specified without knowing which switches take arguments,
6893 and it must know which input files to compile in order to tell which
6894 compilers to run).
6895
6896 GCC also knows implicitly that arguments starting in @option{-l} are to be
6897 treated as compiler output files, and passed to the linker in their
6898 proper position among the other output files.
6899
6900 @c man begin OPTIONS
6901
6902 @node Target Options
6903 @section Specifying Target Machine and Compiler Version
6904 @cindex target options
6905 @cindex cross compiling
6906 @cindex specifying machine version
6907 @cindex specifying compiler version and target machine
6908 @cindex compiler version, specifying
6909 @cindex target machine, specifying
6910
6911 The usual way to run GCC is to run the executable called @file{gcc}, or
6912 @file{<machine>-gcc} when cross-compiling, or
6913 @file{<machine>-gcc-<version>} to run a version other than the one that
6914 was installed last.  Sometimes this is inconvenient, so GCC provides
6915 options that will switch to another cross-compiler or version.
6916
6917 @table @gcctabopt
6918 @item -b @var{machine}
6919 @opindex b
6920 The argument @var{machine} specifies the target machine for compilation.
6921
6922 The value to use for @var{machine} is the same as was specified as the
6923 machine type when configuring GCC as a cross-compiler.  For
6924 example, if a cross-compiler was configured with @samp{configure
6925 i386v}, meaning to compile for an 80386 running System V, then you
6926 would specify @option{-b i386v} to run that cross compiler.
6927
6928 @item -V @var{version}
6929 @opindex V
6930 The argument @var{version} specifies which version of GCC to run.
6931 This is useful when multiple versions are installed.  For example,
6932 @var{version} might be @samp{2.0}, meaning to run GCC version 2.0.
6933 @end table
6934
6935 The @option{-V} and @option{-b} options work by running the
6936 @file{<machine>-gcc-<version>} executable, so there's no real reason to
6937 use them if you can just run that directly.
6938
6939 @node Submodel Options
6940 @section Hardware Models and Configurations
6941 @cindex submodel options
6942 @cindex specifying hardware config
6943 @cindex hardware models and configurations, specifying
6944 @cindex machine dependent options
6945
6946 Earlier we discussed the standard option @option{-b} which chooses among
6947 different installed compilers for completely different target
6948 machines, such as VAX vs.@: 68000 vs.@: 80386.
6949
6950 In addition, each of these target machine types can have its own
6951 special options, starting with @samp{-m}, to choose among various
6952 hardware models or configurations---for example, 68010 vs 68020,
6953 floating coprocessor or none.  A single installed version of the
6954 compiler can compile for any model or configuration, according to the
6955 options specified.
6956
6957 Some configurations of the compiler also support additional special
6958 options, usually for compatibility with other compilers on the same
6959 platform.
6960
6961 @c This list is ordered alphanumerically by subsection name.
6962 @c It should be the same order and spelling as these options are listed
6963 @c in Machine Dependent Options
6964
6965 @menu
6966 * ARC Options::
6967 * ARM Options::
6968 * AVR Options::
6969 * Blackfin Options::
6970 * CRIS Options::
6971 * Darwin Options::
6972 * DEC Alpha Options::
6973 * DEC Alpha/VMS Options::
6974 * FRV Options::
6975 * H8/300 Options::
6976 * HPPA Options::
6977 * i386 and x86-64 Options::
6978 * IA-64 Options::
6979 * M32C Options::
6980 * M32R/D Options::
6981 * M680x0 Options::
6982 * M68hc1x Options::
6983 * MCore Options::
6984 * MIPS Options::
6985 * MMIX Options::
6986 * MN10300 Options::
6987 * PDP-11 Options::
6988 * PowerPC Options::
6989 * RS/6000 and PowerPC Options::
6990 * S/390 and zSeries Options::
6991 * SH Options::
6992 * SPARC Options::
6993 * System V Options::
6994 * TMS320C3x/C4x Options::
6995 * V850 Options::
6996 * VAX Options::
6997 * x86-64 Options::
6998 * Xstormy16 Options::
6999 * Xtensa Options::
7000 * zSeries Options::
7001 @end menu
7002
7003 @node ARC Options
7004 @subsection ARC Options
7005 @cindex ARC Options
7006
7007 These options are defined for ARC implementations:
7008
7009 @table @gcctabopt
7010 @item -EL
7011 @opindex EL
7012 Compile code for little endian mode.  This is the default.
7013
7014 @item -EB
7015 @opindex EB
7016 Compile code for big endian mode.
7017
7018 @item -mmangle-cpu
7019 @opindex mmangle-cpu
7020 Prepend the name of the cpu to all public symbol names.
7021 In multiple-processor systems, there are many ARC variants with different
7022 instruction and register set characteristics.  This flag prevents code
7023 compiled for one cpu to be linked with code compiled for another.
7024 No facility exists for handling variants that are ``almost identical''.
7025 This is an all or nothing option.
7026
7027 @item -mcpu=@var{cpu}
7028 @opindex mcpu
7029 Compile code for ARC variant @var{cpu}.
7030 Which variants are supported depend on the configuration.
7031 All variants support @option{-mcpu=base}, this is the default.
7032
7033 @item -mtext=@var{text-section}
7034 @itemx -mdata=@var{data-section}
7035 @itemx -mrodata=@var{readonly-data-section}
7036 @opindex mtext
7037 @opindex mdata
7038 @opindex mrodata
7039 Put functions, data, and readonly data in @var{text-section},
7040 @var{data-section}, and @var{readonly-data-section} respectively
7041 by default.  This can be overridden with the @code{section} attribute.
7042 @xref{Variable Attributes}.
7043
7044 @end table
7045
7046 @node ARM Options
7047 @subsection ARM Options
7048 @cindex ARM options
7049
7050 These @samp{-m} options are defined for Advanced RISC Machines (ARM)
7051 architectures:
7052
7053 @table @gcctabopt
7054 @item -mabi=@var{name}
7055 @opindex mabi
7056 Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
7057 @samp{atpcs}, @samp{aapcs} and @samp{iwmmxt}.
7058
7059 @item -mapcs-frame
7060 @opindex mapcs-frame
7061 Generate a stack frame that is compliant with the ARM Procedure Call
7062 Standard for all functions, even if this is not strictly necessary for
7063 correct execution of the code.  Specifying @option{-fomit-frame-pointer}
7064 with this option will cause the stack frames not to be generated for
7065 leaf functions.  The default is @option{-mno-apcs-frame}.
7066
7067 @item -mapcs
7068 @opindex mapcs
7069 This is a synonym for @option{-mapcs-frame}.
7070
7071 @ignore
7072 @c not currently implemented
7073 @item -mapcs-stack-check
7074 @opindex mapcs-stack-check
7075 Generate code to check the amount of stack space available upon entry to
7076 every function (that actually uses some stack space).  If there is
7077 insufficient space available then either the function
7078 @samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
7079 called, depending upon the amount of stack space required.  The run time
7080 system is required to provide these functions.  The default is
7081 @option{-mno-apcs-stack-check}, since this produces smaller code.
7082
7083 @c not currently implemented
7084 @item -mapcs-float
7085 @opindex mapcs-float
7086 Pass floating point arguments using the float point registers.  This is
7087 one of the variants of the APCS@.  This option is recommended if the
7088 target hardware has a floating point unit or if a lot of floating point
7089 arithmetic is going to be performed by the code.  The default is
7090 @option{-mno-apcs-float}, since integer only code is slightly increased in
7091 size if @option{-mapcs-float} is used.
7092
7093 @c not currently implemented
7094 @item -mapcs-reentrant
7095 @opindex mapcs-reentrant
7096 Generate reentrant, position independent code.  The default is
7097 @option{-mno-apcs-reentrant}.
7098 @end ignore
7099
7100 @item -mthumb-interwork
7101 @opindex mthumb-interwork
7102 Generate code which supports calling between the ARM and Thumb
7103 instruction sets.  Without this option the two instruction sets cannot
7104 be reliably used inside one program.  The default is
7105 @option{-mno-thumb-interwork}, since slightly larger code is generated
7106 when @option{-mthumb-interwork} is specified.
7107
7108 @item -mno-sched-prolog
7109 @opindex mno-sched-prolog
7110 Prevent the reordering of instructions in the function prolog, or the
7111 merging of those instruction with the instructions in the function's
7112 body.  This means that all functions will start with a recognizable set
7113 of instructions (or in fact one of a choice from a small set of
7114 different function prologues), and this information can be used to
7115 locate the start if functions inside an executable piece of code.  The
7116 default is @option{-msched-prolog}.
7117
7118 @item -mhard-float
7119 @opindex mhard-float
7120 Generate output containing floating point instructions.  This is the
7121 default.
7122
7123 @item -msoft-float
7124 @opindex msoft-float
7125 Generate output containing library calls for floating point.
7126 @strong{Warning:} the requisite libraries are not available for all ARM
7127 targets.  Normally the facilities of the machine's usual C compiler are
7128 used, but this cannot be done directly in cross-compilation.  You must make
7129 your own arrangements to provide suitable library functions for
7130 cross-compilation.
7131
7132 @option{-msoft-float} changes the calling convention in the output file;
7133 therefore, it is only useful if you compile @emph{all} of a program with
7134 this option.  In particular, you need to compile @file{libgcc.a}, the
7135 library that comes with GCC, with @option{-msoft-float} in order for
7136 this to work.
7137
7138 @item -mfloat-abi=@var{name}
7139 @opindex mfloat-abi
7140 Specifies which ABI to use for floating point values.  Permissible values
7141 are: @samp{soft}, @samp{softfp} and @samp{hard}.
7142
7143 @samp{soft} and @samp{hard} are equivalent to @option{-msoft-float}
7144 and @option{-mhard-float} respectively.  @samp{softfp} allows the generation
7145 of floating point instructions, but still uses the soft-float calling
7146 conventions.
7147
7148 @item -mlittle-endian
7149 @opindex mlittle-endian
7150 Generate code for a processor running in little-endian mode.  This is
7151 the default for all standard configurations.
7152
7153 @item -mbig-endian
7154 @opindex mbig-endian
7155 Generate code for a processor running in big-endian mode; the default is
7156 to compile code for a little-endian processor.
7157
7158 @item -mwords-little-endian
7159 @opindex mwords-little-endian
7160 This option only applies when generating code for big-endian processors.
7161 Generate code for a little-endian word order but a big-endian byte
7162 order.  That is, a byte order of the form @samp{32107654}.  Note: this
7163 option should only be used if you require compatibility with code for
7164 big-endian ARM processors generated by versions of the compiler prior to
7165 2.8.
7166
7167 @item -mcpu=@var{name}
7168 @opindex mcpu
7169 This specifies the name of the target ARM processor.  GCC uses this name
7170 to determine what kind of instructions it can emit when generating
7171 assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
7172 @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
7173 @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
7174 @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
7175 @samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
7176 @samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
7177 @samp{arm8}, @samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
7178 @samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
7179 @samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
7180 @samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
7181 @samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
7182 @samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
7183 @samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
7184 @samp{arm1176jz-s}, @samp{arm1176jzf-s}, @samp{xscale}, @samp{iwmmxt},
7185 @samp{ep9312}.
7186
7187 @itemx -mtune=@var{name}
7188 @opindex mtune
7189 This option is very similar to the @option{-mcpu=} option, except that
7190 instead of specifying the actual target processor type, and hence
7191 restricting which instructions can be used, it specifies that GCC should
7192 tune the performance of the code as if the target were of the type
7193 specified in this option, but still choosing the instructions that it
7194 will generate based on the cpu specified by a @option{-mcpu=} option.
7195 For some ARM implementations better performance can be obtained by using
7196 this option.
7197
7198 @item -march=@var{name}
7199 @opindex march
7200 This specifies the name of the target ARM architecture.  GCC uses this
7201 name to determine what kind of instructions it can emit when generating
7202 assembly code.  This option can be used in conjunction with or instead
7203 of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
7204 @samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
7205 @samp{armv5}, @samp{armv5t}, @samp{armv5te}, @samp{armv6}, @samp{armv6j},
7206 @samp{iwmmxt}, @samp{ep9312}.
7207
7208 @item -mfpu=@var{name}
7209 @itemx -mfpe=@var{number}
7210 @itemx -mfp=@var{number}
7211 @opindex mfpu
7212 @opindex mfpe
7213 @opindex mfp
7214 This specifies what floating point hardware (or hardware emulation) is
7215 available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
7216 @samp{fpe3}, @samp{maverick}, @samp{vfp}.  @option{-mfp} and @option{-mfpe}
7217 are synonyms for @option{-mfpu}=@samp{fpe}@var{number}, for compatibility
7218 with older versions of GCC@.
7219
7220 If @option{-msoft-float} is specified this specifies the format of
7221 floating point values.
7222
7223 @item -mstructure-size-boundary=@var{n}
7224 @opindex mstructure-size-boundary
7225 The size of all structures and unions will be rounded up to a multiple
7226 of the number of bits set by this option.  Permissible values are 8, 32
7227 and 64.  The default value varies for different toolchains.  For the COFF
7228 targeted toolchain the default value is 8.  A value of 64 is only allowed
7229 if the underlying ABI supports it.
7230
7231 Specifying the larger number can produce faster, more efficient code, but
7232 can also increase the size of the program.  Different values are potentially
7233 incompatible.  Code compiled with one value cannot necessarily expect to
7234 work with code or libraries compiled with another value, if they exchange
7235 information using structures or unions.
7236
7237 @item -mabort-on-noreturn
7238 @opindex mabort-on-noreturn
7239 Generate a call to the function @code{abort} at the end of a
7240 @code{noreturn} function.  It will be executed if the function tries to
7241 return.
7242
7243 @item -mlong-calls
7244 @itemx -mno-long-calls
7245 @opindex mlong-calls
7246 @opindex mno-long-calls
7247 Tells the compiler to perform function calls by first loading the
7248 address of the function into a register and then performing a subroutine
7249 call on this register.  This switch is needed if the target function
7250 will lie outside of the 64 megabyte addressing range of the offset based
7251 version of subroutine call instruction.
7252
7253 Even if this switch is enabled, not all function calls will be turned
7254 into long calls.  The heuristic is that static functions, functions
7255 which have the @samp{short-call} attribute, functions that are inside
7256 the scope of a @samp{#pragma no_long_calls} directive and functions whose
7257 definitions have already been compiled within the current compilation
7258 unit, will not be turned into long calls.  The exception to this rule is
7259 that weak function definitions, functions with the @samp{long-call}
7260 attribute or the @samp{section} attribute, and functions that are within
7261 the scope of a @samp{#pragma long_calls} directive, will always be
7262 turned into long calls.
7263
7264 This feature is not enabled by default.  Specifying
7265 @option{-mno-long-calls} will restore the default behavior, as will
7266 placing the function calls within the scope of a @samp{#pragma
7267 long_calls_off} directive.  Note these switches have no effect on how
7268 the compiler generates code to handle function calls via function
7269 pointers.
7270
7271 @item -mnop-fun-dllimport
7272 @opindex mnop-fun-dllimport
7273 Disable support for the @code{dllimport} attribute.
7274
7275 @item -msingle-pic-base
7276 @opindex msingle-pic-base
7277 Treat the register used for PIC addressing as read-only, rather than
7278 loading it in the prologue for each function.  The run-time system is
7279 responsible for initializing this register with an appropriate value
7280 before execution begins.
7281
7282 @item -mpic-register=@var{reg}
7283 @opindex mpic-register
7284 Specify the register to be used for PIC addressing.  The default is R10
7285 unless stack-checking is enabled, when R9 is used.
7286
7287 @item -mcirrus-fix-invalid-insns
7288 @opindex mcirrus-fix-invalid-insns
7289 @opindex mno-cirrus-fix-invalid-insns
7290 Insert NOPs into the instruction stream to in order to work around
7291 problems with invalid Maverick instruction combinations.  This option
7292 is only valid if the @option{-mcpu=ep9312} option has been used to
7293 enable generation of instructions for the Cirrus Maverick floating
7294 point co-processor.  This option is not enabled by default, since the
7295 problem is only present in older Maverick implementations.  The default
7296 can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
7297 switch.
7298
7299 @item -mpoke-function-name
7300 @opindex mpoke-function-name
7301 Write the name of each function into the text section, directly
7302 preceding the function prologue.  The generated code is similar to this:
7303
7304 @smallexample
7305      t0
7306          .ascii "arm_poke_function_name", 0
7307          .align
7308      t1
7309          .word 0xff000000 + (t1 - t0)
7310      arm_poke_function_name
7311          mov     ip, sp
7312          stmfd   sp!, @{fp, ip, lr, pc@}
7313          sub     fp, ip, #4
7314 @end smallexample
7315
7316 When performing a stack backtrace, code can inspect the value of
7317 @code{pc} stored at @code{fp + 0}.  If the trace function then looks at
7318 location @code{pc - 12} and the top 8 bits are set, then we know that
7319 there is a function name embedded immediately preceding this location
7320 and has length @code{((pc[-3]) & 0xff000000)}.
7321
7322 @item -mthumb
7323 @opindex mthumb
7324 Generate code for the 16-bit Thumb instruction set.  The default is to
7325 use the 32-bit ARM instruction set.
7326
7327 @item -mtpcs-frame
7328 @opindex mtpcs-frame
7329 Generate a stack frame that is compliant with the Thumb Procedure Call
7330 Standard for all non-leaf functions.  (A leaf function is one that does
7331 not call any other functions.)  The default is @option{-mno-tpcs-frame}.
7332
7333 @item -mtpcs-leaf-frame
7334 @opindex mtpcs-leaf-frame
7335 Generate a stack frame that is compliant with the Thumb Procedure Call
7336 Standard for all leaf functions.  (A leaf function is one that does
7337 not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
7338
7339 @item -mcallee-super-interworking
7340 @opindex mcallee-super-interworking
7341 Gives all externally visible functions in the file being compiled an ARM
7342 instruction set header which switches to Thumb mode before executing the
7343 rest of the function.  This allows these functions to be called from
7344 non-interworking code.
7345
7346 @item -mcaller-super-interworking
7347 @opindex mcaller-super-interworking
7348 Allows calls via function pointers (including virtual functions) to
7349 execute correctly regardless of whether the target code has been
7350 compiled for interworking or not.  There is a small overhead in the cost
7351 of executing a function pointer if this option is enabled.
7352
7353 @end table
7354
7355 @node AVR Options
7356 @subsection AVR Options
7357 @cindex AVR Options
7358
7359 These options are defined for AVR implementations:
7360
7361 @table @gcctabopt
7362 @item -mmcu=@var{mcu}
7363 @opindex mmcu
7364 Specify ATMEL AVR instruction set or MCU type.
7365
7366 Instruction set avr1 is for the minimal AVR core, not supported by the C
7367 compiler, only for assembler programs (MCU types: at90s1200, attiny10,
7368 attiny11, attiny12, attiny15, attiny28).
7369
7370 Instruction set avr2 (default) is for the classic AVR core with up to
7371 8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
7372 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7373 at90c8534, at90s8535).
7374
7375 Instruction set avr3 is for the classic AVR core with up to 128K program
7376 memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
7377
7378 Instruction set avr4 is for the enhanced AVR core with up to 8K program
7379 memory space (MCU types: atmega8, atmega83, atmega85).
7380
7381 Instruction set avr5 is for the enhanced AVR core with up to 128K program
7382 memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
7383 atmega64, atmega128, at43usb355, at94k).
7384
7385 @item -msize
7386 @opindex msize
7387 Output instruction sizes to the asm file.
7388
7389 @item -minit-stack=@var{N}
7390 @opindex minit-stack
7391 Specify the initial stack address, which may be a symbol or numeric value,
7392 @samp{__stack} is the default.
7393
7394 @item -mno-interrupts
7395 @opindex mno-interrupts
7396 Generated code is not compatible with hardware interrupts.
7397 Code size will be smaller.
7398
7399 @item -mcall-prologues
7400 @opindex mcall-prologues
7401 Functions prologues/epilogues expanded as call to appropriate
7402 subroutines.  Code size will be smaller.
7403
7404 @item -mno-tablejump
7405 @opindex mno-tablejump
7406 Do not generate tablejump insns which sometimes increase code size.
7407
7408 @item -mtiny-stack
7409 @opindex mtiny-stack
7410 Change only the low 8 bits of the stack pointer.
7411
7412 @item -mint8
7413 @opindex mint8
7414 Assume int to be 8 bit integer.  This affects the sizes of all types: A
7415 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
7416 and long long will be 4 bytes.  Please note that this option does not
7417 comply to the C standards, but it will provide you with smaller code
7418 size.
7419 @end table
7420
7421 @node Blackfin Options
7422 @subsection Blackfin Options
7423 @cindex Blackfin Options
7424
7425 @table @gcctabopt
7426 @item -momit-leaf-frame-pointer
7427 @opindex momit-leaf-frame-pointer
7428 Don't keep the frame pointer in a register for leaf functions.  This
7429 avoids the instructions to save, set up and restore frame pointers and
7430 makes an extra register available in leaf functions.  The option
7431 @option{-fomit-frame-pointer} removes the frame pointer for all functions
7432 which might make debugging harder.
7433
7434 @item -mspecld-anomaly
7435 @opindex mspecld-anomaly
7436 When enabled, the compiler will ensure that the generated code does not
7437 contain speculative loads after jump instructions.  This option is enabled
7438 by default.
7439
7440 @item -mno-specld-anomaly
7441 @opindex mno-specld-anomaly
7442 Don't generate extra code to prevent speculative loads from occurring.
7443
7444 @item -mcsync-anomaly
7445 @opindex mcsync-anomaly
7446 When enabled, the compiler will ensure that the generated code does not
7447 contain CSYNC or SSYNC instructions too soon after conditional branches.
7448 This option is enabled by default.
7449
7450 @item -mno-csync-anomaly
7451 @opindex mno-csync-anomaly
7452 Don't generate extra code to prevent CSYNC or SSYNC instructions from
7453 occurring too soon after a conditional branch.
7454
7455 @item -mlow-64k
7456 @opindex mlow-64k
7457 When enabled, the compiler is free to take advantage of the knowledge that
7458 the entire program fits into the low 64k of memory.
7459
7460 @item -mno-low-64k
7461 @opindex mno-low-64k
7462 Assume that the program is arbitrarily large.  This is the default.
7463
7464 @item -mid-shared-library
7465 @opindex mid-shared-library
7466 Generate code that supports shared libraries via the library ID method.
7467 This allows for execute in place and shared libraries in an environment
7468 without virtual memory management.  This option implies @option{-fPIC}.
7469
7470 @item -mno-id-shared-library
7471 @opindex mno-id-shared-library
7472 Generate code that doesn't assume ID based shared libraries are being used.
7473 This is the default.
7474
7475 @item -mshared-library-id=n
7476 @opindex mshared-library-id
7477 Specified the identification number of the ID based shared library being
7478 compiled.  Specifying a value of 0 will generate more compact code, specifying
7479 other values will force the allocation of that number to the current
7480 library but is no more space or time efficient than omitting this option.
7481
7482 @item -mlong-calls
7483 @itemx -mno-long-calls
7484 @opindex mlong-calls
7485 @opindex mno-long-calls
7486 Tells the compiler to perform function calls by first loading the
7487 address of the function into a register and then performing a subroutine
7488 call on this register.  This switch is needed if the target function
7489 will lie outside of the 24 bit addressing range of the offset based
7490 version of subroutine call instruction.
7491
7492 This feature is not enabled by default.  Specifying
7493 @option{-mno-long-calls} will restore the default behavior.  Note these
7494 switches have no effect on how the compiler generates code to handle
7495 function calls via function pointers.
7496 @end table
7497
7498 @node CRIS Options
7499 @subsection CRIS Options
7500 @cindex CRIS Options
7501
7502 These options are defined specifically for the CRIS ports.
7503
7504 @table @gcctabopt
7505 @item -march=@var{architecture-type}
7506 @itemx -mcpu=@var{architecture-type}
7507 @opindex march
7508 @opindex mcpu
7509 Generate code for the specified architecture.  The choices for
7510 @var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
7511 respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
7512 Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
7513 @samp{v10}.
7514
7515 @item -mtune=@var{architecture-type}
7516 @opindex mtune
7517 Tune to @var{architecture-type} everything applicable about the generated
7518 code, except for the ABI and the set of available instructions.  The
7519 choices for @var{architecture-type} are the same as for
7520 @option{-march=@var{architecture-type}}.
7521
7522 @item -mmax-stack-frame=@var{n}
7523 @opindex mmax-stack-frame
7524 Warn when the stack frame of a function exceeds @var{n} bytes.
7525
7526 @item -melinux-stacksize=@var{n}
7527 @opindex melinux-stacksize
7528 Only available with the @samp{cris-axis-aout} target.  Arranges for
7529 indications in the program to the kernel loader that the stack of the
7530 program should be set to @var{n} bytes.
7531
7532 @item -metrax4
7533 @itemx -metrax100
7534 @opindex metrax4
7535 @opindex metrax100
7536 The options @option{-metrax4} and @option{-metrax100} are synonyms for
7537 @option{-march=v3} and @option{-march=v8} respectively.
7538
7539 @item -mmul-bug-workaround
7540 @itemx -mno-mul-bug-workaround
7541 @opindex mmul-bug-workaround
7542 @opindex mno-mul-bug-workaround
7543 Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
7544 models where it applies.  This option is active by default.
7545
7546 @item -mpdebug
7547 @opindex mpdebug
7548 Enable CRIS-specific verbose debug-related information in the assembly
7549 code.  This option also has the effect to turn off the @samp{#NO_APP}
7550 formatted-code indicator to the assembler at the beginning of the
7551 assembly file.
7552
7553 @item -mcc-init
7554 @opindex mcc-init
7555 Do not use condition-code results from previous instruction; always emit
7556 compare and test instructions before use of condition codes.
7557
7558 @item -mno-side-effects
7559 @opindex mno-side-effects
7560 Do not emit instructions with side-effects in addressing modes other than
7561 post-increment.
7562
7563 @item -mstack-align
7564 @itemx -mno-stack-align
7565 @itemx -mdata-align
7566 @itemx -mno-data-align
7567 @itemx -mconst-align
7568 @itemx -mno-const-align
7569 @opindex mstack-align
7570 @opindex mno-stack-align
7571 @opindex mdata-align
7572 @opindex mno-data-align
7573 @opindex mconst-align
7574 @opindex mno-const-align
7575 These options (no-options) arranges (eliminate arrangements) for the
7576 stack-frame, individual data and constants to be aligned for the maximum
7577 single data access size for the chosen CPU model.  The default is to
7578 arrange for 32-bit alignment.  ABI details such as structure layout are
7579 not affected by these options.
7580
7581 @item -m32-bit
7582 @itemx -m16-bit
7583 @itemx -m8-bit
7584 @opindex m32-bit
7585 @opindex m16-bit
7586 @opindex m8-bit
7587 Similar to the stack- data- and const-align options above, these options
7588 arrange for stack-frame, writable data and constants to all be 32-bit,
7589 16-bit or 8-bit aligned.  The default is 32-bit alignment.
7590
7591 @item -mno-prologue-epilogue
7592 @itemx -mprologue-epilogue
7593 @opindex mno-prologue-epilogue
7594 @opindex mprologue-epilogue
7595 With @option{-mno-prologue-epilogue}, the normal function prologue and
7596 epilogue that sets up the stack-frame are omitted and no return
7597 instructions or return sequences are generated in the code.  Use this
7598 option only together with visual inspection of the compiled code: no
7599 warnings or errors are generated when call-saved registers must be saved,
7600 or storage for local variable needs to be allocated.
7601
7602 @item -mno-gotplt
7603 @itemx -mgotplt
7604 @opindex mno-gotplt
7605 @opindex mgotplt
7606 With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
7607 instruction sequences that load addresses for functions from the PLT part
7608 of the GOT rather than (traditional on other architectures) calls to the
7609 PLT@.  The default is @option{-mgotplt}.
7610
7611 @item -maout
7612 @opindex maout
7613 Legacy no-op option only recognized with the cris-axis-aout target.
7614
7615 @item -melf
7616 @opindex melf
7617 Legacy no-op option only recognized with the cris-axis-elf and
7618 cris-axis-linux-gnu targets.
7619
7620 @item -melinux
7621 @opindex melinux
7622 Only recognized with the cris-axis-aout target, where it selects a
7623 GNU/linux-like multilib, include files and instruction set for
7624 @option{-march=v8}.
7625
7626 @item -mlinux
7627 @opindex mlinux
7628 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
7629
7630 @item -sim
7631 @opindex sim
7632 This option, recognized for the cris-axis-aout and cris-axis-elf arranges
7633 to link with input-output functions from a simulator library.  Code,
7634 initialized data and zero-initialized data are allocated consecutively.
7635
7636 @item -sim2
7637 @opindex sim2
7638 Like @option{-sim}, but pass linker options to locate initialized data at
7639 0x40000000 and zero-initialized data at 0x80000000.
7640 @end table
7641
7642 @node Darwin Options
7643 @subsection Darwin Options
7644 @cindex Darwin options
7645
7646 These options are defined for all architectures running the Darwin operating
7647 system.
7648
7649 FSF GCC on Darwin does not create ``fat'' object files; it will create
7650 an object file for the single architecture that it was built to
7651 target.  Apple's GCC on Darwin does create ``fat'' files if multiple
7652 @option{-arch} options are used; it does so by running the compiler or
7653 linker multiple times and joining the results together with
7654 @file{lipo}.
7655
7656 The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
7657 @samp{i686}) is determined by the flags that specify the ISA
7658 that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
7659 @option{-force_cpusubtype_ALL} option can be used to override this.
7660
7661 The Darwin tools vary in their behavior when presented with an ISA
7662 mismatch.  The assembler, @file{as}, will only permit instructions to
7663 be used that are valid for the subtype of the file it is generating,
7664 so you cannot put 64-bit instructions in an @samp{ppc750} object file.
7665 The linker for shared libraries, @file{/usr/bin/libtool}, will fail
7666 and print an error if asked to create a shared library with a less
7667 restrictive subtype than its input files (for instance, trying to put
7668 a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
7669 for executables, @file{ld}, will quietly give the executable the most
7670 restrictive subtype of any of its input files.
7671
7672 @table @gcctabopt
7673 @item -F@var{dir}
7674 @opindex F
7675 Add the framework directory @var{dir} to the head of the list of
7676 directories to be searched for header files.  These directories are
7677 interleaved with those specified by @option{-I} options and are
7678 scanned in a left-to-right order.
7679
7680 A framework directory is a directory with frameworks in it.  A
7681 framework is a directory with a @samp{"Headers"} and/or
7682 @samp{"PrivateHeaders"} directory contained directly in it that ends
7683 in @samp{".framework"}.  The name of a framework is the name of this
7684 directory excluding the @samp{".framework"}.  Headers associated with
7685 the framework are found in one of those two directories, with
7686 @samp{"Headers"} being searched first.  A subframework is a framework
7687 directory that is in a framework's @samp{"Frameworks"} directory.
7688 Includes of subframework headers can only appear in a header of a
7689 framework that contains the subframework, or in a sibling subframework
7690 header.  Two subframeworks are siblings if they occur in the same
7691 framework.  A subframework should not have the same name as a
7692 framework, a warning will be issued if this is violated.  Currently a
7693 subframework cannot have subframeworks, in the future, the mechanism
7694 may be extended to support this.  The standard frameworks can be found
7695 in @samp{"/System/Library/Frameworks"} and
7696 @samp{"/Library/Frameworks"}.  An example include looks like
7697 @code{#include <Framework/header.h>}, where @samp{Framework} denotes
7698 the name of the framework and header.h is found in the
7699 @samp{"PrivateHeaders"} or @samp{"Headers"} directory.
7700
7701 @item -gused
7702 @opindex -gused
7703 Emit debugging information for symbols that are used.  For STABS
7704 debugging format, this enables @option{-feliminate-unused-debug-symbols}.
7705 This is by default ON@.
7706
7707 @item -gfull
7708 @opindex -gfull
7709 Emit debugging information for all symbols and types.
7710
7711 @item -mmacosx-version-min=@var{version}
7712 The earliest version of MacOS X that this executable will run on
7713 is @var{version}.  Typical values of @var{version} include @code{10.1},
7714 @code{10.2}, and @code{10.3.9}.
7715
7716 The default for this option is to make choices that seem to be most
7717 useful.  
7718
7719 @item -mone-byte-bool
7720 @opindex -mone-byte-bool
7721 Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
7722 By default @samp{sizeof(bool)} is @samp{4} when compiling for
7723 Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
7724 option has no effect on x86.
7725
7726 @strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
7727 to generate code that is not binary compatible with code generated
7728 without that switch.  Using this switch may require recompiling all
7729 other modules in a program, including system libraries.  Use this
7730 switch to conform to a non-default data model.
7731
7732 @item -mfix-and-continue
7733 @itemx -ffix-and-continue
7734 @itemx -findirect-data
7735 @opindex mfix-and-continue
7736 @opindex ffix-and-continue
7737 @opindex findirect-data
7738 Generate code suitable for fast turn around development.  Needed to
7739 enable gdb to dynamically load @code{.o} files into already running
7740 programs.  @option{-findirect-data} and @option{-ffix-and-continue}
7741 are provided for backwards compatibility.
7742
7743 @item -all_load
7744 @opindex all_load
7745 Loads all members of static archive libraries.
7746 See man ld(1) for more information.
7747
7748 @item -arch_errors_fatal
7749 @opindex arch_errors_fatal
7750 Cause the errors having to do with files that have the wrong architecture
7751 to be fatal.
7752
7753 @item -bind_at_load
7754 @opindex bind_at_load
7755 Causes the output file to be marked such that the dynamic linker will
7756 bind all undefined references when the file is loaded or launched.
7757
7758 @item -bundle
7759 @opindex bundle
7760 Produce a Mach-o bundle format file.
7761 See man ld(1) for more information.
7762
7763 @item -bundle_loader @var{executable}
7764 @opindex bundle_loader
7765 This option specifies the @var{executable} that will be loading the build
7766 output file being linked.  See man ld(1) for more information.
7767
7768 @item -dynamiclib
7769 @opindex -dynamiclib
7770 When passed this option, GCC will produce a dynamic library instead of
7771 an executable when linking, using the Darwin @file{libtool} command.
7772
7773 @item -force_cpusubtype_ALL
7774 @opindex -force_cpusubtype_ALL
7775 This causes GCC's output file to have the @var{ALL} subtype, instead of
7776 one controlled by the @option{-mcpu} or @option{-march} option.
7777
7778 @item -allowable_client  @var{client_name}
7779 @itemx -client_name
7780 @itemx -compatibility_version
7781 @itemx -current_version
7782 @itemx -dead_strip
7783 @itemx -dependency-file
7784 @itemx -dylib_file
7785 @itemx -dylinker_install_name
7786 @itemx -dynamic
7787 @itemx -exported_symbols_list
7788 @itemx -filelist
7789 @itemx -flat_namespace
7790 @itemx -force_flat_namespace
7791 @itemx -headerpad_max_install_names
7792 @itemx -image_base
7793 @itemx -init
7794 @itemx -install_name
7795 @itemx -keep_private_externs
7796 @itemx -multi_module
7797 @itemx -multiply_defined
7798 @itemx -multiply_defined_unused
7799 @itemx -noall_load
7800 @itemx -no_dead_strip_inits_and_terms
7801 @itemx -nofixprebinding
7802 @itemx -nomultidefs
7803 @itemx -noprebind
7804 @itemx -noseglinkedit
7805 @itemx -pagezero_size
7806 @itemx -prebind
7807 @itemx -prebind_all_twolevel_modules
7808 @itemx -private_bundle
7809 @itemx -read_only_relocs
7810 @itemx -sectalign
7811 @itemx -sectobjectsymbols
7812 @itemx -whyload
7813 @itemx -seg1addr
7814 @itemx -sectcreate
7815 @itemx -sectobjectsymbols
7816 @itemx -sectorder
7817 @itemx -segaddr
7818 @itemx -segs_read_only_addr
7819 @itemx -segs_read_write_addr
7820 @itemx -seg_addr_table
7821 @itemx -seg_addr_table_filename
7822 @itemx -seglinkedit
7823 @itemx -segprot
7824 @itemx -segs_read_only_addr
7825 @itemx -segs_read_write_addr
7826 @itemx -single_module
7827 @itemx -static
7828 @itemx -sub_library
7829 @itemx -sub_umbrella
7830 @itemx -twolevel_namespace
7831 @itemx -umbrella
7832 @itemx -undefined
7833 @itemx -unexported_symbols_list
7834 @itemx -weak_reference_mismatches
7835 @itemx -whatsloaded
7836
7837 @opindex allowable_client
7838 @opindex client_name
7839 @opindex compatibility_version
7840 @opindex current_version
7841 @opindex dead_strip
7842 @opindex dependency-file
7843 @opindex dylib_file
7844 @opindex dylinker_install_name
7845 @opindex dynamic
7846 @opindex exported_symbols_list
7847 @opindex filelist
7848 @opindex flat_namespace
7849 @opindex force_flat_namespace
7850 @opindex headerpad_max_install_names
7851 @opindex image_base
7852 @opindex init
7853 @opindex install_name
7854 @opindex keep_private_externs
7855 @opindex multi_module
7856 @opindex multiply_defined
7857 @opindex multiply_defined_unused
7858 @opindex noall_load
7859 @opindex no_dead_strip_inits_and_terms
7860 @opindex nofixprebinding
7861 @opindex nomultidefs
7862 @opindex noprebind
7863 @opindex noseglinkedit
7864 @opindex pagezero_size
7865 @opindex prebind
7866 @opindex prebind_all_twolevel_modules
7867 @opindex private_bundle
7868 @opindex read_only_relocs
7869 @opindex sectalign
7870 @opindex sectobjectsymbols
7871 @opindex whyload
7872 @opindex seg1addr
7873 @opindex sectcreate
7874 @opindex sectobjectsymbols
7875 @opindex sectorder
7876 @opindex segaddr
7877 @opindex segs_read_only_addr
7878 @opindex segs_read_write_addr
7879 @opindex seg_addr_table
7880 @opindex seg_addr_table_filename
7881 @opindex seglinkedit
7882 @opindex segprot
7883 @opindex segs_read_only_addr
7884 @opindex segs_read_write_addr
7885 @opindex single_module
7886 @opindex static
7887 @opindex sub_library
7888 @opindex sub_umbrella
7889 @opindex twolevel_namespace
7890 @opindex umbrella
7891 @opindex undefined
7892 @opindex unexported_symbols_list
7893 @opindex weak_reference_mismatches
7894 @opindex whatsloaded
7895
7896 These options are passed to the Darwin linker.  The Darwin linker man page
7897 describes them in detail.
7898 @end table
7899
7900 @node DEC Alpha Options
7901 @subsection DEC Alpha Options
7902
7903 These @samp{-m} options are defined for the DEC Alpha implementations:
7904
7905 @table @gcctabopt
7906 @item -mno-soft-float
7907 @itemx -msoft-float
7908 @opindex mno-soft-float
7909 @opindex msoft-float
7910 Use (do not use) the hardware floating-point instructions for
7911 floating-point operations.  When @option{-msoft-float} is specified,
7912 functions in @file{libgcc.a} will be used to perform floating-point
7913 operations.  Unless they are replaced by routines that emulate the
7914 floating-point operations, or compiled in such a way as to call such
7915 emulations routines, these routines will issue floating-point
7916 operations.   If you are compiling for an Alpha without floating-point
7917 operations, you must ensure that the library is built so as not to call
7918 them.
7919
7920 Note that Alpha implementations without floating-point operations are
7921 required to have floating-point registers.
7922
7923 @item -mfp-reg
7924 @itemx -mno-fp-regs
7925 @opindex mfp-reg
7926 @opindex mno-fp-regs
7927 Generate code that uses (does not use) the floating-point register set.
7928 @option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
7929 register set is not used, floating point operands are passed in integer
7930 registers as if they were integers and floating-point results are passed
7931 in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
7932 so any function with a floating-point argument or return value called by code
7933 compiled with @option{-mno-fp-regs} must also be compiled with that
7934 option.
7935
7936 A typical use of this option is building a kernel that does not use,
7937 and hence need not save and restore, any floating-point registers.
7938
7939 @item -mieee
7940 @opindex mieee
7941 The Alpha architecture implements floating-point hardware optimized for
7942 maximum performance.  It is mostly compliant with the IEEE floating
7943 point standard.  However, for full compliance, software assistance is
7944 required.  This option generates code fully IEEE compliant code
7945 @emph{except} that the @var{inexact-flag} is not maintained (see below).
7946 If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
7947 defined during compilation.  The resulting code is less efficient but is
7948 able to correctly support denormalized numbers and exceptional IEEE
7949 values such as not-a-number and plus/minus infinity.  Other Alpha
7950 compilers call this option @option{-ieee_with_no_inexact}.
7951
7952 @item -mieee-with-inexact
7953 @opindex mieee-with-inexact
7954 This is like @option{-mieee} except the generated code also maintains
7955 the IEEE @var{inexact-flag}.  Turning on this option causes the
7956 generated code to implement fully-compliant IEEE math.  In addition to
7957 @code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
7958 macro.  On some Alpha implementations the resulting code may execute
7959 significantly slower than the code generated by default.  Since there is
7960 very little code that depends on the @var{inexact-flag}, you should
7961 normally not specify this option.  Other Alpha compilers call this
7962 option @option{-ieee_with_inexact}.
7963
7964 @item -mfp-trap-mode=@var{trap-mode}
7965 @opindex mfp-trap-mode
7966 This option controls what floating-point related traps are enabled.
7967 Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
7968 The trap mode can be set to one of four values:
7969
7970 @table @samp
7971 @item n
7972 This is the default (normal) setting.  The only traps that are enabled
7973 are the ones that cannot be disabled in software (e.g., division by zero
7974 trap).
7975
7976 @item u
7977 In addition to the traps enabled by @samp{n}, underflow traps are enabled
7978 as well.
7979
7980 @item su
7981 Like @samp{su}, but the instructions are marked to be safe for software
7982 completion (see Alpha architecture manual for details).
7983
7984 @item sui
7985 Like @samp{su}, but inexact traps are enabled as well.
7986 @end table
7987
7988 @item -mfp-rounding-mode=@var{rounding-mode}
7989 @opindex mfp-rounding-mode
7990 Selects the IEEE rounding mode.  Other Alpha compilers call this option
7991 @option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
7992 of:
7993
7994 @table @samp
7995 @item n
7996 Normal IEEE rounding mode.  Floating point numbers are rounded towards
7997 the nearest machine number or towards the even machine number in case
7998 of a tie.
7999
8000 @item m
8001 Round towards minus infinity.
8002
8003 @item c
8004 Chopped rounding mode.  Floating point numbers are rounded towards zero.
8005
8006 @item d
8007 Dynamic rounding mode.  A field in the floating point control register
8008 (@var{fpcr}, see Alpha architecture reference manual) controls the
8009 rounding mode in effect.  The C library initializes this register for
8010 rounding towards plus infinity.  Thus, unless your program modifies the
8011 @var{fpcr}, @samp{d} corresponds to round towards plus infinity.
8012 @end table
8013
8014 @item -mtrap-precision=@var{trap-precision}
8015 @opindex mtrap-precision
8016 In the Alpha architecture, floating point traps are imprecise.  This
8017 means without software assistance it is impossible to recover from a
8018 floating trap and program execution normally needs to be terminated.
8019 GCC can generate code that can assist operating system trap handlers
8020 in determining the exact location that caused a floating point trap.
8021 Depending on the requirements of an application, different levels of
8022 precisions can be selected:
8023
8024 @table @samp
8025 @item p
8026 Program precision.  This option is the default and means a trap handler
8027 can only identify which program caused a floating point exception.
8028
8029 @item f
8030 Function precision.  The trap handler can determine the function that
8031 caused a floating point exception.
8032
8033 @item i
8034 Instruction precision.  The trap handler can determine the exact
8035 instruction that caused a floating point exception.
8036 @end table
8037
8038 Other Alpha compilers provide the equivalent options called
8039 @option{-scope_safe} and @option{-resumption_safe}.
8040
8041 @item -mieee-conformant
8042 @opindex mieee-conformant
8043 This option marks the generated code as IEEE conformant.  You must not
8044 use this option unless you also specify @option{-mtrap-precision=i} and either
8045 @option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
8046 is to emit the line @samp{.eflag 48} in the function prologue of the
8047 generated assembly file.  Under DEC Unix, this has the effect that
8048 IEEE-conformant math library routines will be linked in.
8049
8050 @item -mbuild-constants
8051 @opindex mbuild-constants
8052 Normally GCC examines a 32- or 64-bit integer constant to
8053 see if it can construct it from smaller constants in two or three
8054 instructions.  If it cannot, it will output the constant as a literal and
8055 generate code to load it from the data segment at runtime.
8056
8057 Use this option to require GCC to construct @emph{all} integer constants
8058 using code, even if it takes more instructions (the maximum is six).
8059
8060 You would typically use this option to build a shared library dynamic
8061 loader.  Itself a shared library, it must relocate itself in memory
8062 before it can find the variables and constants in its own data segment.
8063
8064 @item -malpha-as
8065 @itemx -mgas
8066 @opindex malpha-as
8067 @opindex mgas
8068 Select whether to generate code to be assembled by the vendor-supplied
8069 assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
8070
8071 @item -mbwx
8072 @itemx -mno-bwx
8073 @itemx -mcix
8074 @itemx -mno-cix
8075 @itemx -mfix
8076 @itemx -mno-fix
8077 @itemx -mmax
8078 @itemx -mno-max
8079 @opindex mbwx
8080 @opindex mno-bwx
8081 @opindex mcix
8082 @opindex mno-cix
8083 @opindex mfix
8084 @opindex mno-fix
8085 @opindex mmax
8086 @opindex mno-max
8087 Indicate whether GCC should generate code to use the optional BWX,
8088 CIX, FIX and MAX instruction sets.  The default is to use the instruction
8089 sets supported by the CPU type specified via @option{-mcpu=} option or that
8090 of the CPU on which GCC was built if none was specified.
8091
8092 @item -mfloat-vax
8093 @itemx -mfloat-ieee
8094 @opindex mfloat-vax
8095 @opindex mfloat-ieee
8096 Generate code that uses (does not use) VAX F and G floating point
8097 arithmetic instead of IEEE single and double precision.
8098
8099 @item -mexplicit-relocs
8100 @itemx -mno-explicit-relocs
8101 @opindex mexplicit-relocs
8102 @opindex mno-explicit-relocs
8103 Older Alpha assemblers provided no way to generate symbol relocations
8104 except via assembler macros.  Use of these macros does not allow
8105 optimal instruction scheduling.  GNU binutils as of version 2.12
8106 supports a new syntax that allows the compiler to explicitly mark
8107 which relocations should apply to which instructions.  This option
8108 is mostly useful for debugging, as GCC detects the capabilities of
8109 the assembler when it is built and sets the default accordingly.
8110
8111 @item -msmall-data
8112 @itemx -mlarge-data
8113 @opindex msmall-data
8114 @opindex mlarge-data
8115 When @option{-mexplicit-relocs} is in effect, static data is
8116 accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
8117 is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
8118 (the @code{.sdata} and @code{.sbss} sections) and are accessed via
8119 16-bit relocations off of the @code{$gp} register.  This limits the
8120 size of the small data area to 64KB, but allows the variables to be
8121 directly accessed via a single instruction.
8122
8123 The default is @option{-mlarge-data}.  With this option the data area
8124 is limited to just below 2GB@.  Programs that require more than 2GB of
8125 data must use @code{malloc} or @code{mmap} to allocate the data in the
8126 heap instead of in the program's data segment.
8127
8128 When generating code for shared libraries, @option{-fpic} implies
8129 @option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
8130
8131 @item -msmall-text
8132 @itemx -mlarge-text
8133 @opindex msmall-text
8134 @opindex mlarge-text
8135 When @option{-msmall-text} is used, the compiler assumes that the
8136 code of the entire program (or shared library) fits in 4MB, and is
8137 thus reachable with a branch instruction.  When @option{-msmall-data}
8138 is used, the compiler can assume that all local symbols share the
8139 same @code{$gp} value, and thus reduce the number of instructions
8140 required for a function call from 4 to 1.
8141
8142 The default is @option{-mlarge-text}.
8143
8144 @item -mcpu=@var{cpu_type}
8145 @opindex mcpu
8146 Set the instruction set and instruction scheduling parameters for
8147 machine type @var{cpu_type}.  You can specify either the @samp{EV}
8148 style name or the corresponding chip number.  GCC supports scheduling
8149 parameters for the EV4, EV5 and EV6 family of processors and will
8150 choose the default values for the instruction set from the processor
8151 you specify.  If you do not specify a processor type, GCC will default
8152 to the processor on which the compiler was built.
8153
8154 Supported values for @var{cpu_type} are
8155
8156 @table @samp
8157 @item ev4
8158 @itemx ev45
8159 @itemx 21064
8160 Schedules as an EV4 and has no instruction set extensions.
8161
8162 @item ev5
8163 @itemx 21164
8164 Schedules as an EV5 and has no instruction set extensions.
8165
8166 @item ev56
8167 @itemx 21164a
8168 Schedules as an EV5 and supports the BWX extension.
8169
8170 @item pca56
8171 @itemx 21164pc
8172 @itemx 21164PC
8173 Schedules as an EV5 and supports the BWX and MAX extensions.
8174
8175 @item ev6
8176 @itemx 21264
8177 Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
8178
8179 @item ev67
8180 @itemx 21264a
8181 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
8182 @end table
8183
8184 @item -mtune=@var{cpu_type}
8185 @opindex mtune
8186 Set only the instruction scheduling parameters for machine type
8187 @var{cpu_type}.  The instruction set is not changed.
8188
8189 @item -mmemory-latency=@var{time}
8190 @opindex mmemory-latency
8191 Sets the latency the scheduler should assume for typical memory
8192 references as seen by the application.  This number is highly
8193 dependent on the memory access patterns used by the application
8194 and the size of the external cache on the machine.
8195
8196 Valid options for @var{time} are
8197
8198 @table @samp
8199 @item @var{number}
8200 A decimal number representing clock cycles.
8201
8202 @item L1
8203 @itemx L2
8204 @itemx L3
8205 @itemx main
8206 The compiler contains estimates of the number of clock cycles for
8207 ``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8208 (also called Dcache, Scache, and Bcache), as well as to main memory.
8209 Note that L3 is only valid for EV5.
8210
8211 @end table
8212 @end table
8213
8214 @node DEC Alpha/VMS Options
8215 @subsection DEC Alpha/VMS Options
8216
8217 These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
8218
8219 @table @gcctabopt
8220 @item -mvms-return-codes
8221 @opindex mvms-return-codes
8222 Return VMS condition codes from main.  The default is to return POSIX
8223 style condition (e.g.@ error) codes.
8224 @end table
8225
8226 @node FRV Options
8227 @subsection FRV Options
8228 @cindex FRV Options
8229
8230 @table @gcctabopt
8231 @item -mgpr-32
8232 @opindex mgpr-32
8233
8234 Only use the first 32 general purpose registers.
8235
8236 @item -mgpr-64
8237 @opindex mgpr-64
8238
8239 Use all 64 general purpose registers.
8240
8241 @item -mfpr-32
8242 @opindex mfpr-32
8243
8244 Use only the first 32 floating point registers.
8245
8246 @item -mfpr-64
8247 @opindex mfpr-64
8248
8249 Use all 64 floating point registers
8250
8251 @item -mhard-float
8252 @opindex mhard-float
8253
8254 Use hardware instructions for floating point operations.
8255
8256 @item -msoft-float
8257 @opindex msoft-float
8258
8259 Use library routines for floating point operations.
8260
8261 @item -malloc-cc
8262 @opindex malloc-cc
8263
8264 Dynamically allocate condition code registers.
8265
8266 @item -mfixed-cc
8267 @opindex mfixed-cc
8268
8269 Do not try to dynamically allocate condition code registers, only
8270 use @code{icc0} and @code{fcc0}.
8271
8272 @item -mdword
8273 @opindex mdword
8274
8275 Change ABI to use double word insns.
8276
8277 @item -mno-dword
8278 @opindex mno-dword
8279
8280 Do not use double word instructions.
8281
8282 @item -mdouble
8283 @opindex mdouble
8284
8285 Use floating point double instructions.
8286
8287 @item -mno-double
8288 @opindex mno-double
8289
8290 Do not use floating point double instructions.
8291
8292 @item -mmedia
8293 @opindex mmedia
8294
8295 Use media instructions.
8296
8297 @item -mno-media
8298 @opindex mno-media
8299
8300 Do not use media instructions.
8301
8302 @item -mmuladd
8303 @opindex mmuladd
8304
8305 Use multiply and add/subtract instructions.
8306
8307 @item -mno-muladd
8308 @opindex mno-muladd
8309
8310 Do not use multiply and add/subtract instructions.
8311
8312 @item -mfdpic
8313 @opindex mfdpic
8314
8315 Select the FDPIC ABI, that uses function descriptors to represent
8316 pointers to functions.  Without any PIC/PIE-related options, it
8317 implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
8318 assumes GOT entries and small data are within a 12-bit range from the
8319 GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
8320 are computed with 32 bits.
8321
8322 @item -minline-plt
8323 @opindex minline-plt
8324
8325 Enable inlining of PLT entries in function calls to functions that are
8326 not known to bind locally.  It has no effect without @option{-mfdpic}.
8327 It's enabled by default if optimizing for speed and compiling for
8328 shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
8329 optimization option such as @option{-O3} or above is present in the
8330 command line.
8331
8332 @item -mTLS
8333 @opindex TLS
8334
8335 Assume a large TLS segment when generating thread-local code.
8336
8337 @item -mtls
8338 @opindex tls
8339
8340 Do not assume a large TLS segment when generating thread-local code.
8341
8342 @item -mgprel-ro
8343 @opindex mgprel-ro
8344
8345 Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
8346 that is known to be in read-only sections.  It's enabled by default,
8347 except for @option{-fpic} or @option{-fpie}: even though it may help
8348 make the global offset table smaller, it trades 1 instruction for 4.
8349 With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
8350 one of which may be shared by multiple symbols, and it avoids the need
8351 for a GOT entry for the referenced symbol, so it's more likely to be a
8352 win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
8353
8354 @item -multilib-library-pic
8355 @opindex multilib-library-pic
8356
8357 Link with the (library, not FD) pic libraries.  It's implied by
8358 @option{-mlibrary-pic}, as well as by @option{-fPIC} and
8359 @option{-fpic} without @option{-mfdpic}.  You should never have to use
8360 it explicitly.
8361
8362 @item -mlinked-fp
8363 @opindex mlinked-fp
8364
8365 Follow the EABI requirement of always creating a frame pointer whenever
8366 a stack frame is allocated.  This option is enabled by default and can
8367 be disabled with @option{-mno-linked-fp}.
8368
8369 @item -mlong-calls
8370 @opindex mlong-calls
8371
8372 Use indirect addressing to call functions outside the current
8373 compilation unit.  This allows the functions to be placed anywhere
8374 within the 32-bit address space.
8375
8376 @item -malign-labels
8377 @opindex malign-labels
8378
8379 Try to align labels to an 8-byte boundary by inserting nops into the
8380 previous packet.  This option only has an effect when VLIW packing
8381 is enabled.  It doesn't create new packets; it merely adds nops to
8382 existing ones.
8383
8384 @item -mlibrary-pic
8385 @opindex mlibrary-pic
8386
8387 Generate position-independent EABI code.
8388
8389 @item -macc-4
8390 @opindex macc-4
8391
8392 Use only the first four media accumulator registers.
8393
8394 @item -macc-8
8395 @opindex macc-8
8396
8397 Use all eight media accumulator registers.
8398
8399 @item -mpack
8400 @opindex mpack
8401
8402 Pack VLIW instructions.
8403
8404 @item -mno-pack
8405 @opindex mno-pack
8406
8407 Do not pack VLIW instructions.
8408
8409 @item -mno-eflags
8410 @opindex mno-eflags
8411
8412 Do not mark ABI switches in e_flags.
8413
8414 @item -mcond-move
8415 @opindex mcond-move
8416
8417 Enable the use of conditional-move instructions (default).
8418
8419 This switch is mainly for debugging the compiler and will likely be removed
8420 in a future version.
8421
8422 @item -mno-cond-move
8423 @opindex mno-cond-move
8424
8425 Disable the use of conditional-move instructions.
8426
8427 This switch is mainly for debugging the compiler and will likely be removed
8428 in a future version.
8429
8430 @item -mscc
8431 @opindex mscc
8432
8433 Enable the use of conditional set instructions (default).
8434
8435 This switch is mainly for debugging the compiler and will likely be removed
8436 in a future version.
8437
8438 @item -mno-scc
8439 @opindex mno-scc
8440
8441 Disable the use of conditional set instructions.
8442
8443 This switch is mainly for debugging the compiler and will likely be removed
8444 in a future version.
8445
8446 @item -mcond-exec
8447 @opindex mcond-exec
8448
8449 Enable the use of conditional execution (default).
8450
8451 This switch is mainly for debugging the compiler and will likely be removed
8452 in a future version.
8453
8454 @item -mno-cond-exec
8455 @opindex mno-cond-exec
8456
8457 Disable the use of conditional execution.
8458
8459 This switch is mainly for debugging the compiler and will likely be removed
8460 in a future version.
8461
8462 @item -mvliw-branch
8463 @opindex mvliw-branch
8464
8465 Run a pass to pack branches into VLIW instructions (default).
8466
8467 This switch is mainly for debugging the compiler and will likely be removed
8468 in a future version.
8469
8470 @item -mno-vliw-branch
8471 @opindex mno-vliw-branch
8472
8473 Do not run a pass to pack branches into VLIW instructions.
8474
8475 This switch is mainly for debugging the compiler and will likely be removed
8476 in a future version.
8477
8478 @item -mmulti-cond-exec
8479 @opindex mmulti-cond-exec
8480
8481 Enable optimization of @code{&&} and @code{||} in conditional execution
8482 (default).
8483
8484 This switch is mainly for debugging the compiler and will likely be removed
8485 in a future version.
8486
8487 @item -mno-multi-cond-exec
8488 @opindex mno-multi-cond-exec
8489
8490 Disable optimization of @code{&&} and @code{||} in conditional execution.
8491
8492 This switch is mainly for debugging the compiler and will likely be removed
8493 in a future version.
8494
8495 @item -mnested-cond-exec
8496 @opindex mnested-cond-exec
8497
8498 Enable nested conditional execution optimizations (default).
8499
8500 This switch is mainly for debugging the compiler and will likely be removed
8501 in a future version.
8502
8503 @item -mno-nested-cond-exec
8504 @opindex mno-nested-cond-exec
8505
8506 Disable nested conditional execution optimizations.
8507
8508 This switch is mainly for debugging the compiler and will likely be removed
8509 in a future version.
8510
8511 @item -mtomcat-stats
8512 @opindex mtomcat-stats
8513
8514 Cause gas to print out tomcat statistics.
8515
8516 @item -mcpu=@var{cpu}
8517 @opindex mcpu
8518
8519 Select the processor type for which to generate code.  Possible values are
8520 @samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
8521 @samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
8522
8523 @end table
8524
8525 @node H8/300 Options
8526 @subsection H8/300 Options
8527
8528 These @samp{-m} options are defined for the H8/300 implementations:
8529
8530 @table @gcctabopt
8531 @item -mrelax
8532 @opindex mrelax
8533 Shorten some address references at link time, when possible; uses the
8534 linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
8535 ld, Using ld}, for a fuller description.
8536
8537 @item -mh
8538 @opindex mh
8539 Generate code for the H8/300H@.
8540
8541 @item -ms
8542 @opindex ms
8543 Generate code for the H8S@.
8544
8545 @item -mn
8546 @opindex mn
8547 Generate code for the H8S and H8/300H in the normal mode.  This switch
8548 must be used either with @option{-mh} or @option{-ms}.
8549
8550 @item -ms2600
8551 @opindex ms2600
8552 Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
8553
8554 @item -mint32
8555 @opindex mint32
8556 Make @code{int} data 32 bits by default.
8557
8558 @item -malign-300
8559 @opindex malign-300
8560 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
8561 The default for the H8/300H and H8S is to align longs and floats on 4
8562 byte boundaries.
8563 @option{-malign-300} causes them to be aligned on 2 byte boundaries.
8564 This option has no effect on the H8/300.
8565 @end table
8566
8567 @node HPPA Options
8568 @subsection HPPA Options
8569 @cindex HPPA Options
8570
8571 These @samp{-m} options are defined for the HPPA family of computers:
8572
8573 @table @gcctabopt
8574 @item -march=@var{architecture-type}
8575 @opindex march
8576 Generate code for the specified architecture.  The choices for
8577 @var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
8578 1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
8579 @file{/usr/lib/sched.models} on an HP-UX system to determine the proper
8580 architecture option for your machine.  Code compiled for lower numbered
8581 architectures will run on higher numbered architectures, but not the
8582 other way around.
8583
8584 @item -mpa-risc-1-0
8585 @itemx -mpa-risc-1-1
8586 @itemx -mpa-risc-2-0
8587 @opindex mpa-risc-1-0
8588 @opindex mpa-risc-1-1
8589 @opindex mpa-risc-2-0
8590 Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
8591
8592 @item -mbig-switch
8593 @opindex mbig-switch
8594 Generate code suitable for big switch tables.  Use this option only if
8595 the assembler/linker complain about out of range branches within a switch
8596 table.
8597
8598 @item -mjump-in-delay
8599 @opindex mjump-in-delay
8600 Fill delay slots of function calls with unconditional jump instructions
8601 by modifying the return pointer for the function call to be the target
8602 of the conditional jump.
8603
8604 @item -mdisable-fpregs
8605 @opindex mdisable-fpregs
8606 Prevent floating point registers from being used in any manner.  This is
8607 necessary for compiling kernels which perform lazy context switching of
8608 floating point registers.  If you use this option and attempt to perform
8609 floating point operations, the compiler will abort.
8610
8611 @item -mdisable-indexing
8612 @opindex mdisable-indexing
8613 Prevent the compiler from using indexing address modes.  This avoids some
8614 rather obscure problems when compiling MIG generated code under MACH@.
8615
8616 @item -mno-space-regs
8617 @opindex mno-space-regs
8618 Generate code that assumes the target has no space registers.  This allows
8619 GCC to generate faster indirect calls and use unscaled index address modes.
8620
8621 Such code is suitable for level 0 PA systems and kernels.
8622
8623 @item -mfast-indirect-calls
8624 @opindex mfast-indirect-calls
8625 Generate code that assumes calls never cross space boundaries.  This
8626 allows GCC to emit code which performs faster indirect calls.
8627
8628 This option will not work in the presence of shared libraries or nested
8629 functions.
8630
8631 @item -mfixed-range=@var{register-range}
8632 @opindex mfixed-range
8633 Generate code treating the given register range as fixed registers.
8634 A fixed register is one that the register allocator can not use.  This is
8635 useful when compiling kernel code.  A register range is specified as
8636 two registers separated by a dash.  Multiple register ranges can be
8637 specified separated by a comma.
8638
8639 @item -mlong-load-store
8640 @opindex mlong-load-store
8641 Generate 3-instruction load and store sequences as sometimes required by
8642 the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
8643 the HP compilers.
8644
8645 @item -mportable-runtime
8646 @opindex mportable-runtime
8647 Use the portable calling conventions proposed by HP for ELF systems.
8648
8649 @item -mgas
8650 @opindex mgas
8651 Enable the use of assembler directives only GAS understands.
8652
8653 @item -mschedule=@var{cpu-type}
8654 @opindex mschedule
8655 Schedule code according to the constraints for the machine type
8656 @var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
8657 @samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
8658 to @file{/usr/lib/sched.models} on an HP-UX system to determine the
8659 proper scheduling option for your machine.  The default scheduling is
8660 @samp{8000}.
8661
8662 @item -mlinker-opt
8663 @opindex mlinker-opt
8664 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
8665 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
8666 linkers in which they give bogus error messages when linking some programs.
8667
8668 @item -msoft-float
8669 @opindex msoft-float
8670 Generate output containing library calls for floating point.
8671 @strong{Warning:} the requisite libraries are not available for all HPPA
8672 targets.  Normally the facilities of the machine's usual C compiler are
8673 used, but this cannot be done directly in cross-compilation.  You must make
8674 your own arrangements to provide suitable library functions for
8675 cross-compilation.  The embedded target @samp{hppa1.1-*-pro}
8676 does provide software floating point support.
8677
8678 @option{-msoft-float} changes the calling convention in the output file;
8679 therefore, it is only useful if you compile @emph{all} of a program with
8680 this option.  In particular, you need to compile @file{libgcc.a}, the
8681 library that comes with GCC, with @option{-msoft-float} in order for
8682 this to work.
8683
8684 @item -msio
8685 @opindex msio
8686 Generate the predefine, @code{_SIO}, for server IO@.  The default is
8687 @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
8688 @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
8689 options are available under HP-UX and HI-UX@.
8690
8691 @item -mgnu-ld
8692 @opindex gnu-ld
8693 Use GNU ld specific options.  This passes @option{-shared} to ld when
8694 building a shared library.  It is the default when GCC is configured,
8695 explicitly or implicitly, with the GNU linker.  This option does not
8696 have any affect on which ld is called, it only changes what parameters
8697 are passed to that ld.  The ld that is called is determined by the
8698 @option{--with-ld} configure option, GCC's program search path, and
8699 finally by the user's @env{PATH}.  The linker used by GCC can be printed
8700 using @samp{which `gcc -print-prog-name=ld`}.
8701
8702 @item -mhp-ld
8703 @opindex hp-ld
8704 Use HP ld specific options.  This passes @option{-b} to ld when building
8705 a shared library and passes @option{+Accept TypeMismatch} to ld on all
8706 links.  It is the default when GCC is configured, explicitly or
8707 implicitly, with the HP linker.  This option does not have any affect on
8708 which ld is called, it only changes what parameters are passed to that
8709 ld.  The ld that is called is determined by the @option{--with-ld}
8710 configure option, GCC's program search path, and finally by the user's
8711 @env{PATH}.  The linker used by GCC can be printed using @samp{which
8712 `gcc -print-prog-name=ld`}.
8713
8714 @item -mlong-calls
8715 @opindex mno-long-calls
8716 Generate code that uses long call sequences.  This ensures that a call
8717 is always able to reach linker generated stubs.  The default is to generate
8718 long calls only when the distance from the call site to the beginning
8719 of the function or translation unit, as the case may be, exceeds a
8720 predefined limit set by the branch type being used.  The limits for
8721 normal calls are 7,600,000 and 240,000 bytes, respectively for the
8722 PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
8723 240,000 bytes.
8724
8725 Distances are measured from the beginning of functions when using the
8726 @option{-ffunction-sections} option, or when using the @option{-mgas}
8727 and @option{-mno-portable-runtime} options together under HP-UX with
8728 the SOM linker.
8729
8730 It is normally not desirable to use this option as it will degrade
8731 performance.  However, it may be useful in large applications,
8732 particularly when partial linking is used to build the application.
8733
8734 The types of long calls used depends on the capabilities of the
8735 assembler and linker, and the type of code being generated.  The
8736 impact on systems that support long absolute calls, and long pic
8737 symbol-difference or pc-relative calls should be relatively small.
8738 However, an indirect call is used on 32-bit ELF systems in pic code
8739 and it is quite long.
8740
8741 @item -munix=@var{unix-std}
8742 @opindex march
8743 Generate compiler predefines and select a startfile for the specified
8744 UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
8745 and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
8746 is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
8747 11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
8748 @samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
8749 and later.
8750
8751 @option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
8752 @option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
8753 and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
8754 @option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
8755 @code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
8756 @code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
8757
8758 It is @emph{important} to note that this option changes the interfaces
8759 for various library routines.  It also affects the operational behavior
8760 of the C library.  Thus, @emph{extreme} care is needed in using this
8761 option.
8762
8763 Library code that is intended to operate with more than one UNIX
8764 standard must test, set and restore the variable @var{__xpg4_extended_mask}
8765 as appropriate.  Most GNU software doesn't provide this capability.
8766
8767 @item -nolibdld
8768 @opindex nolibdld
8769 Suppress the generation of link options to search libdld.sl when the
8770 @option{-static} option is specified on HP-UX 10 and later.
8771
8772 @item -static
8773 @opindex static
8774 The HP-UX implementation of setlocale in libc has a dependency on
8775 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
8776 when the @option{-static} option is specified, special link options
8777 are needed to resolve this dependency.
8778
8779 On HP-UX 10 and later, the GCC driver adds the necessary options to
8780 link with libdld.sl when the @option{-static} option is specified.
8781 This causes the resulting binary to be dynamic.  On the 64-bit port,
8782 the linkers generate dynamic binaries by default in any case.  The
8783 @option{-nolibdld} option can be used to prevent the GCC driver from
8784 adding these link options.
8785
8786 @item -threads
8787 @opindex threads
8788 Add support for multithreading with the @dfn{dce thread} library
8789 under HP-UX@.  This option sets flags for both the preprocessor and
8790 linker.
8791 @end table
8792
8793 @node i386 and x86-64 Options
8794 @subsection Intel 386 and AMD x86-64 Options
8795 @cindex i386 Options
8796 @cindex x86-64 Options
8797 @cindex Intel 386 Options
8798 @cindex AMD x86-64 Options
8799
8800 These @samp{-m} options are defined for the i386 and x86-64 family of
8801 computers:
8802
8803 @table @gcctabopt
8804 @item -mtune=@var{cpu-type}
8805 @opindex mtune
8806 Tune to @var{cpu-type} everything applicable about the generated code, except
8807 for the ABI and the set of available instructions.  The choices for
8808 @var{cpu-type} are:
8809 @table @emph
8810 @item i386
8811 Original Intel's i386 CPU@.
8812 @item i486
8813 Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
8814 @item i586, pentium
8815 Intel Pentium CPU with no MMX support.
8816 @item pentium-mmx
8817 Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
8818 @item i686, pentiumpro
8819 Intel PentiumPro CPU@.
8820 @item pentium2
8821 Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
8822 @item pentium3, pentium3m
8823 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
8824 support.
8825 @item pentium-m
8826 Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
8827 support.  Used by Centrino notebooks.
8828 @item pentium4, pentium4m
8829 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
8830 @item prescott
8831 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
8832 set support.
8833 @item nocona
8834 Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
8835 SSE2 and SSE3 instruction set support.
8836 @item k6
8837 AMD K6 CPU with MMX instruction set support.
8838 @item k6-2, k6-3
8839 Improved versions of AMD K6 CPU with MMX and 3dNOW! instruction set support.
8840 @item athlon, athlon-tbird
8841 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE prefetch instructions
8842 support.
8843 @item athlon-4, athlon-xp, athlon-mp
8844 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and full SSE
8845 instruction set support.
8846 @item k8, opteron, athlon64, athlon-fx
8847 AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
8848 MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and 64-bit instruction set extensions.)
8849 @item winchip-c6
8850 IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
8851 set support.
8852 @item winchip2
8853 IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3dNOW!
8854 instruction set support.
8855 @item c3
8856 Via C3 CPU with MMX and 3dNOW! instruction set support.  (No scheduling is
8857 implemented for this chip.)
8858 @item c3-2
8859 Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
8860 implemented for this chip.)
8861 @end table
8862
8863 While picking a specific @var{cpu-type} will schedule things appropriately
8864 for that particular chip, the compiler will not generate any code that
8865 does not run on the i386 without the @option{-march=@var{cpu-type}} option
8866 being used.
8867
8868 @item -march=@var{cpu-type}
8869 @opindex march
8870 Generate instructions for the machine type @var{cpu-type}.  The choices
8871 for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
8872 specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
8873
8874 @item -mcpu=@var{cpu-type}
8875 @opindex mcpu
8876 A deprecated synonym for @option{-mtune}.
8877
8878 @item -m386
8879 @itemx -m486
8880 @itemx -mpentium
8881 @itemx -mpentiumpro
8882 @opindex m386
8883 @opindex m486
8884 @opindex mpentium
8885 @opindex mpentiumpro
8886 These options are synonyms for @option{-mtune=i386}, @option{-mtune=i486},
8887 @option{-mtune=pentium}, and @option{-mtune=pentiumpro} respectively.
8888 These synonyms are deprecated.
8889
8890 @item -mfpmath=@var{unit}
8891 @opindex march
8892 Generate floating point arithmetics for selected unit @var{unit}.  The choices
8893 for @var{unit} are:
8894
8895 @table @samp
8896 @item 387
8897 Use the standard 387 floating point coprocessor present majority of chips and
8898 emulated otherwise.  Code compiled with this option will run almost everywhere.
8899 The temporary results are computed in 80bit precision instead of precision
8900 specified by the type resulting in slightly different results compared to most
8901 of other chips.  See @option{-ffloat-store} for more detailed description.
8902
8903 This is the default choice for i386 compiler.
8904
8905 @item sse
8906 Use scalar floating point instructions present in the SSE instruction set.
8907 This instruction set is supported by Pentium3 and newer chips, in the AMD line
8908 by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
8909 instruction set supports only single precision arithmetics, thus the double and
8910 extended precision arithmetics is still done using 387.  Later version, present
8911 only in Pentium4 and the future AMD x86-64 chips supports double precision
8912 arithmetics too.
8913
8914 For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
8915 or @option{-msse2} switches to enable SSE extensions and make this option
8916 effective.  For the x86-64 compiler, these extensions are enabled by default.
8917
8918 The resulting code should be considerably faster in the majority of cases and avoid
8919 the numerical instability problems of 387 code, but may break some existing
8920 code that expects temporaries to be 80bit.
8921
8922 This is the default choice for the x86-64 compiler.
8923
8924 @item sse,387
8925 Attempt to utilize both instruction sets at once.  This effectively double the
8926 amount of available registers and on chips with separate execution units for
8927 387 and SSE the execution resources too.  Use this option with care, as it is
8928 still experimental, because the GCC register allocator does not model separate
8929 functional units well resulting in instable performance.
8930 @end table
8931
8932 @item -masm=@var{dialect}
8933 @opindex masm=@var{dialect}
8934 Output asm instructions using selected @var{dialect}.  Supported choices are
8935 @samp{intel} or @samp{att} (the default one).
8936
8937 @item -mieee-fp
8938 @itemx -mno-ieee-fp
8939 @opindex mieee-fp
8940 @opindex mno-ieee-fp
8941 Control whether or not the compiler uses IEEE floating point
8942 comparisons.  These handle correctly the case where the result of a
8943 comparison is unordered.
8944
8945 @item -msoft-float
8946 @opindex msoft-float
8947 Generate output containing library calls for floating point.
8948 @strong{Warning:} the requisite libraries are not part of GCC@.
8949 Normally the facilities of the machine's usual C compiler are used, but
8950 this can't be done directly in cross-compilation.  You must make your
8951 own arrangements to provide suitable library functions for
8952 cross-compilation.
8953
8954 On machines where a function returns floating point results in the 80387
8955 register stack, some floating point opcodes may be emitted even if
8956 @option{-msoft-float} is used.
8957
8958 @item -mno-fp-ret-in-387
8959 @opindex mno-fp-ret-in-387
8960 Do not use the FPU registers for return values of functions.
8961
8962 The usual calling convention has functions return values of types
8963 @code{float} and @code{double} in an FPU register, even if there
8964 is no FPU@.  The idea is that the operating system should emulate
8965 an FPU@.
8966
8967 The option @option{-mno-fp-ret-in-387} causes such values to be returned
8968 in ordinary CPU registers instead.
8969
8970 @item -mno-fancy-math-387
8971 @opindex mno-fancy-math-387
8972 Some 387 emulators do not support the @code{sin}, @code{cos} and
8973 @code{sqrt} instructions for the 387.  Specify this option to avoid
8974 generating those instructions.  This option is the default on FreeBSD,
8975 OpenBSD and NetBSD@.  This option is overridden when @option{-march}
8976 indicates that the target cpu will always have an FPU and so the
8977 instruction will not need emulation.  As of revision 2.6.1, these
8978 instructions are not generated unless you also use the
8979 @option{-funsafe-math-optimizations} switch.
8980
8981 @item -malign-double
8982 @itemx -mno-align-double
8983 @opindex malign-double
8984 @opindex mno-align-double
8985 Control whether GCC aligns @code{double}, @code{long double}, and
8986 @code{long long} variables on a two word boundary or a one word
8987 boundary.  Aligning @code{double} variables on a two word boundary will
8988 produce code that runs somewhat faster on a @samp{Pentium} at the
8989 expense of more memory.
8990
8991 @strong{Warning:} if you use the @option{-malign-double} switch,
8992 structures containing the above types will be aligned differently than
8993 the published application binary interface specifications for the 386
8994 and will not be binary compatible with structures in code compiled
8995 without that switch.
8996
8997 @item -m96bit-long-double
8998 @itemx -m128bit-long-double
8999 @opindex m96bit-long-double
9000 @opindex m128bit-long-double
9001 These switches control the size of @code{long double} type.  The i386
9002 application binary interface specifies the size to be 96 bits,
9003 so @option{-m96bit-long-double} is the default in 32 bit mode.
9004
9005 Modern architectures (Pentium and newer) would prefer @code{long double}
9006 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9007 conforming to the ABI, this would not be possible.  So specifying a
9008 @option{-m128bit-long-double} will align @code{long double}
9009 to a 16 byte boundary by padding the @code{long double} with an additional
9010 32 bit zero.
9011
9012 In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
9013 its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
9014
9015 Notice that neither of these options enable any extra precision over the x87
9016 standard of 80 bits for a @code{long double}.
9017
9018 @strong{Warning:} if you override the default value for your target ABI, the
9019 structures and arrays containing @code{long double} variables will change
9020 their size as well as function calling convention for function taking
9021 @code{long double} will be modified.  Hence they will not be binary
9022 compatible with arrays or structures in code compiled without that switch.
9023
9024
9025 @item -msvr3-shlib
9026 @itemx -mno-svr3-shlib
9027 @opindex msvr3-shlib
9028 @opindex mno-svr3-shlib
9029 Control whether GCC places uninitialized local variables into the
9030 @code{bss} or @code{data} segments.  @option{-msvr3-shlib} places them
9031 into @code{bss}.  These options are meaningful only on System V Release 3.
9032
9033 @item -mrtd
9034 @opindex mrtd
9035 Use a different function-calling convention, in which functions that
9036 take a fixed number of arguments return with the @code{ret} @var{num}
9037 instruction, which pops their arguments while returning.  This saves one
9038 instruction in the caller since there is no need to pop the arguments
9039 there.
9040
9041 You can specify that an individual function is called with this calling
9042 sequence with the function attribute @samp{stdcall}.  You can also
9043 override the @option{-mrtd} option by using the function attribute
9044 @samp{cdecl}.  @xref{Function Attributes}.
9045
9046 @strong{Warning:} this calling convention is incompatible with the one
9047 normally used on Unix, so you cannot use it if you need to call
9048 libraries compiled with the Unix compiler.
9049
9050 Also, you must provide function prototypes for all functions that
9051 take variable numbers of arguments (including @code{printf});
9052 otherwise incorrect code will be generated for calls to those
9053 functions.
9054
9055 In addition, seriously incorrect code will result if you call a
9056 function with too many arguments.  (Normally, extra arguments are
9057 harmlessly ignored.)
9058
9059 @item -mregparm=@var{num}
9060 @opindex mregparm
9061 Control how many registers are used to pass integer arguments.  By
9062 default, no registers are used to pass arguments, and at most 3
9063 registers can be used.  You can control this behavior for a specific
9064 function by using the function attribute @samp{regparm}.
9065 @xref{Function Attributes}.
9066
9067 @strong{Warning:} if you use this switch, and
9068 @var{num} is nonzero, then you must build all modules with the same
9069 value, including any libraries.  This includes the system libraries and
9070 startup modules.
9071
9072 @item -msseregparm
9073 @opindex msseregparm
9074 Use SSE register passing conventions for float and double arguments
9075 and return values.  You can control this behavior for a specific
9076 function by using the function attribute @samp{sseregparm}.
9077 @xref{Function Attributes}.
9078
9079 @strong{Warning:} if you use this switch then you must build all
9080 modules with the same value, including any libraries.  This includes
9081 the system libraries and startup modules.
9082
9083 @item -mpreferred-stack-boundary=@var{num}
9084 @opindex mpreferred-stack-boundary
9085 Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
9086 byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
9087 the default is 4 (16 bytes or 128 bits), except when optimizing for code
9088 size (@option{-Os}), in which case the default is the minimum correct
9089 alignment (4 bytes for x86, and 8 bytes for x86-64).
9090
9091 On Pentium and PentiumPro, @code{double} and @code{long double} values
9092 should be aligned to an 8 byte boundary (see @option{-malign-double}) or
9093 suffer significant run time performance penalties.  On Pentium III, the
9094 Streaming SIMD Extension (SSE) data type @code{__m128} suffers similar
9095 penalties if it is not 16 byte aligned.
9096
9097 To ensure proper alignment of this values on the stack, the stack boundary
9098 must be as aligned as that required by any value stored on the stack.
9099 Further, every function must be generated such that it keeps the stack
9100 aligned.  Thus calling a function compiled with a higher preferred
9101 stack boundary from a function compiled with a lower preferred stack
9102 boundary will most likely misalign the stack.  It is recommended that
9103 libraries that use callbacks always use the default setting.
9104
9105 This extra alignment does consume extra stack space, and generally
9106 increases code size.  Code that is sensitive to stack space usage, such
9107 as embedded systems and operating system kernels, may want to reduce the
9108 preferred alignment to @option{-mpreferred-stack-boundary=2}.
9109
9110 @item -mmmx
9111 @itemx -mno-mmx
9112 @item -msse
9113 @itemx -mno-sse
9114 @item -msse2
9115 @itemx -mno-sse2
9116 @item -msse3
9117 @itemx -mno-sse3
9118 @item -m3dnow
9119 @itemx -mno-3dnow
9120 @opindex mmmx
9121 @opindex mno-mmx
9122 @opindex msse
9123 @opindex mno-sse
9124 @opindex m3dnow
9125 @opindex mno-3dnow
9126 These switches enable or disable the use of built-in functions that allow
9127 direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow extensions of the
9128 instruction set.
9129
9130 @xref{X86 Built-in Functions}, for details of the functions enabled
9131 and disabled by these switches.
9132
9133 To have SSE/SSE2 instructions generated automatically from floating-point
9134 code, see @option{-mfpmath=sse}.
9135
9136 @item -mpush-args
9137 @itemx -mno-push-args
9138 @opindex mpush-args
9139 @opindex mno-push-args
9140 Use PUSH operations to store outgoing parameters.  This method is shorter
9141 and usually equally fast as method using SUB/MOV operations and is enabled
9142 by default.  In some cases disabling it may improve performance because of
9143 improved scheduling and reduced dependencies.
9144
9145 @item -maccumulate-outgoing-args
9146 @opindex maccumulate-outgoing-args
9147 If enabled, the maximum amount of space required for outgoing arguments will be
9148 computed in the function prologue.  This is faster on most modern CPUs
9149 because of reduced dependencies, improved scheduling and reduced stack usage
9150 when preferred stack boundary is not equal to 2.  The drawback is a notable
9151 increase in code size.  This switch implies @option{-mno-push-args}.
9152
9153 @item -mthreads
9154 @opindex mthreads
9155 Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
9156 on thread-safe exception handling must compile and link all code with the
9157 @option{-mthreads} option.  When compiling, @option{-mthreads} defines
9158 @option{-D_MT}; when linking, it links in a special thread helper library
9159 @option{-lmingwthrd} which cleans up per thread exception handling data.
9160
9161 @item -mno-align-stringops
9162 @opindex mno-align-stringops
9163 Do not align destination of inlined string operations.  This switch reduces
9164 code size and improves performance in case the destination is already aligned,
9165 but GCC doesn't know about it.
9166
9167 @item -minline-all-stringops
9168 @opindex minline-all-stringops
9169 By default GCC inlines string operations only when destination is known to be
9170 aligned at least to 4 byte boundary.  This enables more inlining, increase code
9171 size, but may improve performance of code that depends on fast memcpy, strlen
9172 and memset for short lengths.
9173
9174 @item -momit-leaf-frame-pointer
9175 @opindex momit-leaf-frame-pointer
9176 Don't keep the frame pointer in a register for leaf functions.  This
9177 avoids the instructions to save, set up and restore frame pointers and
9178 makes an extra register available in leaf functions.  The option
9179 @option{-fomit-frame-pointer} removes the frame pointer for all functions
9180 which might make debugging harder.
9181
9182 @item -mtls-direct-seg-refs
9183 @itemx -mno-tls-direct-seg-refs
9184 @opindex mtls-direct-seg-refs
9185 Controls whether TLS variables may be accessed with offsets from the
9186 TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
9187 or whether the thread base pointer must be added.  Whether or not this
9188 is legal depends on the operating system, and whether it maps the
9189 segment to cover the entire TLS area.
9190
9191 For systems that use GNU libc, the default is on.
9192 @end table
9193
9194 These @samp{-m} switches are supported in addition to the above
9195 on AMD x86-64 processors in 64-bit environments.
9196
9197 @table @gcctabopt
9198 @item -m32
9199 @itemx -m64
9200 @opindex m32
9201 @opindex m64
9202 Generate code for a 32-bit or 64-bit environment.
9203 The 32-bit environment sets int, long and pointer to 32 bits and
9204 generates code that runs on any i386 system.
9205 The 64-bit environment sets int to 32 bits and long and pointer
9206 to 64 bits and generates code for AMD's x86-64 architecture.
9207
9208 @item -mno-red-zone
9209 @opindex no-red-zone
9210 Do not use a so called red zone for x86-64 code.  The red zone is mandated
9211 by the x86-64 ABI, it is a 128-byte area beyond the location of the
9212 stack pointer that will not be modified by signal or interrupt handlers
9213 and therefore can be used for temporary data without adjusting the stack
9214 pointer.  The flag @option{-mno-red-zone} disables this red zone.
9215
9216 @item -mcmodel=small
9217 @opindex mcmodel=small
9218 Generate code for the small code model: the program and its symbols must
9219 be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
9220 Programs can be statically or dynamically linked.  This is the default
9221 code model.
9222
9223 @item -mcmodel=kernel
9224 @opindex mcmodel=kernel
9225 Generate code for the kernel code model.  The kernel runs in the
9226 negative 2 GB of the address space.
9227 This model has to be used for Linux kernel code.
9228
9229 @item -mcmodel=medium
9230 @opindex mcmodel=medium
9231 Generate code for the medium model: The program is linked in the lower 2
9232 GB of the address space but symbols can be located anywhere in the
9233 address space.  Programs can be statically or dynamically linked, but
9234 building of shared libraries are not supported with the medium model.
9235
9236 @item -mcmodel=large
9237 @opindex mcmodel=large
9238 Generate code for the large model: This model makes no assumptions
9239 about addresses and sizes of sections.  Currently GCC does not implement
9240 this model.
9241 @end table
9242
9243 @node IA-64 Options
9244 @subsection IA-64 Options
9245 @cindex IA-64 Options
9246
9247 These are the @samp{-m} options defined for the Intel IA-64 architecture.
9248
9249 @table @gcctabopt
9250 @item -mbig-endian
9251 @opindex mbig-endian
9252 Generate code for a big endian target.  This is the default for HP-UX@.
9253
9254 @item -mlittle-endian
9255 @opindex mlittle-endian
9256 Generate code for a little endian target.  This is the default for AIX5
9257 and GNU/Linux.
9258
9259 @item -mgnu-as
9260 @itemx -mno-gnu-as
9261 @opindex mgnu-as
9262 @opindex mno-gnu-as
9263 Generate (or don't) code for the GNU assembler.  This is the default.
9264 @c Also, this is the default if the configure option @option{--with-gnu-as}
9265 @c is used.
9266
9267 @item -mgnu-ld
9268 @itemx -mno-gnu-ld
9269 @opindex mgnu-ld
9270 @opindex mno-gnu-ld
9271 Generate (or don't) code for the GNU linker.  This is the default.
9272 @c Also, this is the default if the configure option @option{--with-gnu-ld}
9273 @c is used.
9274
9275 @item -mno-pic
9276 @opindex mno-pic
9277 Generate code that does not use a global pointer register.  The result
9278 is not position independent code, and violates the IA-64 ABI@.
9279
9280 @item -mvolatile-asm-stop
9281 @itemx -mno-volatile-asm-stop
9282 @opindex mvolatile-asm-stop
9283 @opindex mno-volatile-asm-stop
9284 Generate (or don't) a stop bit immediately before and after volatile asm
9285 statements.
9286
9287 @item -mregister-names
9288 @itemx -mno-register-names
9289 @opindex mregister-names
9290 @opindex mno-register-names
9291 Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
9292 the stacked registers.  This may make assembler output more readable.
9293
9294 @item -mno-sdata
9295 @itemx -msdata
9296 @opindex mno-sdata
9297 @opindex msdata
9298 Disable (or enable) optimizations that use the small data section.  This may
9299 be useful for working around optimizer bugs.
9300
9301 @item -mconstant-gp
9302 @opindex mconstant-gp
9303 Generate code that uses a single constant global pointer value.  This is
9304 useful when compiling kernel code.
9305
9306 @item -mauto-pic
9307 @opindex mauto-pic
9308 Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
9309 This is useful when compiling firmware code.
9310
9311 @item -minline-float-divide-min-latency
9312 @opindex minline-float-divide-min-latency
9313 Generate code for inline divides of floating point values
9314 using the minimum latency algorithm.
9315
9316 @item -minline-float-divide-max-throughput
9317 @opindex minline-float-divide-max-throughput
9318 Generate code for inline divides of floating point values
9319 using the maximum throughput algorithm.
9320
9321 @item -minline-int-divide-min-latency
9322 @opindex minline-int-divide-min-latency
9323 Generate code for inline divides of integer values
9324 using the minimum latency algorithm.
9325
9326 @item -minline-int-divide-max-throughput
9327 @opindex minline-int-divide-max-throughput
9328 Generate code for inline divides of integer values
9329 using the maximum throughput algorithm.
9330
9331 @item -minline-sqrt-min-latency
9332 @opindex minline-sqrt-min-latency
9333 Generate code for inline square roots
9334 using the minimum latency algorithm.
9335
9336 @item -minline-sqrt-max-throughput
9337 @opindex minline-sqrt-max-throughput
9338 Generate code for inline square roots
9339 using the maximum throughput algorithm.
9340
9341 @item -mno-dwarf2-asm
9342 @itemx -mdwarf2-asm
9343 @opindex mno-dwarf2-asm
9344 @opindex mdwarf2-asm
9345 Don't (or do) generate assembler code for the DWARF2 line number debugging
9346 info.  This may be useful when not using the GNU assembler.
9347
9348 @item -mearly-stop-bits
9349 @itemx -mno-early-stop-bits
9350 @opindex mearly-stop-bits
9351 @opindex mno-early-stop-bits
9352 Allow stop bits to be placed earlier than immediately preceding the
9353 instruction that triggered the stop bit.  This can improve instruction
9354 scheduling, but does not always do so.
9355
9356 @item -mfixed-range=@var{register-range}
9357 @opindex mfixed-range
9358 Generate code treating the given register range as fixed registers.
9359 A fixed register is one that the register allocator can not use.  This is
9360 useful when compiling kernel code.  A register range is specified as
9361 two registers separated by a dash.  Multiple register ranges can be
9362 specified separated by a comma.
9363
9364 @item -mtls-size=@var{tls-size}
9365 @opindex mtls-size
9366 Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
9367 64.
9368
9369 @item -mtune-arch=@var{cpu-type}
9370 @opindex mtune-arch
9371 Tune the instruction scheduling for a particular CPU, Valid values are
9372 itanium, itanium1, merced, itanium2, and mckinley.
9373
9374 @item -mt
9375 @itemx -pthread
9376 @opindex mt
9377 @opindex pthread
9378 Add support for multithreading using the POSIX threads library.  This
9379 option sets flags for both the preprocessor and linker.  It does
9380 not affect the thread safety of object code produced by the compiler or
9381 that of libraries supplied with it.  These are HP-UX specific flags.
9382
9383 @item -milp32
9384 @itemx -mlp64
9385 @opindex milp32
9386 @opindex mlp64
9387 Generate code for a 32-bit or 64-bit environment.
9388 The 32-bit environment sets int, long and pointer to 32 bits.
9389 The 64-bit environment sets int to 32 bits and long and pointer
9390 to 64 bits.  These are HP-UX specific flags.
9391
9392 @end table
9393
9394 @node M32C Options
9395 @subsection M32C Options
9396 @cindex M32C options
9397
9398 @table @gcctabopt
9399 @item -mcpu=@var{name}
9400 @opindex mcpu=
9401 Select the CPU for which code is generated.  @var{name} may be one of
9402 @samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
9403 /60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
9404 the M32C/80 series.
9405
9406 @item -msim
9407 @opindex msim
9408 Specifies that the program will be run on the simulator.  This causes
9409 an alternate runtime library to be linked in which supports, for
9410 example, file I/O.  You must not use this option when generating
9411 programs that will run on real hardware; you must provide your own
9412 runtime library for whatever I/O functions are needed.
9413
9414 @item -memregs=@var{number}
9415 @opindex memregs=
9416 Specifies the number of memory-based pseudo-registers GCC will use
9417 during code generation.  These pseudo-registers will be used like real
9418 registers, so there is a tradeoff between GCC's ability to fit the
9419 code into available registers, and the performance penalty of using
9420 memory instead of registers.  Note that all modules in a program must
9421 be compiled with the same value for this option.  Because of that, you
9422 must not use this option with the default runtime libraries gcc
9423 builds.
9424
9425 @end table
9426
9427 @node M32R/D Options
9428 @subsection M32R/D Options
9429 @cindex M32R/D options
9430
9431 These @option{-m} options are defined for Renesas M32R/D architectures:
9432
9433 @table @gcctabopt
9434 @item -m32r2
9435 @opindex m32r2
9436 Generate code for the M32R/2@.
9437
9438 @item -m32rx
9439 @opindex m32rx
9440 Generate code for the M32R/X@.
9441
9442 @item -m32r
9443 @opindex m32r
9444 Generate code for the M32R@.  This is the default.
9445
9446 @item -mmodel=small
9447 @opindex mmodel=small
9448 Assume all objects live in the lower 16MB of memory (so that their addresses
9449 can be loaded with the @code{ld24} instruction), and assume all subroutines
9450 are reachable with the @code{bl} instruction.
9451 This is the default.
9452
9453 The addressability of a particular object can be set with the
9454 @code{model} attribute.
9455
9456 @item -mmodel=medium
9457 @opindex mmodel=medium
9458 Assume objects may be anywhere in the 32-bit address space (the compiler
9459 will generate @code{seth/add3} instructions to load their addresses), and
9460 assume all subroutines are reachable with the @code{bl} instruction.
9461
9462 @item -mmodel=large
9463 @opindex mmodel=large
9464 Assume objects may be anywhere in the 32-bit address space (the compiler
9465 will generate @code{seth/add3} instructions to load their addresses), and
9466 assume subroutines may not be reachable with the @code{bl} instruction
9467 (the compiler will generate the much slower @code{seth/add3/jl}
9468 instruction sequence).
9469
9470 @item -msdata=none
9471 @opindex msdata=none
9472 Disable use of the small data area.  Variables will be put into
9473 one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
9474 @code{section} attribute has been specified).
9475 This is the default.
9476
9477 The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
9478 Objects may be explicitly put in the small data area with the
9479 @code{section} attribute using one of these sections.
9480
9481 @item -msdata=sdata
9482 @opindex msdata=sdata
9483 Put small global and static data in the small data area, but do not
9484 generate special code to reference them.
9485
9486 @item -msdata=use
9487 @opindex msdata=use
9488 Put small global and static data in the small data area, and generate
9489 special instructions to reference them.
9490
9491 @item -G @var{num}
9492 @opindex G
9493 @cindex smaller data references
9494 Put global and static objects less than or equal to @var{num} bytes
9495 into the small data or bss sections instead of the normal data or bss
9496 sections.  The default value of @var{num} is 8.
9497 The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
9498 for this option to have any effect.
9499
9500 All modules should be compiled with the same @option{-G @var{num}} value.
9501 Compiling with different values of @var{num} may or may not work; if it
9502 doesn't the linker will give an error message---incorrect code will not be
9503 generated.
9504
9505 @item -mdebug
9506 @opindex mdebug
9507 Makes the M32R specific code in the compiler display some statistics
9508 that might help in debugging programs.
9509
9510 @item -malign-loops
9511 @opindex malign-loops
9512 Align all loops to a 32-byte boundary.
9513
9514 @item -mno-align-loops
9515 @opindex mno-align-loops
9516 Do not enforce a 32-byte alignment for loops.  This is the default.
9517
9518 @item -missue-rate=@var{number}
9519 @opindex missue-rate=@var{number}
9520 Issue @var{number} instructions per cycle.  @var{number} can only be 1
9521 or 2.
9522
9523 @item -mbranch-cost=@var{number}
9524 @opindex mbranch-cost=@var{number}
9525 @var{number} can only be 1 or 2.  If it is 1 then branches will be
9526 preferred over conditional code, if it is 2, then the opposite will
9527 apply.
9528
9529 @item -mflush-trap=@var{number}
9530 @opindex mflush-trap=@var{number}
9531 Specifies the trap number to use to flush the cache.  The default is
9532 12.  Valid numbers are between 0 and 15 inclusive.
9533
9534 @item -mno-flush-trap
9535 @opindex mno-flush-trap
9536 Specifies that the cache cannot be flushed by using a trap.
9537
9538 @item -mflush-func=@var{name}
9539 @opindex mflush-func=@var{name}
9540 Specifies the name of the operating system function to call to flush
9541 the cache.  The default is @emph{_flush_cache}, but a function call
9542 will only be used if a trap is not available.
9543
9544 @item -mno-flush-func
9545 @opindex mno-flush-func
9546 Indicates that there is no OS function for flushing the cache.
9547
9548 @end table
9549
9550 @node M680x0 Options
9551 @subsection M680x0 Options
9552 @cindex M680x0 options
9553
9554 These are the @samp{-m} options defined for the 68000 series.  The default
9555 values for these options depends on which style of 68000 was selected when
9556 the compiler was configured; the defaults for the most common choices are
9557 given below.
9558
9559 @table @gcctabopt
9560 @item -m68000
9561 @itemx -mc68000
9562 @opindex m68000
9563 @opindex mc68000
9564 Generate output for a 68000.  This is the default
9565 when the compiler is configured for 68000-based systems.
9566
9567 Use this option for microcontrollers with a 68000 or EC000 core,
9568 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
9569
9570 @item -m68020
9571 @itemx -mc68020
9572 @opindex m68020
9573 @opindex mc68020
9574 Generate output for a 68020.  This is the default
9575 when the compiler is configured for 68020-based systems.
9576
9577 @item -m68881
9578 @opindex m68881
9579 Generate output containing 68881 instructions for floating point.
9580 This is the default for most 68020 systems unless @option{--nfp} was
9581 specified when the compiler was configured.
9582
9583 @item -m68030
9584 @opindex m68030
9585 Generate output for a 68030.  This is the default when the compiler is
9586 configured for 68030-based systems.
9587
9588 @item -m68040
9589 @opindex m68040
9590 Generate output for a 68040.  This is the default when the compiler is
9591 configured for 68040-based systems.
9592
9593 This option inhibits the use of 68881/68882 instructions that have to be
9594 emulated by software on the 68040.  Use this option if your 68040 does not
9595 have code to emulate those instructions.
9596
9597 @item -m68060
9598 @opindex m68060
9599 Generate output for a 68060.  This is the default when the compiler is
9600 configured for 68060-based systems.
9601
9602 This option inhibits the use of 68020 and 68881/68882 instructions that
9603 have to be emulated by software on the 68060.  Use this option if your 68060
9604 does not have code to emulate those instructions.
9605
9606 @item -mcpu32
9607 @opindex mcpu32
9608 Generate output for a CPU32.  This is the default
9609 when the compiler is configured for CPU32-based systems.
9610
9611 Use this option for microcontrollers with a
9612 CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
9613 68336, 68340, 68341, 68349 and 68360.
9614
9615 @item -m5200
9616 @opindex m5200
9617 Generate output for a 520X ``coldfire'' family cpu.  This is the default
9618 when the compiler is configured for 520X-based systems.
9619
9620 Use this option for microcontroller with a 5200 core, including
9621 the MCF5202, MCF5203, MCF5204 and MCF5202.
9622
9623
9624 @item -m68020-40
9625 @opindex m68020-40
9626 Generate output for a 68040, without using any of the new instructions.
9627 This results in code which can run relatively efficiently on either a
9628 68020/68881 or a 68030 or a 68040.  The generated code does use the
9629 68881 instructions that are emulated on the 68040.
9630
9631 @item -m68020-60
9632 @opindex m68020-60
9633 Generate output for a 68060, without using any of the new instructions.
9634 This results in code which can run relatively efficiently on either a
9635 68020/68881 or a 68030 or a 68040.  The generated code does use the
9636 68881 instructions that are emulated on the 68060.
9637
9638 @item -msoft-float
9639 @opindex msoft-float
9640 Generate output containing library calls for floating point.
9641 @strong{Warning:} the requisite libraries are not available for all m68k
9642 targets.  Normally the facilities of the machine's usual C compiler are
9643 used, but this can't be done directly in cross-compilation.  You must
9644 make your own arrangements to provide suitable library functions for
9645 cross-compilation.  The embedded targets @samp{m68k-*-aout} and
9646 @samp{m68k-*-coff} do provide software floating point support.
9647
9648 @item -mshort
9649 @opindex mshort
9650 Consider type @code{int} to be 16 bits wide, like @code{short int}.
9651 Additionally, parameters passed on the stack are also aligned to a
9652 16-bit boundary even on targets whose API mandates promotion to 32-bit.
9653
9654 @item -mnobitfield
9655 @opindex mnobitfield
9656 Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
9657 and @option{-m5200} options imply @w{@option{-mnobitfield}}.
9658
9659 @item -mbitfield
9660 @opindex mbitfield
9661 Do use the bit-field instructions.  The @option{-m68020} option implies
9662 @option{-mbitfield}.  This is the default if you use a configuration
9663 designed for a 68020.
9664
9665 @item -mrtd
9666 @opindex mrtd
9667 Use a different function-calling convention, in which functions
9668 that take a fixed number of arguments return with the @code{rtd}
9669 instruction, which pops their arguments while returning.  This
9670 saves one instruction in the caller since there is no need to pop
9671 the arguments there.
9672
9673 This calling convention is incompatible with the one normally
9674 used on Unix, so you cannot use it if you need to call libraries
9675 compiled with the Unix compiler.
9676
9677 Also, you must provide function prototypes for all functions that
9678 take variable numbers of arguments (including @code{printf});
9679 otherwise incorrect code will be generated for calls to those
9680 functions.
9681
9682 In addition, seriously incorrect code will result if you call a
9683 function with too many arguments.  (Normally, extra arguments are
9684 harmlessly ignored.)
9685
9686 The @code{rtd} instruction is supported by the 68010, 68020, 68030,
9687 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
9688
9689 @item -malign-int
9690 @itemx -mno-align-int
9691 @opindex malign-int
9692 @opindex mno-align-int
9693 Control whether GCC aligns @code{int}, @code{long}, @code{long long},
9694 @code{float}, @code{double}, and @code{long double} variables on a 32-bit
9695 boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
9696 Aligning variables on 32-bit boundaries produces code that runs somewhat
9697 faster on processors with 32-bit busses at the expense of more memory.
9698
9699 @strong{Warning:} if you use the @option{-malign-int} switch, GCC will
9700 align structures containing the above types  differently than
9701 most published application binary interface specifications for the m68k.
9702
9703 @item -mpcrel
9704 @opindex mpcrel
9705 Use the pc-relative addressing mode of the 68000 directly, instead of
9706 using a global offset table.  At present, this option implies @option{-fpic},
9707 allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
9708 not presently supported with @option{-mpcrel}, though this could be supported for
9709 68020 and higher processors.
9710
9711 @item -mno-strict-align
9712 @itemx -mstrict-align
9713 @opindex mno-strict-align
9714 @opindex mstrict-align
9715 Do not (do) assume that unaligned memory references will be handled by
9716 the system.
9717
9718 @item -msep-data
9719 Generate code that allows the data segment to be located in a different
9720 area of memory from the text segment.  This allows for execute in place in
9721 an environment without virtual memory management.  This option implies
9722 @option{-fPIC}.
9723
9724 @item -mno-sep-data
9725 Generate code that assumes that the data segment follows the text segment.
9726 This is the default.
9727
9728 @item -mid-shared-library
9729 Generate code that supports shared libraries via the library ID method.
9730 This allows for execute in place and shared libraries in an environment
9731 without virtual memory management.  This option implies @option{-fPIC}.
9732
9733 @item -mno-id-shared-library
9734 Generate code that doesn't assume ID based shared libraries are being used.
9735 This is the default.
9736
9737 @item -mshared-library-id=n
9738 Specified the identification number of the ID based shared library being
9739 compiled.  Specifying a value of 0 will generate more compact code, specifying
9740 other values will force the allocation of that number to the current
9741 library but is no more space or time efficient than omitting this option.
9742
9743 @end table
9744
9745 @node M68hc1x Options
9746 @subsection M68hc1x Options
9747 @cindex M68hc1x options
9748
9749 These are the @samp{-m} options defined for the 68hc11 and 68hc12
9750 microcontrollers.  The default values for these options depends on
9751 which style of microcontroller was selected when the compiler was configured;
9752 the defaults for the most common choices are given below.
9753
9754 @table @gcctabopt
9755 @item -m6811
9756 @itemx -m68hc11
9757 @opindex m6811
9758 @opindex m68hc11
9759 Generate output for a 68HC11.  This is the default
9760 when the compiler is configured for 68HC11-based systems.
9761
9762 @item -m6812
9763 @itemx -m68hc12
9764 @opindex m6812
9765 @opindex m68hc12
9766 Generate output for a 68HC12.  This is the default
9767 when the compiler is configured for 68HC12-based systems.
9768
9769 @item -m68S12
9770 @itemx -m68hcs12
9771 @opindex m68S12
9772 @opindex m68hcs12
9773 Generate output for a 68HCS12.
9774
9775 @item -mauto-incdec
9776 @opindex mauto-incdec
9777 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
9778 addressing modes.
9779
9780 @item -minmax
9781 @itemx -nominmax
9782 @opindex minmax
9783 @opindex mnominmax
9784 Enable the use of 68HC12 min and max instructions.
9785
9786 @item -mlong-calls
9787 @itemx -mno-long-calls
9788 @opindex mlong-calls
9789 @opindex mno-long-calls
9790 Treat all calls as being far away (near).  If calls are assumed to be
9791 far away, the compiler will use the @code{call} instruction to
9792 call a function and the @code{rtc} instruction for returning.
9793
9794 @item -mshort
9795 @opindex mshort
9796 Consider type @code{int} to be 16 bits wide, like @code{short int}.
9797
9798 @item -msoft-reg-count=@var{count}
9799 @opindex msoft-reg-count
9800 Specify the number of pseudo-soft registers which are used for the
9801 code generation.  The maximum number is 32.  Using more pseudo-soft
9802 register may or may not result in better code depending on the program.
9803 The default is 4 for 68HC11 and 2 for 68HC12.
9804
9805 @end table
9806
9807 @node MCore Options
9808 @subsection MCore Options
9809 @cindex MCore options
9810
9811 These are the @samp{-m} options defined for the Motorola M*Core
9812 processors.
9813
9814 @table @gcctabopt
9815
9816 @item -mhardlit
9817 @itemx -mno-hardlit
9818 @opindex mhardlit
9819 @opindex mno-hardlit
9820 Inline constants into the code stream if it can be done in two
9821 instructions or less.
9822
9823 @item -mdiv
9824 @itemx -mno-div
9825 @opindex mdiv
9826 @opindex mno-div
9827 Use the divide instruction.  (Enabled by default).
9828
9829 @item -mrelax-immediate
9830 @itemx -mno-relax-immediate
9831 @opindex mrelax-immediate
9832 @opindex mno-relax-immediate
9833 Allow arbitrary sized immediates in bit operations.
9834
9835 @item -mwide-bitfields
9836 @itemx -mno-wide-bitfields
9837 @opindex mwide-bitfields
9838 @opindex mno-wide-bitfields
9839 Always treat bit-fields as int-sized.
9840
9841 @item -m4byte-functions
9842 @itemx -mno-4byte-functions
9843 @opindex m4byte-functions
9844 @opindex mno-4byte-functions
9845 Force all functions to be aligned to a four byte boundary.
9846
9847 @item -mcallgraph-data
9848 @itemx -mno-callgraph-data
9849 @opindex mcallgraph-data
9850 @opindex mno-callgraph-data
9851 Emit callgraph information.
9852
9853 @item -mslow-bytes
9854 @itemx -mno-slow-bytes
9855 @opindex mslow-bytes
9856 @opindex mno-slow-bytes
9857 Prefer word access when reading byte quantities.
9858
9859 @item -mlittle-endian
9860 @itemx -mbig-endian
9861 @opindex mlittle-endian
9862 @opindex mbig-endian
9863 Generate code for a little endian target.
9864
9865 @item -m210
9866 @itemx -m340
9867 @opindex m210
9868 @opindex m340
9869 Generate code for the 210 processor.
9870 @end table
9871
9872 @node MIPS Options
9873 @subsection MIPS Options
9874 @cindex MIPS options
9875
9876 @table @gcctabopt
9877
9878 @item -EB
9879 @opindex EB
9880 Generate big-endian code.
9881
9882 @item -EL
9883 @opindex EL
9884 Generate little-endian code.  This is the default for @samp{mips*el-*-*}
9885 configurations.
9886
9887 @item -march=@var{arch}
9888 @opindex march
9889 Generate code that will run on @var{arch}, which can be the name of a
9890 generic MIPS ISA, or the name of a particular processor.
9891 The ISA names are:
9892 @samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
9893 @samp{mips32}, @samp{mips32r2}, and @samp{mips64}.
9894 The processor names are:
9895 @samp{4kc}, @samp{4kp}, @samp{5kc}, @samp{20kc},
9896 @samp{m4k},
9897 @samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
9898 @samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000}, @samp{rm7000},
9899 @samp{rm9000},
9900 @samp{orion},
9901 @samp{sb1},
9902 @samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
9903 @samp{vr5000}, @samp{vr5400} and @samp{vr5500}.
9904 The special value @samp{from-abi} selects the
9905 most compatible architecture for the selected ABI (that is,
9906 @samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
9907
9908 In processor names, a final @samp{000} can be abbreviated as @samp{k}
9909 (for example, @samp{-march=r2k}).  Prefixes are optional, and
9910 @samp{vr} may be written @samp{r}.
9911
9912 GCC defines two macros based on the value of this option.  The first
9913 is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
9914 a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
9915 where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
9916 For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
9917 to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
9918
9919 Note that the @samp{_MIPS_ARCH} macro uses the processor names given
9920 above.  In other words, it will have the full prefix and will not
9921 abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
9922 the macro names the resolved architecture (either @samp{"mips1"} or
9923 @samp{"mips3"}).  It names the default architecture when no
9924 @option{-march} option is given.
9925
9926 @item -mtune=@var{arch}
9927 @opindex mtune
9928 Optimize for @var{arch}.  Among other things, this option controls
9929 the way instructions are scheduled, and the perceived cost of arithmetic
9930 operations.  The list of @var{arch} values is the same as for
9931 @option{-march}.
9932
9933 When this option is not used, GCC will optimize for the processor
9934 specified by @option{-march}.  By using @option{-march} and
9935 @option{-mtune} together, it is possible to generate code that will
9936 run on a family of processors, but optimize the code for one
9937 particular member of that family.
9938
9939 @samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
9940 @samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
9941 @samp{-march} ones described above.
9942
9943 @item -mips1
9944 @opindex mips1
9945 Equivalent to @samp{-march=mips1}.
9946
9947 @item -mips2
9948 @opindex mips2
9949 Equivalent to @samp{-march=mips2}.
9950
9951 @item -mips3
9952 @opindex mips3
9953 Equivalent to @samp{-march=mips3}.
9954
9955 @item -mips4
9956 @opindex mips4
9957 Equivalent to @samp{-march=mips4}.
9958
9959 @item -mips32
9960 @opindex mips32
9961 Equivalent to @samp{-march=mips32}.
9962
9963 @item -mips32r2
9964 @opindex mips32r2
9965 Equivalent to @samp{-march=mips32r2}.
9966
9967 @item -mips64
9968 @opindex mips64
9969 Equivalent to @samp{-march=mips64}.
9970
9971 @item -mips16
9972 @itemx -mno-mips16
9973 @opindex mips16
9974 @opindex mno-mips16
9975 Generate (do not generate) MIPS16 code.  If GCC is targetting a
9976 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
9977
9978 @item -mabi=32
9979 @itemx -mabi=o64
9980 @itemx -mabi=n32
9981 @itemx -mabi=64
9982 @itemx -mabi=eabi
9983 @opindex mabi=32
9984 @opindex mabi=o64
9985 @opindex mabi=n32
9986 @opindex mabi=64
9987 @opindex mabi=eabi
9988 Generate code for the given ABI@.
9989
9990 Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
9991 generates 64-bit code when you select a 64-bit architecture, but you
9992 can use @option{-mgp32} to get 32-bit code instead.
9993
9994 For information about the O64 ABI, see
9995 @w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
9996
9997 @item -mabicalls
9998 @itemx -mno-abicalls
9999 @opindex mabicalls
10000 @opindex mno-abicalls
10001 Generate (do not generate) SVR4-style position-independent code.
10002 @option{-mabicalls} is the default for SVR4-based systems.
10003
10004 @item -mxgot
10005 @itemx -mno-xgot
10006 @opindex mxgot
10007 @opindex mno-xgot
10008 Lift (do not lift) the usual restrictions on the size of the global
10009 offset table.
10010
10011 GCC normally uses a single instruction to load values from the GOT@.
10012 While this is relatively efficient, it will only work if the GOT
10013 is smaller than about 64k.  Anything larger will cause the linker
10014 to report an error such as:
10015
10016 @cindex relocation truncated to fit (MIPS)
10017 @smallexample
10018 relocation truncated to fit: R_MIPS_GOT16 foobar
10019 @end smallexample
10020
10021 If this happens, you should recompile your code with @option{-mxgot}.
10022 It should then work with very large GOTs, although it will also be
10023 less efficient, since it will take three instructions to fetch the
10024 value of a global symbol.
10025
10026 Note that some linkers can create multiple GOTs.  If you have such a
10027 linker, you should only need to use @option{-mxgot} when a single object
10028 file accesses more than 64k's worth of GOT entries.  Very few do.
10029
10030 These options have no effect unless GCC is generating position
10031 independent code.
10032
10033 @item -mgp32
10034 @opindex mgp32
10035 Assume that general-purpose registers are 32 bits wide.
10036
10037 @item -mgp64
10038 @opindex mgp64
10039 Assume that general-purpose registers are 64 bits wide.
10040
10041 @item -mfp32
10042 @opindex mfp32
10043 Assume that floating-point registers are 32 bits wide.
10044
10045 @item -mfp64
10046 @opindex mfp64
10047 Assume that floating-point registers are 64 bits wide.
10048
10049 @item -mhard-float
10050 @opindex mhard-float
10051 Use floating-point coprocessor instructions.
10052
10053 @item -msoft-float
10054 @opindex msoft-float
10055 Do not use floating-point coprocessor instructions.  Implement
10056 floating-point calculations using library calls instead.
10057
10058 @item -msingle-float
10059 @opindex msingle-float
10060 Assume that the floating-point coprocessor only supports single-precision
10061 operations.
10062
10063 @itemx -mdouble-float
10064 @opindex mdouble-float
10065 Assume that the floating-point coprocessor supports double-precision
10066 operations.  This is the default.
10067
10068 @itemx -mpaired-single
10069 @itemx -mno-paired-single
10070 @opindex mpaired-single
10071 @opindex mno-paired-single
10072 Use (do not use) paired-single floating-point instructions.
10073 @xref{MIPS Paired-Single Support}.  This option can only be used
10074 when generating 64-bit code and requires hardware floating-point
10075 support to be enabled.
10076
10077 @itemx -mips3d
10078 @itemx -mno-mips3d
10079 @opindex mips3d
10080 @opindex mno-mips3d
10081 Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
10082 The option @option{-mips3d} implies @option{-mpaired-single}.
10083
10084 @item -mlong64
10085 @opindex mlong64
10086 Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
10087 an explanation of the default and the way that the pointer size is
10088 determined.
10089
10090 @item -mlong32
10091 @opindex mlong32
10092 Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
10093
10094 The default size of @code{int}s, @code{long}s and pointers depends on
10095 the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
10096 uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
10097 32-bit @code{long}s.  Pointers are the same size as @code{long}s,
10098 or the same size as integer registers, whichever is smaller.
10099
10100 @item -msym32
10101 @itemx -mno-sym32
10102 @opindex msym32
10103 @opindex mno-sym32
10104 Assume (do not assume) that all symbols have 32-bit values, regardless
10105 of the selected ABI@.  This option is useful in combination with
10106 @option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
10107 to generate shorter and faster references to symbolic addresses.
10108
10109 @item -G @var{num}
10110 @opindex G
10111 @cindex smaller data references (MIPS)
10112 @cindex gp-relative references (MIPS)
10113 Put global and static items less than or equal to @var{num} bytes into
10114 the small data or bss section instead of the normal data or bss section.
10115 This allows the data to be accessed using a single instruction.
10116
10117 All modules should be compiled with the same @option{-G @var{num}}
10118 value.
10119
10120 @item -membedded-data
10121 @itemx -mno-embedded-data
10122 @opindex membedded-data
10123 @opindex mno-embedded-data
10124 Allocate variables to the read-only data section first if possible, then
10125 next in the small data section if possible, otherwise in data.  This gives
10126 slightly slower code than the default, but reduces the amount of RAM required
10127 when executing, and thus may be preferred for some embedded systems.
10128
10129 @item -muninit-const-in-rodata
10130 @itemx -mno-uninit-const-in-rodata
10131 @opindex muninit-const-in-rodata
10132 @opindex mno-uninit-const-in-rodata
10133 Put uninitialized @code{const} variables in the read-only data section.
10134 This option is only meaningful in conjunction with @option{-membedded-data}.
10135
10136 @item -msplit-addresses
10137 @itemx -mno-split-addresses
10138 @opindex msplit-addresses
10139 @opindex mno-split-addresses
10140 Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
10141 relocation operators.  This option has been superseded by
10142 @option{-mexplicit-relocs} but is retained for backwards compatibility.
10143
10144 @item -mexplicit-relocs
10145 @itemx -mno-explicit-relocs
10146 @opindex mexplicit-relocs
10147 @opindex mno-explicit-relocs
10148 Use (do not use) assembler relocation operators when dealing with symbolic
10149 addresses.  The alternative, selected by @option{-mno-explicit-relocs},
10150 is to use assembler macros instead.
10151
10152 @option{-mexplicit-relocs} is the default if GCC was configured
10153 to use an assembler that supports relocation operators.
10154
10155 @item -mcheck-zero-division
10156 @itemx -mno-check-zero-division
10157 @opindex mcheck-zero-division
10158 @opindex mno-check-zero-division
10159 Trap (do not trap) on integer division by zero.  The default is
10160 @option{-mcheck-zero-division}.
10161
10162 @item -mdivide-traps
10163 @itemx -mdivide-breaks
10164 @opindex mdivide-traps
10165 @opindex mdivide-breaks
10166 MIPS systems check for division by zero by generating either a
10167 conditional trap or a break instruction.  Using traps results in
10168 smaller code, but is only supported on MIPS II and later.  Also, some
10169 versions of the Linux kernel have a bug that prevents trap from
10170 generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
10171 allow conditional traps on architectures that support them and
10172 @option{-mdivide-breaks} to force the use of breaks.
10173
10174 The default is usually @option{-mdivide-traps}, but this can be
10175 overridden at configure time using @option{--with-divide=breaks}.
10176 Divide-by-zero checks can be completely disabled using
10177 @option{-mno-check-zero-division}.
10178
10179 @item -mmemcpy
10180 @itemx -mno-memcpy
10181 @opindex mmemcpy
10182 @opindex mno-memcpy
10183 Force (do not force) the use of @code{memcpy()} for non-trivial block
10184 moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
10185 most constant-sized copies.
10186
10187 @item -mlong-calls
10188 @itemx -mno-long-calls
10189 @opindex mlong-calls
10190 @opindex mno-long-calls
10191 Disable (do not disable) use of the @code{jal} instruction.  Calling
10192 functions using @code{jal} is more efficient but requires the caller
10193 and callee to be in the same 256 megabyte segment.
10194
10195 This option has no effect on abicalls code.  The default is
10196 @option{-mno-long-calls}.
10197
10198 @item -mmad
10199 @itemx -mno-mad
10200 @opindex mmad
10201 @opindex mno-mad
10202 Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
10203 instructions, as provided by the R4650 ISA@.
10204
10205 @item -mfused-madd
10206 @itemx -mno-fused-madd
10207 @opindex mfused-madd
10208 @opindex mno-fused-madd
10209 Enable (disable) use of the floating point multiply-accumulate
10210 instructions, when they are available.  The default is
10211 @option{-mfused-madd}.
10212
10213 When multiply-accumulate instructions are used, the intermediate
10214 product is calculated to infinite precision and is not subject to
10215 the FCSR Flush to Zero bit.  This may be undesirable in some
10216 circumstances.
10217
10218 @item -nocpp
10219 @opindex nocpp
10220 Tell the MIPS assembler to not run its preprocessor over user
10221 assembler files (with a @samp{.s} suffix) when assembling them.
10222
10223 @item -mfix-r4000
10224 @itemx -mno-fix-r4000
10225 @opindex mfix-r4000
10226 @opindex mno-fix-r4000
10227 Work around certain R4000 CPU errata:
10228 @itemize @minus
10229 @item
10230 A double-word or a variable shift may give an incorrect result if executed
10231 immediately after starting an integer division.
10232 @item
10233 A double-word or a variable shift may give an incorrect result if executed
10234 while an integer multiplication is in progress.
10235 @item
10236 An integer division may give an incorrect result if started in a delay slot
10237 of a taken branch or a jump.
10238 @end itemize
10239
10240 @item -mfix-r4400
10241 @itemx -mno-fix-r4400
10242 @opindex mfix-r4400
10243 @opindex mno-fix-r4400
10244 Work around certain R4400 CPU errata:
10245 @itemize @minus
10246 @item
10247 A double-word or a variable shift may give an incorrect result if executed
10248 immediately after starting an integer division.
10249 @end itemize
10250
10251 @item -mfix-vr4120
10252 @itemx -mno-fix-vr4120
10253 @opindex mfix-vr4120
10254 Work around certain VR4120 errata:
10255 @itemize @minus
10256 @item
10257 @code{dmultu} does not always produce the correct result.
10258 @item
10259 @code{div} and @code{ddiv} do not always produce the correct result if one
10260 of the operands is negative.
10261 @end itemize
10262 The workarounds for the division errata rely on special functions in
10263 @file{libgcc.a}.  At present, these functions are only provided by
10264 the @code{mips64vr*-elf} configurations.
10265
10266 Other VR4120 errata require a nop to be inserted between certain pairs of
10267 instructions.  These errata are handled by the assembler, not by GCC itself.
10268
10269 @item -mfix-vr4130
10270 @opindex mfix-vr4130
10271 Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
10272 workarounds are implemented by the assembler rather than by GCC,
10273 although GCC will avoid using @code{mflo} and @code{mfhi} if the
10274 VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
10275 instructions are available instead.
10276
10277 @item -mfix-sb1
10278 @itemx -mno-fix-sb1
10279 @opindex mfix-sb1
10280 Work around certain SB-1 CPU core errata.
10281 (This flag currently works around the SB-1 revision 2
10282 ``F1'' and ``F2'' floating point errata.)
10283
10284 @item -mflush-func=@var{func}
10285 @itemx -mno-flush-func
10286 @opindex mflush-func
10287 Specifies the function to call to flush the I and D caches, or to not
10288 call any such function.  If called, the function must take the same
10289 arguments as the common @code{_flush_func()}, that is, the address of the
10290 memory range for which the cache is being flushed, the size of the
10291 memory range, and the number 3 (to flush both caches).  The default
10292 depends on the target GCC was configured for, but commonly is either
10293 @samp{_flush_func} or @samp{__cpu_flush}.
10294
10295 @item -mbranch-likely
10296 @itemx -mno-branch-likely
10297 @opindex mbranch-likely
10298 @opindex mno-branch-likely
10299 Enable or disable use of Branch Likely instructions, regardless of the
10300 default for the selected architecture.  By default, Branch Likely
10301 instructions may be generated if they are supported by the selected
10302 architecture.  An exception is for the MIPS32 and MIPS64 architectures
10303 and processors which implement those architectures; for those, Branch
10304 Likely instructions will not be generated by default because the MIPS32
10305 and MIPS64 architectures specifically deprecate their use.
10306
10307 @item -mfp-exceptions
10308 @itemx -mno-fp-exceptions
10309 @opindex mfp-exceptions
10310 Specifies whether FP exceptions are enabled.  This affects how we schedule
10311 FP instructions for some processors.  The default is that FP exceptions are
10312 enabled.
10313
10314 For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
10315 64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
10316 FP pipe.
10317
10318 @item -mvr4130-align
10319 @itemx -mno-vr4130-align
10320 @opindex mvr4130-align
10321 The VR4130 pipeline is two-way superscalar, but can only issue two
10322 instructions together if the first one is 8-byte aligned.  When this
10323 option is enabled, GCC will align pairs of instructions that it
10324 thinks should execute in parallel.
10325
10326 This option only has an effect when optimizing for the VR4130.
10327 It normally makes code faster, but at the expense of making it bigger.
10328 It is enabled by default at optimization level @option{-O3}.
10329 @end table
10330
10331 @node MMIX Options
10332 @subsection MMIX Options
10333 @cindex MMIX Options
10334
10335 These options are defined for the MMIX:
10336
10337 @table @gcctabopt
10338 @item -mlibfuncs
10339 @itemx -mno-libfuncs
10340 @opindex mlibfuncs
10341 @opindex mno-libfuncs
10342 Specify that intrinsic library functions are being compiled, passing all
10343 values in registers, no matter the size.
10344
10345 @item -mepsilon
10346 @itemx -mno-epsilon
10347 @opindex mepsilon
10348 @opindex mno-epsilon
10349 Generate floating-point comparison instructions that compare with respect
10350 to the @code{rE} epsilon register.
10351
10352 @item -mabi=mmixware
10353 @itemx -mabi=gnu
10354 @opindex mabi-mmixware
10355 @opindex mabi=gnu
10356 Generate code that passes function parameters and return values that (in
10357 the called function) are seen as registers @code{$0} and up, as opposed to
10358 the GNU ABI which uses global registers @code{$231} and up.
10359
10360 @item -mzero-extend
10361 @itemx -mno-zero-extend
10362 @opindex mzero-extend
10363 @opindex mno-zero-extend
10364 When reading data from memory in sizes shorter than 64 bits, use (do not
10365 use) zero-extending load instructions by default, rather than
10366 sign-extending ones.
10367
10368 @item -mknuthdiv
10369 @itemx -mno-knuthdiv
10370 @opindex mknuthdiv
10371 @opindex mno-knuthdiv
10372 Make the result of a division yielding a remainder have the same sign as
10373 the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
10374 remainder follows the sign of the dividend.  Both methods are
10375 arithmetically valid, the latter being almost exclusively used.
10376
10377 @item -mtoplevel-symbols
10378 @itemx -mno-toplevel-symbols
10379 @opindex mtoplevel-symbols
10380 @opindex mno-toplevel-symbols
10381 Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
10382 code can be used with the @code{PREFIX} assembly directive.
10383
10384 @item -melf
10385 @opindex melf
10386 Generate an executable in the ELF format, rather than the default
10387 @samp{mmo} format used by the @command{mmix} simulator.
10388
10389 @item -mbranch-predict
10390 @itemx -mno-branch-predict
10391 @opindex mbranch-predict
10392 @opindex mno-branch-predict
10393 Use (do not use) the probable-branch instructions, when static branch
10394 prediction indicates a probable branch.
10395
10396 @item -mbase-addresses
10397 @itemx -mno-base-addresses
10398 @opindex mbase-addresses
10399 @opindex mno-base-addresses
10400 Generate (do not generate) code that uses @emph{base addresses}.  Using a
10401 base address automatically generates a request (handled by the assembler
10402 and the linker) for a constant to be set up in a global register.  The
10403 register is used for one or more base address requests within the range 0
10404 to 255 from the value held in the register.  The generally leads to short
10405 and fast code, but the number of different data items that can be
10406 addressed is limited.  This means that a program that uses lots of static
10407 data may require @option{-mno-base-addresses}.
10408
10409 @item -msingle-exit
10410 @itemx -mno-single-exit
10411 @opindex msingle-exit
10412 @opindex mno-single-exit
10413 Force (do not force) generated code to have a single exit point in each
10414 function.
10415 @end table
10416
10417 @node MN10300 Options
10418 @subsection MN10300 Options
10419 @cindex MN10300 options
10420
10421 These @option{-m} options are defined for Matsushita MN10300 architectures:
10422
10423 @table @gcctabopt
10424 @item -mmult-bug
10425 @opindex mmult-bug
10426 Generate code to avoid bugs in the multiply instructions for the MN10300
10427 processors.  This is the default.
10428
10429 @item -mno-mult-bug
10430 @opindex mno-mult-bug
10431 Do not generate code to avoid bugs in the multiply instructions for the
10432 MN10300 processors.
10433
10434 @item -mam33
10435 @opindex mam33
10436 Generate code which uses features specific to the AM33 processor.
10437
10438 @item -mno-am33
10439 @opindex mno-am33
10440 Do not generate code which uses features specific to the AM33 processor.  This
10441 is the default.
10442
10443 @item -mno-crt0
10444 @opindex mno-crt0
10445 Do not link in the C run-time initialization object file.
10446
10447 @item -mrelax
10448 @opindex mrelax
10449 Indicate to the linker that it should perform a relaxation optimization pass
10450 to shorten branches, calls and absolute memory addresses.  This option only
10451 has an effect when used on the command line for the final link step.
10452
10453 This option makes symbolic debugging impossible.
10454 @end table
10455
10456 @node PDP-11 Options
10457 @subsection PDP-11 Options
10458 @cindex PDP-11 Options
10459
10460 These options are defined for the PDP-11:
10461
10462 @table @gcctabopt
10463 @item -mfpu
10464 @opindex mfpu
10465 Use hardware FPP floating point.  This is the default.  (FIS floating
10466 point on the PDP-11/40 is not supported.)
10467
10468 @item -msoft-float
10469 @opindex msoft-float
10470 Do not use hardware floating point.
10471
10472 @item -mac0
10473 @opindex mac0
10474 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
10475
10476 @item -mno-ac0
10477 @opindex mno-ac0
10478 Return floating-point results in memory.  This is the default.
10479
10480 @item -m40
10481 @opindex m40
10482 Generate code for a PDP-11/40.
10483
10484 @item -m45
10485 @opindex m45
10486 Generate code for a PDP-11/45.  This is the default.
10487
10488 @item -m10
10489 @opindex m10
10490 Generate code for a PDP-11/10.
10491
10492 @item -mbcopy-builtin
10493 @opindex bcopy-builtin
10494 Use inline @code{movmemhi} patterns for copying memory.  This is the
10495 default.
10496
10497 @item -mbcopy
10498 @opindex mbcopy
10499 Do not use inline @code{movmemhi} patterns for copying memory.
10500
10501 @item -mint16
10502 @itemx -mno-int32
10503 @opindex mint16
10504 @opindex mno-int32
10505 Use 16-bit @code{int}.  This is the default.
10506
10507 @item -mint32
10508 @itemx -mno-int16
10509 @opindex mint32
10510 @opindex mno-int16
10511 Use 32-bit @code{int}.
10512
10513 @item -mfloat64
10514 @itemx -mno-float32
10515 @opindex mfloat64
10516 @opindex mno-float32
10517 Use 64-bit @code{float}.  This is the default.
10518
10519 @item -mfloat32
10520 @itemx -mno-float64
10521 @opindex mfloat32
10522 @opindex mno-float64
10523 Use 32-bit @code{float}.
10524
10525 @item -mabshi
10526 @opindex mabshi
10527 Use @code{abshi2} pattern.  This is the default.
10528
10529 @item -mno-abshi
10530 @opindex mno-abshi
10531 Do not use @code{abshi2} pattern.
10532
10533 @item -mbranch-expensive
10534 @opindex mbranch-expensive
10535 Pretend that branches are expensive.  This is for experimenting with
10536 code generation only.
10537
10538 @item -mbranch-cheap
10539 @opindex mbranch-cheap
10540 Do not pretend that branches are expensive.  This is the default.
10541
10542 @item -msplit
10543 @opindex msplit
10544 Generate code for a system with split I&D@.
10545
10546 @item -mno-split
10547 @opindex mno-split
10548 Generate code for a system without split I&D@.  This is the default.
10549
10550 @item -munix-asm
10551 @opindex munix-asm
10552 Use Unix assembler syntax.  This is the default when configured for
10553 @samp{pdp11-*-bsd}.
10554
10555 @item -mdec-asm
10556 @opindex mdec-asm
10557 Use DEC assembler syntax.  This is the default when configured for any
10558 PDP-11 target other than @samp{pdp11-*-bsd}.
10559 @end table
10560
10561 @node PowerPC Options
10562 @subsection PowerPC Options
10563 @cindex PowerPC options
10564
10565 These are listed under @xref{RS/6000 and PowerPC Options}.
10566
10567 @node RS/6000 and PowerPC Options
10568 @subsection IBM RS/6000 and PowerPC Options
10569 @cindex RS/6000 and PowerPC Options
10570 @cindex IBM RS/6000 and PowerPC Options
10571
10572 These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
10573 @table @gcctabopt
10574 @item -mpower
10575 @itemx -mno-power
10576 @itemx -mpower2
10577 @itemx -mno-power2
10578 @itemx -mpowerpc
10579 @itemx -mno-powerpc
10580 @itemx -mpowerpc-gpopt
10581 @itemx -mno-powerpc-gpopt
10582 @itemx -mpowerpc-gfxopt
10583 @itemx -mno-powerpc-gfxopt
10584 @itemx -mpowerpc64
10585 @itemx -mno-powerpc64
10586 @opindex mpower
10587 @opindex mno-power
10588 @opindex mpower2
10589 @opindex mno-power2
10590 @opindex mpowerpc
10591 @opindex mno-powerpc
10592 @opindex mpowerpc-gpopt
10593 @opindex mno-powerpc-gpopt
10594 @opindex mpowerpc-gfxopt
10595 @opindex mno-powerpc-gfxopt
10596 @opindex mpowerpc64
10597 @opindex mno-powerpc64
10598 GCC supports two related instruction set architectures for the
10599 RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
10600 instructions supported by the @samp{rios} chip set used in the original
10601 RS/6000 systems and the @dfn{PowerPC} instruction set is the
10602 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
10603 the IBM 4xx microprocessors.
10604
10605 Neither architecture is a subset of the other.  However there is a
10606 large common subset of instructions supported by both.  An MQ
10607 register is included in processors supporting the POWER architecture.
10608
10609 You use these options to specify which instructions are available on the
10610 processor you are using.  The default value of these options is
10611 determined when configuring GCC@.  Specifying the
10612 @option{-mcpu=@var{cpu_type}} overrides the specification of these
10613 options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
10614 rather than the options listed above.
10615
10616 The @option{-mpower} option allows GCC to generate instructions that
10617 are found only in the POWER architecture and to use the MQ register.
10618 Specifying @option{-mpower2} implies @option{-power} and also allows GCC
10619 to generate instructions that are present in the POWER2 architecture but
10620 not the original POWER architecture.
10621
10622 The @option{-mpowerpc} option allows GCC to generate instructions that
10623 are found only in the 32-bit subset of the PowerPC architecture.
10624 Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
10625 GCC to use the optional PowerPC architecture instructions in the
10626 General Purpose group, including floating-point square root.  Specifying
10627 @option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
10628 use the optional PowerPC architecture instructions in the Graphics
10629 group, including floating-point select.
10630
10631 The @option{-mpowerpc64} option allows GCC to generate the additional
10632 64-bit instructions that are found in the full PowerPC64 architecture
10633 and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
10634 @option{-mno-powerpc64}.
10635
10636 If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
10637 will use only the instructions in the common subset of both
10638 architectures plus some special AIX common-mode calls, and will not use
10639 the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
10640 permits GCC to use any instruction from either architecture and to
10641 allow use of the MQ register; specify this for the Motorola MPC601.
10642
10643 @item -mnew-mnemonics
10644 @itemx -mold-mnemonics
10645 @opindex mnew-mnemonics
10646 @opindex mold-mnemonics
10647 Select which mnemonics to use in the generated assembler code.  With
10648 @option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
10649 the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
10650 assembler mnemonics defined for the POWER architecture.  Instructions
10651 defined in only one architecture have only one mnemonic; GCC uses that
10652 mnemonic irrespective of which of these options is specified.
10653
10654 GCC defaults to the mnemonics appropriate for the architecture in
10655 use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
10656 value of these option.  Unless you are building a cross-compiler, you
10657 should normally not specify either @option{-mnew-mnemonics} or
10658 @option{-mold-mnemonics}, but should instead accept the default.
10659
10660 @item -mcpu=@var{cpu_type}
10661 @opindex mcpu
10662 Set architecture type, register usage, choice of mnemonics, and
10663 instruction scheduling parameters for machine type @var{cpu_type}.
10664 Supported values for @var{cpu_type} are @samp{401}, @samp{403},
10665 @samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{505},
10666 @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604},
10667 @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400},
10668 @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
10669 @samp{860}, @samp{970}, @samp{8540}, @samp{common}, @samp{ec603e}, @samp{G3},
10670 @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
10671 @samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64},
10672 @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
10673
10674 @option{-mcpu=common} selects a completely generic processor.  Code
10675 generated under this option will run on any POWER or PowerPC processor.
10676 GCC will use only the instructions in the common subset of both
10677 architectures, and will not use the MQ register.  GCC assumes a generic
10678 processor model for scheduling purposes.
10679
10680 @option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
10681 @option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
10682 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
10683 types, with an appropriate, generic processor model assumed for
10684 scheduling purposes.
10685
10686 The other options specify a specific processor.  Code generated under
10687 those options will run best on that processor, and may not run at all on
10688 others.
10689
10690 The @option{-mcpu} options automatically enable or disable the
10691 following options: @option{-maltivec}, @option{-mhard-float},
10692 @option{-mmfcrf}, @option{-mmultiple}, @option{-mnew-mnemonics},
10693 @option{-mpower}, @option{-mpower2}, @option{-mpowerpc64},
10694 @option{-mpowerpc-gpopt}, @option{-mpowerpc-gfxopt},
10695 @option{-mstring}.  The particular options set for any particular CPU
10696 will vary between compiler versions, depending on what setting seems
10697 to produce optimal code for that CPU; it doesn't necessarily reflect
10698 the actual hardware's capabilities.  If you wish to set an individual
10699 option to a particular value, you may specify it after the
10700 @option{-mcpu} option, like @samp{-mcpu=970 -mno-altivec}.
10701
10702 On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
10703 not enabled or disabled by the @option{-mcpu} option at present, since
10704 AIX does not have full support for these options.  You may still
10705 enable or disable them individually if you're sure it'll work in your
10706 environment.
10707
10708 @item -mtune=@var{cpu_type}
10709 @opindex mtune
10710 Set the instruction scheduling parameters for machine type
10711 @var{cpu_type}, but do not set the architecture type, register usage, or
10712 choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
10713 values for @var{cpu_type} are used for @option{-mtune} as for
10714 @option{-mcpu}.  If both are specified, the code generated will use the
10715 architecture, registers, and mnemonics set by @option{-mcpu}, but the
10716 scheduling parameters set by @option{-mtune}.
10717
10718 @item -mswdiv
10719 @itemx -mno-swdiv
10720 @opindex mswdiv
10721 @opindex mno-swdiv
10722 Generate code to compute division as reciprocal estimate and iterative
10723 refinement, creating opportunities for increased throughput.  This
10724 feature requires: optional PowerPC Graphics instruction set for single
10725 precision and FRE instruction for double precision, assuming divides
10726 cannot generate user-visible traps, and the domain values not include
10727 Infinities, denormals or zero denominator.
10728
10729 @item -maltivec
10730 @itemx -mno-altivec
10731 @opindex maltivec
10732 @opindex mno-altivec
10733 Generate code that uses (does not use) AltiVec instructions, and also
10734 enable the use of built-in functions that allow more direct access to
10735 the AltiVec instruction set.  You may also need to set
10736 @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
10737 enhancements.
10738
10739 @item -mvrsave
10740 @item -mno-vrsave
10741 @opindex mvrsave
10742 @opindex mno-vrsave
10743 Generate VRSAVE instructions when generating AltiVec code.
10744
10745 @item -mabi=spe
10746 @opindex mabi=spe
10747 Extend the current ABI with SPE ABI extensions.  This does not change
10748 the default ABI, instead it adds the SPE ABI extensions to the current
10749 ABI@.
10750
10751 @item -mabi=no-spe
10752 @opindex mabi=no-spe
10753 Disable Booke SPE ABI extensions for the current ABI@.
10754
10755 @item -msecure-plt
10756 @opindex msecure-plt
10757 Generate code that allows ld and ld.so to build executables and shared
10758 libraries with non-exec .plt and .got sections.  This is a PowerPC
10759 32-bit SYSV ABI option.
10760
10761 @item -mbss-plt
10762 @opindex mbss-plt
10763 Generate code that uses a BSS .plt section that ld.so fills in, and
10764 requires .plt and .got sections that are both writable and executable.
10765 This is a PowerPC 32-bit SYSV ABI option.
10766
10767 @item -misel
10768 @itemx -mno-isel
10769 @opindex misel
10770 @opindex mno-isel
10771 This switch enables or disables the generation of ISEL instructions.
10772
10773 @item -misel=@var{yes/no}
10774 This switch has been deprecated.  Use @option{-misel} and
10775 @option{-mno-isel} instead.
10776
10777 @item -mspe
10778 @itemx -mno-isel
10779 @opindex mspe
10780 @opindex mno-spe
10781 This switch enables or disables the generation of SPE simd
10782 instructions.
10783
10784 @item -mspe=@var{yes/no}
10785 This option has been deprecated.  Use @option{-mspe} and
10786 @option{-mno-spe} instead.
10787
10788 @item -mfloat-gprs=@var{yes/single/double/no}
10789 @itemx -mfloat-gprs
10790 @opindex mfloat-gprs
10791 This switch enables or disables the generation of floating point
10792 operations on the general purpose registers for architectures that
10793 support it.
10794
10795 The argument @var{yes} or @var{single} enables the use of
10796 single-precision floating point operations.
10797
10798 The argument @var{double} enables the use of single and
10799 double-precision floating point operations.
10800
10801 The argument @var{no} disables floating point operations on the
10802 general purpose registers.
10803
10804 This option is currently only available on the MPC854x.
10805
10806 @item -m32
10807 @itemx -m64
10808 @opindex m32
10809 @opindex m64
10810 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
10811 targets (including GNU/Linux).  The 32-bit environment sets int, long
10812 and pointer to 32 bits and generates code that runs on any PowerPC
10813 variant.  The 64-bit environment sets int to 32 bits and long and
10814 pointer to 64 bits, and generates code for PowerPC64, as for
10815 @option{-mpowerpc64}.
10816
10817 @item -mfull-toc
10818 @itemx -mno-fp-in-toc
10819 @itemx -mno-sum-in-toc
10820 @itemx -mminimal-toc
10821 @opindex mfull-toc
10822 @opindex mno-fp-in-toc
10823 @opindex mno-sum-in-toc
10824 @opindex mminimal-toc
10825 Modify generation of the TOC (Table Of Contents), which is created for
10826 every executable file.  The @option{-mfull-toc} option is selected by
10827 default.  In that case, GCC will allocate at least one TOC entry for
10828 each unique non-automatic variable reference in your program.  GCC
10829 will also place floating-point constants in the TOC@.  However, only
10830 16,384 entries are available in the TOC@.
10831
10832 If you receive a linker error message that saying you have overflowed
10833 the available TOC space, you can reduce the amount of TOC space used
10834 with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
10835 @option{-mno-fp-in-toc} prevents GCC from putting floating-point
10836 constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
10837 generate code to calculate the sum of an address and a constant at
10838 run-time instead of putting that sum into the TOC@.  You may specify one
10839 or both of these options.  Each causes GCC to produce very slightly
10840 slower and larger code at the expense of conserving TOC space.
10841
10842 If you still run out of space in the TOC even when you specify both of
10843 these options, specify @option{-mminimal-toc} instead.  This option causes
10844 GCC to make only one TOC entry for every file.  When you specify this
10845 option, GCC will produce code that is slower and larger but which
10846 uses extremely little TOC space.  You may wish to use this option
10847 only on files that contain less frequently executed code.
10848
10849 @item -maix64
10850 @itemx -maix32
10851 @opindex maix64
10852 @opindex maix32
10853 Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
10854 @code{long} type, and the infrastructure needed to support them.
10855 Specifying @option{-maix64} implies @option{-mpowerpc64} and
10856 @option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
10857 implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
10858
10859 @item -mxl-compat
10860 @itemx -mno-xl-compat
10861 @opindex mxl-compat
10862 @opindex mno-xl-compat
10863 Produce code that conforms more closely to IBM XLC semantics when using
10864 AIX-compatible ABI.  Pass floating-point arguments to prototyped
10865 functions beyond the register save area (RSA) on the stack in addition
10866 to argument FPRs.  Do not assume that most significant double in 128
10867 bit long double value is properly rounded when comparing values.
10868
10869 The AIX calling convention was extended but not initially documented to
10870 handle an obscure K&R C case of calling a function that takes the
10871 address of its arguments with fewer arguments than declared.  AIX XL
10872 compilers access floating point arguments which do not fit in the
10873 RSA from the stack when a subroutine is compiled without
10874 optimization.  Because always storing floating-point arguments on the
10875 stack is inefficient and rarely needed, this option is not enabled by
10876 default and only is necessary when calling subroutines compiled by AIX
10877 XL compilers without optimization.
10878
10879 @item -mpe
10880 @opindex mpe
10881 Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
10882 application written to use message passing with special startup code to
10883 enable the application to run.  The system must have PE installed in the
10884 standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
10885 must be overridden with the @option{-specs=} option to specify the
10886 appropriate directory location.  The Parallel Environment does not
10887 support threads, so the @option{-mpe} option and the @option{-pthread}
10888 option are incompatible.
10889
10890 @item -malign-natural
10891 @itemx -malign-power
10892 @opindex malign-natural
10893 @opindex malign-power
10894 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
10895 @option{-malign-natural} overrides the ABI-defined alignment of larger
10896 types, such as floating-point doubles, on their natural size-based boundary.
10897 The option @option{-malign-power} instructs GCC to follow the ABI-specified
10898 alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
10899
10900 On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
10901 is not supported.
10902
10903 @item -msoft-float
10904 @itemx -mhard-float
10905 @opindex msoft-float
10906 @opindex mhard-float
10907 Generate code that does not use (uses) the floating-point register set.
10908 Software floating point emulation is provided if you use the
10909 @option{-msoft-float} option, and pass the option to GCC when linking.
10910
10911 @item -mmultiple
10912 @itemx -mno-multiple
10913 @opindex mmultiple
10914 @opindex mno-multiple
10915 Generate code that uses (does not use) the load multiple word
10916 instructions and the store multiple word instructions.  These
10917 instructions are generated by default on POWER systems, and not
10918 generated on PowerPC systems.  Do not use @option{-mmultiple} on little
10919 endian PowerPC systems, since those instructions do not work when the
10920 processor is in little endian mode.  The exceptions are PPC740 and
10921 PPC750 which permit the instructions usage in little endian mode.
10922
10923 @item -mstring
10924 @itemx -mno-string
10925 @opindex mstring
10926 @opindex mno-string
10927 Generate code that uses (does not use) the load string instructions
10928 and the store string word instructions to save multiple registers and
10929 do small block moves.  These instructions are generated by default on
10930 POWER systems, and not generated on PowerPC systems.  Do not use
10931 @option{-mstring} on little endian PowerPC systems, since those
10932 instructions do not work when the processor is in little endian mode.
10933 The exceptions are PPC740 and PPC750 which permit the instructions
10934 usage in little endian mode.
10935
10936 @item -mupdate
10937 @itemx -mno-update
10938 @opindex mupdate
10939 @opindex mno-update
10940 Generate code that uses (does not use) the load or store instructions
10941 that update the base register to the address of the calculated memory
10942 location.  These instructions are generated by default.  If you use
10943 @option{-mno-update}, there is a small window between the time that the
10944 stack pointer is updated and the address of the previous frame is
10945 stored, which means code that walks the stack frame across interrupts or
10946 signals may get corrupted data.
10947
10948 @item -mfused-madd
10949 @itemx -mno-fused-madd
10950 @opindex mfused-madd
10951 @opindex mno-fused-madd
10952 Generate code that uses (does not use) the floating point multiply and
10953 accumulate instructions.  These instructions are generated by default if
10954 hardware floating is used.
10955
10956 @item -mno-bit-align
10957 @itemx -mbit-align
10958 @opindex mno-bit-align
10959 @opindex mbit-align
10960 On System V.4 and embedded PowerPC systems do not (do) force structures
10961 and unions that contain bit-fields to be aligned to the base type of the
10962 bit-field.
10963
10964 For example, by default a structure containing nothing but 8
10965 @code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
10966 boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
10967 the structure would be aligned to a 1 byte boundary and be one byte in
10968 size.
10969
10970 @item -mno-strict-align
10971 @itemx -mstrict-align
10972 @opindex mno-strict-align
10973 @opindex mstrict-align
10974 On System V.4 and embedded PowerPC systems do not (do) assume that
10975 unaligned memory references will be handled by the system.
10976
10977 @item -mrelocatable
10978 @itemx -mno-relocatable
10979 @opindex mrelocatable
10980 @opindex mno-relocatable
10981 On embedded PowerPC systems generate code that allows (does not allow)
10982 the program to be relocated to a different address at runtime.  If you
10983 use @option{-mrelocatable} on any module, all objects linked together must
10984 be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
10985
10986 @item -mrelocatable-lib
10987 @itemx -mno-relocatable-lib
10988 @opindex mrelocatable-lib
10989 @opindex mno-relocatable-lib
10990 On embedded PowerPC systems generate code that allows (does not allow)
10991 the program to be relocated to a different address at runtime.  Modules
10992 compiled with @option{-mrelocatable-lib} can be linked with either modules
10993 compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
10994 with modules compiled with the @option{-mrelocatable} options.
10995
10996 @item -mno-toc
10997 @itemx -mtoc
10998 @opindex mno-toc
10999 @opindex mtoc
11000 On System V.4 and embedded PowerPC systems do not (do) assume that
11001 register 2 contains a pointer to a global area pointing to the addresses
11002 used in the program.
11003
11004 @item -mlittle
11005 @itemx -mlittle-endian
11006 @opindex mlittle
11007 @opindex mlittle-endian
11008 On System V.4 and embedded PowerPC systems compile code for the
11009 processor in little endian mode.  The @option{-mlittle-endian} option is
11010 the same as @option{-mlittle}.
11011
11012 @item -mbig
11013 @itemx -mbig-endian
11014 @opindex mbig
11015 @opindex mbig-endian
11016 On System V.4 and embedded PowerPC systems compile code for the
11017 processor in big endian mode.  The @option{-mbig-endian} option is
11018 the same as @option{-mbig}.
11019
11020 @item -mdynamic-no-pic
11021 @opindex mdynamic-no-pic
11022 On Darwin and Mac OS X systems, compile code so that it is not
11023 relocatable, but that its external references are relocatable.  The
11024 resulting code is suitable for applications, but not shared
11025 libraries.
11026
11027 @item -mprioritize-restricted-insns=@var{priority}
11028 @opindex mprioritize-restricted-insns
11029 This option controls the priority that is assigned to
11030 dispatch-slot restricted instructions during the second scheduling
11031 pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
11032 @var{no/highest/second-highest} priority to dispatch slot restricted
11033 instructions.
11034
11035 @item -msched-costly-dep=@var{dependence_type}
11036 @opindex msched-costly-dep
11037 This option controls which dependences are considered costly
11038 by the target during instruction scheduling.  The argument
11039 @var{dependence_type} takes one of the following values:
11040 @var{no}: no dependence is costly,
11041 @var{all}: all dependences are costly,
11042 @var{true_store_to_load}: a true dependence from store to load is costly,
11043 @var{store_to_load}: any dependence from store to load is costly,
11044 @var{number}: any dependence which latency >= @var{number} is costly.
11045
11046 @item -minsert-sched-nops=@var{scheme}
11047 @opindex minsert-sched-nops
11048 This option controls which nop insertion scheme will be used during
11049 the second scheduling pass.  The argument @var{scheme} takes one of the
11050 following values:
11051 @var{no}: Don't insert nops.
11052 @var{pad}: Pad with nops any dispatch group which has vacant issue slots,
11053 according to the scheduler's grouping.
11054 @var{regroup_exact}: Insert nops to force costly dependent insns into
11055 separate groups.  Insert exactly as many nops as needed to force an insn
11056 to a new group, according to the estimated processor grouping.
11057 @var{number}: Insert nops to force costly dependent insns into
11058 separate groups.  Insert @var{number} nops to force an insn to a new group.
11059
11060 @item -mcall-sysv
11061 @opindex mcall-sysv
11062 On System V.4 and embedded PowerPC systems compile code using calling
11063 conventions that adheres to the March 1995 draft of the System V
11064 Application Binary Interface, PowerPC processor supplement.  This is the
11065 default unless you configured GCC using @samp{powerpc-*-eabiaix}.
11066
11067 @item -mcall-sysv-eabi
11068 @opindex mcall-sysv-eabi
11069 Specify both @option{-mcall-sysv} and @option{-meabi} options.
11070
11071 @item -mcall-sysv-noeabi
11072 @opindex mcall-sysv-noeabi
11073 Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
11074
11075 @item -mcall-solaris
11076 @opindex mcall-solaris
11077 On System V.4 and embedded PowerPC systems compile code for the Solaris
11078 operating system.
11079
11080 @item -mcall-linux
11081 @opindex mcall-linux
11082 On System V.4 and embedded PowerPC systems compile code for the
11083 Linux-based GNU system.
11084
11085 @item -mcall-gnu
11086 @opindex mcall-gnu
11087 On System V.4 and embedded PowerPC systems compile code for the
11088 Hurd-based GNU system.
11089
11090 @item -mcall-netbsd
11091 @opindex mcall-netbsd
11092 On System V.4 and embedded PowerPC systems compile code for the
11093 NetBSD operating system.
11094
11095 @item -maix-struct-return
11096 @opindex maix-struct-return
11097 Return all structures in memory (as specified by the AIX ABI)@.
11098
11099 @item -msvr4-struct-return
11100 @opindex msvr4-struct-return
11101 Return structures smaller than 8 bytes in registers (as specified by the
11102 SVR4 ABI)@.
11103
11104 @item -mabi=@var{abi-type}
11105 @opindex mabi
11106 Extend the current ABI with a particular extension, or remove such extension.
11107 Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
11108 @var{no-spe}@.
11109
11110 @item -mprototype
11111 @itemx -mno-prototype
11112 @opindex mprototype
11113 @opindex mno-prototype
11114 On System V.4 and embedded PowerPC systems assume that all calls to
11115 variable argument functions are properly prototyped.  Otherwise, the
11116 compiler must insert an instruction before every non prototyped call to
11117 set or clear bit 6 of the condition code register (@var{CR}) to
11118 indicate whether floating point values were passed in the floating point
11119 registers in case the function takes a variable arguments.  With
11120 @option{-mprototype}, only calls to prototyped variable argument functions
11121 will set or clear the bit.
11122
11123 @item -msim
11124 @opindex msim
11125 On embedded PowerPC systems, assume that the startup module is called
11126 @file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
11127 @file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}.
11128 configurations.
11129
11130 @item -mmvme
11131 @opindex mmvme
11132 On embedded PowerPC systems, assume that the startup module is called
11133 @file{crt0.o} and the standard C libraries are @file{libmvme.a} and
11134 @file{libc.a}.
11135
11136 @item -mads
11137 @opindex mads
11138 On embedded PowerPC systems, assume that the startup module is called
11139 @file{crt0.o} and the standard C libraries are @file{libads.a} and
11140 @file{libc.a}.
11141
11142 @item -myellowknife
11143 @opindex myellowknife
11144 On embedded PowerPC systems, assume that the startup module is called
11145 @file{crt0.o} and the standard C libraries are @file{libyk.a} and
11146 @file{libc.a}.
11147
11148 @item -mvxworks
11149 @opindex mvxworks
11150 On System V.4 and embedded PowerPC systems, specify that you are
11151 compiling for a VxWorks system.
11152
11153 @item -mwindiss
11154 @opindex mwindiss
11155 Specify that you are compiling for the WindISS simulation environment.
11156
11157 @item -memb
11158 @opindex memb
11159 On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
11160 header to indicate that @samp{eabi} extended relocations are used.
11161
11162 @item -meabi
11163 @itemx -mno-eabi
11164 @opindex meabi
11165 @opindex mno-eabi
11166 On System V.4 and embedded PowerPC systems do (do not) adhere to the
11167 Embedded Applications Binary Interface (eabi) which is a set of
11168 modifications to the System V.4 specifications.  Selecting @option{-meabi}
11169 means that the stack is aligned to an 8 byte boundary, a function
11170 @code{__eabi} is called to from @code{main} to set up the eabi
11171 environment, and the @option{-msdata} option can use both @code{r2} and
11172 @code{r13} to point to two separate small data areas.  Selecting
11173 @option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
11174 do not call an initialization function from @code{main}, and the
11175 @option{-msdata} option will only use @code{r13} to point to a single
11176 small data area.  The @option{-meabi} option is on by default if you
11177 configured GCC using one of the @samp{powerpc*-*-eabi*} options.
11178
11179 @item -msdata=eabi
11180 @opindex msdata=eabi
11181 On System V.4 and embedded PowerPC systems, put small initialized
11182 @code{const} global and static data in the @samp{.sdata2} section, which
11183 is pointed to by register @code{r2}.  Put small initialized
11184 non-@code{const} global and static data in the @samp{.sdata} section,
11185 which is pointed to by register @code{r13}.  Put small uninitialized
11186 global and static data in the @samp{.sbss} section, which is adjacent to
11187 the @samp{.sdata} section.  The @option{-msdata=eabi} option is
11188 incompatible with the @option{-mrelocatable} option.  The
11189 @option{-msdata=eabi} option also sets the @option{-memb} option.
11190
11191 @item -msdata=sysv
11192 @opindex msdata=sysv
11193 On System V.4 and embedded PowerPC systems, put small global and static
11194 data in the @samp{.sdata} section, which is pointed to by register
11195 @code{r13}.  Put small uninitialized global and static data in the
11196 @samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
11197 The @option{-msdata=sysv} option is incompatible with the
11198 @option{-mrelocatable} option.
11199
11200 @item -msdata=default
11201 @itemx -msdata
11202 @opindex msdata=default
11203 @opindex msdata
11204 On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
11205 compile code the same as @option{-msdata=eabi}, otherwise compile code the
11206 same as @option{-msdata=sysv}.
11207
11208 @item -msdata-data
11209 @opindex msdata-data
11210 On System V.4 and embedded PowerPC systems, put small global and static
11211 data in the @samp{.sdata} section.  Put small uninitialized global and
11212 static data in the @samp{.sbss} section.  Do not use register @code{r13}
11213 to address small data however.  This is the default behavior unless
11214 other @option{-msdata} options are used.
11215
11216 @item -msdata=none
11217 @itemx -mno-sdata
11218 @opindex msdata=none
11219 @opindex mno-sdata
11220 On embedded PowerPC systems, put all initialized global and static data
11221 in the @samp{.data} section, and all uninitialized data in the
11222 @samp{.bss} section.
11223
11224 @item -G @var{num}
11225 @opindex G
11226 @cindex smaller data references (PowerPC)
11227 @cindex .sdata/.sdata2 references (PowerPC)
11228 On embedded PowerPC systems, put global and static items less than or
11229 equal to @var{num} bytes into the small data or bss sections instead of
11230 the normal data or bss section.  By default, @var{num} is 8.  The
11231 @option{-G @var{num}} switch is also passed to the linker.
11232 All modules should be compiled with the same @option{-G @var{num}} value.
11233
11234 @item -mregnames
11235 @itemx -mno-regnames
11236 @opindex mregnames
11237 @opindex mno-regnames
11238 On System V.4 and embedded PowerPC systems do (do not) emit register
11239 names in the assembly language output using symbolic forms.
11240
11241 @item -mlongcall
11242 @itemx -mno-longcall
11243 @opindex mlongcall
11244 @opindex mno-longcall
11245 Default to making all function calls indirectly, using a register, so
11246 that functions which reside further than 32 megabytes (33,554,432
11247 bytes) from the current location can be called.  This setting can be
11248 overridden by the @code{shortcall} function attribute, or by
11249 @code{#pragma longcall(0)}.
11250
11251 Some linkers are capable of detecting out-of-range calls and generating
11252 glue code on the fly.  On these systems, long calls are unnecessary and
11253 generate slower code.  As of this writing, the AIX linker can do this,
11254 as can the GNU linker for PowerPC/64.  It is planned to add this feature
11255 to the GNU linker for 32-bit PowerPC systems as well.
11256
11257 On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
11258 callee, L42'', plus a ``branch island'' (glue code).  The two target
11259 addresses represent the callee and the ``branch island''.  The
11260 Darwin/PPC linker will prefer the first address and generate a ``bl
11261 callee'' if the PPC ``bl'' instruction will reach the callee directly;
11262 otherwise, the linker will generate ``bl L42'' to call the ``branch
11263 island''.  The ``branch island'' is appended to the body of the
11264 calling function; it computes the full 32-bit address of the callee
11265 and jumps to it.
11266
11267 On Mach-O (Darwin) systems, this option directs the compiler emit to
11268 the glue for every direct call, and the Darwin linker decides whether
11269 to use or discard it.
11270
11271 In the future, we may cause GCC to ignore all longcall specifications
11272 when the linker is known to generate glue.
11273
11274 @item -pthread
11275 @opindex pthread
11276 Adds support for multithreading with the @dfn{pthreads} library.
11277 This option sets flags for both the preprocessor and linker.
11278
11279 @end table
11280
11281 @node S/390 and zSeries Options
11282 @subsection S/390 and zSeries Options
11283 @cindex S/390 and zSeries Options
11284
11285 These are the @samp{-m} options defined for the S/390 and zSeries architecture.
11286
11287 @table @gcctabopt
11288 @item -mhard-float
11289 @itemx -msoft-float
11290 @opindex mhard-float
11291 @opindex msoft-float
11292 Use (do not use) the hardware floating-point instructions and registers
11293 for floating-point operations.  When @option{-msoft-float} is specified,
11294 functions in @file{libgcc.a} will be used to perform floating-point
11295 operations.  When @option{-mhard-float} is specified, the compiler
11296 generates IEEE floating-point instructions.  This is the default.
11297
11298 @item -mbackchain
11299 @itemx -mno-backchain
11300 @opindex mbackchain
11301 @opindex mno-backchain
11302 Store (do not store) the address of the caller's frame as backchain pointer
11303 into the callee's stack frame.
11304 A backchain may be needed to allow debugging using tools that do not understand
11305 DWARF-2 call frame information.
11306 When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
11307 at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
11308 the backchain is placed into the topmost word of the 96/160 byte register
11309 save area.
11310
11311 In general, code compiled with @option{-mbackchain} is call-compatible with
11312 code compiled with @option{-mmo-backchain}; however, use of the backchain
11313 for debugging purposes usually requires that the whole binary is built with
11314 @option{-mbackchain}.  Note that the combination of @option{-mbackchain},
11315 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
11316 to build a linux kernel use @option{-msoft-float}.
11317
11318 The default is to not maintain the backchain.
11319
11320 @item -mpacked-stack
11321 @item -mno-packed-stack
11322 @opindex mpacked-stack
11323 @opindex mno-packed-stack
11324 Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
11325 specified, the compiler uses the all fields of the 96/160 byte register save
11326 area only for their default purpose; unused fields still take up stack space.
11327 When @option{-mpacked-stack} is specified, register save slots are densely
11328 packed at the top of the register save area; unused space is reused for other
11329 purposes, allowing for more efficient use of the available stack space.
11330 However, when @option{-mbackchain} is also in effect, the topmost word of
11331 the save area is always used to store the backchain, and the return address
11332 register is always saved two words below the backchain.
11333
11334 As long as the stack frame backchain is not used, code generated with
11335 @option{-mpacked-stack} is call-compatible with code generated with
11336 @option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
11337 S/390 or zSeries generated code that uses the stack frame backchain at run
11338 time, not just for debugging purposes.  Such code is not call-compatible
11339 with code compiled with @option{-mpacked-stack}.  Also, note that the
11340 combination of @option{-mbackchain},
11341 @option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
11342 to build a linux kernel use @option{-msoft-float}.
11343
11344 The default is to not use the packed stack layout.
11345
11346 @item -msmall-exec
11347 @itemx -mno-small-exec
11348 @opindex msmall-exec
11349 @opindex mno-small-exec
11350 Generate (or do not generate) code using the @code{bras} instruction
11351 to do subroutine calls.
11352 This only works reliably if the total executable size does not
11353 exceed 64k.  The default is to use the @code{basr} instruction instead,
11354 which does not have this limitation.
11355
11356 @item -m64
11357 @itemx -m31
11358 @opindex m64
11359 @opindex m31
11360 When @option{-m31} is specified, generate code compliant to the
11361 GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
11362 code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
11363 particular to generate 64-bit instructions.  For the @samp{s390}
11364 targets, the default is @option{-m31}, while the @samp{s390x}
11365 targets default to @option{-m64}.
11366
11367 @item -mzarch
11368 @itemx -mesa
11369 @opindex mzarch
11370 @opindex mesa
11371 When @option{-mzarch} is specified, generate code using the
11372 instructions available on z/Architecture.
11373 When @option{-mesa} is specified, generate code using the
11374 instructions available on ESA/390.  Note that @option{-mesa} is
11375 not possible with @option{-m64}.
11376 When generating code compliant to the GNU/Linux for S/390 ABI,
11377 the default is @option{-mesa}.  When generating code compliant
11378 to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
11379
11380 @item -mmvcle
11381 @itemx -mno-mvcle
11382 @opindex mmvcle
11383 @opindex mno-mvcle
11384 Generate (or do not generate) code using the @code{mvcle} instruction
11385 to perform block moves.  When @option{-mno-mvcle} is specified,
11386 use a @code{mvc} loop instead.  This is the default unless optimizing for
11387 size.
11388
11389 @item -mdebug
11390 @itemx -mno-debug
11391 @opindex mdebug
11392 @opindex mno-debug
11393 Print (or do not print) additional debug information when compiling.
11394 The default is to not print debug information.
11395
11396 @item -march=@var{cpu-type}
11397 @opindex march
11398 Generate code that will run on @var{cpu-type}, which is the name of a system
11399 representing a certain processor type.  Possible values for
11400 @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
11401 When generating code using the instructions available on z/Architecture,
11402 the default is @option{-march=z900}.  Otherwise, the default is
11403 @option{-march=g5}.
11404
11405 @item -mtune=@var{cpu-type}
11406 @opindex mtune
11407 Tune to @var{cpu-type} everything applicable about the generated code,
11408 except for the ABI and the set of available instructions.
11409 The list of @var{cpu-type} values is the same as for @option{-march}.
11410 The default is the value used for @option{-march}.
11411
11412 @item -mtpf-trace
11413 @itemx -mno-tpf-trace
11414 @opindex mtpf-trace
11415 @opindex mno-tpf-trace
11416 Generate code that adds (does not add) in TPF OS specific branches to trace
11417 routines in the operating system.  This option is off by default, even
11418 when compiling for the TPF OS@.
11419
11420 @item -mfused-madd
11421 @itemx -mno-fused-madd
11422 @opindex mfused-madd
11423 @opindex mno-fused-madd
11424 Generate code that uses (does not use) the floating point multiply and
11425 accumulate instructions.  These instructions are generated by default if
11426 hardware floating point is used.
11427
11428 @item -mwarn-framesize=@var{framesize}
11429 @opindex mwarn-framesize
11430 Emit a warning if the current function exceeds the given frame size.  Because
11431 this is a compile time check it doesn't need to be a real problem when the program
11432 runs.  It is intended to identify functions which most probably cause
11433 a stack overflow.  It is useful to be used in an environment with limited stack
11434 size e.g.@: the linux kernel.
11435
11436 @item -mwarn-dynamicstack
11437 @opindex mwarn-dynamicstack
11438 Emit a warning if the function calls alloca or uses dynamically
11439 sized arrays.  This is generally a bad idea with a limited stack size.
11440
11441 @item -mstack-guard=@var{stack-guard}
11442 @item -mstack-size=@var{stack-size}
11443 @opindex mstack-guard
11444 @opindex mstack-size
11445 These arguments always have to be used in conjunction.  If they are present the s390
11446 back end emits additional instructions in the function prologue which trigger a trap
11447 if the stack size is @var{stack-guard} bytes above the @var{stack-size}
11448 (remember that the stack on s390 grows downward).  These options are intended to
11449 be used to help debugging stack overflow problems.  The additionally emitted code
11450 cause only little overhead and hence can also be used in production like systems
11451 without greater performance degradation.  The given values have to be exact
11452 powers of 2 and @var{stack-size} has to be greater than @var{stack-guard}.
11453 In order to be efficient the extra code makes the assumption that the stack starts
11454 at an address aligned to the value given by @var{stack-size}.
11455 @end table
11456
11457 @node SH Options
11458 @subsection SH Options
11459
11460 These @samp{-m} options are defined for the SH implementations:
11461
11462 @table @gcctabopt
11463 @item -m1
11464 @opindex m1
11465 Generate code for the SH1.
11466
11467 @item -m2
11468 @opindex m2
11469 Generate code for the SH2.
11470
11471 @item -m2e
11472 Generate code for the SH2e.
11473
11474 @item -m3
11475 @opindex m3
11476 Generate code for the SH3.
11477
11478 @item -m3e
11479 @opindex m3e
11480 Generate code for the SH3e.
11481
11482 @item -m4-nofpu
11483 @opindex m4-nofpu
11484 Generate code for the SH4 without a floating-point unit.
11485
11486 @item -m4-single-only
11487 @opindex m4-single-only
11488 Generate code for the SH4 with a floating-point unit that only
11489 supports single-precision arithmetic.
11490
11491 @item -m4-single
11492 @opindex m4-single
11493 Generate code for the SH4 assuming the floating-point unit is in
11494 single-precision mode by default.
11495
11496 @item -m4
11497 @opindex m4
11498 Generate code for the SH4.
11499
11500 @item -m4a-nofpu
11501 @opindex m4a-nofpu
11502 Generate code for the SH4al-dsp, or for a SH4a in such a way that the
11503 floating-point unit is not used.
11504
11505 @item -m4a-single-only
11506 @opindex m4a-single-only
11507 Generate code for the SH4a, in such a way that no double-precision
11508 floating point operations are used.
11509
11510 @item -m4a-single
11511 @opindex m4a-single
11512 Generate code for the SH4a assuming the floating-point unit is in
11513 single-precision mode by default.
11514
11515 @item -m4a
11516 @opindex m4a
11517 Generate code for the SH4a.
11518
11519 @item -m4al
11520 @opindex m4al
11521 Same as @option{-m4a-nofpu}, except that it implicitly passes
11522 @option{-dsp} to the assembler.  GCC doesn't generate any DSP
11523 instructions at the moment.
11524
11525 @item -mb
11526 @opindex mb
11527 Compile code for the processor in big endian mode.
11528
11529 @item -ml
11530 @opindex ml
11531 Compile code for the processor in little endian mode.
11532
11533 @item -mdalign
11534 @opindex mdalign
11535 Align doubles at 64-bit boundaries.  Note that this changes the calling
11536 conventions, and thus some functions from the standard C library will
11537 not work unless you recompile it first with @option{-mdalign}.
11538
11539 @item -mrelax
11540 @opindex mrelax
11541 Shorten some address references at link time, when possible; uses the
11542 linker option @option{-relax}.
11543
11544 @item -mbigtable
11545 @opindex mbigtable
11546 Use 32-bit offsets in @code{switch} tables.  The default is to use
11547 16-bit offsets.
11548
11549 @item -mfmovd
11550 @opindex mfmovd
11551 Enable the use of the instruction @code{fmovd}.
11552
11553 @item -mhitachi
11554 @opindex mhitachi
11555 Comply with the calling conventions defined by Renesas.
11556
11557 @item -mrenesas
11558 @opindex mhitachi
11559 Comply with the calling conventions defined by Renesas.
11560
11561 @item -mno-renesas
11562 @opindex mhitachi
11563 Comply with the calling conventions defined for GCC before the Renesas
11564 conventions were available.  This option is the default for all
11565 targets of the SH toolchain except for @samp{sh-symbianelf}.
11566
11567 @item -mnomacsave
11568 @opindex mnomacsave
11569 Mark the @code{MAC} register as call-clobbered, even if
11570 @option{-mhitachi} is given.
11571
11572 @item -mieee
11573 @opindex mieee
11574 Increase IEEE-compliance of floating-point code.
11575 At the moment, this is equivalent to @option{-fno-finite-math-only}.
11576 When generating 16 bit SH opcodes, getting IEEE-conforming results for
11577 comparisons of NANs / infinities incurs extra overhead in every
11578 floating point comparison, therefore the default is set to
11579 @option{-ffinite-math-only}.
11580
11581 @item -misize
11582 @opindex misize
11583 Dump instruction size and location in the assembly code.
11584
11585 @item -mpadstruct
11586 @opindex mpadstruct
11587 This option is deprecated.  It pads structures to multiple of 4 bytes,
11588 which is incompatible with the SH ABI@.
11589
11590 @item -mspace
11591 @opindex mspace
11592 Optimize for space instead of speed.  Implied by @option{-Os}.
11593
11594 @item -mprefergot
11595 @opindex mprefergot
11596 When generating position-independent code, emit function calls using
11597 the Global Offset Table instead of the Procedure Linkage Table.
11598
11599 @item -musermode
11600 @opindex musermode
11601 Generate a library function call to invalidate instruction cache
11602 entries, after fixing up a trampoline.  This library function call
11603 doesn't assume it can write to the whole memory address space.  This
11604 is the default when the target is @code{sh-*-linux*}.
11605
11606 @item -multcost=@var{number}
11607 @opindex multcost=@var{number}
11608 Set the cost to assume for a multiply insn.
11609
11610 @item -mdiv=@var{strategy}
11611 @opindex mdiv=@var{strategy}
11612 Set the division strategy to use for SHmedia code.  @var{strategy} must be
11613 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
11614 inv:call2, inv:fp .
11615 "fp" performs the operation in floating point.  This has a very high latency,
11616 but needs only a few instructions, so it might be a good choice if
11617 your code has enough easily exploitable ILP to allow the compiler to
11618 schedule the floating point instructions together with other instructions.
11619 Division by zero causes a floating point exception.
11620 "inv" uses integer operations to calculate the inverse of the divisor,
11621 and then multiplies the dividend with the inverse.  This strategy allows
11622 cse and hoisting of the inverse calculation.  Division by zero calculates
11623 an unspecified result, but does not trap.
11624 "inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
11625 have been found, or if the entire operation has been hoisted to the same
11626 place, the last stages of the inverse calculation are intertwined with the
11627 final multiply to reduce the overall latency, at the expense of using a few
11628 more instructions, and thus offering fewer scheduling opportunities with
11629 other code.
11630 "call" calls a library function that usually implements the inv:minlat
11631 strategy.
11632 This gives high code density for m5-*media-nofpu compilations.
11633 "call2" uses a different entry point of the same library function, where it
11634 assumes that a pointer to a lookup table has already been set up, which
11635 exposes the pointer load to cse / code hoisting optimizations.
11636 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
11637 code generation, but if the code stays unoptimized, revert to the "call",
11638 "call2", or "fp" strategies, respectively.  Note that the
11639 potentially-trapping side effect of division by zero is carried by a
11640 separate instruction, so it is possible that all the integer instructions
11641 are hoisted out, but the marker for the side effect stays where it is.
11642 A recombination to fp operations or a call is not possible in that case.
11643 "inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
11644 that the inverse calculation was nor separated from the multiply, they speed
11645 up division where the dividend fits into 20 bits (plus sign where applicable),
11646 by inserting a test to skip a number of operations in this case; this test
11647 slows down the case of larger dividends.  inv20u assumes the case of a such
11648 a small dividend to be unlikely, and inv20l assumes it to be likely.
11649
11650 @item -mdivsi3_libfunc=@var{name}
11651 @opindex mdivsi3_libfunc=@var{name}
11652 Set the name of the library function used for 32 bit signed division to
11653 @var{name}.  This only affect the name used in the call and inv:call
11654 division strategies, and the compiler will still expect the same
11655 sets of input/output/clobbered registers as if this option was not present.
11656
11657 @item -madjust-unroll
11658 @opindex madjust-unroll
11659 Throttle unrolling to avoid thrashing target registers.
11660 This option only has an effect if the gcc code base supports the
11661 TARGET_ADJUST_UNROLL_MAX target hook.
11662
11663 @item -mindexed-addressing
11664 @opindex mindexed-addressing
11665 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
11666 This is only safe if the hardware and/or OS implement 32 bit wrap-around
11667 semantics for the indexed addressing mode.  The architecture allows the
11668 implementation of processors with 64 bit MMU, which the OS could use to
11669 get 32 bit addressing, but since no current hardware implementation supports
11670 this or any other way to make the indexed addressing mode safe to use in
11671 the 32 bit ABI, the default is -mno-indexed-addressing.
11672
11673 @item -mgettrcost=@var{number}
11674 @opindex mgettrcost=@var{number}
11675 Set the cost assumed for the gettr instruction to @var{number}.
11676 The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
11677
11678 @item -mpt-fixed
11679 @opindex mpt-fixed
11680 Assume pt* instructions won't trap.  This will generally generate better
11681 scheduled code, but is unsafe on current hardware.  The current architecture
11682 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
11683 This has the unintentional effect of making it unsafe to schedule ptabs /
11684 ptrel before a branch, or hoist it out of a loop.  For example,
11685 __do_global_ctors, a part of libgcc that runs constructors at program
11686 startup, calls functions in a list which is delimited by -1.  With the
11687 -mpt-fixed option, the ptabs will be done before testing against -1.
11688 That means that all the constructors will be run a bit quicker, but when
11689 the loop comes to the end of the list, the program crashes because ptabs
11690 loads -1 into a target register.  Since this option is unsafe for any
11691 hardware implementing the current architecture specification, the default
11692 is -mno-pt-fixed.  Unless the user specifies a specific cost with
11693 @option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
11694 this deters register allocation using target registers for storing
11695 ordinary integers.
11696
11697 @item -minvalid-symbols
11698 @opindex minvalid-symbols
11699 Assume symbols might be invalid.  Ordinary function symbols generated by
11700 the compiler will always be valid to load with movi/shori/ptabs or
11701 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
11702 to generate symbols that will cause ptabs / ptrel to trap.
11703 This option is only meaningful when @option{-mno-pt-fixed} is in effect.
11704 It will then prevent cross-basic-block cse, hoisting and most scheduling
11705 of symbol loads.  The default is @option{-mno-invalid-symbols}.
11706 @end table
11707
11708 @node SPARC Options
11709 @subsection SPARC Options
11710 @cindex SPARC options
11711
11712 These @samp{-m} options are supported on the SPARC:
11713
11714 @table @gcctabopt
11715 @item -mno-app-regs
11716 @itemx -mapp-regs
11717 @opindex mno-app-regs
11718 @opindex mapp-regs
11719 Specify @option{-mapp-regs} to generate output using the global registers
11720 2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
11721 is the default.
11722
11723 To be fully SVR4 ABI compliant at the cost of some performance loss,
11724 specify @option{-mno-app-regs}.  You should compile libraries and system
11725 software with this option.
11726
11727 @item -mfpu
11728 @itemx -mhard-float
11729 @opindex mfpu
11730 @opindex mhard-float
11731 Generate output containing floating point instructions.  This is the
11732 default.
11733
11734 @item -mno-fpu
11735 @itemx -msoft-float
11736 @opindex mno-fpu
11737 @opindex msoft-float
11738 Generate output containing library calls for floating point.
11739 @strong{Warning:} the requisite libraries are not available for all SPARC
11740 targets.  Normally the facilities of the machine's usual C compiler are
11741 used, but this cannot be done directly in cross-compilation.  You must make
11742 your own arrangements to provide suitable library functions for
11743 cross-compilation.  The embedded targets @samp{sparc-*-aout} and
11744 @samp{sparclite-*-*} do provide software floating point support.
11745
11746 @option{-msoft-float} changes the calling convention in the output file;
11747 therefore, it is only useful if you compile @emph{all} of a program with
11748 this option.  In particular, you need to compile @file{libgcc.a}, the
11749 library that comes with GCC, with @option{-msoft-float} in order for
11750 this to work.
11751
11752 @item -mhard-quad-float
11753 @opindex mhard-quad-float
11754 Generate output containing quad-word (long double) floating point
11755 instructions.
11756
11757 @item -msoft-quad-float
11758 @opindex msoft-quad-float
11759 Generate output containing library calls for quad-word (long double)
11760 floating point instructions.  The functions called are those specified
11761 in the SPARC ABI@.  This is the default.
11762
11763 As of this writing, there are no SPARC implementations that have hardware
11764 support for the quad-word floating point instructions.  They all invoke
11765 a trap handler for one of these instructions, and then the trap handler
11766 emulates the effect of the instruction.  Because of the trap handler overhead,
11767 this is much slower than calling the ABI library routines.  Thus the
11768 @option{-msoft-quad-float} option is the default.
11769
11770 @item -mno-unaligned-doubles
11771 @itemx -munaligned-doubles
11772 @opindex mno-unaligned-doubles
11773 @opindex munaligned-doubles
11774 Assume that doubles have 8 byte alignment.  This is the default.
11775
11776 With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
11777 alignment only if they are contained in another type, or if they have an
11778 absolute address.  Otherwise, it assumes they have 4 byte alignment.
11779 Specifying this option avoids some rare compatibility problems with code
11780 generated by other compilers.  It is not the default because it results
11781 in a performance loss, especially for floating point code.
11782
11783 @item -mno-faster-structs
11784 @itemx -mfaster-structs
11785 @opindex mno-faster-structs
11786 @opindex mfaster-structs
11787 With @option{-mfaster-structs}, the compiler assumes that structures
11788 should have 8 byte alignment.  This enables the use of pairs of
11789 @code{ldd} and @code{std} instructions for copies in structure
11790 assignment, in place of twice as many @code{ld} and @code{st} pairs.
11791 However, the use of this changed alignment directly violates the SPARC
11792 ABI@.  Thus, it's intended only for use on targets where the developer
11793 acknowledges that their resulting code will not be directly in line with
11794 the rules of the ABI@.
11795
11796 @item -mimpure-text
11797 @opindex mimpure-text
11798 @option{-mimpure-text}, used in addition to @option{-shared}, tells
11799 the compiler to not pass @option{-z text} to the linker when linking a
11800 shared object.  Using this option, you can link position-dependent
11801 code into a shared object.
11802
11803 @option{-mimpure-text} suppresses the ``relocations remain against
11804 allocatable but non-writable sections'' linker error message.
11805 However, the necessary relocations will trigger copy-on-write, and the
11806 shared object is not actually shared across processes.  Instead of
11807 using @option{-mimpure-text}, you should compile all source code with
11808 @option{-fpic} or @option{-fPIC}.
11809
11810 This option is only available on SunOS and Solaris.
11811
11812 @item -mcpu=@var{cpu_type}
11813 @opindex mcpu
11814 Set the instruction set, register set, and instruction scheduling parameters
11815 for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
11816 @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
11817 @samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
11818 @samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc}, and
11819 @samp{ultrasparc3}.
11820
11821 Default instruction scheduling parameters are used for values that select
11822 an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
11823 @samp{sparclite}, @samp{sparclet}, @samp{v9}.
11824
11825 Here is a list of each supported architecture and their supported
11826 implementations.
11827
11828 @smallexample
11829     v7:             cypress
11830     v8:             supersparc, hypersparc
11831     sparclite:      f930, f934, sparclite86x
11832     sparclet:       tsc701
11833     v9:             ultrasparc, ultrasparc3
11834 @end smallexample
11835
11836 By default (unless configured otherwise), GCC generates code for the V7
11837 variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
11838 additionally optimizes it for the Cypress CY7C602 chip, as used in the
11839 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
11840 SPARCStation 1, 2, IPX etc.
11841
11842 With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
11843 architecture.  The only difference from V7 code is that the compiler emits
11844 the integer multiply and integer divide instructions which exist in SPARC-V8
11845 but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
11846 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
11847 2000 series.
11848
11849 With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
11850 the SPARC architecture.  This adds the integer multiply, integer divide step
11851 and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
11852 With @option{-mcpu=f930}, the compiler additionally optimizes it for the
11853 Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
11854 @option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
11855 MB86934 chip, which is the more recent SPARClite with FPU@.
11856
11857 With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
11858 the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
11859 integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
11860 but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
11861 optimizes it for the TEMIC SPARClet chip.
11862
11863 With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
11864 architecture.  This adds 64-bit integer and floating-point move instructions,
11865 3 additional floating-point condition code registers and conditional move
11866 instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
11867 optimizes it for the Sun UltraSPARC I/II chips.  With
11868 @option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
11869 Sun UltraSPARC III chip.
11870
11871 @item -mtune=@var{cpu_type}
11872 @opindex mtune
11873 Set the instruction scheduling parameters for machine type
11874 @var{cpu_type}, but do not set the instruction set or register set that the
11875 option @option{-mcpu=@var{cpu_type}} would.
11876
11877 The same values for @option{-mcpu=@var{cpu_type}} can be used for
11878 @option{-mtune=@var{cpu_type}}, but the only useful values are those
11879 that select a particular cpu implementation.  Those are @samp{cypress},
11880 @samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
11881 @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, and
11882 @samp{ultrasparc3}.
11883
11884 @item -mv8plus
11885 @itemx -mno-v8plus
11886 @opindex mv8plus
11887 @opindex mno-v8plus
11888 With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
11889 difference from the V8 ABI is that the global and out registers are
11890 considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
11891 mode for all SPARC-V9 processors.
11892
11893 @item -mvis
11894 @itemx -mno-vis
11895 @opindex mvis
11896 @opindex mno-vis
11897 With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
11898 Visual Instruction Set extensions.  The default is @option{-mno-vis}.
11899 @end table
11900
11901 These @samp{-m} options are supported in addition to the above
11902 on SPARC-V9 processors in 64-bit environments:
11903
11904 @table @gcctabopt
11905 @item -mlittle-endian
11906 @opindex mlittle-endian
11907 Generate code for a processor running in little-endian mode.  It is only
11908 available for a few configurations and most notably not on Solaris and Linux.
11909
11910 @item -m32
11911 @itemx -m64
11912 @opindex m32
11913 @opindex m64
11914 Generate code for a 32-bit or 64-bit environment.
11915 The 32-bit environment sets int, long and pointer to 32 bits.
11916 The 64-bit environment sets int to 32 bits and long and pointer
11917 to 64 bits.
11918
11919 @item -mcmodel=medlow
11920 @opindex mcmodel=medlow
11921 Generate code for the Medium/Low code model: 64-bit addresses, programs
11922 must be linked in the low 32 bits of memory.  Programs can be statically
11923 or dynamically linked.
11924
11925 @item -mcmodel=medmid
11926 @opindex mcmodel=medmid
11927 Generate code for the Medium/Middle code model: 64-bit addresses, programs
11928 must be linked in the low 44 bits of memory, the text and data segments must
11929 be less than 2GB in size and the data segment must be located within 2GB of
11930 the text segment.
11931
11932 @item -mcmodel=medany
11933 @opindex mcmodel=medany
11934 Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
11935 may be linked anywhere in memory, the text and data segments must be less
11936 than 2GB in size and the data segment must be located within 2GB of the
11937 text segment.
11938
11939 @item -mcmodel=embmedany
11940 @opindex mcmodel=embmedany
11941 Generate code for the Medium/Anywhere code model for embedded systems:
11942 64-bit addresses, the text and data segments must be less than 2GB in
11943 size, both starting anywhere in memory (determined at link time).  The
11944 global register %g4 points to the base of the data segment.  Programs
11945 are statically linked and PIC is not supported.
11946
11947 @item -mstack-bias
11948 @itemx -mno-stack-bias
11949 @opindex mstack-bias
11950 @opindex mno-stack-bias
11951 With @option{-mstack-bias}, GCC assumes that the stack pointer, and
11952 frame pointer if present, are offset by @minus{}2047 which must be added back
11953 when making stack frame references.  This is the default in 64-bit mode.
11954 Otherwise, assume no such offset is present.
11955 @end table
11956
11957 These switches are supported in addition to the above on Solaris:
11958
11959 @table @gcctabopt
11960 @item -threads
11961 @opindex threads
11962 Add support for multithreading using the Solaris threads library.  This
11963 option sets flags for both the preprocessor and linker.  This option does
11964 not affect the thread safety of object code produced by the compiler or
11965 that of libraries supplied with it.
11966
11967 @item -pthreads
11968 @opindex pthreads
11969 Add support for multithreading using the POSIX threads library.  This
11970 option sets flags for both the preprocessor and linker.  This option does
11971 not affect the thread safety of object code produced  by the compiler or
11972 that of libraries supplied with it.
11973 @end table
11974
11975 @node System V Options
11976 @subsection Options for System V
11977
11978 These additional options are available on System V Release 4 for
11979 compatibility with other compilers on those systems:
11980
11981 @table @gcctabopt
11982 @item -G
11983 @opindex G
11984 Create a shared object.
11985 It is recommended that @option{-symbolic} or @option{-shared} be used instead.
11986
11987 @item -Qy
11988 @opindex Qy
11989 Identify the versions of each tool used by the compiler, in a
11990 @code{.ident} assembler directive in the output.
11991
11992 @item -Qn
11993 @opindex Qn
11994 Refrain from adding @code{.ident} directives to the output file (this is
11995 the default).
11996
11997 @item -YP,@var{dirs}
11998 @opindex YP
11999 Search the directories @var{dirs}, and no others, for libraries
12000 specified with @option{-l}.
12001
12002 @item -Ym,@var{dir}
12003 @opindex Ym
12004 Look in the directory @var{dir} to find the M4 preprocessor.
12005 The assembler uses this option.
12006 @c This is supposed to go with a -Yd for predefined M4 macro files, but
12007 @c the generic assembler that comes with Solaris takes just -Ym.
12008 @end table
12009
12010 @node TMS320C3x/C4x Options
12011 @subsection TMS320C3x/C4x Options
12012 @cindex TMS320C3x/C4x Options
12013
12014 These @samp{-m} options are defined for TMS320C3x/C4x implementations:
12015
12016 @table @gcctabopt
12017
12018 @item -mcpu=@var{cpu_type}
12019 @opindex mcpu
12020 Set the instruction set, register set, and instruction scheduling
12021 parameters for machine type @var{cpu_type}.  Supported values for
12022 @var{cpu_type} are @samp{c30}, @samp{c31}, @samp{c32}, @samp{c40}, and
12023 @samp{c44}.  The default is @samp{c40} to generate code for the
12024 TMS320C40.
12025
12026 @item -mbig-memory
12027 @itemx -mbig
12028 @itemx -msmall-memory
12029 @itemx -msmall
12030 @opindex mbig-memory
12031 @opindex mbig
12032 @opindex msmall-memory
12033 @opindex msmall
12034 Generates code for the big or small memory model.  The small memory
12035 model assumed that all data fits into one 64K word page.  At run-time
12036 the data page (DP) register must be set to point to the 64K page
12037 containing the .bss and .data program sections.  The big memory model is
12038 the default and requires reloading of the DP register for every direct
12039 memory access.
12040
12041 @item -mbk
12042 @itemx -mno-bk
12043 @opindex mbk
12044 @opindex mno-bk
12045 Allow (disallow) allocation of general integer operands into the block
12046 count register BK@.
12047
12048 @item -mdb
12049 @itemx -mno-db
12050 @opindex mdb
12051 @opindex mno-db
12052 Enable (disable) generation of code using decrement and branch,
12053 DBcond(D), instructions.  This is enabled by default for the C4x.  To be
12054 on the safe side, this is disabled for the C3x, since the maximum
12055 iteration count on the C3x is @math{2^{23} + 1} (but who iterates loops more than
12056 @math{2^{23}} times on the C3x?).  Note that GCC will try to reverse a loop so
12057 that it can utilize the decrement and branch instruction, but will give
12058 up if there is more than one memory reference in the loop.  Thus a loop
12059 where the loop counter is decremented can generate slightly more
12060 efficient code, in cases where the RPTB instruction cannot be utilized.
12061
12062 @item -mdp-isr-reload
12063 @itemx -mparanoid
12064 @opindex mdp-isr-reload
12065 @opindex mparanoid
12066 Force the DP register to be saved on entry to an interrupt service
12067 routine (ISR), reloaded to point to the data section, and restored on
12068 exit from the ISR@.  This should not be required unless someone has
12069 violated the small memory model by modifying the DP register, say within
12070 an object library.
12071
12072 @item -mmpyi
12073 @itemx -mno-mpyi
12074 @opindex mmpyi
12075 @opindex mno-mpyi
12076 For the C3x use the 24-bit MPYI instruction for integer multiplies
12077 instead of a library call to guarantee 32-bit results.  Note that if one
12078 of the operands is a constant, then the multiplication will be performed
12079 using shifts and adds.  If the @option{-mmpyi} option is not specified for the C3x,
12080 then squaring operations are performed inline instead of a library call.
12081
12082 @item -mfast-fix
12083 @itemx -mno-fast-fix
12084 @opindex mfast-fix
12085 @opindex mno-fast-fix
12086 The C3x/C4x FIX instruction to convert a floating point value to an
12087 integer value chooses the nearest integer less than or equal to the
12088 floating point value rather than to the nearest integer.  Thus if the
12089 floating point number is negative, the result will be incorrectly
12090 truncated an additional code is necessary to detect and correct this
12091 case.  This option can be used to disable generation of the additional
12092 code required to correct the result.
12093
12094 @item -mrptb
12095 @itemx -mno-rptb
12096 @opindex mrptb
12097 @opindex mno-rptb
12098 Enable (disable) generation of repeat block sequences using the RPTB
12099 instruction for zero overhead looping.  The RPTB construct is only used
12100 for innermost loops that do not call functions or jump across the loop
12101 boundaries.  There is no advantage having nested RPTB loops due to the
12102 overhead required to save and restore the RC, RS, and RE registers.
12103 This is enabled by default with @option{-O2}.
12104
12105 @item -mrpts=@var{count}
12106 @itemx -mno-rpts
12107 @opindex mrpts
12108 @opindex mno-rpts
12109 Enable (disable) the use of the single instruction repeat instruction
12110 RPTS@.  If a repeat block contains a single instruction, and the loop
12111 count can be guaranteed to be less than the value @var{count}, GCC will
12112 emit a RPTS instruction instead of a RPTB@.  If no value is specified,
12113 then a RPTS will be emitted even if the loop count cannot be determined
12114 at compile time.  Note that the repeated instruction following RPTS does
12115 not have to be reloaded from memory each iteration, thus freeing up the
12116 CPU buses for operands.  However, since interrupts are blocked by this
12117 instruction, it is disabled by default.
12118
12119 @item -mloop-unsigned
12120 @itemx -mno-loop-unsigned
12121 @opindex mloop-unsigned
12122 @opindex mno-loop-unsigned
12123 The maximum iteration count when using RPTS and RPTB (and DB on the C40)
12124 is @math{2^{31} + 1} since these instructions test if the iteration count is
12125 negative to terminate the loop.  If the iteration count is unsigned
12126 there is a possibility than the @math{2^{31} + 1} maximum iteration count may be
12127 exceeded.  This switch allows an unsigned iteration count.
12128
12129 @item -mti
12130 @opindex mti
12131 Try to emit an assembler syntax that the TI assembler (asm30) is happy
12132 with.  This also enforces compatibility with the API employed by the TI
12133 C3x C compiler.  For example, long doubles are passed as structures
12134 rather than in floating point registers.
12135
12136 @item -mregparm
12137 @itemx -mmemparm
12138 @opindex mregparm
12139 @opindex mmemparm
12140 Generate code that uses registers (stack) for passing arguments to functions.
12141 By default, arguments are passed in registers where possible rather
12142 than by pushing arguments on to the stack.
12143
12144 @item -mparallel-insns
12145 @itemx -mno-parallel-insns
12146 @opindex mparallel-insns
12147 @opindex mno-parallel-insns
12148 Allow the generation of parallel instructions.  This is enabled by
12149 default with @option{-O2}.
12150
12151 @item -mparallel-mpy
12152 @itemx -mno-parallel-mpy
12153 @opindex mparallel-mpy
12154 @opindex mno-parallel-mpy
12155 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
12156 provided @option{-mparallel-insns} is also specified.  These instructions have
12157 tight register constraints which can pessimize the code generation
12158 of large functions.
12159
12160 @end table
12161
12162 @node V850 Options
12163 @subsection V850 Options
12164 @cindex V850 Options
12165
12166 These @samp{-m} options are defined for V850 implementations:
12167
12168 @table @gcctabopt
12169 @item -mlong-calls
12170 @itemx -mno-long-calls
12171 @opindex mlong-calls
12172 @opindex mno-long-calls
12173 Treat all calls as being far away (near).  If calls are assumed to be
12174 far away, the compiler will always load the functions address up into a
12175 register, and call indirect through the pointer.
12176
12177 @item -mno-ep
12178 @itemx -mep
12179 @opindex mno-ep
12180 @opindex mep
12181 Do not optimize (do optimize) basic blocks that use the same index
12182 pointer 4 or more times to copy pointer into the @code{ep} register, and
12183 use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
12184 option is on by default if you optimize.
12185
12186 @item -mno-prolog-function
12187 @itemx -mprolog-function
12188 @opindex mno-prolog-function
12189 @opindex mprolog-function
12190 Do not use (do use) external functions to save and restore registers
12191 at the prologue and epilogue of a function.  The external functions
12192 are slower, but use less code space if more than one function saves
12193 the same number of registers.  The @option{-mprolog-function} option
12194 is on by default if you optimize.
12195
12196 @item -mspace
12197 @opindex mspace
12198 Try to make the code as small as possible.  At present, this just turns
12199 on the @option{-mep} and @option{-mprolog-function} options.
12200
12201 @item -mtda=@var{n}
12202 @opindex mtda
12203 Put static or global variables whose size is @var{n} bytes or less into
12204 the tiny data area that register @code{ep} points to.  The tiny data
12205 area can hold up to 256 bytes in total (128 bytes for byte references).
12206
12207 @item -msda=@var{n}
12208 @opindex msda
12209 Put static or global variables whose size is @var{n} bytes or less into
12210 the small data area that register @code{gp} points to.  The small data
12211 area can hold up to 64 kilobytes.
12212
12213 @item -mzda=@var{n}
12214 @opindex mzda
12215 Put static or global variables whose size is @var{n} bytes or less into
12216 the first 32 kilobytes of memory.
12217
12218 @item -mv850
12219 @opindex mv850
12220 Specify that the target processor is the V850.
12221
12222 @item -mbig-switch
12223 @opindex mbig-switch
12224 Generate code suitable for big switch tables.  Use this option only if
12225 the assembler/linker complain about out of range branches within a switch
12226 table.
12227
12228 @item -mapp-regs
12229 @opindex mapp-regs
12230 This option will cause r2 and r5 to be used in the code generated by
12231 the compiler.  This setting is the default.
12232
12233 @item -mno-app-regs
12234 @opindex mno-app-regs
12235 This option will cause r2 and r5 to be treated as fixed registers.
12236
12237 @item -mv850e1
12238 @opindex mv850e1
12239 Specify that the target processor is the V850E1.  The preprocessor
12240 constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
12241 this option is used.
12242
12243 @item -mv850e
12244 @opindex mv850e
12245 Specify that the target processor is the V850E@.  The preprocessor
12246 constant @samp{__v850e__} will be defined if this option is used.
12247
12248 If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
12249 are defined then a default target processor will be chosen and the
12250 relevant @samp{__v850*__} preprocessor constant will be defined.
12251
12252 The preprocessor constants @samp{__v850} and @samp{__v851__} are always
12253 defined, regardless of which processor variant is the target.
12254
12255 @item -mdisable-callt
12256 @opindex mdisable-callt
12257 This option will suppress generation of the CALLT instruction for the
12258 v850e and v850e1 flavors of the v850 architecture.  The default is
12259 @option{-mno-disable-callt} which allows the CALLT instruction to be used.
12260
12261 @end table
12262
12263 @node VAX Options
12264 @subsection VAX Options
12265 @cindex VAX options
12266
12267 These @samp{-m} options are defined for the VAX:
12268
12269 @table @gcctabopt
12270 @item -munix
12271 @opindex munix
12272 Do not output certain jump instructions (@code{aobleq} and so on)
12273 that the Unix assembler for the VAX cannot handle across long
12274 ranges.
12275
12276 @item -mgnu
12277 @opindex mgnu
12278 Do output those jump instructions, on the assumption that you
12279 will assemble with the GNU assembler.
12280
12281 @item -mg
12282 @opindex mg
12283 Output code for g-format floating point numbers instead of d-format.
12284 @end table
12285
12286 @node x86-64 Options
12287 @subsection x86-64 Options
12288 @cindex x86-64 options
12289
12290 These are listed under @xref{i386 and x86-64 Options}.
12291
12292 @node Xstormy16 Options
12293 @subsection Xstormy16 Options
12294 @cindex Xstormy16 Options
12295
12296 These options are defined for Xstormy16:
12297
12298 @table @gcctabopt
12299 @item -msim
12300 @opindex msim
12301 Choose startup files and linker script suitable for the simulator.
12302 @end table
12303
12304 @node Xtensa Options
12305 @subsection Xtensa Options
12306 @cindex Xtensa Options
12307
12308 These options are supported for Xtensa targets:
12309
12310 @table @gcctabopt
12311 @item -mconst16
12312 @itemx -mno-const16
12313 @opindex mconst16
12314 @opindex mno-const16
12315 Enable or disable use of @code{CONST16} instructions for loading
12316 constant values.  The @code{CONST16} instruction is currently not a
12317 standard option from Tensilica.  When enabled, @code{CONST16}
12318 instructions are always used in place of the standard @code{L32R}
12319 instructions.  The use of @code{CONST16} is enabled by default only if
12320 the @code{L32R} instruction is not available.
12321
12322 @item -mfused-madd
12323 @itemx -mno-fused-madd
12324 @opindex mfused-madd
12325 @opindex mno-fused-madd
12326 Enable or disable use of fused multiply/add and multiply/subtract
12327 instructions in the floating-point option.  This has no effect if the
12328 floating-point option is not also enabled.  Disabling fused multiply/add
12329 and multiply/subtract instructions forces the compiler to use separate
12330 instructions for the multiply and add/subtract operations.  This may be
12331 desirable in some cases where strict IEEE 754-compliant results are
12332 required: the fused multiply add/subtract instructions do not round the
12333 intermediate result, thereby producing results with @emph{more} bits of
12334 precision than specified by the IEEE standard.  Disabling fused multiply
12335 add/subtract instructions also ensures that the program output is not
12336 sensitive to the compiler's ability to combine multiply and add/subtract
12337 operations.
12338
12339 @item -mtext-section-literals
12340 @itemx -mno-text-section-literals
12341 @opindex mtext-section-literals
12342 @opindex mno-text-section-literals
12343 Control the treatment of literal pools.  The default is
12344 @option{-mno-text-section-literals}, which places literals in a separate
12345 section in the output file.  This allows the literal pool to be placed
12346 in a data RAM/ROM, and it also allows the linker to combine literal
12347 pools from separate object files to remove redundant literals and
12348 improve code size.  With @option{-mtext-section-literals}, the literals
12349 are interspersed in the text section in order to keep them as close as
12350 possible to their references.  This may be necessary for large assembly
12351 files.
12352
12353 @item -mtarget-align
12354 @itemx -mno-target-align
12355 @opindex mtarget-align
12356 @opindex mno-target-align
12357 When this option is enabled, GCC instructs the assembler to
12358 automatically align instructions to reduce branch penalties at the
12359 expense of some code density.  The assembler attempts to widen density
12360 instructions to align branch targets and the instructions following call
12361 instructions.  If there are not enough preceding safe density
12362 instructions to align a target, no widening will be performed.  The
12363 default is @option{-mtarget-align}.  These options do not affect the
12364 treatment of auto-aligned instructions like @code{LOOP}, which the
12365 assembler will always align, either by widening density instructions or
12366 by inserting no-op instructions.
12367
12368 @item -mlongcalls
12369 @itemx -mno-longcalls
12370 @opindex mlongcalls
12371 @opindex mno-longcalls
12372 When this option is enabled, GCC instructs the assembler to translate
12373 direct calls to indirect calls unless it can determine that the target
12374 of a direct call is in the range allowed by the call instruction.  This
12375 translation typically occurs for calls to functions in other source
12376 files.  Specifically, the assembler translates a direct @code{CALL}
12377 instruction into an @code{L32R} followed by a @code{CALLX} instruction.
12378 The default is @option{-mno-longcalls}.  This option should be used in
12379 programs where the call target can potentially be out of range.  This
12380 option is implemented in the assembler, not the compiler, so the
12381 assembly code generated by GCC will still show direct call
12382 instructions---look at the disassembled object code to see the actual
12383 instructions.  Note that the assembler will use an indirect call for
12384 every cross-file call, not just those that really will be out of range.
12385 @end table
12386
12387 @node zSeries Options
12388 @subsection zSeries Options
12389 @cindex zSeries options
12390
12391 These are listed under @xref{S/390 and zSeries Options}.
12392
12393 @node Code Gen Options
12394 @section Options for Code Generation Conventions
12395 @cindex code generation conventions
12396 @cindex options, code generation
12397 @cindex run-time options
12398
12399 These machine-independent options control the interface conventions
12400 used in code generation.
12401
12402 Most of them have both positive and negative forms; the negative form
12403 of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
12404 one of the forms is listed---the one which is not the default.  You
12405 can figure out the other form by either removing @samp{no-} or adding
12406 it.
12407
12408 @table @gcctabopt
12409 @item -fbounds-check
12410 @opindex fbounds-check
12411 For front-ends that support it, generate additional code to check that
12412 indices used to access arrays are within the declared range.  This is
12413 currently only supported by the Java and Fortran 77 front-ends, where
12414 this option defaults to true and false respectively.
12415
12416 @item -ftrapv
12417 @opindex ftrapv
12418 This option generates traps for signed overflow on addition, subtraction,
12419 multiplication operations.
12420
12421 @item -fwrapv
12422 @opindex fwrapv
12423 This option instructs the compiler to assume that signed arithmetic
12424 overflow of addition, subtraction and multiplication wraps around
12425 using twos-complement representation.  This flag enables some optimizations
12426 and disables other.  This option is enabled by default for the Java
12427 front-end, as required by the Java language specification.
12428
12429 @item -fexceptions
12430 @opindex fexceptions
12431 Enable exception handling.  Generates extra code needed to propagate
12432 exceptions.  For some targets, this implies GCC will generate frame
12433 unwind information for all functions, which can produce significant data
12434 size overhead, although it does not affect execution.  If you do not
12435 specify this option, GCC will enable it by default for languages like
12436 C++ which normally require exception handling, and disable it for
12437 languages like C that do not normally require it.  However, you may need
12438 to enable this option when compiling C code that needs to interoperate
12439 properly with exception handlers written in C++.  You may also wish to
12440 disable this option if you are compiling older C++ programs that don't
12441 use exception handling.
12442
12443 @item -fnon-call-exceptions
12444 @opindex fnon-call-exceptions
12445 Generate code that allows trapping instructions to throw exceptions.
12446 Note that this requires platform-specific runtime support that does
12447 not exist everywhere.  Moreover, it only allows @emph{trapping}
12448 instructions to throw exceptions, i.e.@: memory references or floating
12449 point instructions.  It does not allow exceptions to be thrown from
12450 arbitrary signal handlers such as @code{SIGALRM}.
12451
12452 @item -funwind-tables
12453 @opindex funwind-tables
12454 Similar to @option{-fexceptions}, except that it will just generate any needed
12455 static data, but will not affect the generated code in any other way.
12456 You will normally not enable this option; instead, a language processor
12457 that needs this handling would enable it on your behalf.
12458
12459 @item -fasynchronous-unwind-tables
12460 @opindex fasynchronous-unwind-tables
12461 Generate unwind table in dwarf2 format, if supported by target machine.  The
12462 table is exact at each instruction boundary, so it can be used for stack
12463 unwinding from asynchronous events (such as debugger or garbage collector).
12464
12465 @item -fpcc-struct-return
12466 @opindex fpcc-struct-return
12467 Return ``short'' @code{struct} and @code{union} values in memory like
12468 longer ones, rather than in registers.  This convention is less
12469 efficient, but it has the advantage of allowing intercallability between
12470 GCC-compiled files and files compiled with other compilers, particularly
12471 the Portable C Compiler (pcc).
12472
12473 The precise convention for returning structures in memory depends
12474 on the target configuration macros.
12475
12476 Short structures and unions are those whose size and alignment match
12477 that of some integer type.
12478
12479 @strong{Warning:} code compiled with the @option{-fpcc-struct-return}
12480 switch is not binary compatible with code compiled with the
12481 @option{-freg-struct-return} switch.
12482 Use it to conform to a non-default application binary interface.
12483
12484 @item -freg-struct-return
12485 @opindex freg-struct-return
12486 Return @code{struct} and @code{union} values in registers when possible.
12487 This is more efficient for small structures than
12488 @option{-fpcc-struct-return}.
12489
12490 If you specify neither @option{-fpcc-struct-return} nor
12491 @option{-freg-struct-return}, GCC defaults to whichever convention is
12492 standard for the target.  If there is no standard convention, GCC
12493 defaults to @option{-fpcc-struct-return}, except on targets where GCC is
12494 the principal compiler.  In those cases, we can choose the standard, and
12495 we chose the more efficient register return alternative.
12496
12497 @strong{Warning:} code compiled with the @option{-freg-struct-return}
12498 switch is not binary compatible with code compiled with the
12499 @option{-fpcc-struct-return} switch.
12500 Use it to conform to a non-default application binary interface.
12501
12502 @item -fshort-enums
12503 @opindex fshort-enums
12504 Allocate to an @code{enum} type only as many bytes as it needs for the
12505 declared range of possible values.  Specifically, the @code{enum} type
12506 will be equivalent to the smallest integer type which has enough room.
12507
12508 @strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
12509 code that is not binary compatible with code generated without that switch.
12510 Use it to conform to a non-default application binary interface.
12511
12512 @item -fshort-double
12513 @opindex fshort-double
12514 Use the same size for @code{double} as for @code{float}.
12515
12516 @strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
12517 code that is not binary compatible with code generated without that switch.
12518 Use it to conform to a non-default application binary interface.
12519
12520 @item -fshort-wchar
12521 @opindex fshort-wchar
12522 Override the underlying type for @samp{wchar_t} to be @samp{short
12523 unsigned int} instead of the default for the target.  This option is
12524 useful for building programs to run under WINE@.
12525
12526 @strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
12527 code that is not binary compatible with code generated without that switch.
12528 Use it to conform to a non-default application binary interface.
12529
12530 @item -fshared-data
12531 @opindex fshared-data
12532 Requests that the data and non-@code{const} variables of this
12533 compilation be shared data rather than private data.  The distinction
12534 makes sense only on certain operating systems, where shared data is
12535 shared between processes running the same program, while private data
12536 exists in one copy per process.
12537
12538 @item -fno-common
12539 @opindex fno-common
12540 In C, allocate even uninitialized global variables in the data section of the
12541 object file, rather than generating them as common blocks.  This has the
12542 effect that if the same variable is declared (without @code{extern}) in
12543 two different compilations, you will get an error when you link them.
12544 The only reason this might be useful is if you wish to verify that the
12545 program will work on other systems which always work this way.
12546
12547 @item -fno-ident
12548 @opindex fno-ident
12549 Ignore the @samp{#ident} directive.
12550
12551 @item -finhibit-size-directive
12552 @opindex finhibit-size-directive
12553 Don't output a @code{.size} assembler directive, or anything else that
12554 would cause trouble if the function is split in the middle, and the
12555 two halves are placed at locations far apart in memory.  This option is
12556 used when compiling @file{crtstuff.c}; you should not need to use it
12557 for anything else.
12558
12559 @item -fverbose-asm
12560 @opindex fverbose-asm
12561 Put extra commentary information in the generated assembly code to
12562 make it more readable.  This option is generally only of use to those
12563 who actually need to read the generated assembly code (perhaps while
12564 debugging the compiler itself).
12565
12566 @option{-fno-verbose-asm}, the default, causes the
12567 extra information to be omitted and is useful when comparing two assembler
12568 files.
12569
12570 @item -fpic
12571 @opindex fpic
12572 @cindex global offset table
12573 @cindex PIC
12574 Generate position-independent code (PIC) suitable for use in a shared
12575 library, if supported for the target machine.  Such code accesses all
12576 constant addresses through a global offset table (GOT)@.  The dynamic
12577 loader resolves the GOT entries when the program starts (the dynamic
12578 loader is not part of GCC; it is part of the operating system).  If
12579 the GOT size for the linked executable exceeds a machine-specific
12580 maximum size, you get an error message from the linker indicating that
12581 @option{-fpic} does not work; in that case, recompile with @option{-fPIC}
12582 instead.  (These maximums are 8k on the SPARC and 32k
12583 on the m68k and RS/6000.  The 386 has no such limit.)
12584
12585 Position-independent code requires special support, and therefore works
12586 only on certain machines.  For the 386, GCC supports PIC for System V
12587 but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
12588 position-independent.
12589
12590 @item -fPIC
12591 @opindex fPIC
12592 If supported for the target machine, emit position-independent code,
12593 suitable for dynamic linking and avoiding any limit on the size of the
12594 global offset table.  This option makes a difference on the m68k,
12595 PowerPC and SPARC@.
12596
12597 Position-independent code requires special support, and therefore works
12598 only on certain machines.
12599
12600 @item -fpie
12601 @itemx -fPIE
12602 @opindex fpie
12603 @opindex fPIE
12604 These options are similar to @option{-fpic} and @option{-fPIC}, but
12605 generated position independent code can be only linked into executables.
12606 Usually these options are used when @option{-pie} GCC option will be
12607 used during linking.
12608
12609 @item -fno-jump-tables
12610 @opindex fno-jump-tables
12611 Do not use jump tables for switch statements even where it would be
12612 more efficient than other code generation strategies.  This option is
12613 of use in conjunction with @option{-fpic} or @option{-fPIC} for
12614 building code which forms part of a dynamic linker and cannot
12615 reference the address of a jump table.  On some targets, jump tables
12616 do not require a GOT and this option is not needed.
12617
12618 @item -ffixed-@var{reg}
12619 @opindex ffixed
12620 Treat the register named @var{reg} as a fixed register; generated code
12621 should never refer to it (except perhaps as a stack pointer, frame
12622 pointer or in some other fixed role).
12623
12624 @var{reg} must be the name of a register.  The register names accepted
12625 are machine-specific and are defined in the @code{REGISTER_NAMES}
12626 macro in the machine description macro file.
12627
12628 This flag does not have a negative form, because it specifies a
12629 three-way choice.
12630
12631 @item -fcall-used-@var{reg}
12632 @opindex fcall-used
12633 Treat the register named @var{reg} as an allocable register that is
12634 clobbered by function calls.  It may be allocated for temporaries or
12635 variables that do not live across a call.  Functions compiled this way
12636 will not save and restore the register @var{reg}.
12637
12638 It is an error to used this flag with the frame pointer or stack pointer.
12639 Use of this flag for other registers that have fixed pervasive roles in
12640 the machine's execution model will produce disastrous results.
12641
12642 This flag does not have a negative form, because it specifies a
12643 three-way choice.
12644
12645 @item -fcall-saved-@var{reg}
12646 @opindex fcall-saved
12647 Treat the register named @var{reg} as an allocable register saved by
12648 functions.  It may be allocated even for temporaries or variables that
12649 live across a call.  Functions compiled this way will save and restore
12650 the register @var{reg} if they use it.
12651
12652 It is an error to used this flag with the frame pointer or stack pointer.
12653 Use of this flag for other registers that have fixed pervasive roles in
12654 the machine's execution model will produce disastrous results.
12655
12656 A different sort of disaster will result from the use of this flag for
12657 a register in which function values may be returned.
12658
12659 This flag does not have a negative form, because it specifies a
12660 three-way choice.
12661
12662 @item -fpack-struct[=@var{n}]
12663 @opindex fpack-struct
12664 Without a value specified, pack all structure members together without
12665 holes.  When a value is specified (which must be a small power of two), pack
12666 structure members according to this value, representing the maximum
12667 alignment (that is, objects with default alignment requirements larger than
12668 this will be output potentially unaligned at the next fitting location.
12669
12670 @strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
12671 code that is not binary compatible with code generated without that switch.
12672 Additionally, it makes the code suboptimal.
12673 Use it to conform to a non-default application binary interface.
12674
12675 @item -finstrument-functions
12676 @opindex finstrument-functions
12677 Generate instrumentation calls for entry and exit to functions.  Just
12678 after function entry and just before function exit, the following
12679 profiling functions will be called with the address of the current
12680 function and its call site.  (On some platforms,
12681 @code{__builtin_return_address} does not work beyond the current
12682 function, so the call site information may not be available to the
12683 profiling functions otherwise.)
12684
12685 @smallexample
12686 void __cyg_profile_func_enter (void *this_fn,
12687                                void *call_site);
12688 void __cyg_profile_func_exit  (void *this_fn,
12689                                void *call_site);
12690 @end smallexample
12691
12692 The first argument is the address of the start of the current function,
12693 which may be looked up exactly in the symbol table.
12694
12695 This instrumentation is also done for functions expanded inline in other
12696 functions.  The profiling calls will indicate where, conceptually, the
12697 inline function is entered and exited.  This means that addressable
12698 versions of such functions must be available.  If all your uses of a
12699 function are expanded inline, this may mean an additional expansion of
12700 code size.  If you use @samp{extern inline} in your C code, an
12701 addressable version of such functions must be provided.  (This is
12702 normally the case anyways, but if you get lucky and the optimizer always
12703 expands the functions inline, you might have gotten away without
12704 providing static copies.)
12705
12706 A function may be given the attribute @code{no_instrument_function}, in
12707 which case this instrumentation will not be done.  This can be used, for
12708 example, for the profiling functions listed above, high-priority
12709 interrupt routines, and any functions from which the profiling functions
12710 cannot safely be called (perhaps signal handlers, if the profiling
12711 routines generate output or allocate memory).
12712
12713 @item -fstack-check
12714 @opindex fstack-check
12715 Generate code to verify that you do not go beyond the boundary of the
12716 stack.  You should specify this flag if you are running in an
12717 environment with multiple threads, but only rarely need to specify it in
12718 a single-threaded environment since stack overflow is automatically
12719 detected on nearly all systems if there is only one stack.
12720
12721 Note that this switch does not actually cause checking to be done; the
12722 operating system must do that.  The switch causes generation of code
12723 to ensure that the operating system sees the stack being extended.
12724
12725 @item -fstack-limit-register=@var{reg}
12726 @itemx -fstack-limit-symbol=@var{sym}
12727 @itemx -fno-stack-limit
12728 @opindex fstack-limit-register
12729 @opindex fstack-limit-symbol
12730 @opindex fno-stack-limit
12731 Generate code to ensure that the stack does not grow beyond a certain value,
12732 either the value of a register or the address of a symbol.  If the stack
12733 would grow beyond the value, a signal is raised.  For most targets,
12734 the signal is raised before the stack overruns the boundary, so
12735 it is possible to catch the signal without taking special precautions.
12736
12737 For instance, if the stack starts at absolute address @samp{0x80000000}
12738 and grows downwards, you can use the flags
12739 @option{-fstack-limit-symbol=__stack_limit} and
12740 @option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
12741 of 128KB@.  Note that this may only work with the GNU linker.
12742
12743 @cindex aliasing of parameters
12744 @cindex parameters, aliased
12745 @item -fargument-alias
12746 @itemx -fargument-noalias
12747 @itemx -fargument-noalias-global
12748 @opindex fargument-alias
12749 @opindex fargument-noalias
12750 @opindex fargument-noalias-global
12751 Specify the possible relationships among parameters and between
12752 parameters and global data.
12753
12754 @option{-fargument-alias} specifies that arguments (parameters) may
12755 alias each other and may alias global storage.@*
12756 @option{-fargument-noalias} specifies that arguments do not alias
12757 each other, but may alias global storage.@*
12758 @option{-fargument-noalias-global} specifies that arguments do not
12759 alias each other and do not alias global storage.
12760
12761 Each language will automatically use whatever option is required by
12762 the language standard.  You should not need to use these options yourself.
12763
12764 @item -fleading-underscore
12765 @opindex fleading-underscore
12766 This option and its counterpart, @option{-fno-leading-underscore}, forcibly
12767 change the way C symbols are represented in the object file.  One use
12768 is to help link with legacy assembly code.
12769
12770 @strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
12771 generate code that is not binary compatible with code generated without that
12772 switch.  Use it to conform to a non-default application binary interface.
12773 Not all targets provide complete support for this switch.
12774
12775 @item -ftls-model=@var{model}
12776 Alter the thread-local storage model to be used (@pxref{Thread-Local}).
12777 The @var{model} argument should be one of @code{global-dynamic},
12778 @code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
12779
12780 The default without @option{-fpic} is @code{initial-exec}; with
12781 @option{-fpic} the default is @code{global-dynamic}.
12782
12783 @item -fvisibility=@var{default|internal|hidden|protected}
12784 @opindex fvisibility
12785 Set the default ELF image symbol visibility to the specified option---all
12786 symbols will be marked with this unless overridden within the code.
12787 Using this feature can very substantially improve linking and
12788 load times of shared object libraries, produce more optimized
12789 code, provide near-perfect API export and prevent symbol clashes.
12790 It is @strong{strongly} recommended that you use this in any shared objects
12791 you distribute.
12792
12793 Despite the nomenclature, @code{default} always means public ie;
12794 available to be linked against from outside the shared object.
12795 @code{protected} and @code{internal} are pretty useless in real-world
12796 usage so the only other commonly used option will be @code{hidden}.
12797 The default if @option{-fvisibility} isn't specified is
12798 @code{default}, i.e., make every
12799 symbol public---this causes the same behavior as previous versions of
12800 GCC@.
12801
12802 A good explanation of the benefits offered by ensuring ELF
12803 symbols have the correct visibility is given by ``How To Write
12804 Shared Libraries'' by Ulrich Drepper (which can be found at
12805 @w{@uref{http://people.redhat.com/~drepper/}})---however a superior
12806 solution made possible by this option to marking things hidden when
12807 the default is public is to make the default hidden and mark things
12808 public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
12809 and @code{__attribute__ ((visibility("default")))} instead of
12810 @code{__declspec(dllexport)} you get almost identical semantics with
12811 identical syntax.  This is a great boon to those working with
12812 cross-platform projects.
12813
12814 For those adding visibility support to existing code, you may find
12815 @samp{#pragma GCC visibility} of use.  This works by you enclosing
12816 the declarations you wish to set visibility for with (for example)
12817 @samp{#pragma GCC visibility push(hidden)} and
12818 @samp{#pragma GCC visibility pop}.
12819 Bear in mind that symbol visibility should be viewed @strong{as
12820 part of the API interface contract} and thus all new code should
12821 always specify visibility when it is not the default ie; declarations
12822 only for use within the local DSO should @strong{always} be marked explicitly
12823 as hidden as so to avoid PLT indirection overheads---making this
12824 abundantly clear also aids readability and self-documentation of the code.
12825 Note that due to ISO C++ specification requirements, operator new and
12826 operator delete must always be of default visibility.
12827
12828 An overview of these techniques, their benefits and how to use them
12829 is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
12830
12831 @end table
12832
12833 @c man end
12834
12835 @node Environment Variables
12836 @section Environment Variables Affecting GCC
12837 @cindex environment variables
12838
12839 @c man begin ENVIRONMENT
12840 This section describes several environment variables that affect how GCC
12841 operates.  Some of them work by specifying directories or prefixes to use
12842 when searching for various kinds of files.  Some are used to specify other
12843 aspects of the compilation environment.
12844
12845 Note that you can also specify places to search using options such as
12846 @option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
12847 take precedence over places specified using environment variables, which
12848 in turn take precedence over those specified by the configuration of GCC@.
12849 @xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
12850 GNU Compiler Collection (GCC) Internals}.
12851
12852 @table @env
12853 @item LANG
12854 @itemx LC_CTYPE
12855 @c @itemx LC_COLLATE
12856 @itemx LC_MESSAGES
12857 @c @itemx LC_MONETARY
12858 @c @itemx LC_NUMERIC
12859 @c @itemx LC_TIME
12860 @itemx LC_ALL
12861 @findex LANG
12862 @findex LC_CTYPE
12863 @c @findex LC_COLLATE
12864 @findex LC_MESSAGES
12865 @c @findex LC_MONETARY
12866 @c @findex LC_NUMERIC
12867 @c @findex LC_TIME
12868 @findex LC_ALL
12869 @cindex locale
12870 These environment variables control the way that GCC uses
12871 localization information that allow GCC to work with different
12872 national conventions.  GCC inspects the locale categories
12873 @env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
12874 so.  These locale categories can be set to any value supported by your
12875 installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
12876 Kingdom encoded in UTF-8.
12877
12878 The @env{LC_CTYPE} environment variable specifies character
12879 classification.  GCC uses it to determine the character boundaries in
12880 a string; this is needed for some multibyte encodings that contain quote
12881 and escape characters that would otherwise be interpreted as a string
12882 end or escape.
12883
12884 The @env{LC_MESSAGES} environment variable specifies the language to
12885 use in diagnostic messages.
12886
12887 If the @env{LC_ALL} environment variable is set, it overrides the value
12888 of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
12889 and @env{LC_MESSAGES} default to the value of the @env{LANG}
12890 environment variable.  If none of these variables are set, GCC
12891 defaults to traditional C English behavior.
12892
12893 @item TMPDIR
12894 @findex TMPDIR
12895 If @env{TMPDIR} is set, it specifies the directory to use for temporary
12896 files.  GCC uses temporary files to hold the output of one stage of
12897 compilation which is to be used as input to the next stage: for example,
12898 the output of the preprocessor, which is the input to the compiler
12899 proper.
12900
12901 @item GCC_EXEC_PREFIX
12902 @findex GCC_EXEC_PREFIX
12903 If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
12904 names of the subprograms executed by the compiler.  No slash is added
12905 when this prefix is combined with the name of a subprogram, but you can
12906 specify a prefix that ends with a slash if you wish.
12907
12908 If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
12909 an appropriate prefix to use based on the pathname it was invoked with.
12910
12911 If GCC cannot find the subprogram using the specified prefix, it
12912 tries looking in the usual places for the subprogram.
12913
12914 The default value of @env{GCC_EXEC_PREFIX} is
12915 @file{@var{prefix}/lib/gcc/} where @var{prefix} is the value
12916 of @code{prefix} when you ran the @file{configure} script.
12917
12918 Other prefixes specified with @option{-B} take precedence over this prefix.
12919
12920 This prefix is also used for finding files such as @file{crt0.o} that are
12921 used for linking.
12922
12923 In addition, the prefix is used in an unusual way in finding the
12924 directories to search for header files.  For each of the standard
12925 directories whose name normally begins with @samp{/usr/local/lib/gcc}
12926 (more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
12927 replacing that beginning with the specified prefix to produce an
12928 alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
12929 @file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
12930 These alternate directories are searched first; the standard directories
12931 come next.
12932
12933 @item COMPILER_PATH
12934 @findex COMPILER_PATH
12935 The value of @env{COMPILER_PATH} is a colon-separated list of
12936 directories, much like @env{PATH}.  GCC tries the directories thus
12937 specified when searching for subprograms, if it can't find the
12938 subprograms using @env{GCC_EXEC_PREFIX}.
12939
12940 @item LIBRARY_PATH
12941 @findex LIBRARY_PATH
12942 The value of @env{LIBRARY_PATH} is a colon-separated list of
12943 directories, much like @env{PATH}.  When configured as a native compiler,
12944 GCC tries the directories thus specified when searching for special
12945 linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
12946 using GCC also uses these directories when searching for ordinary
12947 libraries for the @option{-l} option (but directories specified with
12948 @option{-L} come first).
12949
12950 @item LANG
12951 @findex LANG
12952 @cindex locale definition
12953 This variable is used to pass locale information to the compiler.  One way in
12954 which this information is used is to determine the character set to be used
12955 when character literals, string literals and comments are parsed in C and C++.
12956 When the compiler is configured to allow multibyte characters,
12957 the following values for @env{LANG} are recognized:
12958
12959 @table @samp
12960 @item C-JIS
12961 Recognize JIS characters.
12962 @item C-SJIS
12963 Recognize SJIS characters.
12964 @item C-EUCJP
12965 Recognize EUCJP characters.
12966 @end table
12967
12968 If @env{LANG} is not defined, or if it has some other value, then the
12969 compiler will use mblen and mbtowc as defined by the default locale to
12970 recognize and translate multibyte characters.
12971 @end table
12972
12973 @noindent
12974 Some additional environments variables affect the behavior of the
12975 preprocessor.
12976
12977 @include cppenv.texi
12978
12979 @c man end
12980
12981 @node Precompiled Headers
12982 @section Using Precompiled Headers
12983 @cindex precompiled headers
12984 @cindex speed of compilation
12985
12986 Often large projects have many header files that are included in every
12987 source file.  The time the compiler takes to process these header files
12988 over and over again can account for nearly all of the time required to
12989 build the project.  To make builds faster, GCC allows users to
12990 `precompile' a header file; then, if builds can use the precompiled
12991 header file they will be much faster.
12992
12993 To create a precompiled header file, simply compile it as you would any
12994 other file, if necessary using the @option{-x} option to make the driver
12995 treat it as a C or C++ header file.  You will probably want to use a
12996 tool like @command{make} to keep the precompiled header up-to-date when
12997 the headers it contains change.
12998
12999 A precompiled header file will be searched for when @code{#include} is
13000 seen in the compilation.  As it searches for the included file
13001 (@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
13002 compiler looks for a precompiled header in each directory just before it
13003 looks for the include file in that directory.  The name searched for is
13004 the name specified in the @code{#include} with @samp{.gch} appended.  If
13005 the precompiled header file can't be used, it is ignored.
13006
13007 For instance, if you have @code{#include "all.h"}, and you have
13008 @file{all.h.gch} in the same directory as @file{all.h}, then the
13009 precompiled header file will be used if possible, and the original
13010 header will be used otherwise.
13011
13012 Alternatively, you might decide to put the precompiled header file in a
13013 directory and use @option{-I} to ensure that directory is searched
13014 before (or instead of) the directory containing the original header.
13015 Then, if you want to check that the precompiled header file is always
13016 used, you can put a file of the same name as the original header in this
13017 directory containing an @code{#error} command.
13018
13019 This also works with @option{-include}.  So yet another way to use
13020 precompiled headers, good for projects not designed with precompiled
13021 header files in mind, is to simply take most of the header files used by
13022 a project, include them from another header file, precompile that header
13023 file, and @option{-include} the precompiled header.  If the header files
13024 have guards against multiple inclusion, they will be skipped because
13025 they've already been included (in the precompiled header).
13026
13027 If you need to precompile the same header file for different
13028 languages, targets, or compiler options, you can instead make a
13029 @emph{directory} named like @file{all.h.gch}, and put each precompiled
13030 header in the directory, perhaps using @option{-o}.  It doesn't matter
13031 what you call the files in the directory, every precompiled header in
13032 the directory will be considered.  The first precompiled header
13033 encountered in the directory that is valid for this compilation will
13034 be used; they're searched in no particular order.
13035
13036 There are many other possibilities, limited only by your imagination,
13037 good sense, and the constraints of your build system.
13038
13039 A precompiled header file can be used only when these conditions apply:
13040
13041 @itemize
13042 @item
13043 Only one precompiled header can be used in a particular compilation.
13044
13045 @item
13046 A precompiled header can't be used once the first C token is seen.  You
13047 can have preprocessor directives before a precompiled header; you can
13048 even include a precompiled header from inside another header, so long as
13049 there are no C tokens before the @code{#include}.
13050
13051 @item
13052 The precompiled header file must be produced for the same language as
13053 the current compilation.  You can't use a C precompiled header for a C++
13054 compilation.
13055
13056 @item
13057 The precompiled header file must have been produced by the same compiler
13058 binary as the current compilation is using.
13059
13060 @item
13061 Any macros defined before the precompiled header is included must
13062 either be defined in the same way as when the precompiled header was
13063 generated, or must not affect the precompiled header, which usually
13064 means that they don't appear in the precompiled header at all.
13065
13066 The @option{-D} option is one way to define a macro before a
13067 precompiled header is included; using a @code{#define} can also do it.
13068 There are also some options that define macros implicitly, like
13069 @option{-O} and @option{-Wdeprecated}; the same rule applies to macros
13070 defined this way.
13071
13072 @item If debugging information is output when using the precompiled
13073 header, using @option{-g} or similar, the same kind of debugging information
13074 must have been output when building the precompiled header.  However,
13075 a precompiled header built using @option{-g} can be used in a compilation
13076 when no debugging information is being output.
13077
13078 @item The same @option{-m} options must generally be used when building
13079 and using the precompiled header.  @xref{Submodel Options},
13080 for any cases where this rule is relaxed.
13081
13082 @item Each of the following options must be the same when building and using
13083 the precompiled header:
13084
13085 @gccoptlist{-fexceptions -funit-at-a-time}
13086
13087 @item
13088 Some other command-line options starting with @option{-f},
13089 @option{-p}, or @option{-O} must be defined in the same way as when
13090 the precompiled header was generated.  At present, it's not clear
13091 which options are safe to change and which are not; the safest choice
13092 is to use exactly the same options when generating and using the
13093 precompiled header.  The following are known to be safe:
13094
13095 @gccoptlist{-fpreprocessed
13096 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
13097 -fsched-verbose=<number> -fschedule-insns
13098 -pedantic-errors}
13099
13100 @end itemize
13101
13102 For all of these except the last, the compiler will automatically
13103 ignore the precompiled header if the conditions aren't met.  If you
13104 find an option combination that doesn't work and doesn't cause the
13105 precompiled header to be ignored, please consider filing a bug report,
13106 see @ref{Bugs}.
13107
13108 If you do use differing options when generating and using the
13109 precompiled header, the actual behavior will be a mixture of the
13110 behavior for the options.  For instance, if you use @option{-g} to
13111 generate the precompiled header but not when using it, you may or may
13112 not get debugging information for routines in the precompiled header.
13113
13114 @node Running Protoize
13115 @section Running Protoize
13116
13117 The program @code{protoize} is an optional part of GCC@.  You can use
13118 it to add prototypes to a program, thus converting the program to ISO
13119 C in one respect.  The companion program @code{unprotoize} does the
13120 reverse: it removes argument types from any prototypes that are found.
13121
13122 When you run these programs, you must specify a set of source files as
13123 command line arguments.  The conversion programs start out by compiling
13124 these files to see what functions they define.  The information gathered
13125 about a file @var{foo} is saved in a file named @file{@var{foo}.X}.
13126
13127 After scanning comes actual conversion.  The specified files are all
13128 eligible to be converted; any files they include (whether sources or
13129 just headers) are eligible as well.
13130
13131 But not all the eligible files are converted.  By default,
13132 @code{protoize} and @code{unprotoize} convert only source and header
13133 files in the current directory.  You can specify additional directories
13134 whose files should be converted with the @option{-d @var{directory}}
13135 option.  You can also specify particular files to exclude with the
13136 @option{-x @var{file}} option.  A file is converted if it is eligible, its
13137 directory name matches one of the specified directory names, and its
13138 name within the directory has not been excluded.
13139
13140 Basic conversion with @code{protoize} consists of rewriting most
13141 function definitions and function declarations to specify the types of
13142 the arguments.  The only ones not rewritten are those for varargs
13143 functions.
13144
13145 @code{protoize} optionally inserts prototype declarations at the
13146 beginning of the source file, to make them available for any calls that
13147 precede the function's definition.  Or it can insert prototype
13148 declarations with block scope in the blocks where undeclared functions
13149 are called.
13150
13151 Basic conversion with @code{unprotoize} consists of rewriting most
13152 function declarations to remove any argument types, and rewriting
13153 function definitions to the old-style pre-ISO form.
13154
13155 Both conversion programs print a warning for any function declaration or
13156 definition that they can't convert.  You can suppress these warnings
13157 with @option{-q}.
13158
13159 The output from @code{protoize} or @code{unprotoize} replaces the
13160 original source file.  The original file is renamed to a name ending
13161 with @samp{.save} (for DOS, the saved filename ends in @samp{.sav}
13162 without the original @samp{.c} suffix).  If the @samp{.save} (@samp{.sav}
13163 for DOS) file already exists, then the source file is simply discarded.
13164
13165 @code{protoize} and @code{unprotoize} both depend on GCC itself to
13166 scan the program and collect information about the functions it uses.
13167 So neither of these programs will work until GCC is installed.
13168
13169 Here is a table of the options you can use with @code{protoize} and
13170 @code{unprotoize}.  Each option works with both programs unless
13171 otherwise stated.
13172
13173 @table @code
13174 @item -B @var{directory}
13175 Look for the file @file{SYSCALLS.c.X} in @var{directory}, instead of the
13176 usual directory (normally @file{/usr/local/lib}).  This file contains
13177 prototype information about standard system functions.  This option
13178 applies only to @code{protoize}.
13179
13180 @item -c @var{compilation-options}
13181 Use @var{compilation-options} as the options when running @command{gcc} to
13182 produce the @samp{.X} files.  The special option @option{-aux-info} is
13183 always passed in addition, to tell @command{gcc} to write a @samp{.X} file.
13184
13185 Note that the compilation options must be given as a single argument to
13186 @code{protoize} or @code{unprotoize}.  If you want to specify several
13187 @command{gcc} options, you must quote the entire set of compilation options
13188 to make them a single word in the shell.
13189
13190 There are certain @command{gcc} arguments that you cannot use, because they
13191 would produce the wrong kind of output.  These include @option{-g},
13192 @option{-O}, @option{-c}, @option{-S}, and @option{-o} If you include these in
13193 the @var{compilation-options}, they are ignored.
13194
13195 @item -C
13196 Rename files to end in @samp{.C} (@samp{.cc} for DOS-based file
13197 systems) instead of @samp{.c}.  This is convenient if you are converting
13198 a C program to C++.  This option applies only to @code{protoize}.
13199
13200 @item -g
13201 Add explicit global declarations.  This means inserting explicit
13202 declarations at the beginning of each source file for each function
13203 that is called in the file and was not declared.  These declarations
13204 precede the first function definition that contains a call to an
13205 undeclared function.  This option applies only to @code{protoize}.
13206
13207 @item -i @var{string}
13208 Indent old-style parameter declarations with the string @var{string}.
13209 This option applies only to @code{protoize}.
13210
13211 @code{unprotoize} converts prototyped function definitions to old-style
13212 function definitions, where the arguments are declared between the
13213 argument list and the initial @samp{@{}.  By default, @code{unprotoize}
13214 uses five spaces as the indentation.  If you want to indent with just
13215 one space instead, use @option{-i " "}.
13216
13217 @item -k
13218 Keep the @samp{.X} files.  Normally, they are deleted after conversion
13219 is finished.
13220
13221 @item -l
13222 Add explicit local declarations.  @code{protoize} with @option{-l} inserts
13223 a prototype declaration for each function in each block which calls the
13224 function without any declaration.  This option applies only to
13225 @code{protoize}.
13226
13227 @item -n
13228 Make no real changes.  This mode just prints information about the conversions
13229 that would have been done without @option{-n}.
13230
13231 @item -N
13232 Make no @samp{.save} files.  The original files are simply deleted.
13233 Use this option with caution.
13234
13235 @item -p @var{program}
13236 Use the program @var{program} as the compiler.  Normally, the name
13237 @file{gcc} is used.
13238
13239 @item -q
13240 Work quietly.  Most warnings are suppressed.
13241
13242 @item -v
13243 Print the version number, just like @option{-v} for @command{gcc}.
13244 @end table
13245
13246 If you need special compiler options to compile one of your program's
13247 source files, then you should generate that file's @samp{.X} file
13248 specially, by running @command{gcc} on that source file with the
13249 appropriate options and the option @option{-aux-info}.  Then run
13250 @code{protoize} on the entire set of files.  @code{protoize} will use
13251 the existing @samp{.X} file because it is newer than the source file.
13252 For example:
13253
13254 @smallexample
13255 gcc -Dfoo=bar file1.c -aux-info file1.X
13256 protoize *.c
13257 @end smallexample
13258
13259 @noindent
13260 You need to include the special files along with the rest in the
13261 @code{protoize} command, even though their @samp{.X} files already
13262 exist, because otherwise they won't get converted.
13263
13264 @xref{Protoize Caveats}, for more information on how to use
13265 @code{protoize} successfully.