OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [doc/] [invoke.texi] - Blame information for rev 847

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 284 jeremybenn
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2
@c 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3
@c Free Software Foundation, Inc.
4
@c This is part of the GCC manual.
5
@c For copying conditions, see the file gcc.texi.
6
 
7
@ignore
8
@c man begin INCLUDE
9
@include gcc-vers.texi
10
@c man end
11
 
12
@c man begin COPYRIGHT
13
Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
14
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
15
Free Software Foundation, Inc.
16
 
17
Permission is granted to copy, distribute and/or modify this document
18
under the terms of the GNU Free Documentation License, Version 1.2 or
19
any later version published by the Free Software Foundation; with the
20
Invariant Sections being ``GNU General Public License'' and ``Funding
21
Free Software'', the Front-Cover texts being (a) (see below), and with
22
the Back-Cover Texts being (b) (see below).  A copy of the license is
23
included in the gfdl(7) man page.
24
 
25
(a) The FSF's Front-Cover Text is:
26
 
27
     A GNU Manual
28
 
29
(b) The FSF's Back-Cover Text is:
30
 
31
     You have freedom to copy and modify this GNU Manual, like GNU
32
     software.  Copies published by the Free Software Foundation raise
33
     funds for GNU development.
34
@c man end
35
@c Set file name and title for the man page.
36
@setfilename gcc
37
@settitle GNU project C and C++ compiler
38
@c man begin SYNOPSIS
39
gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
40
    [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
41
    [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
42
    [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
43
    [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
44
    [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
45
    [@option{-o} @var{outfile}] [@@@var{file}] @var{infile}@dots{}
46
 
47
Only the most useful options are listed here; see below for the
48
remainder.  @samp{g++} accepts mostly the same options as @samp{gcc}.
49
@c man end
50
@c man begin SEEALSO
51
gpl(7), gfdl(7), fsf-funding(7),
52
cpp(1), gcov(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
53
and the Info entries for @file{gcc}, @file{cpp}, @file{as},
54
@file{ld}, @file{binutils} and @file{gdb}.
55
@c man end
56
@c man begin BUGS
57
For instructions on reporting bugs, see
58
@w{@value{BUGURL}}.
59
@c man end
60
@c man begin AUTHOR
61
See the Info entry for @command{gcc}, or
62
@w{@uref{http://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
63
for contributors to GCC@.
64
@c man end
65
@end ignore
66
 
67
@node Invoking GCC
68
@chapter GCC Command Options
69
@cindex GCC command options
70
@cindex command options
71
@cindex options, GCC command
72
 
73
@c man begin DESCRIPTION
74
When you invoke GCC, it normally does preprocessing, compilation,
75
assembly and linking.  The ``overall options'' allow you to stop this
76
process at an intermediate stage.  For example, the @option{-c} option
77
says not to run the linker.  Then the output consists of object files
78
output by the assembler.
79
 
80
Other options are passed on to one stage of processing.  Some options
81
control the preprocessor and others the compiler itself.  Yet other
82
options control the assembler and linker; most of these are not
83
documented here, since you rarely need to use any of them.
84
 
85
@cindex C compilation options
86
Most of the command line options that you can use with GCC are useful
87
for C programs; when an option is only useful with another language
88
(usually C++), the explanation says so explicitly.  If the description
89
for a particular option does not mention a source language, you can use
90
that option with all supported languages.
91
 
92
@cindex C++ compilation options
93
@xref{Invoking G++,,Compiling C++ Programs}, for a summary of special
94
options for compiling C++ programs.
95
 
96
@cindex grouping options
97
@cindex options, grouping
98
The @command{gcc} program accepts options and file names as operands.  Many
99
options have multi-letter names; therefore multiple single-letter options
100
may @emph{not} be grouped: @option{-dv} is very different from @w{@samp{-d
101
-v}}.
102
 
103
@cindex order of options
104
@cindex options, order
105
You can mix options and other arguments.  For the most part, the order
106
you use doesn't matter.  Order does matter when you use several
107
options of the same kind; for example, if you specify @option{-L} more
108
than once, the directories are searched in the order specified.  Also,
109
the placement of the @option{-l} option is significant.
110
 
111
Many options have long names starting with @samp{-f} or with
112
@samp{-W}---for example,
113
@option{-fmove-loop-invariants}, @option{-Wformat} and so on.  Most of
114
these have both positive and negative forms; the negative form of
115
@option{-ffoo} would be @option{-fno-foo}.  This manual documents
116
only one of these two forms, whichever one is not the default.
117
 
118
@c man end
119
 
120
@xref{Option Index}, for an index to GCC's options.
121
 
122
@menu
123
* Option Summary::      Brief list of all options, without explanations.
124
* Overall Options::     Controlling the kind of output:
125
                        an executable, object files, assembler files,
126
                        or preprocessed source.
127
* Invoking G++::        Compiling C++ programs.
128
* C Dialect Options::   Controlling the variant of C language compiled.
129
* C++ Dialect Options:: Variations on C++.
130
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
131
                        and Objective-C++.
132
* Language Independent Options:: Controlling how diagnostics should be
133
                        formatted.
134
* Warning Options::     How picky should the compiler be?
135
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
136
* Optimize Options::    How much optimization?
137
* Preprocessor Options:: Controlling header files and macro definitions.
138
                         Also, getting dependency information for Make.
139
* Assembler Options::   Passing options to the assembler.
140
* Link Options::        Specifying libraries and so on.
141
* Directory Options::   Where to find header files and libraries.
142
                        Where to find the compiler executable files.
143
* Spec Files::          How to pass switches to sub-processes.
144
* Target Options::      Running a cross-compiler, or an old version of GCC.
145
* Submodel Options::    Specifying minor hardware or convention variations,
146
                        such as 68010 vs 68020.
147
* Code Gen Options::    Specifying conventions for function calls, data layout
148
                        and register usage.
149
* Environment Variables:: Env vars that affect GCC.
150
* Precompiled Headers:: Compiling a header once, and using it many times.
151
@end menu
152
 
153
@c man begin OPTIONS
154
 
155
@node Option Summary
156
@section Option Summary
157
 
158
Here is a summary of all the options, grouped by type.  Explanations are
159
in the following sections.
160
 
161
@table @emph
162
@item Overall Options
163
@xref{Overall Options,,Options Controlling the Kind of Output}.
164
@gccoptlist{-c  -S  -E  -o @var{file}  -combine  -no-canonical-prefixes  @gol
165
-pipe  -pass-exit-codes  @gol
166
-x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
167
--version -wrapper@@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}}
168
 
169
@item C Language Options
170
@xref{C Dialect Options,,Options Controlling C Dialect}.
171
@gccoptlist{-ansi  -std=@var{standard}  -fgnu89-inline @gol
172
-aux-info @var{filename} @gol
173
-fno-asm  -fno-builtin  -fno-builtin-@var{function} @gol
174
-fhosted  -ffreestanding -fopenmp -fms-extensions @gol
175
-trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp @gol
176
-fallow-single-precision  -fcond-mismatch -flax-vector-conversions @gol
177
-fsigned-bitfields  -fsigned-char @gol
178
-funsigned-bitfields  -funsigned-char}
179
 
180
@item C++ Language Options
181
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
182
@gccoptlist{-fabi-version=@var{n}  -fno-access-control  -fcheck-new @gol
183
-fconserve-space  -ffriend-injection @gol
184
-fno-elide-constructors @gol
185
-fno-enforce-eh-specs @gol
186
-ffor-scope  -fno-for-scope  -fno-gnu-keywords @gol
187
-fno-implicit-templates @gol
188
-fno-implicit-inline-templates @gol
189
-fno-implement-inlines  -fms-extensions @gol
190
-fno-nonansi-builtins  -fno-operator-names @gol
191
-fno-optional-diags  -fpermissive @gol
192
-fno-pretty-templates @gol
193
-frepo  -fno-rtti  -fstats  -ftemplate-depth=@var{n} @gol
194
-fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
195
-fno-default-inline  -fvisibility-inlines-hidden @gol
196
-fvisibility-ms-compat @gol
197
-Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
198
-Wnon-virtual-dtor  -Wreorder @gol
199
-Weffc++  -Wstrict-null-sentinel @gol
200
-Wno-non-template-friend  -Wold-style-cast @gol
201
-Woverloaded-virtual  -Wno-pmf-conversions @gol
202
-Wsign-promo}
203
 
204
@item Objective-C and Objective-C++ Language Options
205
@xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling
206
Objective-C and Objective-C++ Dialects}.
207
@gccoptlist{-fconstant-string-class=@var{class-name} @gol
208
-fgnu-runtime  -fnext-runtime @gol
209
-fno-nil-receivers @gol
210
-fobjc-call-cxx-cdtors @gol
211
-fobjc-direct-dispatch @gol
212
-fobjc-exceptions @gol
213
-fobjc-gc @gol
214
-freplace-objc-classes @gol
215
-fzero-link @gol
216
-gen-decls @gol
217
-Wassign-intercept @gol
218
-Wno-protocol  -Wselector @gol
219
-Wstrict-selector-match @gol
220
-Wundeclared-selector}
221
 
222
@item Language Independent Options
223
@xref{Language Independent Options,,Options to Control Diagnostic Messages Formatting}.
224
@gccoptlist{-fmessage-length=@var{n}  @gol
225
-fdiagnostics-show-location=@r{[}once@r{|}every-line@r{]}  @gol
226
-fdiagnostics-show-option}
227
 
228
@item Warning Options
229
@xref{Warning Options,,Options to Request or Suppress Warnings}.
230
@gccoptlist{-fsyntax-only  -pedantic  -pedantic-errors @gol
231
-w  -Wextra  -Wall  -Waddress  -Waggregate-return  -Warray-bounds @gol
232
-Wno-attributes -Wno-builtin-macro-redefined @gol
233
-Wc++-compat -Wc++0x-compat -Wcast-align  -Wcast-qual  @gol
234
-Wchar-subscripts -Wclobbered  -Wcomment @gol
235
-Wconversion  -Wcoverage-mismatch  -Wno-deprecated  @gol
236
-Wno-deprecated-declarations -Wdisabled-optimization  @gol
237
-Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
238
-Werror  -Werror=* @gol
239
-Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
240
-Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
241
-Wformat-security  -Wformat-y2k @gol
242
-Wframe-larger-than=@var{len} -Wjump-misses-init -Wignored-qualifiers @gol
243
-Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int @gol
244
-Winit-self  -Winline @gol
245
-Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol
246
-Winvalid-pch -Wlarger-than=@var{len}  -Wunsafe-loop-optimizations @gol
247
-Wlogical-op -Wlong-long @gol
248
-Wmain  -Wmissing-braces  -Wmissing-field-initializers @gol
249
-Wmissing-format-attribute  -Wmissing-include-dirs @gol
250
-Wmissing-noreturn  -Wno-mudflap @gol
251
-Wno-multichar  -Wnonnull  -Wno-overflow @gol
252
-Woverlength-strings  -Wpacked  -Wpacked-bitfield-compat  -Wpadded @gol
253
-Wparentheses  -Wpedantic-ms-format -Wno-pedantic-ms-format @gol
254
-Wpointer-arith  -Wno-pointer-to-int-cast @gol
255
-Wredundant-decls @gol
256
-Wreturn-type  -Wsequence-point  -Wshadow @gol
257
-Wsign-compare  -Wsign-conversion  -Wstack-protector @gol
258
-Wstrict-aliasing -Wstrict-aliasing=n @gol
259
-Wstrict-overflow -Wstrict-overflow=@var{n} @gol
260
-Wswitch  -Wswitch-default  -Wswitch-enum -Wsync-nand @gol
261
-Wsystem-headers  -Wtrigraphs  -Wtype-limits  -Wundef  -Wuninitialized @gol
262
-Wunknown-pragmas  -Wno-pragmas @gol
263
-Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
264
-Wunused-label  -Wunused-parameter -Wno-unused-result -Wunused-value  -Wunused-variable @gol
265
-Wvariadic-macros -Wvla @gol
266
-Wvolatile-register-var  -Wwrite-strings}
267
 
268
@item C and Objective-C-only Warning Options
269
@gccoptlist{-Wbad-function-cast  -Wmissing-declarations @gol
270
-Wmissing-parameter-type  -Wmissing-prototypes  -Wnested-externs @gol
271
-Wold-style-declaration  -Wold-style-definition @gol
272
-Wstrict-prototypes  -Wtraditional  -Wtraditional-conversion @gol
273
-Wdeclaration-after-statement -Wpointer-sign}
274
 
275
@item Debugging Options
276
@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
277
@gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
278
-fdbg-cnt-list -fdbg-cnt=@var{counter-value-list} @gol
279
-fdump-noaddr -fdump-unnumbered -fdump-unnumbered-links @gol
280
-fdump-translation-unit@r{[}-@var{n}@r{]} @gol
281
-fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
282
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
283
-fdump-statistics @gol
284
-fdump-tree-all @gol
285
-fdump-tree-original@r{[}-@var{n}@r{]}  @gol
286
-fdump-tree-optimized@r{[}-@var{n}@r{]} @gol
287
-fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias @gol
288
-fdump-tree-ch @gol
289
-fdump-tree-ssa@r{[}-@var{n}@r{]} -fdump-tree-pre@r{[}-@var{n}@r{]} @gol
290
-fdump-tree-ccp@r{[}-@var{n}@r{]} -fdump-tree-dce@r{[}-@var{n}@r{]} @gol
291
-fdump-tree-gimple@r{[}-raw@r{]} -fdump-tree-mudflap@r{[}-@var{n}@r{]} @gol
292
-fdump-tree-dom@r{[}-@var{n}@r{]} @gol
293
-fdump-tree-dse@r{[}-@var{n}@r{]} @gol
294
-fdump-tree-phiprop@r{[}-@var{n}@r{]} @gol
295
-fdump-tree-phiopt@r{[}-@var{n}@r{]} @gol
296
-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
297
-fdump-tree-copyrename@r{[}-@var{n}@r{]} @gol
298
-fdump-tree-nrv -fdump-tree-vect @gol
299
-fdump-tree-sink @gol
300
-fdump-tree-sra@r{[}-@var{n}@r{]} @gol
301
-fdump-tree-forwprop@r{[}-@var{n}@r{]} @gol
302
-fdump-tree-fre@r{[}-@var{n}@r{]} @gol
303
-fdump-tree-vrp@r{[}-@var{n}@r{]} @gol
304
-ftree-vectorizer-verbose=@var{n} @gol
305
-fdump-tree-storeccp@r{[}-@var{n}@r{]} @gol
306
-fdump-final-insns=@var{file} @gol
307
-fcompare-debug@r{[}=@var{opts}@r{]}  -fcompare-debug-second @gol
308
-feliminate-dwarf2-dups -feliminate-unused-debug-types @gol
309
-feliminate-unused-debug-symbols -femit-class-debug-always @gol
310
-fenable-icf-debug @gol
311
-fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol
312
-frandom-seed=@var{string} -fsched-verbose=@var{n} @gol
313
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose @gol
314
-ftest-coverage  -ftime-report -fvar-tracking @gol
315
-fvar-tracking-assignments  -fvar-tracking-assignments-toggle @gol
316
-g  -g@var{level}  -gtoggle  -gcoff  -gdwarf-@var{version} @gol
317
-ggdb  -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
318
-gvms  -gxcoff  -gxcoff+ @gol
319
-fno-merge-debug-strings -fno-dwarf2-cfi-asm @gol
320
-fdebug-prefix-map=@var{old}=@var{new} @gol
321
-femit-struct-debug-baseonly -femit-struct-debug-reduced @gol
322
-femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
323
-p  -pg  -print-file-name=@var{library}  -print-libgcc-file-name @gol
324
-print-multi-directory  -print-multi-lib  -print-multi-os-directory @gol
325
-print-prog-name=@var{program}  -print-search-dirs  -Q @gol
326
-print-sysroot -print-sysroot-headers-suffix @gol
327
-save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}}
328
 
329
@item Optimization Options
330
@xref{Optimize Options,,Options that Control Optimization}.
331
@gccoptlist{
332
-falign-functions[=@var{n}] -falign-jumps[=@var{n}] @gol
333
-falign-labels[=@var{n}] -falign-loops[=@var{n}] -fassociative-math @gol
334
-fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol
335
-fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol
336
-fcheck-data-deps -fconserve-stack -fcprop-registers -fcrossjumping @gol
337
-fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol
338
-fdata-sections -fdce -fdce @gol
339
-fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol
340
-fearly-inlining -fipa-sra -fexpensive-optimizations -ffast-math @gol
341
-ffinite-math-only -ffloat-store -fexcess-precision=@var{style} @gol
342
-fforward-propagate -ffunction-sections @gol
343
-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm @gol
344
-fgcse-sm -fif-conversion -fif-conversion2 -findirect-inlining @gol
345
-finline-functions -finline-functions-called-once -finline-limit=@var{n} @gol
346
-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta @gol
347
-fipa-pure-const -fipa-reference -fipa-struct-reorg @gol
348
-fipa-type-escape -fira-algorithm=@var{algorithm} @gol
349
-fira-region=@var{region} -fira-coalesce @gol
350
-fira-loop-pressure -fno-ira-share-save-slots @gol
351
-fno-ira-share-spill-slots -fira-verbose=@var{n} @gol
352
-fivopts -fkeep-inline-functions -fkeep-static-consts @gol
353
-floop-block -floop-interchange -floop-strip-mine -fgraphite-identity @gol
354
-floop-parallelize-all -flto -flto-compression-level -flto-report -fltrans @gol
355
-fltrans-output-list -fmerge-all-constants -fmerge-constants -fmodulo-sched @gol
356
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fmudflap @gol
357
-fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline @gol
358
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability @gol
359
-fno-inline -fno-math-errno -fno-peephole -fno-peephole2 @gol
360
-fno-sched-interblock -fno-sched-spec -fno-signed-zeros @gol
361
-fno-toplevel-reorder -fno-trapping-math -fno-zero-initialized-in-bss @gol
362
-fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls @gol
363
-fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays @gol
364
-fprofile-correction -fprofile-dir=@var{path} -fprofile-generate @gol
365
-fprofile-generate=@var{path} @gol
366
-fprofile-use -fprofile-use=@var{path} -fprofile-values @gol
367
-freciprocal-math -fregmove -frename-registers -freorder-blocks @gol
368
-freorder-blocks-and-partition -freorder-functions @gol
369
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops @gol
370
-frounding-math -fsched2-use-superblocks -fsched-pressure @gol
371
-fsched-spec-load -fsched-spec-load-dangerous @gol
372
-fsched-stalled-insns-dep[=@var{n}] -fsched-stalled-insns[=@var{n}] @gol
373
-fsched-group-heuristic -fsched-critical-path-heuristic @gol
374
-fsched-spec-insn-heuristic -fsched-rank-heuristic @gol
375
-fsched-last-insn-heuristic -fsched-dep-count-heuristic @gol
376
-fschedule-insns -fschedule-insns2 -fsection-anchors @gol
377
-fselective-scheduling -fselective-scheduling2 @gol
378
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
379
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller @gol
380
-fsplit-wide-types -fstack-protector -fstack-protector-all @gol
381
-fstrict-aliasing -fstrict-overflow -fthread-jumps -ftracer @gol
382
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol
383
-ftree-copyrename -ftree-dce @gol
384
-ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-loop-im @gol
385
-ftree-phiprop -ftree-loop-distribution @gol
386
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize @gol
387
-ftree-parallelize-loops=@var{n} -ftree-pre -ftree-pta -ftree-reassoc @gol
388
-ftree-sink -ftree-sra -ftree-switch-conversion @gol
389
-ftree-ter -ftree-vect-loop-version -ftree-vectorize -ftree-vrp @gol
390
-funit-at-a-time -funroll-all-loops -funroll-loops @gol
391
-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops @gol
392
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb @gol
393
-fwhole-program -fwhopr -fwpa -fuse-linker-plugin @gol
394
--param @var{name}=@var{value}
395
-O  -O0  -O1  -O2  -O3  -Os}
396
 
397
@item Preprocessor Options
398
@xref{Preprocessor Options,,Options Controlling the Preprocessor}.
399
@gccoptlist{-A@var{question}=@var{answer} @gol
400
-A-@var{question}@r{[}=@var{answer}@r{]} @gol
401
-C  -dD  -dI  -dM  -dN @gol
402
-D@var{macro}@r{[}=@var{defn}@r{]}  -E  -H @gol
403
-idirafter @var{dir} @gol
404
-include @var{file}  -imacros @var{file} @gol
405
-iprefix @var{file}  -iwithprefix @var{dir} @gol
406
-iwithprefixbefore @var{dir}  -isystem @var{dir} @gol
407
-imultilib @var{dir} -isysroot @var{dir} @gol
408
-M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  @gol
409
-P  -fworking-directory  -remap @gol
410
-trigraphs  -undef  -U@var{macro}  -Wp,@var{option} @gol
411
-Xpreprocessor @var{option}}
412
 
413
@item Assembler Option
414
@xref{Assembler Options,,Passing Options to the Assembler}.
415
@gccoptlist{-Wa,@var{option}  -Xassembler @var{option}}
416
 
417
@item Linker Options
418
@xref{Link Options,,Options for Linking}.
419
@gccoptlist{@var{object-file-name}  -l@var{library} @gol
420
-nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic @gol
421
-s  -static  -static-libgcc  -static-libstdc++ -shared  @gol
422
-shared-libgcc  -symbolic @gol
423
-T @var{script}  -Wl,@var{option}  -Xlinker @var{option} @gol
424
-u @var{symbol}}
425
 
426
@item Directory Options
427
@xref{Directory Options,,Options for Directory Search}.
428
@gccoptlist{-B@var{prefix}  -I@var{dir}  -iquote@var{dir}  -L@var{dir}
429
-specs=@var{file}  -I- --sysroot=@var{dir}}
430
 
431
@item Target Options
432
@c I wrote this xref this way to avoid overfull hbox. -- rms
433
@xref{Target Options}.
434
@gccoptlist{-V @var{version}  -b @var{machine}}
435
 
436
@item Machine Dependent Options
437
@xref{Submodel Options,,Hardware Models and Configurations}.
438
@c This list is ordered alphanumerically by subsection name.
439
@c Try and put the significant identifier (CPU or system) first,
440
@c so users have a clue at guessing where the ones they want will be.
441
 
442
@emph{ARC Options}
443
@gccoptlist{-EB  -EL @gol
444
-mmangle-cpu  -mcpu=@var{cpu}  -mtext=@var{text-section} @gol
445
-mdata=@var{data-section}  -mrodata=@var{readonly-data-section}}
446
 
447
@emph{ARM Options}
448
@gccoptlist{-mapcs-frame  -mno-apcs-frame @gol
449
-mabi=@var{name} @gol
450
-mapcs-stack-check  -mno-apcs-stack-check @gol
451
-mapcs-float  -mno-apcs-float @gol
452
-mapcs-reentrant  -mno-apcs-reentrant @gol
453
-msched-prolog  -mno-sched-prolog @gol
454
-mlittle-endian  -mbig-endian  -mwords-little-endian @gol
455
-mfloat-abi=@var{name}  -msoft-float  -mhard-float  -mfpe @gol
456
-mfp16-format=@var{name}
457
-mthumb-interwork  -mno-thumb-interwork @gol
458
-mcpu=@var{name}  -march=@var{name}  -mfpu=@var{name}  @gol
459
-mstructure-size-boundary=@var{n} @gol
460
-mabort-on-noreturn @gol
461
-mlong-calls  -mno-long-calls @gol
462
-msingle-pic-base  -mno-single-pic-base @gol
463
-mpic-register=@var{reg} @gol
464
-mnop-fun-dllimport @gol
465
-mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns @gol
466
-mpoke-function-name @gol
467
-mthumb  -marm @gol
468
-mtpcs-frame  -mtpcs-leaf-frame @gol
469
-mcaller-super-interworking  -mcallee-super-interworking @gol
470
-mtp=@var{name} @gol
471
-mword-relocations @gol
472
-mfix-cortex-m3-ldrd}
473
 
474
@emph{AVR Options}
475
@gccoptlist{-mmcu=@var{mcu}  -mno-interrupts @gol
476
-mcall-prologues  -mtiny-stack  -mint8}
477
 
478
@emph{Blackfin Options}
479
@gccoptlist{-mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]} @gol
480
-msim -momit-leaf-frame-pointer  -mno-omit-leaf-frame-pointer @gol
481
-mspecld-anomaly  -mno-specld-anomaly  -mcsync-anomaly  -mno-csync-anomaly @gol
482
-mlow-64k -mno-low64k  -mstack-check-l1  -mid-shared-library @gol
483
-mno-id-shared-library  -mshared-library-id=@var{n} @gol
484
-mleaf-id-shared-library  -mno-leaf-id-shared-library @gol
485
-msep-data  -mno-sep-data  -mlong-calls  -mno-long-calls @gol
486
-mfast-fp -minline-plt -mmulticore  -mcorea  -mcoreb  -msdram @gol
487
-micplb}
488
 
489
@emph{CRIS Options}
490
@gccoptlist{-mcpu=@var{cpu}  -march=@var{cpu}  -mtune=@var{cpu} @gol
491
-mmax-stack-frame=@var{n}  -melinux-stacksize=@var{n} @gol
492
-metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects @gol
493
-mstack-align  -mdata-align  -mconst-align @gol
494
-m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt @gol
495
-melf  -maout  -melinux  -mlinux  -sim  -sim2 @gol
496
-mmul-bug-workaround  -mno-mul-bug-workaround}
497
 
498
@emph{CRX Options}
499
@gccoptlist{-mmac -mpush-args}
500
 
501
@emph{Darwin Options}
502
@gccoptlist{-all_load  -allowable_client  -arch  -arch_errors_fatal @gol
503
-arch_only  -bind_at_load  -bundle  -bundle_loader @gol
504
-client_name  -compatibility_version  -current_version @gol
505
-dead_strip @gol
506
-dependency-file  -dylib_file  -dylinker_install_name @gol
507
-dynamic  -dynamiclib  -exported_symbols_list @gol
508
-filelist  -flat_namespace  -force_cpusubtype_ALL @gol
509
-force_flat_namespace  -headerpad_max_install_names @gol
510
-iframework @gol
511
-image_base  -init  -install_name  -keep_private_externs @gol
512
-multi_module  -multiply_defined  -multiply_defined_unused @gol
513
-noall_load   -no_dead_strip_inits_and_terms @gol
514
-nofixprebinding -nomultidefs  -noprebind  -noseglinkedit @gol
515
-pagezero_size  -prebind  -prebind_all_twolevel_modules @gol
516
-private_bundle  -read_only_relocs  -sectalign @gol
517
-sectobjectsymbols  -whyload  -seg1addr @gol
518
-sectcreate  -sectobjectsymbols  -sectorder @gol
519
-segaddr -segs_read_only_addr -segs_read_write_addr @gol
520
-seg_addr_table  -seg_addr_table_filename  -seglinkedit @gol
521
-segprot  -segs_read_only_addr  -segs_read_write_addr @gol
522
-single_module  -static  -sub_library  -sub_umbrella @gol
523
-twolevel_namespace  -umbrella  -undefined @gol
524
-unexported_symbols_list  -weak_reference_mismatches @gol
525
-whatsloaded -F -gused -gfull -mmacosx-version-min=@var{version} @gol
526
-mkernel -mone-byte-bool}
527
 
528
@emph{DEC Alpha Options}
529
@gccoptlist{-mno-fp-regs  -msoft-float  -malpha-as  -mgas @gol
530
-mieee  -mieee-with-inexact  -mieee-conformant @gol
531
-mfp-trap-mode=@var{mode}  -mfp-rounding-mode=@var{mode} @gol
532
-mtrap-precision=@var{mode}  -mbuild-constants @gol
533
-mcpu=@var{cpu-type}  -mtune=@var{cpu-type} @gol
534
-mbwx  -mmax  -mfix  -mcix @gol
535
-mfloat-vax  -mfloat-ieee @gol
536
-mexplicit-relocs  -msmall-data  -mlarge-data @gol
537
-msmall-text  -mlarge-text @gol
538
-mmemory-latency=@var{time}}
539
 
540
@emph{DEC Alpha/VMS Options}
541
@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64}
542
 
543
@emph{FR30 Options}
544
@gccoptlist{-msmall-model -mno-lsim}
545
 
546
@emph{FRV Options}
547
@gccoptlist{-mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 @gol
548
-mhard-float  -msoft-float @gol
549
-malloc-cc  -mfixed-cc  -mdword  -mno-dword @gol
550
-mdouble  -mno-double @gol
551
-mmedia  -mno-media  -mmuladd  -mno-muladd @gol
552
-mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic @gol
553
-mlinked-fp  -mlong-calls  -malign-labels @gol
554
-mlibrary-pic  -macc-4  -macc-8 @gol
555
-mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move @gol
556
-moptimize-membar -mno-optimize-membar @gol
557
-mscc  -mno-scc  -mcond-exec  -mno-cond-exec @gol
558
-mvliw-branch  -mno-vliw-branch @gol
559
-mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec @gol
560
-mno-nested-cond-exec  -mtomcat-stats @gol
561
-mTLS -mtls @gol
562
-mcpu=@var{cpu}}
563
 
564
@emph{GNU/Linux Options}
565
@gccoptlist{-muclibc}
566
 
567
@emph{H8/300 Options}
568
@gccoptlist{-mrelax  -mh  -ms  -mn  -mint32  -malign-300}
569
 
570
@emph{HPPA Options}
571
@gccoptlist{-march=@var{architecture-type} @gol
572
-mbig-switch  -mdisable-fpregs  -mdisable-indexing @gol
573
-mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld @gol
574
-mfixed-range=@var{register-range} @gol
575
-mjump-in-delay -mlinker-opt -mlong-calls @gol
576
-mlong-load-store  -mno-big-switch  -mno-disable-fpregs @gol
577
-mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas @gol
578
-mno-jump-in-delay  -mno-long-load-store @gol
579
-mno-portable-runtime  -mno-soft-float @gol
580
-mno-space-regs  -msoft-float  -mpa-risc-1-0 @gol
581
-mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime @gol
582
-mschedule=@var{cpu-type}  -mspace-regs  -msio  -mwsio @gol
583
-munix=@var{unix-std}  -nolibdld  -static  -threads}
584
 
585
@emph{i386 and x86-64 Options}
586
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
587
-mfpmath=@var{unit} @gol
588
-masm=@var{dialect}  -mno-fancy-math-387 @gol
589
-mno-fp-ret-in-387  -msoft-float @gol
590
-mno-wide-multiply  -mrtd  -malign-double @gol
591
-mpreferred-stack-boundary=@var{num}
592
-mincoming-stack-boundary=@var{num}
593
-mcld -mcx16 -msahf -mmovbe -mcrc32 -mrecip @gol
594
-mmmx  -msse  -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx @gol
595
-maes -mpclmul -mfused-madd @gol
596
-msse4a -m3dnow -mpopcnt -mabm -mfma4 -mxop -mlwp @gol
597
-mthreads  -mno-align-stringops  -minline-all-stringops @gol
598
-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
599
-mpush-args  -maccumulate-outgoing-args  -m128bit-long-double @gol
600
-m96bit-long-double  -mregparm=@var{num}  -msseregparm @gol
601
-mveclibabi=@var{type} -mpc32 -mpc64 -mpc80 -mstackrealign @gol
602
-momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs @gol
603
-mcmodel=@var{code-model} -mabi=@var{name} @gol
604
-m32  -m64 -mlarge-data-threshold=@var{num} @gol
605
-msse2avx}
606
 
607
@emph{IA-64 Options}
608
@gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic @gol
609
-mvolatile-asm-stop  -mregister-names  -msdata -mno-sdata @gol
610
-mconstant-gp  -mauto-pic  -mfused-madd @gol
611
-minline-float-divide-min-latency @gol
612
-minline-float-divide-max-throughput @gol
613
-mno-inline-float-divide @gol
614
-minline-int-divide-min-latency @gol
615
-minline-int-divide-max-throughput  @gol
616
-mno-inline-int-divide @gol
617
-minline-sqrt-min-latency -minline-sqrt-max-throughput @gol
618
-mno-inline-sqrt @gol
619
-mdwarf2-asm -mearly-stop-bits @gol
620
-mfixed-range=@var{register-range} -mtls-size=@var{tls-size} @gol
621
-mtune=@var{cpu-type} -milp32 -mlp64 @gol
622
-msched-br-data-spec -msched-ar-data-spec -msched-control-spec @gol
623
-msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec @gol
624
-msched-spec-ldc -msched-spec-control-ldc @gol
625
-msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns @gol
626
-msched-stop-bits-after-every-cycle -msched-count-spec-in-critical-path @gol
627
-msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost @gol
628
-msched-max-memory-insns-hard-limit -msched-max-memory-insns=@var{max-insns}}
629
 
630
@emph{IA-64/VMS Options}
631
@gccoptlist{-mvms-return-codes -mdebug-main=@var{prefix} -mmalloc64}
632
 
633
@emph{LM32 Options}
634
@gccoptlist{-mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled @gol
635
-msign-extend-enabled -muser-enabled}
636
 
637
@emph{M32R/D Options}
638
@gccoptlist{-m32r2 -m32rx -m32r @gol
639
-mdebug @gol
640
-malign-loops -mno-align-loops @gol
641
-missue-rate=@var{number} @gol
642
-mbranch-cost=@var{number} @gol
643
-mmodel=@var{code-size-model-type} @gol
644
-msdata=@var{sdata-type} @gol
645
-mno-flush-func -mflush-func=@var{name} @gol
646
-mno-flush-trap -mflush-trap=@var{number} @gol
647
-G @var{num}}
648
 
649
@emph{M32C Options}
650
@gccoptlist{-mcpu=@var{cpu} -msim -memregs=@var{number}}
651
 
652
@emph{M680x0 Options}
653
@gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
654
-m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 @gol
655
-m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407 @gol
656
-mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020 @gol
657
-mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort @gol
658
-mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel @gol
659
-malign-int  -mstrict-align  -msep-data  -mno-sep-data @gol
660
-mshared-library-id=n  -mid-shared-library  -mno-id-shared-library @gol
661
-mxgot -mno-xgot}
662
 
663
@emph{M68hc1x Options}
664
@gccoptlist{-m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 @gol
665
-mauto-incdec  -minmax  -mlong-calls  -mshort @gol
666
-msoft-reg-count=@var{count}}
667
 
668
@emph{MCore Options}
669
@gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates @gol
670
-mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields @gol
671
-m4byte-functions  -mno-4byte-functions  -mcallgraph-data @gol
672
-mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim @gol
673
-mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
674
 
675
@emph{MeP Options}
676
@gccoptlist{-mabsdiff -mall-opts -maverage -mbased=@var{n} -mbitops @gol
677
-mc=@var{n} -mclip -mconfig=@var{name} -mcop -mcop32 -mcop64 -mivc2 @gol
678
-mdc -mdiv -meb -mel -mio-volatile -ml -mleadz -mm -mminmax @gol
679
-mmult -mno-opts -mrepeat -ms -msatur -msdram -msim -msimnovec -mtf @gol
680
-mtiny=@var{n}}
681
 
682
@emph{MIPS Options}
683
@gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch} @gol
684
-mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2 @gol
685
-mips64  -mips64r2 @gol
686
-mips16  -mno-mips16  -mflip-mips16 @gol
687
-minterlink-mips16  -mno-interlink-mips16 @gol
688
-mabi=@var{abi}  -mabicalls  -mno-abicalls @gol
689
-mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot @gol
690
-mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float @gol
691
-msingle-float  -mdouble-float  -mdsp  -mno-dsp  -mdspr2  -mno-dspr2 @gol
692
-mfpu=@var{fpu-type} @gol
693
-msmartmips  -mno-smartmips @gol
694
-mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx @gol
695
-mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc @gol
696
-mlong64  -mlong32  -msym32  -mno-sym32 @gol
697
-G@var{num}  -mlocal-sdata  -mno-local-sdata @gol
698
-mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt @gol
699
-membedded-data  -mno-embedded-data @gol
700
-muninit-const-in-rodata  -mno-uninit-const-in-rodata @gol
701
-mcode-readable=@var{setting} @gol
702
-msplit-addresses  -mno-split-addresses @gol
703
-mexplicit-relocs  -mno-explicit-relocs @gol
704
-mcheck-zero-division  -mno-check-zero-division @gol
705
-mdivide-traps  -mdivide-breaks @gol
706
-mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls @gol
707
-mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp @gol
708
-mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400 @gol
709
-mfix-r10000 -mno-fix-r10000  -mfix-vr4120  -mno-fix-vr4120 @gol
710
-mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1 @gol
711
-mflush-func=@var{func}  -mno-flush-func @gol
712
-mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely @gol
713
-mfp-exceptions -mno-fp-exceptions @gol
714
-mvr4130-align -mno-vr4130-align -msynci -mno-synci @gol
715
-mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address}
716
 
717
@emph{MMIX Options}
718
@gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu @gol
719
-mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols @gol
720
-melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses @gol
721
-mno-base-addresses  -msingle-exit  -mno-single-exit}
722
 
723
@emph{MN10300 Options}
724
@gccoptlist{-mmult-bug  -mno-mult-bug @gol
725
-mam33  -mno-am33 @gol
726
-mam33-2  -mno-am33-2 @gol
727
-mreturn-pointer-on-d0 @gol
728
-mno-crt0  -mrelax}
729
 
730 333 jeremybenn
@emph{OpenRISC 1000 Options}
731
@gccoptlist{-mhard-float -msoft-float -mdouble-float -mhard-div @gol
732
-msoft-div -mhard-mul -msoft-mul -maj -msext -mcmov -mlogue @gol
733
-mror -msibcall -mor32-newlib -mor32-newlib-uart}
734
 
735 284 jeremybenn
@emph{PDP-11 Options}
736
@gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 @gol
737
-mbcopy  -mbcopy-builtin  -mint32  -mno-int16 @gol
738
-mint16  -mno-int32  -mfloat32  -mno-float64 @gol
739
-mfloat64  -mno-float32  -mabshi  -mno-abshi @gol
740
-mbranch-expensive  -mbranch-cheap @gol
741
-msplit  -mno-split  -munix-asm  -mdec-asm}
742
 
743
@emph{picoChip Options}
744
@gccoptlist{-mae=@var{ae_type} -mvliw-lookahead=@var{N}
745
-msymbol-as-address -mno-inefficient-warnings}
746
 
747
@emph{PowerPC Options}
748
See RS/6000 and PowerPC Options.
749
 
750
@emph{RS/6000 and PowerPC Options}
751
@gccoptlist{-mcpu=@var{cpu-type} @gol
752
-mtune=@var{cpu-type} @gol
753
-mpower  -mno-power  -mpower2  -mno-power2 @gol
754
-mpowerpc  -mpowerpc64  -mno-powerpc @gol
755
-maltivec  -mno-altivec @gol
756
-mpowerpc-gpopt  -mno-powerpc-gpopt @gol
757
-mpowerpc-gfxopt  -mno-powerpc-gfxopt @gol
758
-mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb -mpopcntd -mno-popcntd @gol
759
-mfprnd  -mno-fprnd @gol
760
-mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp @gol
761
-mnew-mnemonics  -mold-mnemonics @gol
762
-mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc @gol
763
-m64  -m32  -mxl-compat  -mno-xl-compat  -mpe @gol
764
-malign-power  -malign-natural @gol
765
-msoft-float  -mhard-float  -mmultiple  -mno-multiple @gol
766
-msingle-float -mdouble-float -msimple-fpu @gol
767
-mstring  -mno-string  -mupdate  -mno-update @gol
768
-mavoid-indexed-addresses  -mno-avoid-indexed-addresses @gol
769
-mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align @gol
770
-mstrict-align  -mno-strict-align  -mrelocatable @gol
771
-mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib @gol
772
-mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian @gol
773
-mdynamic-no-pic  -maltivec -mswdiv @gol
774
-mprioritize-restricted-insns=@var{priority} @gol
775
-msched-costly-dep=@var{dependence_type} @gol
776
-minsert-sched-nops=@var{scheme} @gol
777
-mcall-sysv  -mcall-netbsd @gol
778
-maix-struct-return  -msvr4-struct-return @gol
779
-mabi=@var{abi-type} -msecure-plt -mbss-plt @gol
780
-misel -mno-isel @gol
781
-misel=yes  -misel=no @gol
782
-mspe -mno-spe @gol
783
-mspe=yes  -mspe=no @gol
784
-mpaired @gol
785
-mgen-cell-microcode -mwarn-cell-microcode @gol
786
-mvrsave -mno-vrsave @gol
787
-mmulhw -mno-mulhw @gol
788
-mdlmzb -mno-dlmzb @gol
789
-mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol
790
-mprototype  -mno-prototype @gol
791
-msim  -mmvme  -mads  -myellowknife  -memb  -msdata @gol
792
-msdata=@var{opt}  -mvxworks  -G @var{num}  -pthread}
793
 
794
@emph{RX Options}
795
@gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
796
-mcpu= -patch=@gol
797
-mbig-endian-data -mlittle-endian-data @gol
798
-msmall-data @gol
799
-msim  -mno-sim@gol
800
-mas100-syntax -mno-as100-syntax@gol
801
-mrelax@gol
802
-mmax-constant-size=@gol
803
-mint-register=@gol
804
-msave-acc-in-interrupts}
805
 
806
@emph{S/390 and zSeries Options}
807
@gccoptlist{-mtune=@var{cpu-type}  -march=@var{cpu-type} @gol
808
-mhard-float  -msoft-float  -mhard-dfp -mno-hard-dfp @gol
809
-mlong-double-64 -mlong-double-128 @gol
810
-mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack @gol
811
-msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
812
-m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
813
-mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
814
-mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
815
 
816
@emph{Score Options}
817
@gccoptlist{-meb -mel @gol
818
-mnhwloop @gol
819
-muls @gol
820
-mmac @gol
821
-mscore5 -mscore5u -mscore7 -mscore7d}
822
 
823
@emph{SH Options}
824
@gccoptlist{-m1  -m2  -m2e @gol
825
-m2a-nofpu -m2a-single-only -m2a-single -m2a @gol
826
-m3  -m3e @gol
827
-m4-nofpu  -m4-single-only  -m4-single  -m4 @gol
828
-m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al @gol
829
-m5-64media  -m5-64media-nofpu @gol
830
-m5-32media  -m5-32media-nofpu @gol
831
-m5-compact  -m5-compact-nofpu @gol
832
-mb  -ml  -mdalign  -mrelax @gol
833
-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
834
-mieee  -mbitops  -misize  -minline-ic_invalidate -mpadstruct  -mspace @gol
835
-mprefergot  -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
836
-mdivsi3_libfunc=@var{name} -mfixed-range=@var{register-range} @gol
837
-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
838
-minvalid-symbols}
839
 
840
@emph{SPARC Options}
841
@gccoptlist{-mcpu=@var{cpu-type} @gol
842
-mtune=@var{cpu-type} @gol
843
-mcmodel=@var{code-model} @gol
844
-m32  -m64  -mapp-regs  -mno-app-regs @gol
845
-mfaster-structs  -mno-faster-structs @gol
846
-mfpu  -mno-fpu  -mhard-float  -msoft-float @gol
847
-mhard-quad-float  -msoft-quad-float @gol
848
-mimpure-text  -mno-impure-text  -mlittle-endian @gol
849
-mstack-bias  -mno-stack-bias @gol
850
-munaligned-doubles  -mno-unaligned-doubles @gol
851
-mv8plus  -mno-v8plus  -mvis  -mno-vis
852
-threads -pthreads -pthread}
853
 
854
@emph{SPU Options}
855
@gccoptlist{-mwarn-reloc -merror-reloc @gol
856
-msafe-dma -munsafe-dma @gol
857
-mbranch-hints @gol
858
-msmall-mem -mlarge-mem -mstdmain @gol
859
-mfixed-range=@var{register-range} @gol
860
-mea32 -mea64 @gol
861
-maddress-space-conversion -mno-address-space-conversion @gol
862
-mcache-size=@var{cache-size} @gol
863
-matomic-updates -mno-atomic-updates}
864
 
865
@emph{System V Options}
866
@gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
867
 
868
@emph{V850 Options}
869
@gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
870
-mprolog-function  -mno-prolog-function  -mspace @gol
871
-mtda=@var{n}  -msda=@var{n}  -mzda=@var{n} @gol
872
-mapp-regs  -mno-app-regs @gol
873
-mdisable-callt  -mno-disable-callt @gol
874
-mv850e1 @gol
875
-mv850e @gol
876
-mv850  -mbig-switch}
877
 
878
@emph{VAX Options}
879
@gccoptlist{-mg  -mgnu  -munix}
880
 
881
@emph{VxWorks Options}
882
@gccoptlist{-mrtp  -non-static  -Bstatic  -Bdynamic @gol
883
-Xbind-lazy  -Xbind-now}
884
 
885
@emph{x86-64 Options}
886
See i386 and x86-64 Options.
887
 
888
@emph{i386 and x86-64 Windows Options}
889
@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
890
-mnop-fun-dllimport -mthread -municode -mwin32 -mwindows
891
-fno-set-stack-executable}
892
 
893
@emph{Xstormy16 Options}
894
@gccoptlist{-msim}
895
 
896
@emph{Xtensa Options}
897
@gccoptlist{-mconst16 -mno-const16 @gol
898
-mfused-madd  -mno-fused-madd @gol
899
-mserialize-volatile  -mno-serialize-volatile @gol
900
-mtext-section-literals  -mno-text-section-literals @gol
901
-mtarget-align  -mno-target-align @gol
902
-mlongcalls  -mno-longcalls}
903
 
904
@emph{zSeries Options}
905
See S/390 and zSeries Options.
906
 
907
@item Code Generation Options
908
@xref{Code Gen Options,,Options for Code Generation Conventions}.
909
@gccoptlist{-fcall-saved-@var{reg}  -fcall-used-@var{reg} @gol
910
-ffixed-@var{reg}  -fexceptions @gol
911
-fnon-call-exceptions  -funwind-tables @gol
912
-fasynchronous-unwind-tables @gol
913
-finhibit-size-directive  -finstrument-functions @gol
914
-finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol
915
-finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol
916
-fno-common  -fno-ident @gol
917
-fpcc-struct-return  -fpic  -fPIC -fpie -fPIE @gol
918
-fno-jump-tables @gol
919
-frecord-gcc-switches @gol
920
-freg-struct-return  -fshort-enums @gol
921
-fshort-double  -fshort-wchar @gol
922
-fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
923
-fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
924
-fno-stack-limit  -fargument-alias  -fargument-noalias @gol
925
-fargument-noalias-global  -fargument-noalias-anything @gol
926
-fleading-underscore  -ftls-model=@var{model} @gol
927
-ftrapv  -fwrapv  -fbounds-check @gol
928
-fvisibility}
929
@end table
930
 
931
@menu
932
* Overall Options::     Controlling the kind of output:
933
                        an executable, object files, assembler files,
934
                        or preprocessed source.
935
* C Dialect Options::   Controlling the variant of C language compiled.
936
* C++ Dialect Options:: Variations on C++.
937
* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
938
                        and Objective-C++.
939
* Language Independent Options:: Controlling how diagnostics should be
940
                        formatted.
941
* Warning Options::     How picky should the compiler be?
942
* Debugging Options::   Symbol tables, measurements, and debugging dumps.
943
* Optimize Options::    How much optimization?
944
* Preprocessor Options:: Controlling header files and macro definitions.
945
                         Also, getting dependency information for Make.
946
* Assembler Options::   Passing options to the assembler.
947
* Link Options::        Specifying libraries and so on.
948
* Directory Options::   Where to find header files and libraries.
949
                        Where to find the compiler executable files.
950
* Spec Files::          How to pass switches to sub-processes.
951
* Target Options::      Running a cross-compiler, or an old version of GCC.
952
@end menu
953
 
954
@node Overall Options
955
@section Options Controlling the Kind of Output
956
 
957
Compilation can involve up to four stages: preprocessing, compilation
958
proper, assembly and linking, always in that order.  GCC is capable of
959
preprocessing and compiling several files either into several
960
assembler input files, or into one assembler input file; then each
961
assembler input file produces an object file, and linking combines all
962
the object files (those newly compiled, and those specified as input)
963
into an executable file.
964
 
965
@cindex file name suffix
966
For any given input file, the file name suffix determines what kind of
967
compilation is done:
968
 
969
@table @gcctabopt
970
@item @var{file}.c
971
C source code which must be preprocessed.
972
 
973
@item @var{file}.i
974
C source code which should not be preprocessed.
975
 
976
@item @var{file}.ii
977
C++ source code which should not be preprocessed.
978
 
979
@item @var{file}.m
980
Objective-C source code.  Note that you must link with the @file{libobjc}
981
library to make an Objective-C program work.
982
 
983
@item @var{file}.mi
984
Objective-C source code which should not be preprocessed.
985
 
986
@item @var{file}.mm
987
@itemx @var{file}.M
988
Objective-C++ source code.  Note that you must link with the @file{libobjc}
989
library to make an Objective-C++ program work.  Note that @samp{.M} refers
990
to a literal capital M@.
991
 
992
@item @var{file}.mii
993
Objective-C++ source code which should not be preprocessed.
994
 
995
@item @var{file}.h
996
C, C++, Objective-C or Objective-C++ header file to be turned into a
997
precompiled header.
998
 
999
@item @var{file}.cc
1000
@itemx @var{file}.cp
1001
@itemx @var{file}.cxx
1002
@itemx @var{file}.cpp
1003
@itemx @var{file}.CPP
1004
@itemx @var{file}.c++
1005
@itemx @var{file}.C
1006
C++ source code which must be preprocessed.  Note that in @samp{.cxx},
1007
the last two letters must both be literally @samp{x}.  Likewise,
1008
@samp{.C} refers to a literal capital C@.
1009
 
1010
@item @var{file}.mm
1011
@itemx @var{file}.M
1012
Objective-C++ source code which must be preprocessed.
1013
 
1014
@item @var{file}.mii
1015
Objective-C++ source code which should not be preprocessed.
1016
 
1017
@item @var{file}.hh
1018
@itemx @var{file}.H
1019
@itemx @var{file}.hp
1020
@itemx @var{file}.hxx
1021
@itemx @var{file}.hpp
1022
@itemx @var{file}.HPP
1023
@itemx @var{file}.h++
1024
@itemx @var{file}.tcc
1025
C++ header file to be turned into a precompiled header.
1026
 
1027
@item @var{file}.f
1028
@itemx @var{file}.for
1029
@itemx @var{file}.ftn
1030
Fixed form Fortran source code which should not be preprocessed.
1031
 
1032
@item @var{file}.F
1033
@itemx @var{file}.FOR
1034
@itemx @var{file}.fpp
1035
@itemx @var{file}.FPP
1036
@itemx @var{file}.FTN
1037
Fixed form Fortran source code which must be preprocessed (with the traditional
1038
preprocessor).
1039
 
1040
@item @var{file}.f90
1041
@itemx @var{file}.f95
1042
@itemx @var{file}.f03
1043
@itemx @var{file}.f08
1044
Free form Fortran source code which should not be preprocessed.
1045
 
1046
@item @var{file}.F90
1047
@itemx @var{file}.F95
1048
@itemx @var{file}.F03
1049
@itemx @var{file}.F08
1050
Free form Fortran source code which must be preprocessed (with the
1051
traditional preprocessor).
1052
 
1053
@c FIXME: Descriptions of Java file types.
1054
@c @var{file}.java
1055
@c @var{file}.class
1056
@c @var{file}.zip
1057
@c @var{file}.jar
1058
 
1059
@item @var{file}.ads
1060
Ada source code file which contains a library unit declaration (a
1061
declaration of a package, subprogram, or generic, or a generic
1062
instantiation), or a library unit renaming declaration (a package,
1063
generic, or subprogram renaming declaration).  Such files are also
1064
called @dfn{specs}.
1065
 
1066
@item @var{file}.adb
1067
Ada source code file containing a library unit body (a subprogram or
1068
package body).  Such files are also called @dfn{bodies}.
1069
 
1070
@c GCC also knows about some suffixes for languages not yet included:
1071
@c Pascal:
1072
@c @var{file}.p
1073
@c @var{file}.pas
1074
@c Ratfor:
1075
@c @var{file}.r
1076
 
1077
@item @var{file}.s
1078
Assembler code.
1079
 
1080
@item @var{file}.S
1081
@itemx @var{file}.sx
1082
Assembler code which must be preprocessed.
1083
 
1084
@item @var{other}
1085
An object file to be fed straight into linking.
1086
Any file name with no recognized suffix is treated this way.
1087
@end table
1088
 
1089
@opindex x
1090
You can specify the input language explicitly with the @option{-x} option:
1091
 
1092
@table @gcctabopt
1093
@item -x @var{language}
1094
Specify explicitly the @var{language} for the following input files
1095
(rather than letting the compiler choose a default based on the file
1096
name suffix).  This option applies to all following input files until
1097
the next @option{-x} option.  Possible values for @var{language} are:
1098
@smallexample
1099
c  c-header  c-cpp-output
1100
c++  c++-header  c++-cpp-output
1101
objective-c  objective-c-header  objective-c-cpp-output
1102
objective-c++ objective-c++-header objective-c++-cpp-output
1103
assembler  assembler-with-cpp
1104
ada
1105
f77  f77-cpp-input f95  f95-cpp-input
1106
java
1107
@end smallexample
1108
 
1109
@item -x none
1110
Turn off any specification of a language, so that subsequent files are
1111
handled according to their file name suffixes (as they are if @option{-x}
1112
has not been used at all).
1113
 
1114
@item -pass-exit-codes
1115
@opindex pass-exit-codes
1116
Normally the @command{gcc} program will exit with the code of 1 if any
1117
phase of the compiler returns a non-success return code.  If you specify
1118
@option{-pass-exit-codes}, the @command{gcc} program will instead return with
1119
numerically highest error produced by any phase that returned an error
1120
indication.  The C, C++, and Fortran frontends return 4, if an internal
1121
compiler error is encountered.
1122
@end table
1123
 
1124
If you only want some of the stages of compilation, you can use
1125
@option{-x} (or filename suffixes) to tell @command{gcc} where to start, and
1126
one of the options @option{-c}, @option{-S}, or @option{-E} to say where
1127
@command{gcc} is to stop.  Note that some combinations (for example,
1128
@samp{-x cpp-output -E}) instruct @command{gcc} to do nothing at all.
1129
 
1130
@table @gcctabopt
1131
@item -c
1132
@opindex c
1133
Compile or assemble the source files, but do not link.  The linking
1134
stage simply is not done.  The ultimate output is in the form of an
1135
object file for each source file.
1136
 
1137
By default, the object file name for a source file is made by replacing
1138
the suffix @samp{.c}, @samp{.i}, @samp{.s}, etc., with @samp{.o}.
1139
 
1140
Unrecognized input files, not requiring compilation or assembly, are
1141
ignored.
1142
 
1143
@item -S
1144
@opindex S
1145
Stop after the stage of compilation proper; do not assemble.  The output
1146
is in the form of an assembler code file for each non-assembler input
1147
file specified.
1148
 
1149
By default, the assembler file name for a source file is made by
1150
replacing the suffix @samp{.c}, @samp{.i}, etc., with @samp{.s}.
1151
 
1152
Input files that don't require compilation are ignored.
1153
 
1154
@item -E
1155
@opindex E
1156
Stop after the preprocessing stage; do not run the compiler proper.  The
1157
output is in the form of preprocessed source code, which is sent to the
1158
standard output.
1159
 
1160
Input files which don't require preprocessing are ignored.
1161
 
1162
@cindex output file option
1163
@item -o @var{file}
1164
@opindex o
1165
Place output in file @var{file}.  This applies regardless to whatever
1166
sort of output is being produced, whether it be an executable file,
1167
an object file, an assembler file or preprocessed C code.
1168
 
1169
If @option{-o} is not specified, the default is to put an executable
1170
file in @file{a.out}, the object file for
1171
@file{@var{source}.@var{suffix}} in @file{@var{source}.o}, its
1172
assembler file in @file{@var{source}.s}, a precompiled header file in
1173
@file{@var{source}.@var{suffix}.gch}, and all preprocessed C source on
1174
standard output.
1175
 
1176
@item -v
1177
@opindex v
1178
Print (on standard error output) the commands executed to run the stages
1179
of compilation.  Also print the version number of the compiler driver
1180
program and of the preprocessor and the compiler proper.
1181
 
1182
@item -###
1183
@opindex ###
1184
Like @option{-v} except the commands are not executed and all command
1185
arguments are quoted.  This is useful for shell scripts to capture the
1186
driver-generated command lines.
1187
 
1188
@item -pipe
1189
@opindex pipe
1190
Use pipes rather than temporary files for communication between the
1191
various stages of compilation.  This fails to work on some systems where
1192
the assembler is unable to read from a pipe; but the GNU assembler has
1193
no trouble.
1194
 
1195
@item -combine
1196
@opindex combine
1197
If you are compiling multiple source files, this option tells the driver
1198
to pass all the source files to the compiler at once (for those
1199
languages for which the compiler can handle this).  This will allow
1200
intermodule analysis (IMA) to be performed by the compiler.  Currently the only
1201
language for which this is supported is C@.  If you pass source files for
1202
multiple languages to the driver, using this option, the driver will invoke
1203
the compiler(s) that support IMA once each, passing each compiler all the
1204
source files appropriate for it.  For those languages that do not support
1205
IMA this option will be ignored, and the compiler will be invoked once for
1206
each source file in that language.  If you use this option in conjunction
1207
with @option{-save-temps}, the compiler will generate multiple
1208
pre-processed files
1209
(one for each source file), but only one (combined) @file{.o} or
1210
@file{.s} file.
1211
 
1212
@item --help
1213
@opindex help
1214
Print (on the standard output) a description of the command line options
1215
understood by @command{gcc}.  If the @option{-v} option is also specified
1216
then @option{--help} will also be passed on to the various processes
1217
invoked by @command{gcc}, so that they can display the command line options
1218
they accept.  If the @option{-Wextra} option has also been specified
1219
(prior to the @option{--help} option), then command line options which
1220
have no documentation associated with them will also be displayed.
1221
 
1222
@item --target-help
1223
@opindex target-help
1224
Print (on the standard output) a description of target-specific command
1225
line options for each tool.  For some targets extra target-specific
1226
information may also be printed.
1227
 
1228
@item --help=@{@var{class}@r{|[}^@r{]}@var{qualifier}@}@r{[},@dots{}@r{]}
1229
Print (on the standard output) a description of the command line
1230
options understood by the compiler that fit into all specified classes
1231
and qualifiers.  These are the supported classes:
1232
 
1233
@table @asis
1234
@item @samp{optimizers}
1235
This will display all of the optimization options supported by the
1236
compiler.
1237
 
1238
@item @samp{warnings}
1239
This will display all of the options controlling warning messages
1240
produced by the compiler.
1241
 
1242
@item @samp{target}
1243
This will display target-specific options.  Unlike the
1244
@option{--target-help} option however, target-specific options of the
1245
linker and assembler will not be displayed.  This is because those
1246
tools do not currently support the extended @option{--help=} syntax.
1247
 
1248
@item @samp{params}
1249
This will display the values recognized by the @option{--param}
1250
option.
1251
 
1252
@item @var{language}
1253
This will display the options supported for @var{language}, where
1254
@var{language} is the name of one of the languages supported in this
1255
version of GCC.
1256
 
1257
@item @samp{common}
1258
This will display the options that are common to all languages.
1259
@end table
1260
 
1261
These are the supported qualifiers:
1262
 
1263
@table @asis
1264
@item @samp{undocumented}
1265
Display only those options which are undocumented.
1266
 
1267
@item @samp{joined}
1268
Display options which take an argument that appears after an equal
1269
sign in the same continuous piece of text, such as:
1270
@samp{--help=target}.
1271
 
1272
@item @samp{separate}
1273
Display options which take an argument that appears as a separate word
1274
following the original option, such as: @samp{-o output-file}.
1275
@end table
1276
 
1277
Thus for example to display all the undocumented target-specific
1278
switches supported by the compiler the following can be used:
1279
 
1280
@smallexample
1281
--help=target,undocumented
1282
@end smallexample
1283
 
1284
The sense of a qualifier can be inverted by prefixing it with the
1285
@samp{^} character, so for example to display all binary warning
1286
options (i.e., ones that are either on or off and that do not take an
1287
argument), which have a description the following can be used:
1288
 
1289
@smallexample
1290
--help=warnings,^joined,^undocumented
1291
@end smallexample
1292
 
1293
The argument to @option{--help=} should not consist solely of inverted
1294
qualifiers.
1295
 
1296
Combining several classes is possible, although this usually
1297
restricts the output by so much that there is nothing to display.  One
1298
case where it does work however is when one of the classes is
1299
@var{target}.  So for example to display all the target-specific
1300
optimization options the following can be used:
1301
 
1302
@smallexample
1303
--help=target,optimizers
1304
@end smallexample
1305
 
1306
The @option{--help=} option can be repeated on the command line.  Each
1307
successive use will display its requested class of options, skipping
1308
those that have already been displayed.
1309
 
1310
If the @option{-Q} option appears on the command line before the
1311
@option{--help=} option, then the descriptive text displayed by
1312
@option{--help=} is changed.  Instead of describing the displayed
1313
options, an indication is given as to whether the option is enabled,
1314
disabled or set to a specific value (assuming that the compiler
1315
knows this at the point where the @option{--help=} option is used).
1316
 
1317
Here is a truncated example from the ARM port of @command{gcc}:
1318
 
1319
@smallexample
1320
  % gcc -Q -mabi=2 --help=target -c
1321
  The following options are target specific:
1322
  -mabi=                                2
1323
  -mabort-on-noreturn                   [disabled]
1324
  -mapcs                                [disabled]
1325
@end smallexample
1326
 
1327
The output is sensitive to the effects of previous command line
1328
options, so for example it is possible to find out which optimizations
1329
are enabled at @option{-O2} by using:
1330
 
1331
@smallexample
1332
-Q -O2 --help=optimizers
1333
@end smallexample
1334
 
1335
Alternatively you can discover which binary optimizations are enabled
1336
by @option{-O3} by using:
1337
 
1338
@smallexample
1339
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
1340
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
1341
diff /tmp/O2-opts /tmp/O3-opts | grep enabled
1342
@end smallexample
1343
 
1344
@item -no-canonical-prefixes
1345
@opindex no-canonical-prefixes
1346
Do not expand any symbolic links, resolve references to @samp{/../}
1347
or @samp{/./}, or make the path absolute when generating a relative
1348
prefix.
1349
 
1350
@item --version
1351
@opindex version
1352
Display the version number and copyrights of the invoked GCC@.
1353
 
1354
@item -wrapper
1355
@opindex wrapper
1356
Invoke all subcommands under a wrapper program. It takes a single
1357
comma separated list as an argument, which will be used to invoke
1358
the wrapper:
1359
 
1360
@smallexample
1361
gcc -c t.c -wrapper gdb,--args
1362
@end smallexample
1363
 
1364
This will invoke all subprograms of gcc under "gdb --args",
1365
thus cc1 invocation will be "gdb --args cc1 ...".
1366
 
1367
@item -fplugin=@var{name}.so
1368
Load the plugin code in file @var{name}.so, assumed to be a
1369
shared object to be dlopen'd by the compiler.  The base name of
1370
the shared object file is used to identify the plugin for the
1371
purposes of argument parsing (See
1372
@option{-fplugin-arg-@var{name}-@var{key}=@var{value}} below).
1373
Each plugin should define the callback functions specified in the
1374
Plugins API.
1375
 
1376
@item -fplugin-arg-@var{name}-@var{key}=@var{value}
1377
Define an argument called @var{key} with a value of @var{value}
1378
for the plugin called @var{name}.
1379
 
1380
@include @value{srcdir}/../libiberty/at-file.texi
1381
@end table
1382
 
1383
@node Invoking G++
1384
@section Compiling C++ Programs
1385
 
1386
@cindex suffixes for C++ source
1387
@cindex C++ source file suffixes
1388
C++ source files conventionally use one of the suffixes @samp{.C},
1389
@samp{.cc}, @samp{.cpp}, @samp{.CPP}, @samp{.c++}, @samp{.cp}, or
1390
@samp{.cxx}; C++ header files often use @samp{.hh}, @samp{.hpp},
1391
@samp{.H}, or (for shared template code) @samp{.tcc}; and
1392
preprocessed C++ files use the suffix @samp{.ii}.  GCC recognizes
1393
files with these names and compiles them as C++ programs even if you
1394
call the compiler the same way as for compiling C programs (usually
1395
with the name @command{gcc}).
1396
 
1397
@findex g++
1398
@findex c++
1399
However, the use of @command{gcc} does not add the C++ library.
1400
@command{g++} is a program that calls GCC and treats @samp{.c},
1401
@samp{.h} and @samp{.i} files as C++ source files instead of C source
1402
files unless @option{-x} is used, and automatically specifies linking
1403
against the C++ library.  This program is also useful when
1404
precompiling a C header file with a @samp{.h} extension for use in C++
1405
compilations.  On many systems, @command{g++} is also installed with
1406
the name @command{c++}.
1407
 
1408
@cindex invoking @command{g++}
1409
When you compile C++ programs, you may specify many of the same
1410
command-line options that you use for compiling programs in any
1411
language; or command-line options meaningful for C and related
1412
languages; or options that are meaningful only for C++ programs.
1413
@xref{C Dialect Options,,Options Controlling C Dialect}, for
1414
explanations of options for languages related to C@.
1415
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}, for
1416
explanations of options that are meaningful only for C++ programs.
1417
 
1418
@node C Dialect Options
1419
@section Options Controlling C Dialect
1420
@cindex dialect options
1421
@cindex language dialect options
1422
@cindex options, dialect
1423
 
1424
The following options control the dialect of C (or languages derived
1425
from C, such as C++, Objective-C and Objective-C++) that the compiler
1426
accepts:
1427
 
1428
@table @gcctabopt
1429
@cindex ANSI support
1430
@cindex ISO support
1431
@item -ansi
1432
@opindex ansi
1433
In C mode, this is equivalent to @samp{-std=c90}. In C++ mode, it is
1434
equivalent to @samp{-std=c++98}.
1435
 
1436
This turns off certain features of GCC that are incompatible with ISO
1437
C90 (when compiling C code), or of standard C++ (when compiling C++ code),
1438
such as the @code{asm} and @code{typeof} keywords, and
1439
predefined macros such as @code{unix} and @code{vax} that identify the
1440
type of system you are using.  It also enables the undesirable and
1441
rarely used ISO trigraph feature.  For the C compiler,
1442
it disables recognition of C++ style @samp{//} comments as well as
1443
the @code{inline} keyword.
1444
 
1445
The alternate keywords @code{__asm__}, @code{__extension__},
1446
@code{__inline__} and @code{__typeof__} continue to work despite
1447
@option{-ansi}.  You would not want to use them in an ISO C program, of
1448
course, but it is useful to put them in header files that might be included
1449
in compilations done with @option{-ansi}.  Alternate predefined macros
1450
such as @code{__unix__} and @code{__vax__} are also available, with or
1451
without @option{-ansi}.
1452
 
1453
The @option{-ansi} option does not cause non-ISO programs to be
1454
rejected gratuitously.  For that, @option{-pedantic} is required in
1455
addition to @option{-ansi}.  @xref{Warning Options}.
1456
 
1457
The macro @code{__STRICT_ANSI__} is predefined when the @option{-ansi}
1458
option is used.  Some header files may notice this macro and refrain
1459
from declaring certain functions or defining certain macros that the
1460
ISO standard doesn't call for; this is to avoid interfering with any
1461
programs that might use these names for other things.
1462
 
1463
Functions that would normally be built in but do not have semantics
1464
defined by ISO C (such as @code{alloca} and @code{ffs}) are not built-in
1465
functions when @option{-ansi} is used.  @xref{Other Builtins,,Other
1466
built-in functions provided by GCC}, for details of the functions
1467
affected.
1468
 
1469
@item -std=
1470
@opindex std
1471
Determine the language standard. @xref{Standards,,Language Standards
1472
Supported by GCC}, for details of these standard versions.  This option
1473
is currently only supported when compiling C or C++.
1474
 
1475
The compiler can accept several base standards, such as @samp{c90} or
1476
@samp{c++98}, and GNU dialects of those standards, such as
1477
@samp{gnu90} or @samp{gnu++98}.  By specifying a base standard, the
1478
compiler will accept all programs following that standard and those
1479
using GNU extensions that do not contradict it.  For example,
1480
@samp{-std=c90} turns off certain features of GCC that are
1481
incompatible with ISO C90, such as the @code{asm} and @code{typeof}
1482
keywords, but not other GNU extensions that do not have a meaning in
1483
ISO C90, such as omitting the middle term of a @code{?:}
1484
expression. On the other hand, by specifying a GNU dialect of a
1485
standard, all features the compiler support are enabled, even when
1486
those features change the meaning of the base standard and some
1487
strict-conforming programs may be rejected.  The particular standard
1488
is used by @option{-pedantic} to identify which features are GNU
1489
extensions given that version of the standard. For example
1490
@samp{-std=gnu90 -pedantic} would warn about C++ style @samp{//}
1491
comments, while @samp{-std=gnu99 -pedantic} would not.
1492
 
1493
A value for this option must be provided; possible values are
1494
 
1495
@table @samp
1496
@item c90
1497
@itemx c89
1498
@itemx iso9899:1990
1499
Support all ISO C90 programs (certain GNU extensions that conflict
1500
with ISO C90 are disabled). Same as @option{-ansi} for C code.
1501
 
1502
@item iso9899:199409
1503
ISO C90 as modified in amendment 1.
1504
 
1505
@item c99
1506
@itemx c9x
1507
@itemx iso9899:1999
1508
@itemx iso9899:199x
1509
ISO C99.  Note that this standard is not yet fully supported; see
1510
@w{@uref{http://gcc.gnu.org/gcc-4.5/c99status.html}} for more information.  The
1511
names @samp{c9x} and @samp{iso9899:199x} are deprecated.
1512
 
1513
@item gnu90
1514
@itemx gnu89
1515
GNU dialect of ISO C90 (including some C99 features). This
1516
is the default for C code.
1517
 
1518
@item gnu99
1519
@itemx gnu9x
1520
GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC,
1521
this will become the default.  The name @samp{gnu9x} is deprecated.
1522
 
1523
@item c++98
1524
The 1998 ISO C++ standard plus amendments. Same as @option{-ansi} for
1525
C++ code.
1526
 
1527
@item gnu++98
1528
GNU dialect of @option{-std=c++98}.  This is the default for
1529
C++ code.
1530
 
1531
@item c++0x
1532
The working draft of the upcoming ISO C++0x standard. This option
1533
enables experimental features that are likely to be included in
1534
C++0x. The working draft is constantly changing, and any feature that is
1535
enabled by this flag may be removed from future versions of GCC if it is
1536
not part of the C++0x standard.
1537
 
1538
@item gnu++0x
1539
GNU dialect of @option{-std=c++0x}. This option enables
1540
experimental features that may be removed in future versions of GCC.
1541
@end table
1542
 
1543
@item -fgnu89-inline
1544
@opindex fgnu89-inline
1545
The option @option{-fgnu89-inline} tells GCC to use the traditional
1546
GNU semantics for @code{inline} functions when in C99 mode.
1547
@xref{Inline,,An Inline Function is As Fast As a Macro}.  This option
1548
is accepted and ignored by GCC versions 4.1.3 up to but not including
1549
4.3.  In GCC versions 4.3 and later it changes the behavior of GCC in
1550
C99 mode.  Using this option is roughly equivalent to adding the
1551
@code{gnu_inline} function attribute to all inline functions
1552
(@pxref{Function Attributes}).
1553
 
1554
The option @option{-fno-gnu89-inline} explicitly tells GCC to use the
1555
C99 semantics for @code{inline} when in C99 or gnu99 mode (i.e., it
1556
specifies the default behavior).  This option was first supported in
1557
GCC 4.3.  This option is not supported in @option{-std=c90} or
1558
@option{-std=gnu90} mode.
1559
 
1560
The preprocessor macros @code{__GNUC_GNU_INLINE__} and
1561
@code{__GNUC_STDC_INLINE__} may be used to check which semantics are
1562
in effect for @code{inline} functions.  @xref{Common Predefined
1563
Macros,,,cpp,The C Preprocessor}.
1564
 
1565
@item -aux-info @var{filename}
1566
@opindex aux-info
1567
Output to the given filename prototyped declarations for all functions
1568
declared and/or defined in a translation unit, including those in header
1569
files.  This option is silently ignored in any language other than C@.
1570
 
1571
Besides declarations, the file indicates, in comments, the origin of
1572
each declaration (source file and line), whether the declaration was
1573
implicit, prototyped or unprototyped (@samp{I}, @samp{N} for new or
1574
@samp{O} for old, respectively, in the first character after the line
1575
number and the colon), and whether it came from a declaration or a
1576
definition (@samp{C} or @samp{F}, respectively, in the following
1577
character).  In the case of function definitions, a K&R-style list of
1578
arguments followed by their declarations is also provided, inside
1579
comments, after the declaration.
1580
 
1581
@item -fno-asm
1582
@opindex fno-asm
1583
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a
1584
keyword, so that code can use these words as identifiers.  You can use
1585
the keywords @code{__asm__}, @code{__inline__} and @code{__typeof__}
1586
instead.  @option{-ansi} implies @option{-fno-asm}.
1587
 
1588
In C++, this switch only affects the @code{typeof} keyword, since
1589
@code{asm} and @code{inline} are standard keywords.  You may want to
1590
use the @option{-fno-gnu-keywords} flag instead, which has the same
1591
effect.  In C99 mode (@option{-std=c99} or @option{-std=gnu99}), this
1592
switch only affects the @code{asm} and @code{typeof} keywords, since
1593
@code{inline} is a standard keyword in ISO C99.
1594
 
1595
@item -fno-builtin
1596
@itemx -fno-builtin-@var{function}
1597
@opindex fno-builtin
1598
@cindex built-in functions
1599
Don't recognize built-in functions that do not begin with
1600
@samp{__builtin_} as prefix.  @xref{Other Builtins,,Other built-in
1601
functions provided by GCC}, for details of the functions affected,
1602
including those which are not built-in functions when @option{-ansi} or
1603
@option{-std} options for strict ISO C conformance are used because they
1604
do not have an ISO standard meaning.
1605
 
1606
GCC normally generates special code to handle certain built-in functions
1607
more efficiently; for instance, calls to @code{alloca} may become single
1608
instructions that adjust the stack directly, and calls to @code{memcpy}
1609
may become inline copy loops.  The resulting code is often both smaller
1610
and faster, but since the function calls no longer appear as such, you
1611
cannot set a breakpoint on those calls, nor can you change the behavior
1612
of the functions by linking with a different library.  In addition,
1613
when a function is recognized as a built-in function, GCC may use
1614
information about that function to warn about problems with calls to
1615
that function, or to generate more efficient code, even if the
1616
resulting code still contains calls to that function.  For example,
1617
warnings are given with @option{-Wformat} for bad calls to
1618
@code{printf}, when @code{printf} is built in, and @code{strlen} is
1619
known not to modify global memory.
1620
 
1621
With the @option{-fno-builtin-@var{function}} option
1622
only the built-in function @var{function} is
1623
disabled.  @var{function} must not begin with @samp{__builtin_}.  If a
1624
function is named that is not built-in in this version of GCC, this
1625
option is ignored.  There is no corresponding
1626
@option{-fbuiltin-@var{function}} option; if you wish to enable
1627
built-in functions selectively when using @option{-fno-builtin} or
1628
@option{-ffreestanding}, you may define macros such as:
1629
 
1630
@smallexample
1631
#define abs(n)          __builtin_abs ((n))
1632
#define strcpy(d, s)    __builtin_strcpy ((d), (s))
1633
@end smallexample
1634
 
1635
@item -fhosted
1636
@opindex fhosted
1637
@cindex hosted environment
1638
 
1639
Assert that compilation takes place in a hosted environment.  This implies
1640
@option{-fbuiltin}.  A hosted environment is one in which the
1641
entire standard library is available, and in which @code{main} has a return
1642
type of @code{int}.  Examples are nearly everything except a kernel.
1643
This is equivalent to @option{-fno-freestanding}.
1644
 
1645
@item -ffreestanding
1646
@opindex ffreestanding
1647
@cindex hosted environment
1648
 
1649
Assert that compilation takes place in a freestanding environment.  This
1650
implies @option{-fno-builtin}.  A freestanding environment
1651
is one in which the standard library may not exist, and program startup may
1652
not necessarily be at @code{main}.  The most obvious example is an OS kernel.
1653
This is equivalent to @option{-fno-hosted}.
1654
 
1655
@xref{Standards,,Language Standards Supported by GCC}, for details of
1656
freestanding and hosted environments.
1657
 
1658
@item -fopenmp
1659
@opindex fopenmp
1660
@cindex openmp parallel
1661
Enable handling of OpenMP directives @code{#pragma omp} in C/C++ and
1662
@code{!$omp} in Fortran.  When @option{-fopenmp} is specified, the
1663
compiler generates parallel code according to the OpenMP Application
1664
Program Interface v3.0 @w{@uref{http://www.openmp.org/}}.  This option
1665
implies @option{-pthread}, and thus is only supported on targets that
1666
have support for @option{-pthread}.
1667
 
1668
@item -fms-extensions
1669
@opindex fms-extensions
1670
Accept some non-standard constructs used in Microsoft header files.
1671
 
1672
Some cases of unnamed fields in structures and unions are only
1673
accepted with this option.  @xref{Unnamed Fields,,Unnamed struct/union
1674
fields within structs/unions}, for details.
1675
 
1676
@item -trigraphs
1677
@opindex trigraphs
1678
Support ISO C trigraphs.  The @option{-ansi} option (and @option{-std}
1679
options for strict ISO C conformance) implies @option{-trigraphs}.
1680
 
1681
@item -no-integrated-cpp
1682
@opindex no-integrated-cpp
1683
Performs a compilation in two passes: preprocessing and compiling.  This
1684
option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
1685
@option{-B} option.  The user supplied compilation step can then add in
1686
an additional preprocessing step after normal preprocessing but before
1687
compiling.  The default is to use the integrated cpp (internal cpp)
1688
 
1689
The semantics of this option will change if "cc1", "cc1plus", and
1690
"cc1obj" are merged.
1691
 
1692
@cindex traditional C language
1693
@cindex C language, traditional
1694
@item -traditional
1695
@itemx -traditional-cpp
1696
@opindex traditional-cpp
1697
@opindex traditional
1698
Formerly, these options caused GCC to attempt to emulate a pre-standard
1699
C compiler.  They are now only supported with the @option{-E} switch.
1700
The preprocessor continues to support a pre-standard mode.  See the GNU
1701
CPP manual for details.
1702
 
1703
@item -fcond-mismatch
1704
@opindex fcond-mismatch
1705
Allow conditional expressions with mismatched types in the second and
1706
third arguments.  The value of such an expression is void.  This option
1707
is not supported for C++.
1708
 
1709
@item -flax-vector-conversions
1710
@opindex flax-vector-conversions
1711
Allow implicit conversions between vectors with differing numbers of
1712
elements and/or incompatible element types.  This option should not be
1713
used for new code.
1714
 
1715
@item -funsigned-char
1716
@opindex funsigned-char
1717
Let the type @code{char} be unsigned, like @code{unsigned char}.
1718
 
1719
Each kind of machine has a default for what @code{char} should
1720
be.  It is either like @code{unsigned char} by default or like
1721
@code{signed char} by default.
1722
 
1723
Ideally, a portable program should always use @code{signed char} or
1724
@code{unsigned char} when it depends on the signedness of an object.
1725
But many programs have been written to use plain @code{char} and
1726
expect it to be signed, or expect it to be unsigned, depending on the
1727
machines they were written for.  This option, and its inverse, let you
1728
make such a program work with the opposite default.
1729
 
1730
The type @code{char} is always a distinct type from each of
1731
@code{signed char} or @code{unsigned char}, even though its behavior
1732
is always just like one of those two.
1733
 
1734
@item -fsigned-char
1735
@opindex fsigned-char
1736
Let the type @code{char} be signed, like @code{signed char}.
1737
 
1738
Note that this is equivalent to @option{-fno-unsigned-char}, which is
1739
the negative form of @option{-funsigned-char}.  Likewise, the option
1740
@option{-fno-signed-char} is equivalent to @option{-funsigned-char}.
1741
 
1742
@item -fsigned-bitfields
1743
@itemx -funsigned-bitfields
1744
@itemx -fno-signed-bitfields
1745
@itemx -fno-unsigned-bitfields
1746
@opindex fsigned-bitfields
1747
@opindex funsigned-bitfields
1748
@opindex fno-signed-bitfields
1749
@opindex fno-unsigned-bitfields
1750
These options control whether a bit-field is signed or unsigned, when the
1751
declaration does not use either @code{signed} or @code{unsigned}.  By
1752
default, such a bit-field is signed, because this is consistent: the
1753
basic integer types such as @code{int} are signed types.
1754
@end table
1755
 
1756
@node C++ Dialect Options
1757
@section Options Controlling C++ Dialect
1758
 
1759
@cindex compiler options, C++
1760
@cindex C++ options, command line
1761
@cindex options, C++
1762
This section describes the command-line options that are only meaningful
1763
for C++ programs; but you can also use most of the GNU compiler options
1764
regardless of what language your program is in.  For example, you
1765
might compile a file @code{firstClass.C} like this:
1766
 
1767
@smallexample
1768
g++ -g -frepo -O -c firstClass.C
1769
@end smallexample
1770
 
1771
@noindent
1772
In this example, only @option{-frepo} is an option meant
1773
only for C++ programs; you can use the other options with any
1774
language supported by GCC@.
1775
 
1776
Here is a list of options that are @emph{only} for compiling C++ programs:
1777
 
1778
@table @gcctabopt
1779
 
1780
@item -fabi-version=@var{n}
1781
@opindex fabi-version
1782
Use version @var{n} of the C++ ABI@.  Version 2 is the version of the
1783
C++ ABI that first appeared in G++ 3.4.  Version 1 is the version of
1784
the C++ ABI that first appeared in G++ 3.2.  Version 0 will always be
1785
the version that conforms most closely to the C++ ABI specification.
1786
Therefore, the ABI obtained using version 0 will change as ABI bugs
1787
are fixed.
1788
 
1789
The default is version 2.
1790
 
1791
Version 3 corrects an error in mangling a constant address as a
1792
template argument.
1793
 
1794
Version 4 implements a standard mangling for vector types.
1795
 
1796
See also @option{-Wabi}.
1797
 
1798
@item -fno-access-control
1799
@opindex fno-access-control
1800
Turn off all access checking.  This switch is mainly useful for working
1801
around bugs in the access control code.
1802
 
1803
@item -fcheck-new
1804
@opindex fcheck-new
1805
Check that the pointer returned by @code{operator new} is non-null
1806
before attempting to modify the storage allocated.  This check is
1807
normally unnecessary because the C++ standard specifies that
1808
@code{operator new} will only return @code{0} if it is declared
1809
@samp{throw()}, in which case the compiler will always check the
1810
return value even without this option.  In all other cases, when
1811
@code{operator new} has a non-empty exception specification, memory
1812
exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
1813
@samp{new (nothrow)}.
1814
 
1815
@item -fconserve-space
1816
@opindex fconserve-space
1817
Put uninitialized or runtime-initialized global variables into the
1818
common segment, as C does.  This saves space in the executable at the
1819
cost of not diagnosing duplicate definitions.  If you compile with this
1820
flag and your program mysteriously crashes after @code{main()} has
1821
completed, you may have an object that is being destroyed twice because
1822
two definitions were merged.
1823
 
1824
This option is no longer useful on most targets, now that support has
1825
been added for putting variables into BSS without making them common.
1826
 
1827
@item -fno-deduce-init-list
1828
@opindex fno-deduce-init-list
1829
Disable deduction of a template type parameter as
1830
std::initializer_list from a brace-enclosed initializer list, i.e.
1831
 
1832
@smallexample
1833
template <class T> auto forward(T t) -> decltype (realfn (t))
1834
@{
1835
  return realfn (t);
1836
@}
1837
 
1838
void f()
1839
@{
1840
  forward(@{1,2@}); // call forward<std::initializer_list<int>>
1841
@}
1842
@end smallexample
1843
 
1844
This option is present because this deduction is an extension to the
1845
current specification in the C++0x working draft, and there was
1846
some concern about potential overload resolution problems.
1847
 
1848
@item -ffriend-injection
1849
@opindex ffriend-injection
1850
Inject friend functions into the enclosing namespace, so that they are
1851
visible outside the scope of the class in which they are declared.
1852
Friend functions were documented to work this way in the old Annotated
1853
C++ Reference Manual, and versions of G++ before 4.1 always worked
1854
that way.  However, in ISO C++ a friend function which is not declared
1855
in an enclosing scope can only be found using argument dependent
1856
lookup.  This option causes friends to be injected as they were in
1857
earlier releases.
1858
 
1859
This option is for compatibility, and may be removed in a future
1860
release of G++.
1861
 
1862
@item -fno-elide-constructors
1863
@opindex fno-elide-constructors
1864
The C++ standard allows an implementation to omit creating a temporary
1865
which is only used to initialize another object of the same type.
1866
Specifying this option disables that optimization, and forces G++ to
1867
call the copy constructor in all cases.
1868
 
1869
@item -fno-enforce-eh-specs
1870
@opindex fno-enforce-eh-specs
1871
Don't generate code to check for violation of exception specifications
1872
at runtime.  This option violates the C++ standard, but may be useful
1873
for reducing code size in production builds, much like defining
1874
@samp{NDEBUG}.  This does not give user code permission to throw
1875
exceptions in violation of the exception specifications; the compiler
1876
will still optimize based on the specifications, so throwing an
1877
unexpected exception will result in undefined behavior.
1878
 
1879
@item -ffor-scope
1880
@itemx -fno-for-scope
1881
@opindex ffor-scope
1882
@opindex fno-for-scope
1883
If @option{-ffor-scope} is specified, the scope of variables declared in
1884
a @i{for-init-statement} is limited to the @samp{for} loop itself,
1885
as specified by the C++ standard.
1886
If @option{-fno-for-scope} is specified, the scope of variables declared in
1887
a @i{for-init-statement} extends to the end of the enclosing scope,
1888
as was the case in old versions of G++, and other (traditional)
1889
implementations of C++.
1890
 
1891
The default if neither flag is given to follow the standard,
1892
but to allow and give a warning for old-style code that would
1893
otherwise be invalid, or have different behavior.
1894
 
1895
@item -fno-gnu-keywords
1896
@opindex fno-gnu-keywords
1897
Do not recognize @code{typeof} as a keyword, so that code can use this
1898
word as an identifier.  You can use the keyword @code{__typeof__} instead.
1899
@option{-ansi} implies @option{-fno-gnu-keywords}.
1900
 
1901
@item -fno-implicit-templates
1902
@opindex fno-implicit-templates
1903
Never emit code for non-inline templates which are instantiated
1904
implicitly (i.e.@: by use); only emit code for explicit instantiations.
1905
@xref{Template Instantiation}, for more information.
1906
 
1907
@item -fno-implicit-inline-templates
1908
@opindex fno-implicit-inline-templates
1909
Don't emit code for implicit instantiations of inline templates, either.
1910
The default is to handle inlines differently so that compiles with and
1911
without optimization will need the same set of explicit instantiations.
1912
 
1913
@item -fno-implement-inlines
1914
@opindex fno-implement-inlines
1915
To save space, do not emit out-of-line copies of inline functions
1916
controlled by @samp{#pragma implementation}.  This will cause linker
1917
errors if these functions are not inlined everywhere they are called.
1918
 
1919
@item -fms-extensions
1920
@opindex fms-extensions
1921
Disable pedantic warnings about constructs used in MFC, such as implicit
1922
int and getting a pointer to member function via non-standard syntax.
1923
 
1924
@item -fno-nonansi-builtins
1925
@opindex fno-nonansi-builtins
1926
Disable built-in declarations of functions that are not mandated by
1927
ANSI/ISO C@.  These include @code{ffs}, @code{alloca}, @code{_exit},
1928
@code{index}, @code{bzero}, @code{conjf}, and other related functions.
1929
 
1930
@item -fno-operator-names
1931
@opindex fno-operator-names
1932
Do not treat the operator name keywords @code{and}, @code{bitand},
1933
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
1934
synonyms as keywords.
1935
 
1936
@item -fno-optional-diags
1937
@opindex fno-optional-diags
1938
Disable diagnostics that the standard says a compiler does not need to
1939
issue.  Currently, the only such diagnostic issued by G++ is the one for
1940
a name having multiple meanings within a class.
1941
 
1942
@item -fpermissive
1943
@opindex fpermissive
1944
Downgrade some diagnostics about nonconformant code from errors to
1945
warnings.  Thus, using @option{-fpermissive} will allow some
1946
nonconforming code to compile.
1947
 
1948
@item -fno-pretty-templates
1949
@opindex fno-pretty-templates
1950
When an error message refers to a specialization of a function
1951
template, the compiler will normally print the signature of the
1952
template followed by the template arguments and any typedefs or
1953
typenames in the signature (e.g. @code{void f(T) [with T = int]}
1954
rather than @code{void f(int)}) so that it's clear which template is
1955
involved.  When an error message refers to a specialization of a class
1956
template, the compiler will omit any template arguments which match
1957
the default template arguments for that template.  If either of these
1958
behaviors make it harder to understand the error message rather than
1959
easier, using @option{-fno-pretty-templates} will disable them.
1960
 
1961
@item -frepo
1962
@opindex frepo
1963
Enable automatic template instantiation at link time.  This option also
1964
implies @option{-fno-implicit-templates}.  @xref{Template
1965
Instantiation}, for more information.
1966
 
1967
@item -fno-rtti
1968
@opindex fno-rtti
1969
Disable generation of information about every class with virtual
1970
functions for use by the C++ runtime type identification features
1971
(@samp{dynamic_cast} and @samp{typeid}).  If you don't use those parts
1972
of the language, you can save some space by using this flag.  Note that
1973
exception handling uses the same information, but it will generate it as
1974
needed. The @samp{dynamic_cast} operator can still be used for casts that
1975
do not require runtime type information, i.e.@: casts to @code{void *} or to
1976
unambiguous base classes.
1977
 
1978
@item -fstats
1979
@opindex fstats
1980
Emit statistics about front-end processing at the end of the compilation.
1981
This information is generally only useful to the G++ development team.
1982
 
1983
@item -ftemplate-depth=@var{n}
1984
@opindex ftemplate-depth
1985
Set the maximum instantiation depth for template classes to @var{n}.
1986
A limit on the template instantiation depth is needed to detect
1987
endless recursions during template class instantiation.  ANSI/ISO C++
1988
conforming programs must not rely on a maximum depth greater than 17
1989
(changed to 1024 in C++0x).
1990
 
1991
@item -fno-threadsafe-statics
1992
@opindex fno-threadsafe-statics
1993
Do not emit the extra code to use the routines specified in the C++
1994
ABI for thread-safe initialization of local statics.  You can use this
1995
option to reduce code size slightly in code that doesn't need to be
1996
thread-safe.
1997
 
1998
@item -fuse-cxa-atexit
1999
@opindex fuse-cxa-atexit
2000
Register destructors for objects with static storage duration with the
2001
@code{__cxa_atexit} function rather than the @code{atexit} function.
2002
This option is required for fully standards-compliant handling of static
2003
destructors, but will only work if your C library supports
2004
@code{__cxa_atexit}.
2005
 
2006
@item -fno-use-cxa-get-exception-ptr
2007
@opindex fno-use-cxa-get-exception-ptr
2008
Don't use the @code{__cxa_get_exception_ptr} runtime routine.  This
2009
will cause @code{std::uncaught_exception} to be incorrect, but is necessary
2010
if the runtime routine is not available.
2011
 
2012
@item -fvisibility-inlines-hidden
2013
@opindex fvisibility-inlines-hidden
2014
This switch declares that the user does not attempt to compare
2015
pointers to inline methods where the addresses of the two functions
2016
were taken in different shared objects.
2017
 
2018
The effect of this is that GCC may, effectively, mark inline methods with
2019
@code{__attribute__ ((visibility ("hidden")))} so that they do not
2020
appear in the export table of a DSO and do not require a PLT indirection
2021
when used within the DSO@.  Enabling this option can have a dramatic effect
2022
on load and link times of a DSO as it massively reduces the size of the
2023
dynamic export table when the library makes heavy use of templates.
2024
 
2025
The behavior of this switch is not quite the same as marking the
2026
methods as hidden directly, because it does not affect static variables
2027
local to the function or cause the compiler to deduce that
2028
the function is defined in only one shared object.
2029
 
2030
You may mark a method as having a visibility explicitly to negate the
2031
effect of the switch for that method.  For example, if you do want to
2032
compare pointers to a particular inline method, you might mark it as
2033
having default visibility.  Marking the enclosing class with explicit
2034
visibility will have no effect.
2035
 
2036
Explicitly instantiated inline methods are unaffected by this option
2037
as their linkage might otherwise cross a shared library boundary.
2038
@xref{Template Instantiation}.
2039
 
2040
@item -fvisibility-ms-compat
2041
@opindex fvisibility-ms-compat
2042
This flag attempts to use visibility settings to make GCC's C++
2043
linkage model compatible with that of Microsoft Visual Studio.
2044
 
2045
The flag makes these changes to GCC's linkage model:
2046
 
2047
@enumerate
2048
@item
2049
It sets the default visibility to @code{hidden}, like
2050
@option{-fvisibility=hidden}.
2051
 
2052
@item
2053
Types, but not their members, are not hidden by default.
2054
 
2055
@item
2056
The One Definition Rule is relaxed for types without explicit
2057
visibility specifications which are defined in more than one different
2058
shared object: those declarations are permitted if they would have
2059
been permitted when this option was not used.
2060
@end enumerate
2061
 
2062
In new code it is better to use @option{-fvisibility=hidden} and
2063
export those classes which are intended to be externally visible.
2064
Unfortunately it is possible for code to rely, perhaps accidentally,
2065
on the Visual Studio behavior.
2066
 
2067
Among the consequences of these changes are that static data members
2068
of the same type with the same name but defined in different shared
2069
objects will be different, so changing one will not change the other;
2070
and that pointers to function members defined in different shared
2071
objects may not compare equal.  When this flag is given, it is a
2072
violation of the ODR to define types with the same name differently.
2073
 
2074
@item -fno-weak
2075
@opindex fno-weak
2076
Do not use weak symbol support, even if it is provided by the linker.
2077
By default, G++ will use weak symbols if they are available.  This
2078
option exists only for testing, and should not be used by end-users;
2079
it will result in inferior code and has no benefits.  This option may
2080
be removed in a future release of G++.
2081
 
2082
@item -nostdinc++
2083
@opindex nostdinc++
2084
Do not search for header files in the standard directories specific to
2085
C++, but do still search the other standard directories.  (This option
2086
is used when building the C++ library.)
2087
@end table
2088
 
2089
In addition, these optimization, warning, and code generation options
2090
have meanings only for C++ programs:
2091
 
2092
@table @gcctabopt
2093
@item -fno-default-inline
2094
@opindex fno-default-inline
2095
Do not assume @samp{inline} for functions defined inside a class scope.
2096
@xref{Optimize Options,,Options That Control Optimization}.  Note that these
2097
functions will have linkage like inline functions; they just won't be
2098
inlined by default.
2099
 
2100
@item -Wabi @r{(C, Objective-C, C++ and Objective-C++ only)}
2101
@opindex Wabi
2102
@opindex Wno-abi
2103
Warn when G++ generates code that is probably not compatible with the
2104
vendor-neutral C++ ABI@.  Although an effort has been made to warn about
2105
all such cases, there are probably some cases that are not warned about,
2106
even though G++ is generating incompatible code.  There may also be
2107
cases where warnings are emitted even though the code that is generated
2108
will be compatible.
2109
 
2110
You should rewrite your code to avoid these warnings if you are
2111
concerned about the fact that code generated by G++ may not be binary
2112
compatible with code generated by other compilers.
2113
 
2114
The known incompatibilities in @option{-fabi-version=2} (the default) include:
2115
 
2116
@itemize @bullet
2117
 
2118
@item
2119
A template with a non-type template parameter of reference type is
2120
mangled incorrectly:
2121
@smallexample
2122
extern int N;
2123
template <int &> struct S @{@};
2124
void n (S<N>) @{2@}
2125
@end smallexample
2126
 
2127
This is fixed in @option{-fabi-version=3}.
2128
 
2129
@item
2130
SIMD vector types declared using @code{__attribute ((vector_size))} are
2131
mangled in a non-standard way that does not allow for overloading of
2132
functions taking vectors of different sizes.
2133
 
2134
The mangling is changed in @option{-fabi-version=4}.
2135
@end itemize
2136
 
2137
The known incompatibilities in @option{-fabi-version=1} include:
2138
 
2139
@itemize @bullet
2140
 
2141
@item
2142
Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
2143
pack data into the same byte as a base class.  For example:
2144
 
2145
@smallexample
2146
struct A @{ virtual void f(); int f1 : 1; @};
2147
struct B : public A @{ int f2 : 1; @};
2148
@end smallexample
2149
 
2150
@noindent
2151
In this case, G++ will place @code{B::f2} into the same byte
2152
as@code{A::f1}; other compilers will not.  You can avoid this problem
2153
by explicitly padding @code{A} so that its size is a multiple of the
2154
byte size on your platform; that will cause G++ and other compilers to
2155
layout @code{B} identically.
2156
 
2157
@item
2158
Incorrect handling of tail-padding for virtual bases.  G++ does not use
2159
tail padding when laying out virtual bases.  For example:
2160
 
2161
@smallexample
2162
struct A @{ virtual void f(); char c1; @};
2163
struct B @{ B(); char c2; @};
2164
struct C : public A, public virtual B @{@};
2165
@end smallexample
2166
 
2167
@noindent
2168
In this case, G++ will not place @code{B} into the tail-padding for
2169
@code{A}; other compilers will.  You can avoid this problem by
2170
explicitly padding @code{A} so that its size is a multiple of its
2171
alignment (ignoring virtual base classes); that will cause G++ and other
2172
compilers to layout @code{C} identically.
2173
 
2174
@item
2175
Incorrect handling of bit-fields with declared widths greater than that
2176
of their underlying types, when the bit-fields appear in a union.  For
2177
example:
2178
 
2179
@smallexample
2180
union U @{ int i : 4096; @};
2181
@end smallexample
2182
 
2183
@noindent
2184
Assuming that an @code{int} does not have 4096 bits, G++ will make the
2185
union too small by the number of bits in an @code{int}.
2186
 
2187
@item
2188
Empty classes can be placed at incorrect offsets.  For example:
2189
 
2190
@smallexample
2191
struct A @{@};
2192
 
2193
struct B @{
2194
  A a;
2195
  virtual void f ();
2196
@};
2197
 
2198
struct C : public B, public A @{@};
2199
@end smallexample
2200
 
2201
@noindent
2202
G++ will place the @code{A} base class of @code{C} at a nonzero offset;
2203
it should be placed at offset zero.  G++ mistakenly believes that the
2204
@code{A} data member of @code{B} is already at offset zero.
2205
 
2206
@item
2207
Names of template functions whose types involve @code{typename} or
2208
template template parameters can be mangled incorrectly.
2209
 
2210
@smallexample
2211
template <typename Q>
2212
void f(typename Q::X) @{@}
2213
 
2214
template <template <typename> class Q>
2215
void f(typename Q<int>::X) @{@}
2216
@end smallexample
2217
 
2218
@noindent
2219
Instantiations of these templates may be mangled incorrectly.
2220
 
2221
@end itemize
2222
 
2223
It also warns psABI related changes.  The known psABI changes at this
2224
point include:
2225
 
2226
@itemize @bullet
2227
 
2228
@item
2229
For SYSV/x86-64, when passing union with long double, it is changed to
2230
pass in memory as specified in psABI.  For example:
2231
 
2232
@smallexample
2233
union U @{
2234
  long double ld;
2235
  int i;
2236
@};
2237
@end smallexample
2238
 
2239
@noindent
2240
@code{union U} will always be passed in memory.
2241
 
2242
@end itemize
2243
 
2244
@item -Wctor-dtor-privacy @r{(C++ and Objective-C++ only)}
2245
@opindex Wctor-dtor-privacy
2246
@opindex Wno-ctor-dtor-privacy
2247
Warn when a class seems unusable because all the constructors or
2248
destructors in that class are private, and it has neither friends nor
2249
public static member functions.
2250
 
2251
@item -Wnon-virtual-dtor @r{(C++ and Objective-C++ only)}
2252
@opindex Wnon-virtual-dtor
2253
@opindex Wno-non-virtual-dtor
2254
Warn when a class has virtual functions and accessible non-virtual
2255
destructor, in which case it would be possible but unsafe to delete
2256
an instance of a derived class through a pointer to the base class.
2257
This warning is also enabled if -Weffc++ is specified.
2258
 
2259
@item -Wreorder @r{(C++ and Objective-C++ only)}
2260
@opindex Wreorder
2261
@opindex Wno-reorder
2262
@cindex reordering, warning
2263
@cindex warning for reordering of member initializers
2264
Warn when the order of member initializers given in the code does not
2265
match the order in which they must be executed.  For instance:
2266
 
2267
@smallexample
2268
struct A @{
2269
  int i;
2270
  int j;
2271
  A(): j (0), i (1) @{ @}
2272
@};
2273
@end smallexample
2274
 
2275
The compiler will rearrange the member initializers for @samp{i}
2276
and @samp{j} to match the declaration order of the members, emitting
2277
a warning to that effect.  This warning is enabled by @option{-Wall}.
2278
@end table
2279
 
2280
The following @option{-W@dots{}} options are not affected by @option{-Wall}.
2281
 
2282
@table @gcctabopt
2283
@item -Weffc++ @r{(C++ and Objective-C++ only)}
2284
@opindex Weffc++
2285
@opindex Wno-effc++
2286
Warn about violations of the following style guidelines from Scott Meyers'
2287
@cite{Effective C++} book:
2288
 
2289
@itemize @bullet
2290
@item
2291
Item 11:  Define a copy constructor and an assignment operator for classes
2292
with dynamically allocated memory.
2293
 
2294
@item
2295
Item 12:  Prefer initialization to assignment in constructors.
2296
 
2297
@item
2298
Item 14:  Make destructors virtual in base classes.
2299
 
2300
@item
2301
Item 15:  Have @code{operator=} return a reference to @code{*this}.
2302
 
2303
@item
2304
Item 23:  Don't try to return a reference when you must return an object.
2305
 
2306
@end itemize
2307
 
2308
Also warn about violations of the following style guidelines from
2309
Scott Meyers' @cite{More Effective C++} book:
2310
 
2311
@itemize @bullet
2312
@item
2313
Item 6:  Distinguish between prefix and postfix forms of increment and
2314
decrement operators.
2315
 
2316
@item
2317
Item 7:  Never overload @code{&&}, @code{||}, or @code{,}.
2318
 
2319
@end itemize
2320
 
2321
When selecting this option, be aware that the standard library
2322
headers do not obey all of these guidelines; use @samp{grep -v}
2323
to filter out those warnings.
2324
 
2325
@item -Wstrict-null-sentinel @r{(C++ and Objective-C++ only)}
2326
@opindex Wstrict-null-sentinel
2327
@opindex Wno-strict-null-sentinel
2328
Warn also about the use of an uncasted @code{NULL} as sentinel.  When
2329
compiling only with GCC this is a valid sentinel, as @code{NULL} is defined
2330
to @code{__null}.  Although it is a null pointer constant not a null pointer,
2331
it is guaranteed to be of the same size as a pointer.  But this use is
2332
not portable across different compilers.
2333
 
2334
@item -Wno-non-template-friend @r{(C++ and Objective-C++ only)}
2335
@opindex Wno-non-template-friend
2336
@opindex Wnon-template-friend
2337
Disable warnings when non-templatized friend functions are declared
2338
within a template.  Since the advent of explicit template specification
2339
support in G++, if the name of the friend is an unqualified-id (i.e.,
2340
@samp{friend foo(int)}), the C++ language specification demands that the
2341
friend declare or define an ordinary, nontemplate function.  (Section
2342
14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2343
could be interpreted as a particular specialization of a templatized
2344
function.  Because this non-conforming behavior is no longer the default
2345
behavior for G++, @option{-Wnon-template-friend} allows the compiler to
2346
check existing code for potential trouble spots and is on by default.
2347
This new compiler behavior can be turned off with
2348
@option{-Wno-non-template-friend} which keeps the conformant compiler code
2349
but disables the helpful warning.
2350
 
2351
@item -Wold-style-cast @r{(C++ and Objective-C++ only)}
2352
@opindex Wold-style-cast
2353
@opindex Wno-old-style-cast
2354
Warn if an old-style (C-style) cast to a non-void type is used within
2355
a C++ program.  The new-style casts (@samp{dynamic_cast},
2356
@samp{static_cast}, @samp{reinterpret_cast}, and @samp{const_cast}) are
2357
less vulnerable to unintended effects and much easier to search for.
2358
 
2359
@item -Woverloaded-virtual @r{(C++ and Objective-C++ only)}
2360
@opindex Woverloaded-virtual
2361
@opindex Wno-overloaded-virtual
2362
@cindex overloaded virtual fn, warning
2363
@cindex warning for overloaded virtual fn
2364
Warn when a function declaration hides virtual functions from a
2365
base class.  For example, in:
2366
 
2367
@smallexample
2368
struct A @{
2369
  virtual void f();
2370
@};
2371
 
2372
struct B: public A @{
2373
  void f(int);
2374
@};
2375
@end smallexample
2376
 
2377
the @code{A} class version of @code{f} is hidden in @code{B}, and code
2378
like:
2379
 
2380
@smallexample
2381
B* b;
2382
b->f();
2383
@end smallexample
2384
 
2385
will fail to compile.
2386
 
2387
@item -Wno-pmf-conversions @r{(C++ and Objective-C++ only)}
2388
@opindex Wno-pmf-conversions
2389
@opindex Wpmf-conversions
2390
Disable the diagnostic for converting a bound pointer to member function
2391
to a plain pointer.
2392
 
2393
@item -Wsign-promo @r{(C++ and Objective-C++ only)}
2394
@opindex Wsign-promo
2395
@opindex Wno-sign-promo
2396
Warn when overload resolution chooses a promotion from unsigned or
2397
enumerated type to a signed type, over a conversion to an unsigned type of
2398
the same size.  Previous versions of G++ would try to preserve
2399
unsignedness, but the standard mandates the current behavior.
2400
 
2401
@smallexample
2402
struct A @{
2403
  operator int ();
2404
  A& operator = (int);
2405
@};
2406
 
2407
main ()
2408
@{
2409
  A a,b;
2410
  a = b;
2411
@}
2412
@end smallexample
2413
 
2414
In this example, G++ will synthesize a default @samp{A& operator =
2415
(const A&);}, while cfront will use the user-defined @samp{operator =}.
2416
@end table
2417
 
2418
@node Objective-C and Objective-C++ Dialect Options
2419
@section Options Controlling Objective-C and Objective-C++ Dialects
2420
 
2421
@cindex compiler options, Objective-C and Objective-C++
2422
@cindex Objective-C and Objective-C++ options, command line
2423
@cindex options, Objective-C and Objective-C++
2424
(NOTE: This manual does not describe the Objective-C and Objective-C++
2425
languages themselves.  See @xref{Standards,,Language Standards
2426
Supported by GCC}, for references.)
2427
 
2428
This section describes the command-line options that are only meaningful
2429
for Objective-C and Objective-C++ programs, but you can also use most of
2430
the language-independent GNU compiler options.
2431
For example, you might compile a file @code{some_class.m} like this:
2432
 
2433
@smallexample
2434
gcc -g -fgnu-runtime -O -c some_class.m
2435
@end smallexample
2436
 
2437
@noindent
2438
In this example, @option{-fgnu-runtime} is an option meant only for
2439
Objective-C and Objective-C++ programs; you can use the other options with
2440
any language supported by GCC@.
2441
 
2442
Note that since Objective-C is an extension of the C language, Objective-C
2443
compilations may also use options specific to the C front-end (e.g.,
2444
@option{-Wtraditional}).  Similarly, Objective-C++ compilations may use
2445
C++-specific options (e.g., @option{-Wabi}).
2446
 
2447
Here is a list of options that are @emph{only} for compiling Objective-C
2448
and Objective-C++ programs:
2449
 
2450
@table @gcctabopt
2451
@item -fconstant-string-class=@var{class-name}
2452
@opindex fconstant-string-class
2453
Use @var{class-name} as the name of the class to instantiate for each
2454
literal string specified with the syntax @code{@@"@dots{}"}.  The default
2455
class name is @code{NXConstantString} if the GNU runtime is being used, and
2456
@code{NSConstantString} if the NeXT runtime is being used (see below).  The
2457
@option{-fconstant-cfstrings} option, if also present, will override the
2458
@option{-fconstant-string-class} setting and cause @code{@@"@dots{}"} literals
2459
to be laid out as constant CoreFoundation strings.
2460
 
2461
@item -fgnu-runtime
2462
@opindex fgnu-runtime
2463
Generate object code compatible with the standard GNU Objective-C
2464
runtime.  This is the default for most types of systems.
2465
 
2466
@item -fnext-runtime
2467
@opindex fnext-runtime
2468
Generate output compatible with the NeXT runtime.  This is the default
2469
for NeXT-based systems, including Darwin and Mac OS X@.  The macro
2470
@code{__NEXT_RUNTIME__} is predefined if (and only if) this option is
2471
used.
2472
 
2473
@item -fno-nil-receivers
2474
@opindex fno-nil-receivers
2475
Assume that all Objective-C message dispatches (e.g.,
2476
@code{[receiver message:arg]}) in this translation unit ensure that the receiver
2477
is not @code{nil}.  This allows for more efficient entry points in the runtime
2478
to be used.  Currently, this option is only available in conjunction with
2479
the NeXT runtime on Mac OS X 10.3 and later.
2480
 
2481
@item -fobjc-call-cxx-cdtors
2482
@opindex fobjc-call-cxx-cdtors
2483
For each Objective-C class, check if any of its instance variables is a
2484
C++ object with a non-trivial default constructor.  If so, synthesize a
2485
special @code{- (id) .cxx_construct} instance method that will run
2486
non-trivial default constructors on any such instance variables, in order,
2487
and then return @code{self}.  Similarly, check if any instance variable
2488
is a C++ object with a non-trivial destructor, and if so, synthesize a
2489
special @code{- (void) .cxx_destruct} method that will run
2490
all such default destructors, in reverse order.
2491
 
2492
The @code{- (id) .cxx_construct} and/or @code{- (void) .cxx_destruct} methods
2493
thusly generated will only operate on instance variables declared in the
2494
current Objective-C class, and not those inherited from superclasses.  It
2495
is the responsibility of the Objective-C runtime to invoke all such methods
2496
in an object's inheritance hierarchy.  The @code{- (id) .cxx_construct} methods
2497
will be invoked by the runtime immediately after a new object
2498
instance is allocated; the @code{- (void) .cxx_destruct} methods will
2499
be invoked immediately before the runtime deallocates an object instance.
2500
 
2501
As of this writing, only the NeXT runtime on Mac OS X 10.4 and later has
2502
support for invoking the @code{- (id) .cxx_construct} and
2503
@code{- (void) .cxx_destruct} methods.
2504
 
2505
@item -fobjc-direct-dispatch
2506
@opindex fobjc-direct-dispatch
2507
Allow fast jumps to the message dispatcher.  On Darwin this is
2508
accomplished via the comm page.
2509
 
2510
@item -fobjc-exceptions
2511
@opindex fobjc-exceptions
2512
Enable syntactic support for structured exception handling in Objective-C,
2513
similar to what is offered by C++ and Java.  This option is
2514
unavailable in conjunction with the NeXT runtime on Mac OS X 10.2 and
2515
earlier.
2516
 
2517
@smallexample
2518
  @@try @{
2519
    @dots{}
2520
       @@throw expr;
2521
    @dots{}
2522
  @}
2523
  @@catch (AnObjCClass *exc) @{
2524
    @dots{}
2525
      @@throw expr;
2526
    @dots{}
2527
      @@throw;
2528
    @dots{}
2529
  @}
2530
  @@catch (AnotherClass *exc) @{
2531
    @dots{}
2532
  @}
2533
  @@catch (id allOthers) @{
2534
    @dots{}
2535
  @}
2536
  @@finally @{
2537
    @dots{}
2538
      @@throw expr;
2539
    @dots{}
2540
  @}
2541
@end smallexample
2542
 
2543
The @code{@@throw} statement may appear anywhere in an Objective-C or
2544
Objective-C++ program; when used inside of a @code{@@catch} block, the
2545
@code{@@throw} may appear without an argument (as shown above), in which case
2546
the object caught by the @code{@@catch} will be rethrown.
2547
 
2548
Note that only (pointers to) Objective-C objects may be thrown and
2549
caught using this scheme.  When an object is thrown, it will be caught
2550
by the nearest @code{@@catch} clause capable of handling objects of that type,
2551
analogously to how @code{catch} blocks work in C++ and Java.  A
2552
@code{@@catch(id @dots{})} clause (as shown above) may also be provided to catch
2553
any and all Objective-C exceptions not caught by previous @code{@@catch}
2554
clauses (if any).
2555
 
2556
The @code{@@finally} clause, if present, will be executed upon exit from the
2557
immediately preceding @code{@@try @dots{} @@catch} section.  This will happen
2558
regardless of whether any exceptions are thrown, caught or rethrown
2559
inside the @code{@@try @dots{} @@catch} section, analogously to the behavior
2560
of the @code{finally} clause in Java.
2561
 
2562
There are several caveats to using the new exception mechanism:
2563
 
2564
@itemize @bullet
2565
@item
2566
Although currently designed to be binary compatible with @code{NS_HANDLER}-style
2567
idioms provided by the @code{NSException} class, the new
2568
exceptions can only be used on Mac OS X 10.3 (Panther) and later
2569
systems, due to additional functionality needed in the (NeXT) Objective-C
2570
runtime.
2571
 
2572
@item
2573
As mentioned above, the new exceptions do not support handling
2574
types other than Objective-C objects.   Furthermore, when used from
2575
Objective-C++, the Objective-C exception model does not interoperate with C++
2576
exceptions at this time.  This means you cannot @code{@@throw} an exception
2577
from Objective-C and @code{catch} it in C++, or vice versa
2578
(i.e., @code{throw @dots{} @@catch}).
2579
@end itemize
2580
 
2581
The @option{-fobjc-exceptions} switch also enables the use of synchronization
2582
blocks for thread-safe execution:
2583
 
2584
@smallexample
2585
  @@synchronized (ObjCClass *guard) @{
2586
    @dots{}
2587
  @}
2588
@end smallexample
2589
 
2590
Upon entering the @code{@@synchronized} block, a thread of execution shall
2591
first check whether a lock has been placed on the corresponding @code{guard}
2592
object by another thread.  If it has, the current thread shall wait until
2593
the other thread relinquishes its lock.  Once @code{guard} becomes available,
2594
the current thread will place its own lock on it, execute the code contained in
2595
the @code{@@synchronized} block, and finally relinquish the lock (thereby
2596
making @code{guard} available to other threads).
2597
 
2598
Unlike Java, Objective-C does not allow for entire methods to be marked
2599
@code{@@synchronized}.  Note that throwing exceptions out of
2600
@code{@@synchronized} blocks is allowed, and will cause the guarding object
2601
to be unlocked properly.
2602
 
2603
@item -fobjc-gc
2604
@opindex fobjc-gc
2605
Enable garbage collection (GC) in Objective-C and Objective-C++ programs.
2606
 
2607
@item -freplace-objc-classes
2608
@opindex freplace-objc-classes
2609
Emit a special marker instructing @command{ld(1)} not to statically link in
2610
the resulting object file, and allow @command{dyld(1)} to load it in at
2611
run time instead.  This is used in conjunction with the Fix-and-Continue
2612
debugging mode, where the object file in question may be recompiled and
2613
dynamically reloaded in the course of program execution, without the need
2614
to restart the program itself.  Currently, Fix-and-Continue functionality
2615
is only available in conjunction with the NeXT runtime on Mac OS X 10.3
2616
and later.
2617
 
2618
@item -fzero-link
2619
@opindex fzero-link
2620
When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2621
to @code{objc_getClass("@dots{}")} (when the name of the class is known at
2622
compile time) with static class references that get initialized at load time,
2623
which improves run-time performance.  Specifying the @option{-fzero-link} flag
2624
suppresses this behavior and causes calls to @code{objc_getClass("@dots{}")}
2625
to be retained.  This is useful in Zero-Link debugging mode, since it allows
2626
for individual class implementations to be modified during program execution.
2627
 
2628
@item -gen-decls
2629
@opindex gen-decls
2630
Dump interface declarations for all classes seen in the source file to a
2631
file named @file{@var{sourcename}.decl}.
2632
 
2633
@item -Wassign-intercept @r{(Objective-C and Objective-C++ only)}
2634
@opindex Wassign-intercept
2635
@opindex Wno-assign-intercept
2636
Warn whenever an Objective-C assignment is being intercepted by the
2637
garbage collector.
2638
 
2639
@item -Wno-protocol @r{(Objective-C and Objective-C++ only)}
2640
@opindex Wno-protocol
2641
@opindex Wprotocol
2642
If a class is declared to implement a protocol, a warning is issued for
2643
every method in the protocol that is not implemented by the class.  The
2644
default behavior is to issue a warning for every method not explicitly
2645
implemented in the class, even if a method implementation is inherited
2646
from the superclass.  If you use the @option{-Wno-protocol} option, then
2647
methods inherited from the superclass are considered to be implemented,
2648
and no warning is issued for them.
2649
 
2650
@item -Wselector @r{(Objective-C and Objective-C++ only)}
2651
@opindex Wselector
2652
@opindex Wno-selector
2653
Warn if multiple methods of different types for the same selector are
2654
found during compilation.  The check is performed on the list of methods
2655
in the final stage of compilation.  Additionally, a check is performed
2656
for each selector appearing in a @code{@@selector(@dots{})}
2657
expression, and a corresponding method for that selector has been found
2658
during compilation.  Because these checks scan the method table only at
2659
the end of compilation, these warnings are not produced if the final
2660
stage of compilation is not reached, for example because an error is
2661
found during compilation, or because the @option{-fsyntax-only} option is
2662
being used.
2663
 
2664
@item -Wstrict-selector-match @r{(Objective-C and Objective-C++ only)}
2665
@opindex Wstrict-selector-match
2666
@opindex Wno-strict-selector-match
2667
Warn if multiple methods with differing argument and/or return types are
2668
found for a given selector when attempting to send a message using this
2669
selector to a receiver of type @code{id} or @code{Class}.  When this flag
2670
is off (which is the default behavior), the compiler will omit such warnings
2671
if any differences found are confined to types which share the same size
2672
and alignment.
2673
 
2674
@item -Wundeclared-selector @r{(Objective-C and Objective-C++ only)}
2675
@opindex Wundeclared-selector
2676
@opindex Wno-undeclared-selector
2677
Warn if a @code{@@selector(@dots{})} expression referring to an
2678
undeclared selector is found.  A selector is considered undeclared if no
2679
method with that name has been declared before the
2680
@code{@@selector(@dots{})} expression, either explicitly in an
2681
@code{@@interface} or @code{@@protocol} declaration, or implicitly in
2682
an @code{@@implementation} section.  This option always performs its
2683
checks as soon as a @code{@@selector(@dots{})} expression is found,
2684
while @option{-Wselector} only performs its checks in the final stage of
2685
compilation.  This also enforces the coding style convention
2686
that methods and selectors must be declared before being used.
2687
 
2688
@item -print-objc-runtime-info
2689
@opindex print-objc-runtime-info
2690
Generate C header describing the largest structure that is passed by
2691
value, if any.
2692
 
2693
@end table
2694
 
2695
@node Language Independent Options
2696
@section Options to Control Diagnostic Messages Formatting
2697
@cindex options to control diagnostics formatting
2698
@cindex diagnostic messages
2699
@cindex message formatting
2700
 
2701
Traditionally, diagnostic messages have been formatted irrespective of
2702
the output device's aspect (e.g.@: its width, @dots{}).  The options described
2703
below can be used to control the diagnostic messages formatting
2704
algorithm, e.g.@: how many characters per line, how often source location
2705
information should be reported.  Right now, only the C++ front end can
2706
honor these options.  However it is expected, in the near future, that
2707
the remaining front ends would be able to digest them correctly.
2708
 
2709
@table @gcctabopt
2710
@item -fmessage-length=@var{n}
2711
@opindex fmessage-length
2712
Try to format error messages so that they fit on lines of about @var{n}
2713
characters.  The default is 72 characters for @command{g++} and 0 for the rest of
2714
the front ends supported by GCC@.  If @var{n} is zero, then no
2715
line-wrapping will be done; each error message will appear on a single
2716
line.
2717
 
2718
@opindex fdiagnostics-show-location
2719
@item -fdiagnostics-show-location=once
2720
Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2721
reporter to emit @emph{once} source location information; that is, in
2722
case the message is too long to fit on a single physical line and has to
2723
be wrapped, the source location won't be emitted (as prefix) again,
2724
over and over, in subsequent continuation lines.  This is the default
2725
behavior.
2726
 
2727
@item -fdiagnostics-show-location=every-line
2728
Only meaningful in line-wrapping mode.  Instructs the diagnostic
2729
messages reporter to emit the same source location information (as
2730
prefix) for physical lines that result from the process of breaking
2731
a message which is too long to fit on a single line.
2732
 
2733
@item -fdiagnostics-show-option
2734
@opindex fdiagnostics-show-option
2735
This option instructs the diagnostic machinery to add text to each
2736
diagnostic emitted, which indicates which command line option directly
2737
controls that diagnostic, when such an option is known to the
2738
diagnostic machinery.
2739
 
2740
@item -Wcoverage-mismatch
2741
@opindex Wcoverage-mismatch
2742
Warn if feedback profiles do not match when using the
2743
@option{-fprofile-use} option.
2744
If a source file was changed between @option{-fprofile-gen} and
2745
@option{-fprofile-use}, the files with the profile feedback can fail
2746
to match the source file and GCC can not use the profile feedback
2747
information.  By default, GCC emits an error message in this case.
2748
The option @option{-Wcoverage-mismatch} emits a warning instead of an
2749
error.  GCC does not use appropriate feedback profiles, so using this
2750
option can result in poorly optimized code.  This option is useful
2751
only in the case of very minor changes such as bug fixes to an
2752
existing code-base.
2753
 
2754
@end table
2755
 
2756
@node Warning Options
2757
@section Options to Request or Suppress Warnings
2758
@cindex options to control warnings
2759
@cindex warning messages
2760
@cindex messages, warning
2761
@cindex suppressing warnings
2762
 
2763
Warnings are diagnostic messages that report constructions which
2764
are not inherently erroneous but which are risky or suggest there
2765
may have been an error.
2766
 
2767
The following language-independent options do not enable specific
2768
warnings but control the kinds of diagnostics produced by GCC.
2769
 
2770
@table @gcctabopt
2771
@cindex syntax checking
2772
@item -fsyntax-only
2773
@opindex fsyntax-only
2774
Check the code for syntax errors, but don't do anything beyond that.
2775
 
2776
@item -w
2777
@opindex w
2778
Inhibit all warning messages.
2779
 
2780
@item -Werror
2781
@opindex Werror
2782
@opindex Wno-error
2783
Make all warnings into errors.
2784
 
2785
@item -Werror=
2786
@opindex Werror=
2787
@opindex Wno-error=
2788
Make the specified warning into an error.  The specifier for a warning
2789
is appended, for example @option{-Werror=switch} turns the warnings
2790
controlled by @option{-Wswitch} into errors.  This switch takes a
2791
negative form, to be used to negate @option{-Werror} for specific
2792
warnings, for example @option{-Wno-error=switch} makes
2793
@option{-Wswitch} warnings not be errors, even when @option{-Werror}
2794
is in effect.  You can use the @option{-fdiagnostics-show-option}
2795
option to have each controllable warning amended with the option which
2796
controls it, to determine what to use with this option.
2797
 
2798
Note that specifying @option{-Werror=}@var{foo} automatically implies
2799
@option{-W}@var{foo}.  However, @option{-Wno-error=}@var{foo} does not
2800
imply anything.
2801
 
2802
@item -Wfatal-errors
2803
@opindex Wfatal-errors
2804
@opindex Wno-fatal-errors
2805
This option causes the compiler to abort compilation on the first error
2806
occurred rather than trying to keep going and printing further error
2807
messages.
2808
 
2809
@end table
2810
 
2811
You can request many specific warnings with options beginning
2812
@samp{-W}, for example @option{-Wimplicit} to request warnings on
2813
implicit declarations.  Each of these specific warning options also
2814
has a negative form beginning @samp{-Wno-} to turn off warnings; for
2815
example, @option{-Wno-implicit}.  This manual lists only one of the
2816
two forms, whichever is not the default.  For further,
2817
language-specific options also refer to @ref{C++ Dialect Options} and
2818
@ref{Objective-C and Objective-C++ Dialect Options}.
2819
 
2820
@table @gcctabopt
2821
@item -pedantic
2822
@opindex pedantic
2823
Issue all the warnings demanded by strict ISO C and ISO C++;
2824
reject all programs that use forbidden extensions, and some other
2825
programs that do not follow ISO C and ISO C++.  For ISO C, follows the
2826
version of the ISO C standard specified by any @option{-std} option used.
2827
 
2828
Valid ISO C and ISO C++ programs should compile properly with or without
2829
this option (though a rare few will require @option{-ansi} or a
2830
@option{-std} option specifying the required version of ISO C)@.  However,
2831
without this option, certain GNU extensions and traditional C and C++
2832
features are supported as well.  With this option, they are rejected.
2833
 
2834
@option{-pedantic} does not cause warning messages for use of the
2835
alternate keywords whose names begin and end with @samp{__}.  Pedantic
2836
warnings are also disabled in the expression that follows
2837
@code{__extension__}.  However, only system header files should use
2838
these escape routes; application programs should avoid them.
2839
@xref{Alternate Keywords}.
2840
 
2841
Some users try to use @option{-pedantic} to check programs for strict ISO
2842
C conformance.  They soon find that it does not do quite what they want:
2843
it finds some non-ISO practices, but not all---only those for which
2844
ISO C @emph{requires} a diagnostic, and some others for which
2845
diagnostics have been added.
2846
 
2847
A feature to report any failure to conform to ISO C might be useful in
2848
some instances, but would require considerable additional work and would
2849
be quite different from @option{-pedantic}.  We don't have plans to
2850
support such a feature in the near future.
2851
 
2852
Where the standard specified with @option{-std} represents a GNU
2853
extended dialect of C, such as @samp{gnu90} or @samp{gnu99}, there is a
2854
corresponding @dfn{base standard}, the version of ISO C on which the GNU
2855
extended dialect is based.  Warnings from @option{-pedantic} are given
2856
where they are required by the base standard.  (It would not make sense
2857
for such warnings to be given only for features not in the specified GNU
2858
C dialect, since by definition the GNU dialects of C include all
2859
features the compiler supports with the given option, and there would be
2860
nothing to warn about.)
2861
 
2862
@item -pedantic-errors
2863
@opindex pedantic-errors
2864
Like @option{-pedantic}, except that errors are produced rather than
2865
warnings.
2866
 
2867
@item -Wall
2868
@opindex Wall
2869
@opindex Wno-all
2870
This enables all the warnings about constructions that some users
2871
consider questionable, and that are easy to avoid (or modify to
2872
prevent the warning), even in conjunction with macros.  This also
2873
enables some language-specific warnings described in @ref{C++ Dialect
2874
Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
2875
 
2876
@option{-Wall} turns on the following warning flags:
2877
 
2878
@gccoptlist{-Waddress   @gol
2879
-Warray-bounds @r{(only with} @option{-O2}@r{)}  @gol
2880
-Wc++0x-compat  @gol
2881
-Wchar-subscripts  @gol
2882
-Wenum-compare @r{(in C/Objc; this is on by default in C++)} @gol
2883
-Wimplicit-int  @gol
2884
-Wimplicit-function-declaration  @gol
2885
-Wcomment  @gol
2886
-Wformat   @gol
2887
-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)}  @gol
2888
-Wmissing-braces  @gol
2889
-Wnonnull  @gol
2890
-Wparentheses  @gol
2891
-Wpointer-sign  @gol
2892
-Wreorder   @gol
2893
-Wreturn-type  @gol
2894
-Wsequence-point  @gol
2895
-Wsign-compare @r{(only in C++)}  @gol
2896
-Wstrict-aliasing  @gol
2897
-Wstrict-overflow=1  @gol
2898
-Wswitch  @gol
2899
-Wtrigraphs  @gol
2900
-Wuninitialized  @gol
2901
-Wunknown-pragmas  @gol
2902
-Wunused-function  @gol
2903
-Wunused-label     @gol
2904
-Wunused-value     @gol
2905
-Wunused-variable  @gol
2906
-Wvolatile-register-var @gol
2907
}
2908
 
2909
Note that some warning flags are not implied by @option{-Wall}.  Some of
2910
them warn about constructions that users generally do not consider
2911
questionable, but which occasionally you might wish to check for;
2912
others warn about constructions that are necessary or hard to avoid in
2913
some cases, and there is no simple way to modify the code to suppress
2914
the warning. Some of them are enabled by @option{-Wextra} but many of
2915
them must be enabled individually.
2916
 
2917
@item -Wextra
2918
@opindex W
2919
@opindex Wextra
2920
@opindex Wno-extra
2921
This enables some extra warning flags that are not enabled by
2922
@option{-Wall}. (This option used to be called @option{-W}.  The older
2923
name is still supported, but the newer name is more descriptive.)
2924
 
2925
@gccoptlist{-Wclobbered  @gol
2926
-Wempty-body  @gol
2927
-Wignored-qualifiers @gol
2928
-Wmissing-field-initializers  @gol
2929
-Wmissing-parameter-type @r{(C only)}  @gol
2930
-Wold-style-declaration @r{(C only)}  @gol
2931
-Woverride-init  @gol
2932
-Wsign-compare  @gol
2933
-Wtype-limits  @gol
2934
-Wuninitialized  @gol
2935
-Wunused-parameter @r{(only with} @option{-Wunused} @r{or} @option{-Wall}@r{)}  @gol
2936
}
2937
 
2938
The option @option{-Wextra} also prints warning messages for the
2939
following cases:
2940
 
2941
@itemize @bullet
2942
 
2943
@item
2944
A pointer is compared against integer zero with @samp{<}, @samp{<=},
2945
@samp{>}, or @samp{>=}.
2946
 
2947
@item
2948
(C++ only) An enumerator and a non-enumerator both appear in a
2949
conditional expression.
2950
 
2951
@item
2952
(C++ only) Ambiguous virtual bases.
2953
 
2954
@item
2955
(C++ only) Subscripting an array which has been declared @samp{register}.
2956
 
2957
@item
2958
(C++ only) Taking the address of a variable which has been declared
2959
@samp{register}.
2960
 
2961
@item
2962
(C++ only) A base class is not initialized in a derived class' copy
2963
constructor.
2964
 
2965
@end itemize
2966
 
2967
@item -Wchar-subscripts
2968
@opindex Wchar-subscripts
2969
@opindex Wno-char-subscripts
2970
Warn if an array subscript has type @code{char}.  This is a common cause
2971
of error, as programmers often forget that this type is signed on some
2972
machines.
2973
This warning is enabled by @option{-Wall}.
2974
 
2975
@item -Wcomment
2976
@opindex Wcomment
2977
@opindex Wno-comment
2978
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
2979
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
2980
This warning is enabled by @option{-Wall}.
2981
 
2982
@item -Wformat
2983
@opindex Wformat
2984
@opindex Wno-format
2985
@opindex ffreestanding
2986
@opindex fno-builtin
2987
Check calls to @code{printf} and @code{scanf}, etc., to make sure that
2988
the arguments supplied have types appropriate to the format string
2989
specified, and that the conversions specified in the format string make
2990
sense.  This includes standard functions, and others specified by format
2991
attributes (@pxref{Function Attributes}), in the @code{printf},
2992
@code{scanf}, @code{strftime} and @code{strfmon} (an X/Open extension,
2993
not in the C standard) families (or other target-specific families).
2994
Which functions are checked without format attributes having been
2995
specified depends on the standard version selected, and such checks of
2996
functions without the attribute specified are disabled by
2997
@option{-ffreestanding} or @option{-fno-builtin}.
2998
 
2999
The formats are checked against the format features supported by GNU
3000
libc version 2.2.  These include all ISO C90 and C99 features, as well
3001
as features from the Single Unix Specification and some BSD and GNU
3002
extensions.  Other library implementations may not support all these
3003
features; GCC does not support warning about features that go beyond a
3004
particular library's limitations.  However, if @option{-pedantic} is used
3005
with @option{-Wformat}, warnings will be given about format features not
3006
in the selected standard version (but not for @code{strfmon} formats,
3007
since those are not in any version of the C standard).  @xref{C Dialect
3008
Options,,Options Controlling C Dialect}.
3009
 
3010
Since @option{-Wformat} also checks for null format arguments for
3011
several functions, @option{-Wformat} also implies @option{-Wnonnull}.
3012
 
3013
@option{-Wformat} is included in @option{-Wall}.  For more control over some
3014
aspects of format checking, the options @option{-Wformat-y2k},
3015
@option{-Wno-format-extra-args}, @option{-Wno-format-zero-length},
3016
@option{-Wformat-nonliteral}, @option{-Wformat-security}, and
3017
@option{-Wformat=2} are available, but are not included in @option{-Wall}.
3018
 
3019
@item -Wformat-y2k
3020
@opindex Wformat-y2k
3021
@opindex Wno-format-y2k
3022
If @option{-Wformat} is specified, also warn about @code{strftime}
3023
formats which may yield only a two-digit year.
3024
 
3025
@item -Wno-format-contains-nul
3026
@opindex Wno-format-contains-nul
3027
@opindex Wformat-contains-nul
3028
If @option{-Wformat} is specified, do not warn about format strings that
3029
contain NUL bytes.
3030
 
3031
@item -Wno-format-extra-args
3032
@opindex Wno-format-extra-args
3033
@opindex Wformat-extra-args
3034
If @option{-Wformat} is specified, do not warn about excess arguments to a
3035
@code{printf} or @code{scanf} format function.  The C standard specifies
3036
that such arguments are ignored.
3037
 
3038
Where the unused arguments lie between used arguments that are
3039
specified with @samp{$} operand number specifications, normally
3040
warnings are still given, since the implementation could not know what
3041
type to pass to @code{va_arg} to skip the unused arguments.  However,
3042
in the case of @code{scanf} formats, this option will suppress the
3043
warning if the unused arguments are all pointers, since the Single
3044
Unix Specification says that such unused arguments are allowed.
3045
 
3046
@item -Wno-format-zero-length @r{(C and Objective-C only)}
3047
@opindex Wno-format-zero-length
3048
@opindex Wformat-zero-length
3049
If @option{-Wformat} is specified, do not warn about zero-length formats.
3050
The C standard specifies that zero-length formats are allowed.
3051
 
3052
@item -Wformat-nonliteral
3053
@opindex Wformat-nonliteral
3054
@opindex Wno-format-nonliteral
3055
If @option{-Wformat} is specified, also warn if the format string is not a
3056
string literal and so cannot be checked, unless the format function
3057
takes its format arguments as a @code{va_list}.
3058
 
3059
@item -Wformat-security
3060
@opindex Wformat-security
3061
@opindex Wno-format-security
3062
If @option{-Wformat} is specified, also warn about uses of format
3063
functions that represent possible security problems.  At present, this
3064
warns about calls to @code{printf} and @code{scanf} functions where the
3065
format string is not a string literal and there are no format arguments,
3066
as in @code{printf (foo);}.  This may be a security hole if the format
3067
string came from untrusted input and contains @samp{%n}.  (This is
3068
currently a subset of what @option{-Wformat-nonliteral} warns about, but
3069
in future warnings may be added to @option{-Wformat-security} that are not
3070
included in @option{-Wformat-nonliteral}.)
3071
 
3072
@item -Wformat=2
3073
@opindex Wformat=2
3074
@opindex Wno-format=2
3075
Enable @option{-Wformat} plus format checks not included in
3076
@option{-Wformat}.  Currently equivalent to @samp{-Wformat
3077
-Wformat-nonliteral -Wformat-security -Wformat-y2k}.
3078
 
3079
@item -Wnonnull @r{(C and Objective-C only)}
3080
@opindex Wnonnull
3081
@opindex Wno-nonnull
3082
Warn about passing a null pointer for arguments marked as
3083
requiring a non-null value by the @code{nonnull} function attribute.
3084
 
3085
@option{-Wnonnull} is included in @option{-Wall} and @option{-Wformat}.  It
3086
can be disabled with the @option{-Wno-nonnull} option.
3087
 
3088
@item -Winit-self @r{(C, C++, Objective-C and Objective-C++ only)}
3089
@opindex Winit-self
3090
@opindex Wno-init-self
3091
Warn about uninitialized variables which are initialized with themselves.
3092
Note this option can only be used with the @option{-Wuninitialized} option.
3093
 
3094
For example, GCC will warn about @code{i} being uninitialized in the
3095
following snippet only when @option{-Winit-self} has been specified:
3096
@smallexample
3097
@group
3098
int f()
3099
@{
3100
  int i = i;
3101
  return i;
3102
@}
3103
@end group
3104
@end smallexample
3105
 
3106
@item -Wimplicit-int @r{(C and Objective-C only)}
3107
@opindex Wimplicit-int
3108
@opindex Wno-implicit-int
3109
Warn when a declaration does not specify a type.
3110
This warning is enabled by @option{-Wall}.
3111
 
3112
@item -Wimplicit-function-declaration @r{(C and Objective-C only)}
3113
@opindex Wimplicit-function-declaration
3114
@opindex Wno-implicit-function-declaration
3115
Give a warning whenever a function is used before being declared. In
3116
C99 mode (@option{-std=c99} or @option{-std=gnu99}), this warning is
3117
enabled by default and it is made into an error by
3118
@option{-pedantic-errors}. This warning is also enabled by
3119
@option{-Wall}.
3120
 
3121
@item -Wimplicit
3122
@opindex Wimplicit
3123
@opindex Wno-implicit
3124
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
3125
This warning is enabled by @option{-Wall}.
3126
 
3127
@item -Wignored-qualifiers @r{(C and C++ only)}
3128
@opindex Wignored-qualifiers
3129
@opindex Wno-ignored-qualifiers
3130
Warn if the return type of a function has a type qualifier
3131
such as @code{const}.  For ISO C such a type qualifier has no effect,
3132
since the value returned by a function is not an lvalue.
3133
For C++, the warning is only emitted for scalar types or @code{void}.
3134
ISO C prohibits qualified @code{void} return types on function
3135
definitions, so such return types always receive a warning
3136
even without this option.
3137
 
3138
This warning is also enabled by @option{-Wextra}.
3139
 
3140
@item -Wmain
3141
@opindex Wmain
3142
@opindex Wno-main
3143
Warn if the type of @samp{main} is suspicious.  @samp{main} should be
3144
a function with external linkage, returning int, taking either zero
3145
arguments, two, or three arguments of appropriate types.  This warning
3146
is enabled by default in C++ and is enabled by either @option{-Wall}
3147
or @option{-pedantic}.
3148
 
3149
@item -Wmissing-braces
3150
@opindex Wmissing-braces
3151
@opindex Wno-missing-braces
3152
Warn if an aggregate or union initializer is not fully bracketed.  In
3153
the following example, the initializer for @samp{a} is not fully
3154
bracketed, but that for @samp{b} is fully bracketed.
3155
 
3156
@smallexample
3157
int a[2][2] = @{ 0, 1, 2, 3 @};
3158
int b[2][2] = @{ @{ 0, 1 @}, @{ 2, 3 @} @};
3159
@end smallexample
3160
 
3161
This warning is enabled by @option{-Wall}.
3162
 
3163
@item -Wmissing-include-dirs @r{(C, C++, Objective-C and Objective-C++ only)}
3164
@opindex Wmissing-include-dirs
3165
@opindex Wno-missing-include-dirs
3166
Warn if a user-supplied include directory does not exist.
3167
 
3168
@item -Wparentheses
3169
@opindex Wparentheses
3170
@opindex Wno-parentheses
3171
Warn if parentheses are omitted in certain contexts, such
3172
as when there is an assignment in a context where a truth value
3173
is expected, or when operators are nested whose precedence people
3174
often get confused about.
3175
 
3176
Also warn if a comparison like @samp{x<=y<=z} appears; this is
3177
equivalent to @samp{(x<=y ? 1 : 0) <= z}, which is a different
3178
interpretation from that of ordinary mathematical notation.
3179
 
3180
Also warn about constructions where there may be confusion to which
3181
@code{if} statement an @code{else} branch belongs.  Here is an example of
3182
such a case:
3183
 
3184
@smallexample
3185
@group
3186
@{
3187
  if (a)
3188
    if (b)
3189
      foo ();
3190
  else
3191
    bar ();
3192
@}
3193
@end group
3194
@end smallexample
3195
 
3196
In C/C++, every @code{else} branch belongs to the innermost possible
3197
@code{if} statement, which in this example is @code{if (b)}.  This is
3198
often not what the programmer expected, as illustrated in the above
3199
example by indentation the programmer chose.  When there is the
3200
potential for this confusion, GCC will issue a warning when this flag
3201
is specified.  To eliminate the warning, add explicit braces around
3202
the innermost @code{if} statement so there is no way the @code{else}
3203
could belong to the enclosing @code{if}.  The resulting code would
3204
look like this:
3205
 
3206
@smallexample
3207
@group
3208
@{
3209
  if (a)
3210
    @{
3211
      if (b)
3212
        foo ();
3213
      else
3214
        bar ();
3215
    @}
3216
@}
3217
@end group
3218
@end smallexample
3219
 
3220
This warning is enabled by @option{-Wall}.
3221
 
3222
@item -Wsequence-point
3223
@opindex Wsequence-point
3224
@opindex Wno-sequence-point
3225
Warn about code that may have undefined semantics because of violations
3226
of sequence point rules in the C and C++ standards.
3227
 
3228
The C and C++ standards defines the order in which expressions in a C/C++
3229
program are evaluated in terms of @dfn{sequence points}, which represent
3230
a partial ordering between the execution of parts of the program: those
3231
executed before the sequence point, and those executed after it.  These
3232
occur after the evaluation of a full expression (one which is not part
3233
of a larger expression), after the evaluation of the first operand of a
3234
@code{&&}, @code{||}, @code{? :} or @code{,} (comma) operator, before a
3235
function is called (but after the evaluation of its arguments and the
3236
expression denoting the called function), and in certain other places.
3237
Other than as expressed by the sequence point rules, the order of
3238
evaluation of subexpressions of an expression is not specified.  All
3239
these rules describe only a partial order rather than a total order,
3240
since, for example, if two functions are called within one expression
3241
with no sequence point between them, the order in which the functions
3242
are called is not specified.  However, the standards committee have
3243
ruled that function calls do not overlap.
3244
 
3245
It is not specified when between sequence points modifications to the
3246
values of objects take effect.  Programs whose behavior depends on this
3247
have undefined behavior; the C and C++ standards specify that ``Between
3248
the previous and next sequence point an object shall have its stored
3249
value modified at most once by the evaluation of an expression.
3250
Furthermore, the prior value shall be read only to determine the value
3251
to be stored.''.  If a program breaks these rules, the results on any
3252
particular implementation are entirely unpredictable.
3253
 
3254
Examples of code with undefined behavior are @code{a = a++;}, @code{a[n]
3255
= b[n++]} and @code{a[i++] = i;}.  Some more complicated cases are not
3256
diagnosed by this option, and it may give an occasional false positive
3257
result, but in general it has been found fairly effective at detecting
3258
this sort of problem in programs.
3259
 
3260
The standard is worded confusingly, therefore there is some debate
3261
over the precise meaning of the sequence point rules in subtle cases.
3262
Links to discussions of the problem, including proposed formal
3263
definitions, may be found on the GCC readings page, at
3264
@w{@uref{http://gcc.gnu.org/readings.html}}.
3265
 
3266
This warning is enabled by @option{-Wall} for C and C++.
3267
 
3268
@item -Wreturn-type
3269
@opindex Wreturn-type
3270
@opindex Wno-return-type
3271
Warn whenever a function is defined with a return-type that defaults
3272
to @code{int}.  Also warn about any @code{return} statement with no
3273
return-value in a function whose return-type is not @code{void}
3274
(falling off the end of the function body is considered returning
3275
without a value), and about a @code{return} statement with an
3276
expression in a function whose return-type is @code{void}.
3277
 
3278
For C++, a function without return type always produces a diagnostic
3279
message, even when @option{-Wno-return-type} is specified.  The only
3280
exceptions are @samp{main} and functions defined in system headers.
3281
 
3282
This warning is enabled by @option{-Wall}.
3283
 
3284
@item -Wswitch
3285
@opindex Wswitch
3286
@opindex Wno-switch
3287
Warn whenever a @code{switch} statement has an index of enumerated type
3288
and lacks a @code{case} for one or more of the named codes of that
3289
enumeration.  (The presence of a @code{default} label prevents this
3290
warning.)  @code{case} labels outside the enumeration range also
3291
provoke warnings when this option is used (even if there is a
3292
@code{default} label).
3293
This warning is enabled by @option{-Wall}.
3294
 
3295
@item -Wswitch-default
3296
@opindex Wswitch-default
3297
@opindex Wno-switch-default
3298
Warn whenever a @code{switch} statement does not have a @code{default}
3299
case.
3300
 
3301
@item -Wswitch-enum
3302
@opindex Wswitch-enum
3303
@opindex Wno-switch-enum
3304
Warn whenever a @code{switch} statement has an index of enumerated type
3305
and lacks a @code{case} for one or more of the named codes of that
3306
enumeration.  @code{case} labels outside the enumeration range also
3307
provoke warnings when this option is used.  The only difference
3308
between @option{-Wswitch} and this option is that this option gives a
3309
warning about an omitted enumeration code even if there is a
3310
@code{default} label.
3311
 
3312
@item -Wsync-nand @r{(C and C++ only)}
3313
@opindex Wsync-nand
3314
@opindex Wno-sync-nand
3315
Warn when @code{__sync_fetch_and_nand} and @code{__sync_nand_and_fetch}
3316
built-in functions are used.  These functions changed semantics in GCC 4.4.
3317
 
3318
@item -Wtrigraphs
3319
@opindex Wtrigraphs
3320
@opindex Wno-trigraphs
3321
Warn if any trigraphs are encountered that might change the meaning of
3322
the program (trigraphs within comments are not warned about).
3323
This warning is enabled by @option{-Wall}.
3324
 
3325
@item -Wunused-function
3326
@opindex Wunused-function
3327
@opindex Wno-unused-function
3328
Warn whenever a static function is declared but not defined or a
3329
non-inline static function is unused.
3330
This warning is enabled by @option{-Wall}.
3331
 
3332
@item -Wunused-label
3333
@opindex Wunused-label
3334
@opindex Wno-unused-label
3335
Warn whenever a label is declared but not used.
3336
This warning is enabled by @option{-Wall}.
3337
 
3338
To suppress this warning use the @samp{unused} attribute
3339
(@pxref{Variable Attributes}).
3340
 
3341
@item -Wunused-parameter
3342
@opindex Wunused-parameter
3343
@opindex Wno-unused-parameter
3344
Warn whenever a function parameter is unused aside from its declaration.
3345
 
3346
To suppress this warning use the @samp{unused} attribute
3347
(@pxref{Variable Attributes}).
3348
 
3349
@item -Wno-unused-result
3350
@opindex Wunused-result
3351
@opindex Wno-unused-result
3352
Do not warn if a caller of a function marked with attribute
3353
@code{warn_unused_result} (@pxref{Variable Attributes}) does not use
3354
its return value. The default is @option{-Wunused-result}.
3355
 
3356
@item -Wunused-variable
3357
@opindex Wunused-variable
3358
@opindex Wno-unused-variable
3359
Warn whenever a local variable or non-constant static variable is unused
3360
aside from its declaration.
3361
This warning is enabled by @option{-Wall}.
3362
 
3363
To suppress this warning use the @samp{unused} attribute
3364
(@pxref{Variable Attributes}).
3365
 
3366
@item -Wunused-value
3367
@opindex Wunused-value
3368
@opindex Wno-unused-value
3369
Warn whenever a statement computes a result that is explicitly not
3370
used. To suppress this warning cast the unused expression to
3371
@samp{void}. This includes an expression-statement or the left-hand
3372
side of a comma expression that contains no side effects. For example,
3373
an expression such as @samp{x[i,j]} will cause a warning, while
3374
@samp{x[(void)i,j]} will not.
3375
 
3376
This warning is enabled by @option{-Wall}.
3377
 
3378
@item -Wunused
3379
@opindex Wunused
3380
@opindex Wno-unused
3381
All the above @option{-Wunused} options combined.
3382
 
3383
In order to get a warning about an unused function parameter, you must
3384
either specify @samp{-Wextra -Wunused} (note that @samp{-Wall} implies
3385
@samp{-Wunused}), or separately specify @option{-Wunused-parameter}.
3386
 
3387
@item -Wuninitialized
3388
@opindex Wuninitialized
3389
@opindex Wno-uninitialized
3390
Warn if an automatic variable is used without first being initialized
3391
or if a variable may be clobbered by a @code{setjmp} call. In C++,
3392
warn if a non-static reference or non-static @samp{const} member
3393
appears in a class without constructors.
3394
 
3395
If you want to warn about code which uses the uninitialized value of the
3396
variable in its own initializer, use the @option{-Winit-self} option.
3397
 
3398
These warnings occur for individual uninitialized or clobbered
3399
elements of structure, union or array variables as well as for
3400
variables which are uninitialized or clobbered as a whole.  They do
3401
not occur for variables or elements declared @code{volatile}.  Because
3402
these warnings depend on optimization, the exact variables or elements
3403
for which there are warnings will depend on the precise optimization
3404
options and version of GCC used.
3405
 
3406
Note that there may be no warning about a variable that is used only
3407
to compute a value that itself is never used, because such
3408
computations may be deleted by data flow analysis before the warnings
3409
are printed.
3410
 
3411
These warnings are made optional because GCC is not smart
3412
enough to see all the reasons why the code might be correct
3413
despite appearing to have an error.  Here is one example of how
3414
this can happen:
3415
 
3416
@smallexample
3417
@group
3418
@{
3419
  int x;
3420
  switch (y)
3421
    @{
3422
    case 1: x = 1;
3423
      break;
3424
    case 2: x = 4;
3425
      break;
3426
    case 3: x = 5;
3427
    @}
3428
  foo (x);
3429
@}
3430
@end group
3431
@end smallexample
3432
 
3433
@noindent
3434
If the value of @code{y} is always 1, 2 or 3, then @code{x} is
3435
always initialized, but GCC doesn't know this.  Here is
3436
another common case:
3437
 
3438
@smallexample
3439
@{
3440
  int save_y;
3441
  if (change_y) save_y = y, y = new_y;
3442
  @dots{}
3443
  if (change_y) y = save_y;
3444
@}
3445
@end smallexample
3446
 
3447
@noindent
3448
This has no bug because @code{save_y} is used only if it is set.
3449
 
3450
@cindex @code{longjmp} warnings
3451
This option also warns when a non-volatile automatic variable might be
3452
changed by a call to @code{longjmp}.  These warnings as well are possible
3453
only in optimizing compilation.
3454
 
3455
The compiler sees only the calls to @code{setjmp}.  It cannot know
3456
where @code{longjmp} will be called; in fact, a signal handler could
3457
call it at any point in the code.  As a result, you may get a warning
3458
even when there is in fact no problem because @code{longjmp} cannot
3459
in fact be called at the place which would cause a problem.
3460
 
3461
Some spurious warnings can be avoided if you declare all the functions
3462
you use that never return as @code{noreturn}.  @xref{Function
3463
Attributes}.
3464
 
3465
This warning is enabled by @option{-Wall} or @option{-Wextra}.
3466
 
3467
@item -Wunknown-pragmas
3468
@opindex Wunknown-pragmas
3469
@opindex Wno-unknown-pragmas
3470
@cindex warning for unknown pragmas
3471
@cindex unknown pragmas, warning
3472
@cindex pragmas, warning of unknown
3473
Warn when a #pragma directive is encountered which is not understood by
3474
GCC@.  If this command line option is used, warnings will even be issued
3475
for unknown pragmas in system header files.  This is not the case if
3476
the warnings were only enabled by the @option{-Wall} command line option.
3477
 
3478
@item -Wno-pragmas
3479
@opindex Wno-pragmas
3480
@opindex Wpragmas
3481
Do not warn about misuses of pragmas, such as incorrect parameters,
3482
invalid syntax, or conflicts between pragmas.  See also
3483
@samp{-Wunknown-pragmas}.
3484
 
3485
@item -Wstrict-aliasing
3486
@opindex Wstrict-aliasing
3487
@opindex Wno-strict-aliasing
3488
This option is only active when @option{-fstrict-aliasing} is active.
3489
It warns about code which might break the strict aliasing rules that the
3490
compiler is using for optimization.  The warning does not catch all
3491
cases, but does attempt to catch the more common pitfalls.  It is
3492
included in @option{-Wall}.
3493
It is equivalent to @option{-Wstrict-aliasing=3}
3494
 
3495
@item -Wstrict-aliasing=n
3496
@opindex Wstrict-aliasing=n
3497
@opindex Wno-strict-aliasing=n
3498
This option is only active when @option{-fstrict-aliasing} is active.
3499
It warns about code which might break the strict aliasing rules that the
3500
compiler is using for optimization.
3501
Higher levels correspond to higher accuracy (fewer false positives).
3502
Higher levels also correspond to more effort, similar to the way -O works.
3503
@option{-Wstrict-aliasing} is equivalent to @option{-Wstrict-aliasing=n},
3504
with n=3.
3505
 
3506
Level 1: Most aggressive, quick, least accurate.
3507
Possibly useful when higher levels
3508
do not warn but -fstrict-aliasing still breaks the code, as it has very few
3509
false negatives.  However, it has many false positives.
3510
Warns for all pointer conversions between possibly incompatible types,
3511
even if never dereferenced.  Runs in the frontend only.
3512
 
3513
Level 2: Aggressive, quick, not too precise.
3514
May still have many false positives (not as many as level 1 though),
3515
and few false negatives (but possibly more than level 1).
3516
Unlike level 1, it only warns when an address is taken.  Warns about
3517
incomplete types.  Runs in the frontend only.
3518
 
3519
Level 3 (default for @option{-Wstrict-aliasing}):
3520
Should have very few false positives and few false
3521
negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3522
Takes care of the common pun+dereference pattern in the frontend:
3523
@code{*(int*)&some_float}.
3524
If optimization is enabled, it also runs in the backend, where it deals
3525
with multiple statement cases using flow-sensitive points-to information.
3526
Only warns when the converted pointer is dereferenced.
3527
Does not warn about incomplete types.
3528
 
3529
@item -Wstrict-overflow
3530
@itemx -Wstrict-overflow=@var{n}
3531
@opindex Wstrict-overflow
3532
@opindex Wno-strict-overflow
3533
This option is only active when @option{-fstrict-overflow} is active.
3534
It warns about cases where the compiler optimizes based on the
3535
assumption that signed overflow does not occur.  Note that it does not
3536
warn about all cases where the code might overflow: it only warns
3537
about cases where the compiler implements some optimization.  Thus
3538
this warning depends on the optimization level.
3539
 
3540
An optimization which assumes that signed overflow does not occur is
3541
perfectly safe if the values of the variables involved are such that
3542
overflow never does, in fact, occur.  Therefore this warning can
3543
easily give a false positive: a warning about code which is not
3544
actually a problem.  To help focus on important issues, several
3545
warning levels are defined.  No warnings are issued for the use of
3546
undefined signed overflow when estimating how many iterations a loop
3547
will require, in particular when determining whether a loop will be
3548
executed at all.
3549
 
3550
@table @gcctabopt
3551
@item -Wstrict-overflow=1
3552
Warn about cases which are both questionable and easy to avoid.  For
3553
example: @code{x + 1 > x}; with @option{-fstrict-overflow}, the
3554
compiler will simplify this to @code{1}.  This level of
3555
@option{-Wstrict-overflow} is enabled by @option{-Wall}; higher levels
3556
are not, and must be explicitly requested.
3557
 
3558
@item -Wstrict-overflow=2
3559
Also warn about other cases where a comparison is simplified to a
3560
constant.  For example: @code{abs (x) >= 0}.  This can only be
3561
simplified when @option{-fstrict-overflow} is in effect, because
3562
@code{abs (INT_MIN)} overflows to @code{INT_MIN}, which is less than
3563
zero.  @option{-Wstrict-overflow} (with no level) is the same as
3564
@option{-Wstrict-overflow=2}.
3565
 
3566
@item -Wstrict-overflow=3
3567
Also warn about other cases where a comparison is simplified.  For
3568
example: @code{x + 1 > 1} will be simplified to @code{x > 0}.
3569
 
3570
@item -Wstrict-overflow=4
3571
Also warn about other simplifications not covered by the above cases.
3572
For example: @code{(x * 10) / 5} will be simplified to @code{x * 2}.
3573
 
3574
@item -Wstrict-overflow=5
3575
Also warn about cases where the compiler reduces the magnitude of a
3576
constant involved in a comparison.  For example: @code{x + 2 > y} will
3577
be simplified to @code{x + 1 >= y}.  This is reported only at the
3578
highest warning level because this simplification applies to many
3579
comparisons, so this warning level will give a very large number of
3580
false positives.
3581
@end table
3582
 
3583
@item -Warray-bounds
3584
@opindex Wno-array-bounds
3585
@opindex Warray-bounds
3586
This option is only active when @option{-ftree-vrp} is active
3587
(default for -O2 and above). It warns about subscripts to arrays
3588
that are always out of bounds. This warning is enabled by @option{-Wall}.
3589
 
3590
@item -Wno-div-by-zero
3591
@opindex Wno-div-by-zero
3592
@opindex Wdiv-by-zero
3593
Do not warn about compile-time integer division by zero.  Floating point
3594
division by zero is not warned about, as it can be a legitimate way of
3595
obtaining infinities and NaNs.
3596
 
3597
@item -Wsystem-headers
3598
@opindex Wsystem-headers
3599
@opindex Wno-system-headers
3600
@cindex warnings from system headers
3601
@cindex system headers, warnings from
3602
Print warning messages for constructs found in system header files.
3603
Warnings from system headers are normally suppressed, on the assumption
3604
that they usually do not indicate real problems and would only make the
3605
compiler output harder to read.  Using this command line option tells
3606
GCC to emit warnings from system headers as if they occurred in user
3607
code.  However, note that using @option{-Wall} in conjunction with this
3608
option will @emph{not} warn about unknown pragmas in system
3609
headers---for that, @option{-Wunknown-pragmas} must also be used.
3610
 
3611
@item -Wfloat-equal
3612
@opindex Wfloat-equal
3613
@opindex Wno-float-equal
3614
Warn if floating point values are used in equality comparisons.
3615
 
3616
The idea behind this is that sometimes it is convenient (for the
3617
programmer) to consider floating-point values as approximations to
3618
infinitely precise real numbers.  If you are doing this, then you need
3619
to compute (by analyzing the code, or in some other way) the maximum or
3620
likely maximum error that the computation introduces, and allow for it
3621
when performing comparisons (and when producing output, but that's a
3622
different problem).  In particular, instead of testing for equality, you
3623
would check to see whether the two values have ranges that overlap; and
3624
this is done with the relational operators, so equality comparisons are
3625
probably mistaken.
3626
 
3627
@item -Wtraditional @r{(C and Objective-C only)}
3628
@opindex Wtraditional
3629
@opindex Wno-traditional
3630
Warn about certain constructs that behave differently in traditional and
3631
ISO C@.  Also warn about ISO C constructs that have no traditional C
3632
equivalent, and/or problematic constructs which should be avoided.
3633
 
3634
@itemize @bullet
3635
@item
3636
Macro parameters that appear within string literals in the macro body.
3637
In traditional C macro replacement takes place within string literals,
3638
but does not in ISO C@.
3639
 
3640
@item
3641
In traditional C, some preprocessor directives did not exist.
3642
Traditional preprocessors would only consider a line to be a directive
3643
if the @samp{#} appeared in column 1 on the line.  Therefore
3644
@option{-Wtraditional} warns about directives that traditional C
3645
understands but would ignore because the @samp{#} does not appear as the
3646
first character on the line.  It also suggests you hide directives like
3647
@samp{#pragma} not understood by traditional C by indenting them.  Some
3648
traditional implementations would not recognize @samp{#elif}, so it
3649
suggests avoiding it altogether.
3650
 
3651
@item
3652
A function-like macro that appears without arguments.
3653
 
3654
@item
3655
The unary plus operator.
3656
 
3657
@item
3658
The @samp{U} integer constant suffix, or the @samp{F} or @samp{L} floating point
3659
constant suffixes.  (Traditional C does support the @samp{L} suffix on integer
3660
constants.)  Note, these suffixes appear in macros defined in the system
3661
headers of most modern systems, e.g.@: the @samp{_MIN}/@samp{_MAX} macros in @code{<limits.h>}.
3662
Use of these macros in user code might normally lead to spurious
3663
warnings, however GCC's integrated preprocessor has enough context to
3664
avoid warning in these cases.
3665
 
3666
@item
3667
A function declared external in one block and then used after the end of
3668
the block.
3669
 
3670
@item
3671
A @code{switch} statement has an operand of type @code{long}.
3672
 
3673
@item
3674
A non-@code{static} function declaration follows a @code{static} one.
3675
This construct is not accepted by some traditional C compilers.
3676
 
3677
@item
3678
The ISO type of an integer constant has a different width or
3679
signedness from its traditional type.  This warning is only issued if
3680
the base of the constant is ten.  I.e.@: hexadecimal or octal values, which
3681
typically represent bit patterns, are not warned about.
3682
 
3683
@item
3684
Usage of ISO string concatenation is detected.
3685
 
3686
@item
3687
Initialization of automatic aggregates.
3688
 
3689
@item
3690
Identifier conflicts with labels.  Traditional C lacks a separate
3691
namespace for labels.
3692
 
3693
@item
3694
Initialization of unions.  If the initializer is zero, the warning is
3695
omitted.  This is done under the assumption that the zero initializer in
3696
user code appears conditioned on e.g.@: @code{__STDC__} to avoid missing
3697
initializer warnings and relies on default initialization to zero in the
3698
traditional C case.
3699
 
3700
@item
3701
Conversions by prototypes between fixed/floating point values and vice
3702
versa.  The absence of these prototypes when compiling with traditional
3703
C would cause serious problems.  This is a subset of the possible
3704
conversion warnings, for the full set use @option{-Wtraditional-conversion}.
3705
 
3706
@item
3707
Use of ISO C style function definitions.  This warning intentionally is
3708
@emph{not} issued for prototype declarations or variadic functions
3709
because these ISO C features will appear in your code when using
3710
libiberty's traditional C compatibility macros, @code{PARAMS} and
3711
@code{VPARAMS}.  This warning is also bypassed for nested functions
3712
because that feature is already a GCC extension and thus not relevant to
3713
traditional C compatibility.
3714
@end itemize
3715
 
3716
@item -Wtraditional-conversion @r{(C and Objective-C only)}
3717
@opindex Wtraditional-conversion
3718
@opindex Wno-traditional-conversion
3719
Warn if a prototype causes a type conversion that is different from what
3720
would happen to the same argument in the absence of a prototype.  This
3721
includes conversions of fixed point to floating and vice versa, and
3722
conversions changing the width or signedness of a fixed point argument
3723
except when the same as the default promotion.
3724
 
3725
@item -Wdeclaration-after-statement @r{(C and Objective-C only)}
3726
@opindex Wdeclaration-after-statement
3727
@opindex Wno-declaration-after-statement
3728
Warn when a declaration is found after a statement in a block.  This
3729
construct, known from C++, was introduced with ISO C99 and is by default
3730
allowed in GCC@.  It is not supported by ISO C90 and was not supported by
3731
GCC versions before GCC 3.0.  @xref{Mixed Declarations}.
3732
 
3733
@item -Wundef
3734
@opindex Wundef
3735
@opindex Wno-undef
3736
Warn if an undefined identifier is evaluated in an @samp{#if} directive.
3737
 
3738
@item -Wno-endif-labels
3739
@opindex Wno-endif-labels
3740
@opindex Wendif-labels
3741
Do not warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
3742
 
3743
@item -Wshadow
3744
@opindex Wshadow
3745
@opindex Wno-shadow
3746
Warn whenever a local variable shadows another local variable, parameter or
3747
global variable or whenever a built-in function is shadowed.
3748
 
3749
@item -Wlarger-than=@var{len}
3750
@opindex Wlarger-than=@var{len}
3751
@opindex Wlarger-than-@var{len}
3752
Warn whenever an object of larger than @var{len} bytes is defined.
3753
 
3754
@item -Wframe-larger-than=@var{len}
3755
@opindex Wframe-larger-than
3756
Warn if the size of a function frame is larger than @var{len} bytes.
3757
The computation done to determine the stack frame size is approximate
3758
and not conservative.
3759
The actual requirements may be somewhat greater than @var{len}
3760
even if you do not get a warning.  In addition, any space allocated
3761
via @code{alloca}, variable-length arrays, or related constructs
3762
is not included by the compiler when determining
3763
whether or not to issue a warning.
3764
 
3765
@item -Wunsafe-loop-optimizations
3766
@opindex Wunsafe-loop-optimizations
3767
@opindex Wno-unsafe-loop-optimizations
3768
Warn if the loop cannot be optimized because the compiler could not
3769
assume anything on the bounds of the loop indices.  With
3770
@option{-funsafe-loop-optimizations} warn if the compiler made
3771
such assumptions.
3772
 
3773
@item -Wno-pedantic-ms-format @r{(MinGW targets only)}
3774
@opindex Wno-pedantic-ms-format
3775
@opindex Wpedantic-ms-format
3776
Disables the warnings about non-ISO @code{printf} / @code{scanf} format
3777
width specifiers @code{I32}, @code{I64}, and @code{I} used on Windows targets
3778
depending on the MS runtime, when you are using the options @option{-Wformat}
3779
and @option{-pedantic} without gnu-extensions.
3780
 
3781
@item -Wpointer-arith
3782
@opindex Wpointer-arith
3783
@opindex Wno-pointer-arith
3784
Warn about anything that depends on the ``size of'' a function type or
3785
of @code{void}.  GNU C assigns these types a size of 1, for
3786
convenience in calculations with @code{void *} pointers and pointers
3787
to functions.  In C++, warn also when an arithmetic operation involves
3788
@code{NULL}.  This warning is also enabled by @option{-pedantic}.
3789
 
3790
@item -Wtype-limits
3791
@opindex Wtype-limits
3792
@opindex Wno-type-limits
3793
Warn if a comparison is always true or always false due to the limited
3794
range of the data type, but do not warn for constant expressions.  For
3795
example, warn if an unsigned variable is compared against zero with
3796
@samp{<} or @samp{>=}.  This warning is also enabled by
3797
@option{-Wextra}.
3798
 
3799
@item -Wbad-function-cast @r{(C and Objective-C only)}
3800
@opindex Wbad-function-cast
3801
@opindex Wno-bad-function-cast
3802
Warn whenever a function call is cast to a non-matching type.
3803
For example, warn if @code{int malloc()} is cast to @code{anything *}.
3804
 
3805
@item -Wc++-compat @r{(C and Objective-C only)}
3806
Warn about ISO C constructs that are outside of the common subset of
3807
ISO C and ISO C++, e.g.@: request for implicit conversion from
3808
@code{void *} to a pointer to non-@code{void} type.
3809
 
3810
@item -Wc++0x-compat @r{(C++ and Objective-C++ only)}
3811
Warn about C++ constructs whose meaning differs between ISO C++ 1998 and
3812
ISO C++ 200x, e.g., identifiers in ISO C++ 1998 that will become keywords
3813
in ISO C++ 200x.  This warning is enabled by @option{-Wall}.
3814
 
3815
@item -Wcast-qual
3816
@opindex Wcast-qual
3817
@opindex Wno-cast-qual
3818
Warn whenever a pointer is cast so as to remove a type qualifier from
3819
the target type.  For example, warn if a @code{const char *} is cast
3820
to an ordinary @code{char *}.
3821
 
3822
Also warn when making a cast which introduces a type qualifier in an
3823
unsafe way.  For example, casting @code{char **} to @code{const char **}
3824
is unsafe, as in this example:
3825
 
3826
@smallexample
3827
  /* p is char ** value.  */
3828
  const char **q = (const char **) p;
3829
  /* Assignment of readonly string to const char * is OK.  */
3830
  *q = "string";
3831
  /* Now char** pointer points to read-only memory.  */
3832
  **p = 'b';
3833
@end smallexample
3834
 
3835
@item -Wcast-align
3836
@opindex Wcast-align
3837
@opindex Wno-cast-align
3838
Warn whenever a pointer is cast such that the required alignment of the
3839
target is increased.  For example, warn if a @code{char *} is cast to
3840
an @code{int *} on machines where integers can only be accessed at
3841
two- or four-byte boundaries.
3842
 
3843
@item -Wwrite-strings
3844
@opindex Wwrite-strings
3845
@opindex Wno-write-strings
3846
When compiling C, give string constants the type @code{const
3847
char[@var{length}]} so that copying the address of one into a
3848
non-@code{const} @code{char *} pointer will get a warning.  These
3849
warnings will help you find at compile time code that can try to write
3850
into a string constant, but only if you have been very careful about
3851
using @code{const} in declarations and prototypes.  Otherwise, it will
3852
just be a nuisance. This is why we did not make @option{-Wall} request
3853
these warnings.
3854
 
3855
When compiling C++, warn about the deprecated conversion from string
3856
literals to @code{char *}.  This warning is enabled by default for C++
3857
programs.
3858
 
3859
@item -Wclobbered
3860
@opindex Wclobbered
3861
@opindex Wno-clobbered
3862
Warn for variables that might be changed by @samp{longjmp} or
3863
@samp{vfork}.  This warning is also enabled by @option{-Wextra}.
3864
 
3865
@item -Wconversion
3866
@opindex Wconversion
3867
@opindex Wno-conversion
3868
Warn for implicit conversions that may alter a value. This includes
3869
conversions between real and integer, like @code{abs (x)} when
3870
@code{x} is @code{double}; conversions between signed and unsigned,
3871
like @code{unsigned ui = -1}; and conversions to smaller types, like
3872
@code{sqrtf (M_PI)}. Do not warn for explicit casts like @code{abs
3873
((int) x)} and @code{ui = (unsigned) -1}, or if the value is not
3874
changed by the conversion like in @code{abs (2.0)}.  Warnings about
3875
conversions between signed and unsigned integers can be disabled by
3876
using @option{-Wno-sign-conversion}.
3877
 
3878
For C++, also warn for confusing overload resolution for user-defined
3879
conversions; and conversions that will never use a type conversion
3880
operator: conversions to @code{void}, the same type, a base class or a
3881
reference to them. Warnings about conversions between signed and
3882
unsigned integers are disabled by default in C++ unless
3883
@option{-Wsign-conversion} is explicitly enabled.
3884
 
3885
@item -Wno-conversion-null @r{(C++ and Objective-C++ only)}
3886
@opindex Wconversion-null
3887
@opindex Wno-conversion-null
3888
Do not warn for conversions between @code{NULL} and non-pointer
3889
types. @option{-Wconversion-null} is enabled by default.
3890
 
3891
@item -Wempty-body
3892
@opindex Wempty-body
3893
@opindex Wno-empty-body
3894
Warn if an empty body occurs in an @samp{if}, @samp{else} or @samp{do
3895
while} statement.  This warning is also enabled by @option{-Wextra}.
3896
 
3897
@item -Wenum-compare
3898
@opindex Wenum-compare
3899
@opindex Wno-enum-compare
3900
Warn about a comparison between values of different enum types. In C++
3901
this warning is enabled by default.  In C this warning is enabled by
3902
@option{-Wall}.
3903
 
3904
@item -Wjump-misses-init @r{(C, Objective-C only)}
3905
@opindex Wjump-misses-init
3906
@opindex Wno-jump-misses-init
3907
Warn if a @code{goto} statement or a @code{switch} statement jumps
3908
forward across the initialization of a variable, or jumps backward to a
3909
label after the variable has been initialized.  This only warns about
3910
variables which are initialized when they are declared.  This warning is
3911
only supported for C and Objective C; in C++ this sort of branch is an
3912
error in any case.
3913
 
3914
@option{-Wjump-misses-init} is included in @option{-Wc++-compat}.  It
3915
can be disabled with the @option{-Wno-jump-misses-init} option.
3916
 
3917
@item -Wsign-compare
3918
@opindex Wsign-compare
3919
@opindex Wno-sign-compare
3920
@cindex warning for comparison of signed and unsigned values
3921
@cindex comparison of signed and unsigned values, warning
3922
@cindex signed and unsigned values, comparison warning
3923
Warn when a comparison between signed and unsigned values could produce
3924
an incorrect result when the signed value is converted to unsigned.
3925
This warning is also enabled by @option{-Wextra}; to get the other warnings
3926
of @option{-Wextra} without this warning, use @samp{-Wextra -Wno-sign-compare}.
3927
 
3928
@item -Wsign-conversion
3929
@opindex Wsign-conversion
3930
@opindex Wno-sign-conversion
3931
Warn for implicit conversions that may change the sign of an integer
3932
value, like assigning a signed integer expression to an unsigned
3933
integer variable. An explicit cast silences the warning. In C, this
3934
option is enabled also by @option{-Wconversion}.
3935
 
3936
@item -Waddress
3937
@opindex Waddress
3938
@opindex Wno-address
3939
Warn about suspicious uses of memory addresses. These include using
3940
the address of a function in a conditional expression, such as
3941
@code{void func(void); if (func)}, and comparisons against the memory
3942
address of a string literal, such as @code{if (x == "abc")}.  Such
3943
uses typically indicate a programmer error: the address of a function
3944
always evaluates to true, so their use in a conditional usually
3945
indicate that the programmer forgot the parentheses in a function
3946
call; and comparisons against string literals result in unspecified
3947
behavior and are not portable in C, so they usually indicate that the
3948
programmer intended to use @code{strcmp}.  This warning is enabled by
3949
@option{-Wall}.
3950
 
3951
@item -Wlogical-op
3952
@opindex Wlogical-op
3953
@opindex Wno-logical-op
3954
Warn about suspicious uses of logical operators in expressions.
3955
This includes using logical operators in contexts where a
3956
bit-wise operator is likely to be expected.
3957
 
3958
@item -Waggregate-return
3959
@opindex Waggregate-return
3960
@opindex Wno-aggregate-return
3961
Warn if any functions that return structures or unions are defined or
3962
called.  (In languages where you can return an array, this also elicits
3963
a warning.)
3964
 
3965
@item -Wno-attributes
3966
@opindex Wno-attributes
3967
@opindex Wattributes
3968
Do not warn if an unexpected @code{__attribute__} is used, such as
3969
unrecognized attributes, function attributes applied to variables,
3970
etc.  This will not stop errors for incorrect use of supported
3971
attributes.
3972
 
3973
@item -Wno-builtin-macro-redefined
3974
@opindex Wno-builtin-macro-redefined
3975
@opindex Wbuiltin-macro-redefined
3976
Do not warn if certain built-in macros are redefined.  This suppresses
3977
warnings for redefinition of @code{__TIMESTAMP__}, @code{__TIME__},
3978
@code{__DATE__}, @code{__FILE__}, and @code{__BASE_FILE__}.
3979
 
3980
@item -Wstrict-prototypes @r{(C and Objective-C only)}
3981
@opindex Wstrict-prototypes
3982
@opindex Wno-strict-prototypes
3983
Warn if a function is declared or defined without specifying the
3984
argument types.  (An old-style function definition is permitted without
3985
a warning if preceded by a declaration which specifies the argument
3986
types.)
3987
 
3988
@item -Wold-style-declaration @r{(C and Objective-C only)}
3989
@opindex Wold-style-declaration
3990
@opindex Wno-old-style-declaration
3991
Warn for obsolescent usages, according to the C Standard, in a
3992
declaration. For example, warn if storage-class specifiers like
3993
@code{static} are not the first things in a declaration.  This warning
3994
is also enabled by @option{-Wextra}.
3995
 
3996
@item -Wold-style-definition @r{(C and Objective-C only)}
3997
@opindex Wold-style-definition
3998
@opindex Wno-old-style-definition
3999
Warn if an old-style function definition is used.  A warning is given
4000
even if there is a previous prototype.
4001
 
4002
@item -Wmissing-parameter-type @r{(C and Objective-C only)}
4003
@opindex Wmissing-parameter-type
4004
@opindex Wno-missing-parameter-type
4005
A function parameter is declared without a type specifier in K&R-style
4006
functions:
4007
 
4008
@smallexample
4009
void foo(bar) @{ @}
4010
@end smallexample
4011
 
4012
This warning is also enabled by @option{-Wextra}.
4013
 
4014
@item -Wmissing-prototypes @r{(C and Objective-C only)}
4015
@opindex Wmissing-prototypes
4016
@opindex Wno-missing-prototypes
4017
Warn if a global function is defined without a previous prototype
4018
declaration.  This warning is issued even if the definition itself
4019
provides a prototype.  The aim is to detect global functions that fail
4020
to be declared in header files.
4021
 
4022
@item -Wmissing-declarations
4023
@opindex Wmissing-declarations
4024
@opindex Wno-missing-declarations
4025
Warn if a global function is defined without a previous declaration.
4026
Do so even if the definition itself provides a prototype.
4027
Use this option to detect global functions that are not declared in
4028
header files.  In C++, no warnings are issued for function templates,
4029
or for inline functions, or for functions in anonymous namespaces.
4030
 
4031
@item -Wmissing-field-initializers
4032
@opindex Wmissing-field-initializers
4033
@opindex Wno-missing-field-initializers
4034
@opindex W
4035
@opindex Wextra
4036
@opindex Wno-extra
4037
Warn if a structure's initializer has some fields missing.  For
4038
example, the following code would cause such a warning, because
4039
@code{x.h} is implicitly zero:
4040
 
4041
@smallexample
4042
struct s @{ int f, g, h; @};
4043
struct s x = @{ 3, 4 @};
4044
@end smallexample
4045
 
4046
This option does not warn about designated initializers, so the following
4047
modification would not trigger a warning:
4048
 
4049
@smallexample
4050
struct s @{ int f, g, h; @};
4051
struct s x = @{ .f = 3, .g = 4 @};
4052
@end smallexample
4053
 
4054
This warning is included in @option{-Wextra}.  To get other @option{-Wextra}
4055
warnings without this one, use @samp{-Wextra -Wno-missing-field-initializers}.
4056
 
4057
@item -Wmissing-noreturn
4058
@opindex Wmissing-noreturn
4059
@opindex Wno-missing-noreturn
4060
Warn about functions which might be candidates for attribute @code{noreturn}.
4061
Note these are only possible candidates, not absolute ones.  Care should
4062
be taken to manually verify functions actually do not ever return before
4063
adding the @code{noreturn} attribute, otherwise subtle code generation
4064
bugs could be introduced.  You will not get a warning for @code{main} in
4065
hosted C environments.
4066
 
4067
@item -Wmissing-format-attribute
4068
@opindex Wmissing-format-attribute
4069
@opindex Wno-missing-format-attribute
4070
@opindex Wformat
4071
@opindex Wno-format
4072
Warn about function pointers which might be candidates for @code{format}
4073
attributes.  Note these are only possible candidates, not absolute ones.
4074
GCC will guess that function pointers with @code{format} attributes that
4075
are used in assignment, initialization, parameter passing or return
4076
statements should have a corresponding @code{format} attribute in the
4077
resulting type.  I.e.@: the left-hand side of the assignment or
4078
initialization, the type of the parameter variable, or the return type
4079
of the containing function respectively should also have a @code{format}
4080
attribute to avoid the warning.
4081
 
4082
GCC will also warn about function definitions which might be
4083
candidates for @code{format} attributes.  Again, these are only
4084
possible candidates.  GCC will guess that @code{format} attributes
4085
might be appropriate for any function that calls a function like
4086
@code{vprintf} or @code{vscanf}, but this might not always be the
4087
case, and some functions for which @code{format} attributes are
4088
appropriate may not be detected.
4089
 
4090
@item -Wno-multichar
4091
@opindex Wno-multichar
4092
@opindex Wmultichar
4093
Do not warn if a multicharacter constant (@samp{'FOOF'}) is used.
4094
Usually they indicate a typo in the user's code, as they have
4095
implementation-defined values, and should not be used in portable code.
4096
 
4097
@item -Wnormalized=<none|id|nfc|nfkc>
4098
@opindex Wnormalized=
4099
@cindex NFC
4100
@cindex NFKC
4101
@cindex character set, input normalization
4102
In ISO C and ISO C++, two identifiers are different if they are
4103
different sequences of characters.  However, sometimes when characters
4104
outside the basic ASCII character set are used, you can have two
4105
different character sequences that look the same.  To avoid confusion,
4106
the ISO 10646 standard sets out some @dfn{normalization rules} which
4107
when applied ensure that two sequences that look the same are turned into
4108
the same sequence.  GCC can warn you if you are using identifiers which
4109
have not been normalized; this option controls that warning.
4110
 
4111
There are four levels of warning that GCC supports.  The default is
4112
@option{-Wnormalized=nfc}, which warns about any identifier which is
4113
not in the ISO 10646 ``C'' normalized form, @dfn{NFC}.  NFC is the
4114
recommended form for most uses.
4115
 
4116
Unfortunately, there are some characters which ISO C and ISO C++ allow
4117
in identifiers that when turned into NFC aren't allowable as
4118
identifiers.  That is, there's no way to use these symbols in portable
4119
ISO C or C++ and have all your identifiers in NFC@.
4120
@option{-Wnormalized=id} suppresses the warning for these characters.
4121
It is hoped that future versions of the standards involved will correct
4122
this, which is why this option is not the default.
4123
 
4124
You can switch the warning off for all characters by writing
4125
@option{-Wnormalized=none}.  You would only want to do this if you
4126
were using some other normalization scheme (like ``D''), because
4127
otherwise you can easily create bugs that are literally impossible to see.
4128
 
4129
Some characters in ISO 10646 have distinct meanings but look identical
4130
in some fonts or display methodologies, especially once formatting has
4131
been applied.  For instance @code{\u207F}, ``SUPERSCRIPT LATIN SMALL
4132
LETTER N'', will display just like a regular @code{n} which has been
4133
placed in a superscript.  ISO 10646 defines the @dfn{NFKC}
4134
normalization scheme to convert all these into a standard form as
4135
well, and GCC will warn if your code is not in NFKC if you use
4136
@option{-Wnormalized=nfkc}.  This warning is comparable to warning
4137
about every identifier that contains the letter O because it might be
4138
confused with the digit 0, and so is not the default, but may be
4139
useful as a local coding convention if the programming environment is
4140
unable to be fixed to display these characters distinctly.
4141
 
4142
@item -Wno-deprecated
4143
@opindex Wno-deprecated
4144
@opindex Wdeprecated
4145
Do not warn about usage of deprecated features.  @xref{Deprecated Features}.
4146
 
4147
@item -Wno-deprecated-declarations
4148
@opindex Wno-deprecated-declarations
4149
@opindex Wdeprecated-declarations
4150
Do not warn about uses of functions (@pxref{Function Attributes}),
4151
variables (@pxref{Variable Attributes}), and types (@pxref{Type
4152
Attributes}) marked as deprecated by using the @code{deprecated}
4153
attribute.
4154
 
4155
@item -Wno-overflow
4156
@opindex Wno-overflow
4157
@opindex Woverflow
4158
Do not warn about compile-time overflow in constant expressions.
4159
 
4160
@item -Woverride-init @r{(C and Objective-C only)}
4161
@opindex Woverride-init
4162
@opindex Wno-override-init
4163
@opindex W
4164
@opindex Wextra
4165
@opindex Wno-extra
4166
Warn if an initialized field without side effects is overridden when
4167
using designated initializers (@pxref{Designated Inits, , Designated
4168
Initializers}).
4169
 
4170
This warning is included in @option{-Wextra}.  To get other
4171
@option{-Wextra} warnings without this one, use @samp{-Wextra
4172
-Wno-override-init}.
4173
 
4174
@item -Wpacked
4175
@opindex Wpacked
4176
@opindex Wno-packed
4177
Warn if a structure is given the packed attribute, but the packed
4178
attribute has no effect on the layout or size of the structure.
4179
Such structures may be mis-aligned for little benefit.  For
4180
instance, in this code, the variable @code{f.x} in @code{struct bar}
4181
will be misaligned even though @code{struct bar} does not itself
4182
have the packed attribute:
4183
 
4184
@smallexample
4185
@group
4186
struct foo @{
4187
  int x;
4188
  char a, b, c, d;
4189
@} __attribute__((packed));
4190
struct bar @{
4191
  char z;
4192
  struct foo f;
4193
@};
4194
@end group
4195
@end smallexample
4196
 
4197
@item -Wpacked-bitfield-compat
4198
@opindex Wpacked-bitfield-compat
4199
@opindex Wno-packed-bitfield-compat
4200
The 4.1, 4.2 and 4.3 series of GCC ignore the @code{packed} attribute
4201
on bit-fields of type @code{char}.  This has been fixed in GCC 4.4 but
4202
the change can lead to differences in the structure layout.  GCC
4203
informs you when the offset of such a field has changed in GCC 4.4.
4204
For example there is no longer a 4-bit padding between field @code{a}
4205
and @code{b} in this structure:
4206
 
4207
@smallexample
4208
struct foo
4209
@{
4210
  char a:4;
4211
  char b:8;
4212
@} __attribute__ ((packed));
4213
@end smallexample
4214
 
4215
This warning is enabled by default.  Use
4216
@option{-Wno-packed-bitfield-compat} to disable this warning.
4217
 
4218
@item -Wpadded
4219
@opindex Wpadded
4220
@opindex Wno-padded
4221
Warn if padding is included in a structure, either to align an element
4222
of the structure or to align the whole structure.  Sometimes when this
4223
happens it is possible to rearrange the fields of the structure to
4224
reduce the padding and so make the structure smaller.
4225
 
4226
@item -Wredundant-decls
4227
@opindex Wredundant-decls
4228
@opindex Wno-redundant-decls
4229
Warn if anything is declared more than once in the same scope, even in
4230
cases where multiple declaration is valid and changes nothing.
4231
 
4232
@item -Wnested-externs @r{(C and Objective-C only)}
4233
@opindex Wnested-externs
4234
@opindex Wno-nested-externs
4235
Warn if an @code{extern} declaration is encountered within a function.
4236
 
4237
@item -Winline
4238
@opindex Winline
4239
@opindex Wno-inline
4240
Warn if a function can not be inlined and it was declared as inline.
4241
Even with this option, the compiler will not warn about failures to
4242
inline functions declared in system headers.
4243
 
4244
The compiler uses a variety of heuristics to determine whether or not
4245
to inline a function.  For example, the compiler takes into account
4246
the size of the function being inlined and the amount of inlining
4247
that has already been done in the current function.  Therefore,
4248
seemingly insignificant changes in the source program can cause the
4249
warnings produced by @option{-Winline} to appear or disappear.
4250
 
4251
@item -Wno-invalid-offsetof @r{(C++ and Objective-C++ only)}
4252
@opindex Wno-invalid-offsetof
4253
@opindex Winvalid-offsetof
4254
Suppress warnings from applying the @samp{offsetof} macro to a non-POD
4255
type.  According to the 1998 ISO C++ standard, applying @samp{offsetof}
4256
to a non-POD type is undefined.  In existing C++ implementations,
4257
however, @samp{offsetof} typically gives meaningful results even when
4258
applied to certain kinds of non-POD types. (Such as a simple
4259
@samp{struct} that fails to be a POD type only by virtue of having a
4260
constructor.)  This flag is for users who are aware that they are
4261
writing nonportable code and who have deliberately chosen to ignore the
4262
warning about it.
4263
 
4264
The restrictions on @samp{offsetof} may be relaxed in a future version
4265
of the C++ standard.
4266
 
4267
@item -Wno-int-to-pointer-cast @r{(C and Objective-C only)}
4268
@opindex Wno-int-to-pointer-cast
4269
@opindex Wint-to-pointer-cast
4270
Suppress warnings from casts to pointer type of an integer of a
4271
different size.
4272
 
4273
@item -Wno-pointer-to-int-cast @r{(C and Objective-C only)}
4274
@opindex Wno-pointer-to-int-cast
4275
@opindex Wpointer-to-int-cast
4276
Suppress warnings from casts from a pointer to an integer type of a
4277
different size.
4278
 
4279
@item -Winvalid-pch
4280
@opindex Winvalid-pch
4281
@opindex Wno-invalid-pch
4282
Warn if a precompiled header (@pxref{Precompiled Headers}) is found in
4283
the search path but can't be used.
4284
 
4285
@item -Wlong-long
4286
@opindex Wlong-long
4287
@opindex Wno-long-long
4288
Warn if @samp{long long} type is used.  This is enabled by either
4289
@option{-pedantic} or @option{-Wtraditional} in ISO C90 and C++98
4290
modes.  To inhibit the warning messages, use @option{-Wno-long-long}.
4291
 
4292
@item -Wvariadic-macros
4293
@opindex Wvariadic-macros
4294
@opindex Wno-variadic-macros
4295
Warn if variadic macros are used in pedantic ISO C90 mode, or the GNU
4296
alternate syntax when in pedantic ISO C99 mode.  This is default.
4297
To inhibit the warning messages, use @option{-Wno-variadic-macros}.
4298
 
4299
@item -Wvla
4300
@opindex Wvla
4301
@opindex Wno-vla
4302
Warn if variable length array is used in the code.
4303
@option{-Wno-vla} will prevent the @option{-pedantic} warning of
4304
the variable length array.
4305
 
4306
@item -Wvolatile-register-var
4307
@opindex Wvolatile-register-var
4308
@opindex Wno-volatile-register-var
4309
Warn if a register variable is declared volatile.  The volatile
4310
modifier does not inhibit all optimizations that may eliminate reads
4311
and/or writes to register variables.  This warning is enabled by
4312
@option{-Wall}.
4313
 
4314
@item -Wdisabled-optimization
4315
@opindex Wdisabled-optimization
4316
@opindex Wno-disabled-optimization
4317
Warn if a requested optimization pass is disabled.  This warning does
4318
not generally indicate that there is anything wrong with your code; it
4319
merely indicates that GCC's optimizers were unable to handle the code
4320
effectively.  Often, the problem is that your code is too big or too
4321
complex; GCC will refuse to optimize programs when the optimization
4322
itself is likely to take inordinate amounts of time.
4323
 
4324
@item -Wpointer-sign @r{(C and Objective-C only)}
4325
@opindex Wpointer-sign
4326
@opindex Wno-pointer-sign
4327
Warn for pointer argument passing or assignment with different signedness.
4328
This option is only supported for C and Objective-C@.  It is implied by
4329
@option{-Wall} and by @option{-pedantic}, which can be disabled with
4330
@option{-Wno-pointer-sign}.
4331
 
4332
@item -Wstack-protector
4333
@opindex Wstack-protector
4334
@opindex Wno-stack-protector
4335
This option is only active when @option{-fstack-protector} is active.  It
4336
warns about functions that will not be protected against stack smashing.
4337
 
4338
@item -Wno-mudflap
4339
@opindex Wno-mudflap
4340
Suppress warnings about constructs that cannot be instrumented by
4341
@option{-fmudflap}.
4342
 
4343
@item -Woverlength-strings
4344
@opindex Woverlength-strings
4345
@opindex Wno-overlength-strings
4346
Warn about string constants which are longer than the ``minimum
4347
maximum'' length specified in the C standard.  Modern compilers
4348
generally allow string constants which are much longer than the
4349
standard's minimum limit, but very portable programs should avoid
4350
using longer strings.
4351
 
4352
The limit applies @emph{after} string constant concatenation, and does
4353
not count the trailing NUL@.  In C90, the limit was 509 characters; in
4354
C99, it was raised to 4095.  C++98 does not specify a normative
4355
minimum maximum, so we do not diagnose overlength strings in C++@.
4356
 
4357
This option is implied by @option{-pedantic}, and can be disabled with
4358
@option{-Wno-overlength-strings}.
4359
 
4360
@item -Wunsuffixed-float-constants @r{(C and Objective-C only)}
4361
@opindex Wunsuffixed-float-constants
4362
 
4363
GCC will issue a warning for any floating constant that does not have
4364
a suffix.  When used together with @option{-Wsystem-headers} it will
4365
warn about such constants in system header files.  This can be useful
4366
when preparing code to use with the @code{FLOAT_CONST_DECIMAL64} pragma
4367
from the decimal floating-point extension to C99.
4368
@end table
4369
 
4370
@node Debugging Options
4371
@section Options for Debugging Your Program or GCC
4372
@cindex options, debugging
4373
@cindex debugging information options
4374
 
4375
GCC has various special options that are used for debugging
4376
either your program or GCC:
4377
 
4378
@table @gcctabopt
4379
@item -g
4380
@opindex g
4381
Produce debugging information in the operating system's native format
4382
(stabs, COFF, XCOFF, or DWARF 2)@.  GDB can work with this debugging
4383
information.
4384
 
4385
On most systems that use stabs format, @option{-g} enables use of extra
4386
debugging information that only GDB can use; this extra information
4387
makes debugging work better in GDB but will probably make other debuggers
4388
crash or
4389
refuse to read the program.  If you want to control for certain whether
4390
to generate the extra information, use @option{-gstabs+}, @option{-gstabs},
4391
@option{-gxcoff+}, @option{-gxcoff}, or @option{-gvms} (see below).
4392
 
4393
GCC allows you to use @option{-g} with
4394
@option{-O}.  The shortcuts taken by optimized code may occasionally
4395
produce surprising results: some variables you declared may not exist
4396
at all; flow of control may briefly move where you did not expect it;
4397
some statements may not be executed because they compute constant
4398
results or their values were already at hand; some statements may
4399
execute in different places because they were moved out of loops.
4400
 
4401
Nevertheless it proves possible to debug optimized output.  This makes
4402
it reasonable to use the optimizer for programs that might have bugs.
4403
 
4404
The following options are useful when GCC is generated with the
4405
capability for more than one debugging format.
4406
 
4407
@item -ggdb
4408
@opindex ggdb
4409
Produce debugging information for use by GDB@.  This means to use the
4410
most expressive format available (DWARF 2, stabs, or the native format
4411
if neither of those are supported), including GDB extensions if at all
4412
possible.
4413
 
4414
@item -gstabs
4415
@opindex gstabs
4416
Produce debugging information in stabs format (if that is supported),
4417
without GDB extensions.  This is the format used by DBX on most BSD
4418
systems.  On MIPS, Alpha and System V Release 4 systems this option
4419
produces stabs debugging output which is not understood by DBX or SDB@.
4420
On System V Release 4 systems this option requires the GNU assembler.
4421
 
4422
@item -feliminate-unused-debug-symbols
4423
@opindex feliminate-unused-debug-symbols
4424
Produce debugging information in stabs format (if that is supported),
4425
for only symbols that are actually used.
4426
 
4427
@item -femit-class-debug-always
4428
Instead of emitting debugging information for a C++ class in only one
4429
object file, emit it in all object files using the class.  This option
4430
should be used only with debuggers that are unable to handle the way GCC
4431
normally emits debugging information for classes because using this
4432
option will increase the size of debugging information by as much as a
4433
factor of two.
4434
 
4435
@item -gstabs+
4436
@opindex gstabs+
4437
Produce debugging information in stabs format (if that is supported),
4438
using GNU extensions understood only by the GNU debugger (GDB)@.  The
4439
use of these extensions is likely to make other debuggers crash or
4440
refuse to read the program.
4441
 
4442
@item -gcoff
4443
@opindex gcoff
4444
Produce debugging information in COFF format (if that is supported).
4445
This is the format used by SDB on most System V systems prior to
4446
System V Release 4.
4447
 
4448
@item -gxcoff
4449
@opindex gxcoff
4450
Produce debugging information in XCOFF format (if that is supported).
4451
This is the format used by the DBX debugger on IBM RS/6000 systems.
4452
 
4453
@item -gxcoff+
4454
@opindex gxcoff+
4455
Produce debugging information in XCOFF format (if that is supported),
4456
using GNU extensions understood only by the GNU debugger (GDB)@.  The
4457
use of these extensions is likely to make other debuggers crash or
4458
refuse to read the program, and may cause assemblers other than the GNU
4459
assembler (GAS) to fail with an error.
4460
 
4461
@item -gdwarf-@var{version}
4462
@opindex gdwarf-@var{version}
4463
Produce debugging information in DWARF format (if that is
4464
supported).  This is the format used by DBX on IRIX 6.  The value
4465
of @var{version} may be either 2, 3 or 4; the default version is 2.
4466
 
4467
Note that with DWARF version 2 some ports require, and will always
4468
use, some non-conflicting DWARF 3 extensions in the unwind tables.
4469
 
4470
Version 4 may require GDB 7.0 and @option{-fvar-tracking-assignments}
4471
for maximum benefit.
4472
 
4473
@item -gstrict-dwarf
4474
@opindex gstrict-dwarf
4475
Disallow using extensions of later DWARF standard version than selected
4476
with @option{-gdwarf-@var{version}}.  On most targets using non-conflicting
4477
DWARF extensions from later standard versions is allowed.
4478
 
4479
@item -gno-strict-dwarf
4480
@opindex gno-strict-dwarf
4481
Allow using extensions of later DWARF standard version than selected with
4482
@option{-gdwarf-@var{version}}.
4483
 
4484
@item -gvms
4485
@opindex gvms
4486
Produce debugging information in VMS debug format (if that is
4487
supported).  This is the format used by DEBUG on VMS systems.
4488
 
4489
@item -g@var{level}
4490
@itemx -ggdb@var{level}
4491
@itemx -gstabs@var{level}
4492
@itemx -gcoff@var{level}
4493
@itemx -gxcoff@var{level}
4494
@itemx -gvms@var{level}
4495
Request debugging information and also use @var{level} to specify how
4496
much information.  The default level is 2.
4497
 
4498
Level 0 produces no debug information at all.  Thus, @option{-g0} negates
4499
@option{-g}.
4500
 
4501
Level 1 produces minimal information, enough for making backtraces in
4502
parts of the program that you don't plan to debug.  This includes
4503
descriptions of functions and external variables, but no information
4504
about local variables and no line numbers.
4505
 
4506
Level 3 includes extra information, such as all the macro definitions
4507
present in the program.  Some debuggers support macro expansion when
4508
you use @option{-g3}.
4509
 
4510
@option{-gdwarf-2} does not accept a concatenated debug level, because
4511
GCC used to support an option @option{-gdwarf} that meant to generate
4512
debug information in version 1 of the DWARF format (which is very
4513
different from version 2), and it would have been too confusing.  That
4514
debug format is long obsolete, but the option cannot be changed now.
4515
Instead use an additional @option{-g@var{level}} option to change the
4516
debug level for DWARF.
4517
 
4518
@item -gtoggle
4519
@opindex gtoggle
4520
Turn off generation of debug info, if leaving out this option would have
4521
generated it, or turn it on at level 2 otherwise.  The position of this
4522
argument in the command line does not matter, it takes effect after all
4523
other options are processed, and it does so only once, no matter how
4524
many times it is given.  This is mainly intended to be used with
4525
@option{-fcompare-debug}.
4526
 
4527
@item -fdump-final-insns@r{[}=@var{file}@r{]}
4528
@opindex fdump-final-insns
4529
Dump the final internal representation (RTL) to @var{file}.  If the
4530
optional argument is omitted (or if @var{file} is @code{.}), the name
4531
of the dump file will be determined by appending @code{.gkd} to the
4532
compilation output file name.
4533
 
4534
@item -fcompare-debug@r{[}=@var{opts}@r{]}
4535
@opindex fcompare-debug
4536
@opindex fno-compare-debug
4537
If no error occurs during compilation, run the compiler a second time,
4538
adding @var{opts} and @option{-fcompare-debug-second} to the arguments
4539
passed to the second compilation.  Dump the final internal
4540
representation in both compilations, and print an error if they differ.
4541
 
4542
If the equal sign is omitted, the default @option{-gtoggle} is used.
4543
 
4544
The environment variable @env{GCC_COMPARE_DEBUG}, if defined, non-empty
4545
and nonzero, implicitly enables @option{-fcompare-debug}.  If
4546
@env{GCC_COMPARE_DEBUG} is defined to a string starting with a dash,
4547
then it is used for @var{opts}, otherwise the default @option{-gtoggle}
4548
is used.
4549
 
4550
@option{-fcompare-debug=}, with the equal sign but without @var{opts},
4551
is equivalent to @option{-fno-compare-debug}, which disables the dumping
4552
of the final representation and the second compilation, preventing even
4553
@env{GCC_COMPARE_DEBUG} from taking effect.
4554
 
4555
To verify full coverage during @option{-fcompare-debug} testing, set
4556
@env{GCC_COMPARE_DEBUG} to say @samp{-fcompare-debug-not-overridden},
4557
which GCC will reject as an invalid option in any actual compilation
4558
(rather than preprocessing, assembly or linking).  To get just a
4559
warning, setting @env{GCC_COMPARE_DEBUG} to @samp{-w%n-fcompare-debug
4560
not overridden} will do.
4561
 
4562
@item -fcompare-debug-second
4563
@opindex fcompare-debug-second
4564
This option is implicitly passed to the compiler for the second
4565
compilation requested by @option{-fcompare-debug}, along with options to
4566
silence warnings, and omitting other options that would cause
4567
side-effect compiler outputs to files or to the standard output.  Dump
4568
files and preserved temporary files are renamed so as to contain the
4569
@code{.gk} additional extension during the second compilation, to avoid
4570
overwriting those generated by the first.
4571
 
4572
When this option is passed to the compiler driver, it causes the
4573
@emph{first} compilation to be skipped, which makes it useful for little
4574
other than debugging the compiler proper.
4575
 
4576
@item -feliminate-dwarf2-dups
4577
@opindex feliminate-dwarf2-dups
4578
Compress DWARF2 debugging information by eliminating duplicated
4579
information about each symbol.  This option only makes sense when
4580
generating DWARF2 debugging information with @option{-gdwarf-2}.
4581
 
4582
@item -femit-struct-debug-baseonly
4583
Emit debug information for struct-like types
4584
only when the base name of the compilation source file
4585
matches the base name of file in which the struct was defined.
4586
 
4587
This option substantially reduces the size of debugging information,
4588
but at significant potential loss in type information to the debugger.
4589
See @option{-femit-struct-debug-reduced} for a less aggressive option.
4590
See @option{-femit-struct-debug-detailed} for more detailed control.
4591
 
4592
This option works only with DWARF 2.
4593
 
4594
@item -femit-struct-debug-reduced
4595
Emit debug information for struct-like types
4596
only when the base name of the compilation source file
4597
matches the base name of file in which the type was defined,
4598
unless the struct is a template or defined in a system header.
4599
 
4600
This option significantly reduces the size of debugging information,
4601
with some potential loss in type information to the debugger.
4602
See @option{-femit-struct-debug-baseonly} for a more aggressive option.
4603
See @option{-femit-struct-debug-detailed} for more detailed control.
4604
 
4605
This option works only with DWARF 2.
4606
 
4607
@item -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]}
4608
Specify the struct-like types
4609
for which the compiler will generate debug information.
4610
The intent is to reduce duplicate struct debug information
4611
between different object files within the same program.
4612
 
4613
This option is a detailed version of
4614
@option{-femit-struct-debug-reduced} and @option{-femit-struct-debug-baseonly},
4615
which will serve for most needs.
4616
 
4617
A specification has the syntax
4618
[@samp{dir:}|@samp{ind:}][@samp{ord:}|@samp{gen:}](@samp{any}|@samp{sys}|@samp{base}|@samp{none})
4619
 
4620
The optional first word limits the specification to
4621
structs that are used directly (@samp{dir:}) or used indirectly (@samp{ind:}).
4622
A struct type is used directly when it is the type of a variable, member.
4623
Indirect uses arise through pointers to structs.
4624
That is, when use of an incomplete struct would be legal, the use is indirect.
4625
An example is
4626
@samp{struct one direct; struct two * indirect;}.
4627
 
4628
The optional second word limits the specification to
4629
ordinary structs (@samp{ord:}) or generic structs (@samp{gen:}).
4630
Generic structs are a bit complicated to explain.
4631
For C++, these are non-explicit specializations of template classes,
4632
or non-template classes within the above.
4633
Other programming languages have generics,
4634
but @samp{-femit-struct-debug-detailed} does not yet implement them.
4635
 
4636
The third word specifies the source files for those
4637
structs for which the compiler will emit debug information.
4638
The values @samp{none} and @samp{any} have the normal meaning.
4639
The value @samp{base} means that
4640
the base of name of the file in which the type declaration appears
4641
must match the base of the name of the main compilation file.
4642
In practice, this means that
4643
types declared in @file{foo.c} and @file{foo.h} will have debug information,
4644
but types declared in other header will not.
4645
The value @samp{sys} means those types satisfying @samp{base}
4646
or declared in system or compiler headers.
4647
 
4648
You may need to experiment to determine the best settings for your application.
4649
 
4650
The default is @samp{-femit-struct-debug-detailed=all}.
4651
 
4652
This option works only with DWARF 2.
4653
 
4654
@item -fenable-icf-debug
4655
@opindex fenable-icf-debug
4656
Generate additional debug information to support identical code folding (ICF).
4657
This option only works with DWARF version 2 or higher.
4658
 
4659
@item -fno-merge-debug-strings
4660
@opindex fmerge-debug-strings
4661
@opindex fno-merge-debug-strings
4662
Direct the linker to not merge together strings in the debugging
4663
information which are identical in different object files.  Merging is
4664
not supported by all assemblers or linkers.  Merging decreases the size
4665
of the debug information in the output file at the cost of increasing
4666
link processing time.  Merging is enabled by default.
4667
 
4668
@item -fdebug-prefix-map=@var{old}=@var{new}
4669
@opindex fdebug-prefix-map
4670
When compiling files in directory @file{@var{old}}, record debugging
4671
information describing them as in @file{@var{new}} instead.
4672
 
4673
@item -fno-dwarf2-cfi-asm
4674
@opindex fdwarf2-cfi-asm
4675
@opindex fno-dwarf2-cfi-asm
4676
Emit DWARF 2 unwind info as compiler generated @code{.eh_frame} section
4677
instead of using GAS @code{.cfi_*} directives.
4678
 
4679
@cindex @command{prof}
4680
@item -p
4681
@opindex p
4682
Generate extra code to write profile information suitable for the
4683
analysis program @command{prof}.  You must use this option when compiling
4684
the source files you want data about, and you must also use it when
4685
linking.
4686
 
4687
@cindex @command{gprof}
4688
@item -pg
4689
@opindex pg
4690
Generate extra code to write profile information suitable for the
4691
analysis program @command{gprof}.  You must use this option when compiling
4692
the source files you want data about, and you must also use it when
4693
linking.
4694
 
4695
@item -Q
4696
@opindex Q
4697
Makes the compiler print out each function name as it is compiled, and
4698
print some statistics about each pass when it finishes.
4699
 
4700
@item -ftime-report
4701
@opindex ftime-report
4702
Makes the compiler print some statistics about the time consumed by each
4703
pass when it finishes.
4704
 
4705
@item -fmem-report
4706
@opindex fmem-report
4707
Makes the compiler print some statistics about permanent memory
4708
allocation when it finishes.
4709
 
4710
@item -fpre-ipa-mem-report
4711
@opindex fpre-ipa-mem-report
4712
@item -fpost-ipa-mem-report
4713
@opindex fpost-ipa-mem-report
4714
Makes the compiler print some statistics about permanent memory
4715
allocation before or after interprocedural optimization.
4716
 
4717
@item -fprofile-arcs
4718
@opindex fprofile-arcs
4719
Add code so that program flow @dfn{arcs} are instrumented.  During
4720
execution the program records how many times each branch and call is
4721
executed and how many times it is taken or returns.  When the compiled
4722
program exits it saves this data to a file called
4723
@file{@var{auxname}.gcda} for each source file.  The data may be used for
4724
profile-directed optimizations (@option{-fbranch-probabilities}), or for
4725
test coverage analysis (@option{-ftest-coverage}).  Each object file's
4726
@var{auxname} is generated from the name of the output file, if
4727
explicitly specified and it is not the final executable, otherwise it is
4728
the basename of the source file.  In both cases any suffix is removed
4729
(e.g.@: @file{foo.gcda} for input file @file{dir/foo.c}, or
4730
@file{dir/foo.gcda} for output file specified as @option{-o dir/foo.o}).
4731
@xref{Cross-profiling}.
4732
 
4733
@cindex @command{gcov}
4734
@item --coverage
4735
@opindex coverage
4736
 
4737
This option is used to compile and link code instrumented for coverage
4738
analysis.  The option is a synonym for @option{-fprofile-arcs}
4739
@option{-ftest-coverage} (when compiling) and @option{-lgcov} (when
4740
linking).  See the documentation for those options for more details.
4741
 
4742
@itemize
4743
 
4744
@item
4745
Compile the source files with @option{-fprofile-arcs} plus optimization
4746
and code generation options.  For test coverage analysis, use the
4747
additional @option{-ftest-coverage} option.  You do not need to profile
4748
every source file in a program.
4749
 
4750
@item
4751
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
4752
(the latter implies the former).
4753
 
4754
@item
4755
Run the program on a representative workload to generate the arc profile
4756
information.  This may be repeated any number of times.  You can run
4757
concurrent instances of your program, and provided that the file system
4758
supports locking, the data files will be correctly updated.  Also
4759
@code{fork} calls are detected and correctly handled (double counting
4760
will not happen).
4761
 
4762
@item
4763
For profile-directed optimizations, compile the source files again with
4764
the same optimization and code generation options plus
4765
@option{-fbranch-probabilities} (@pxref{Optimize Options,,Options that
4766
Control Optimization}).
4767
 
4768
@item
4769
For test coverage analysis, use @command{gcov} to produce human readable
4770
information from the @file{.gcno} and @file{.gcda} files.  Refer to the
4771
@command{gcov} documentation for further information.
4772
 
4773
@end itemize
4774
 
4775
With @option{-fprofile-arcs}, for each function of your program GCC
4776
creates a program flow graph, then finds a spanning tree for the graph.
4777
Only arcs that are not on the spanning tree have to be instrumented: the
4778
compiler adds code to count the number of times that these arcs are
4779
executed.  When an arc is the only exit or only entrance to a block, the
4780
instrumentation code can be added to the block; otherwise, a new basic
4781
block must be created to hold the instrumentation code.
4782
 
4783
@need 2000
4784
@item -ftest-coverage
4785
@opindex ftest-coverage
4786
Produce a notes file that the @command{gcov} code-coverage utility
4787
(@pxref{Gcov,, @command{gcov}---a Test Coverage Program}) can use to
4788
show program coverage.  Each source file's note file is called
4789
@file{@var{auxname}.gcno}.  Refer to the @option{-fprofile-arcs} option
4790
above for a description of @var{auxname} and instructions on how to
4791
generate test coverage data.  Coverage data will match the source files
4792
more closely, if you do not optimize.
4793
 
4794
@item -fdbg-cnt-list
4795
@opindex fdbg-cnt-list
4796
Print the name and the counter upperbound for all debug counters.
4797
 
4798
@item -fdbg-cnt=@var{counter-value-list}
4799
@opindex fdbg-cnt
4800
Set the internal debug counter upperbound. @var{counter-value-list}
4801
is a comma-separated list of @var{name}:@var{value} pairs
4802
which sets the upperbound of each debug counter @var{name} to @var{value}.
4803
All debug counters have the initial upperbound of @var{UINT_MAX},
4804
thus dbg_cnt() returns true always unless the upperbound is set by this option.
4805
e.g. With -fdbg-cnt=dce:10,tail_call:0
4806
dbg_cnt(dce) will return true only for first 10 invocations
4807
and dbg_cnt(tail_call) will return false always.
4808
 
4809
@item -d@var{letters}
4810
@itemx -fdump-rtl-@var{pass}
4811
@opindex d
4812
Says to make debugging dumps during compilation at times specified by
4813
@var{letters}.  This is used for debugging the RTL-based passes of the
4814
compiler.  The file names for most of the dumps are made by appending
4815
a pass number and a word to the @var{dumpname}, and the files are
4816
created in the directory of the output file.  @var{dumpname} is
4817
generated from the name of the output file, if explicitly specified
4818
and it is not an executable, otherwise it is the basename of the
4819
source file. These switches may have different effects when
4820
@option{-E} is used for preprocessing.
4821
 
4822
Debug dumps can be enabled with a @option{-fdump-rtl} switch or some
4823
@option{-d} option @var{letters}.  Here are the possible
4824
letters for use in @var{pass} and @var{letters}, and their meanings:
4825
 
4826
@table @gcctabopt
4827
 
4828
@item -fdump-rtl-alignments
4829
@opindex fdump-rtl-alignments
4830
Dump after branch alignments have been computed.
4831
 
4832
@item -fdump-rtl-asmcons
4833
@opindex fdump-rtl-asmcons
4834
Dump after fixing rtl statements that have unsatisfied in/out constraints.
4835
 
4836
@item -fdump-rtl-auto_inc_dec
4837
@opindex fdump-rtl-auto_inc_dec
4838
Dump after auto-inc-dec discovery.  This pass is only run on
4839
architectures that have auto inc or auto dec instructions.
4840
 
4841
@item -fdump-rtl-barriers
4842
@opindex fdump-rtl-barriers
4843
Dump after cleaning up the barrier instructions.
4844
 
4845
@item -fdump-rtl-bbpart
4846
@opindex fdump-rtl-bbpart
4847
Dump after partitioning hot and cold basic blocks.
4848
 
4849
@item -fdump-rtl-bbro
4850
@opindex fdump-rtl-bbro
4851
Dump after block reordering.
4852
 
4853
@item -fdump-rtl-btl1
4854
@itemx -fdump-rtl-btl2
4855
@opindex fdump-rtl-btl2
4856
@opindex fdump-rtl-btl2
4857
@option{-fdump-rtl-btl1} and @option{-fdump-rtl-btl2} enable dumping
4858
after the two branch
4859
target load optimization passes.
4860
 
4861
@item -fdump-rtl-bypass
4862
@opindex fdump-rtl-bypass
4863
Dump after jump bypassing and control flow optimizations.
4864
 
4865
@item -fdump-rtl-combine
4866
@opindex fdump-rtl-combine
4867
Dump after the RTL instruction combination pass.
4868
 
4869
@item -fdump-rtl-compgotos
4870
@opindex fdump-rtl-compgotos
4871
Dump after duplicating the computed gotos.
4872
 
4873
@item -fdump-rtl-ce1
4874
@itemx -fdump-rtl-ce2
4875
@itemx -fdump-rtl-ce3
4876
@opindex fdump-rtl-ce1
4877
@opindex fdump-rtl-ce2
4878
@opindex fdump-rtl-ce3
4879
@option{-fdump-rtl-ce1}, @option{-fdump-rtl-ce2}, and
4880
@option{-fdump-rtl-ce3} enable dumping after the three
4881
if conversion passes.
4882
 
4883
@itemx -fdump-rtl-cprop_hardreg
4884
@opindex fdump-rtl-cprop_hardreg
4885
Dump after hard register copy propagation.
4886
 
4887
@itemx -fdump-rtl-csa
4888
@opindex fdump-rtl-csa
4889
Dump after combining stack adjustments.
4890
 
4891
@item -fdump-rtl-cse1
4892
@itemx -fdump-rtl-cse2
4893
@opindex fdump-rtl-cse1
4894
@opindex fdump-rtl-cse2
4895
@option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
4896
the two common sub-expression elimination passes.
4897
 
4898
@itemx -fdump-rtl-dce
4899
@opindex fdump-rtl-dce
4900
Dump after the standalone dead code elimination passes.
4901
 
4902
@itemx -fdump-rtl-dbr
4903
@opindex fdump-rtl-dbr
4904
Dump after delayed branch scheduling.
4905
 
4906
@item -fdump-rtl-dce1
4907
@itemx -fdump-rtl-dce2
4908
@opindex fdump-rtl-dce1
4909
@opindex fdump-rtl-dce2
4910
@option{-fdump-rtl-dce1} and @option{-fdump-rtl-dce2} enable dumping after
4911
the two dead store elimination passes.
4912
 
4913
@item -fdump-rtl-eh
4914
@opindex fdump-rtl-eh
4915
Dump after finalization of EH handling code.
4916
 
4917
@item -fdump-rtl-eh_ranges
4918
@opindex fdump-rtl-eh_ranges
4919
Dump after conversion of EH handling range regions.
4920
 
4921
@item -fdump-rtl-expand
4922
@opindex fdump-rtl-expand
4923
Dump after RTL generation.
4924
 
4925
@item -fdump-rtl-fwprop1
4926
@itemx -fdump-rtl-fwprop2
4927
@opindex fdump-rtl-fwprop1
4928
@opindex fdump-rtl-fwprop2
4929
@option{-fdump-rtl-fwprop1} and @option{-fdump-rtl-fwprop2} enable
4930
dumping after the two forward propagation passes.
4931
 
4932
@item -fdump-rtl-gcse1
4933
@itemx -fdump-rtl-gcse2
4934
@opindex fdump-rtl-gcse1
4935
@opindex fdump-rtl-gcse2
4936
@option{-fdump-rtl-gcse1} and @option{-fdump-rtl-gcse2} enable dumping
4937
after global common subexpression elimination.
4938
 
4939
@item -fdump-rtl-init-regs
4940
@opindex fdump-rtl-init-regs
4941
Dump after the initialization of the registers.
4942
 
4943
@item -fdump-rtl-initvals
4944
@opindex fdump-rtl-initvals
4945
Dump after the computation of the initial value sets.
4946
 
4947
@itemx -fdump-rtl-into_cfglayout
4948
@opindex fdump-rtl-into_cfglayout
4949
Dump after converting to cfglayout mode.
4950
 
4951
@item -fdump-rtl-ira
4952
@opindex fdump-rtl-ira
4953
Dump after iterated register allocation.
4954
 
4955
@item -fdump-rtl-jump
4956
@opindex fdump-rtl-jump
4957
Dump after the second jump optimization.
4958
 
4959
@item -fdump-rtl-loop2
4960
@opindex fdump-rtl-loop2
4961
@option{-fdump-rtl-loop2} enables dumping after the rtl
4962
loop optimization passes.
4963
 
4964
@item -fdump-rtl-mach
4965
@opindex fdump-rtl-mach
4966
Dump after performing the machine dependent reorganization pass, if that
4967
pass exists.
4968
 
4969
@item -fdump-rtl-mode_sw
4970
@opindex fdump-rtl-mode_sw
4971
Dump after removing redundant mode switches.
4972
 
4973
@item -fdump-rtl-rnreg
4974
@opindex fdump-rtl-rnreg
4975
Dump after register renumbering.
4976
 
4977
@itemx -fdump-rtl-outof_cfglayout
4978
@opindex fdump-rtl-outof_cfglayout
4979
Dump after converting from cfglayout mode.
4980
 
4981
@item -fdump-rtl-peephole2
4982
@opindex fdump-rtl-peephole2
4983
Dump after the peephole pass.
4984
 
4985
@item -fdump-rtl-postreload
4986
@opindex fdump-rtl-postreload
4987
Dump after post-reload optimizations.
4988
 
4989
@itemx -fdump-rtl-pro_and_epilogue
4990
@opindex fdump-rtl-pro_and_epilogue
4991
Dump after generating the function pro and epilogues.
4992
 
4993
@item -fdump-rtl-regmove
4994
@opindex fdump-rtl-regmove
4995
Dump after the register move pass.
4996
 
4997
@item -fdump-rtl-sched1
4998
@itemx -fdump-rtl-sched2
4999
@opindex fdump-rtl-sched1
5000
@opindex fdump-rtl-sched2
5001
@option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2} enable dumping
5002
after the basic block scheduling passes.
5003
 
5004
@item -fdump-rtl-see
5005
@opindex fdump-rtl-see
5006
Dump after sign extension elimination.
5007
 
5008
@item -fdump-rtl-seqabstr
5009
@opindex fdump-rtl-seqabstr
5010
Dump after common sequence discovery.
5011
 
5012
@item -fdump-rtl-shorten
5013
@opindex fdump-rtl-shorten
5014
Dump after shortening branches.
5015
 
5016
@item -fdump-rtl-sibling
5017
@opindex fdump-rtl-sibling
5018
Dump after sibling call optimizations.
5019
 
5020
@item -fdump-rtl-split1
5021
@itemx -fdump-rtl-split2
5022
@itemx -fdump-rtl-split3
5023
@itemx -fdump-rtl-split4
5024
@itemx -fdump-rtl-split5
5025
@opindex fdump-rtl-split1
5026
@opindex fdump-rtl-split2
5027
@opindex fdump-rtl-split3
5028
@opindex fdump-rtl-split4
5029
@opindex fdump-rtl-split5
5030
@option{-fdump-rtl-split1}, @option{-fdump-rtl-split2},
5031
@option{-fdump-rtl-split3}, @option{-fdump-rtl-split4} and
5032
@option{-fdump-rtl-split5} enable dumping after five rounds of
5033
instruction splitting.
5034
 
5035
@item -fdump-rtl-sms
5036
@opindex fdump-rtl-sms
5037
Dump after modulo scheduling.  This pass is only run on some
5038
architectures.
5039
 
5040
@item -fdump-rtl-stack
5041
@opindex fdump-rtl-stack
5042
Dump after conversion from GCC's "flat register file" registers to the
5043
x87's stack-like registers.  This pass is only run on x86 variants.
5044
 
5045
@item -fdump-rtl-subreg1
5046
@itemx -fdump-rtl-subreg2
5047
@opindex fdump-rtl-subreg1
5048
@opindex fdump-rtl-subreg2
5049
@option{-fdump-rtl-subreg1} and @option{-fdump-rtl-subreg2} enable dumping after
5050
the two subreg expansion passes.
5051
 
5052
@item -fdump-rtl-unshare
5053
@opindex fdump-rtl-unshare
5054
Dump after all rtl has been unshared.
5055
 
5056
@item -fdump-rtl-vartrack
5057
@opindex fdump-rtl-vartrack
5058
Dump after variable tracking.
5059
 
5060
@item -fdump-rtl-vregs
5061
@opindex fdump-rtl-vregs
5062
Dump after converting virtual registers to hard registers.
5063
 
5064
@item -fdump-rtl-web
5065
@opindex fdump-rtl-web
5066
Dump after live range splitting.
5067
 
5068
@item -fdump-rtl-regclass
5069
@itemx -fdump-rtl-subregs_of_mode_init
5070
@itemx -fdump-rtl-subregs_of_mode_finish
5071
@itemx -fdump-rtl-dfinit
5072
@itemx -fdump-rtl-dfinish
5073
@opindex fdump-rtl-regclass
5074
@opindex fdump-rtl-subregs_of_mode_init
5075
@opindex fdump-rtl-subregs_of_mode_finish
5076
@opindex fdump-rtl-dfinit
5077
@opindex fdump-rtl-dfinish
5078
These dumps are defined but always produce empty files.
5079
 
5080
@item -fdump-rtl-all
5081
@opindex fdump-rtl-all
5082
Produce all the dumps listed above.
5083
 
5084
@item -dA
5085
@opindex dA
5086
Annotate the assembler output with miscellaneous debugging information.
5087
 
5088
@item -dD
5089
@opindex dD
5090
Dump all macro definitions, at the end of preprocessing, in addition to
5091
normal output.
5092
 
5093
@item -dH
5094
@opindex dH
5095
Produce a core dump whenever an error occurs.
5096
 
5097
@item -dm
5098
@opindex dm
5099
Print statistics on memory usage, at the end of the run, to
5100
standard error.
5101
 
5102
@item -dp
5103
@opindex dp
5104
Annotate the assembler output with a comment indicating which
5105
pattern and alternative was used.  The length of each instruction is
5106
also printed.
5107
 
5108
@item -dP
5109
@opindex dP
5110
Dump the RTL in the assembler output as a comment before each instruction.
5111
Also turns on @option{-dp} annotation.
5112
 
5113
@item -dv
5114
@opindex dv
5115
For each of the other indicated dump files (@option{-fdump-rtl-@var{pass}}),
5116
dump a representation of the control flow graph suitable for viewing with VCG
5117
to @file{@var{file}.@var{pass}.vcg}.
5118
 
5119
@item -dx
5120
@opindex dx
5121
Just generate RTL for a function instead of compiling it.  Usually used
5122
with @option{-fdump-rtl-expand}.
5123
 
5124
@item -dy
5125
@opindex dy
5126
Dump debugging information during parsing, to standard error.
5127
@end table
5128
 
5129
@item -fdump-noaddr
5130
@opindex fdump-noaddr
5131
When doing debugging dumps, suppress address output.  This makes it more
5132
feasible to use diff on debugging dumps for compiler invocations with
5133
different compiler binaries and/or different
5134
text / bss / data / heap / stack / dso start locations.
5135
 
5136
@item -fdump-unnumbered
5137
@opindex fdump-unnumbered
5138
When doing debugging dumps, suppress instruction numbers and address output.
5139
This makes it more feasible to use diff on debugging dumps for compiler
5140
invocations with different options, in particular with and without
5141
@option{-g}.
5142
 
5143
@item -fdump-unnumbered-links
5144
@opindex fdump-unnumbered-links
5145
When doing debugging dumps (see @option{-d} option above), suppress
5146
instruction numbers for the links to the previous and next instructions
5147
in a sequence.
5148
 
5149
@item -fdump-translation-unit @r{(C++ only)}
5150
@itemx -fdump-translation-unit-@var{options} @r{(C++ only)}
5151
@opindex fdump-translation-unit
5152
Dump a representation of the tree structure for the entire translation
5153
unit to a file.  The file name is made by appending @file{.tu} to the
5154
source file name, and the file is created in the same directory as the
5155
output file.  If the @samp{-@var{options}} form is used, @var{options}
5156
controls the details of the dump as described for the
5157
@option{-fdump-tree} options.
5158
 
5159
@item -fdump-class-hierarchy @r{(C++ only)}
5160
@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
5161
@opindex fdump-class-hierarchy
5162
Dump a representation of each class's hierarchy and virtual function
5163
table layout to a file.  The file name is made by appending
5164
@file{.class} to the source file name, and the file is created in the
5165
same directory as the output file.  If the @samp{-@var{options}} form
5166
is used, @var{options} controls the details of the dump as described
5167
for the @option{-fdump-tree} options.
5168
 
5169
@item -fdump-ipa-@var{switch}
5170
@opindex fdump-ipa
5171
Control the dumping at various stages of inter-procedural analysis
5172
language tree to a file.  The file name is generated by appending a
5173
switch specific suffix to the source file name, and the file is created
5174
in the same directory as the output file.  The following dumps are
5175
possible:
5176
 
5177
@table @samp
5178
@item all
5179
Enables all inter-procedural analysis dumps.
5180
 
5181
@item cgraph
5182
Dumps information about call-graph optimization, unused function removal,
5183
and inlining decisions.
5184
 
5185
@item inline
5186
Dump after function inlining.
5187
 
5188
@end table
5189
 
5190
@item -fdump-statistics-@var{option}
5191
@opindex fdump-statistics
5192
Enable and control dumping of pass statistics in a separate file.  The
5193
file name is generated by appending a suffix ending in
5194
@samp{.statistics} to the source file name, and the file is created in
5195
the same directory as the output file.  If the @samp{-@var{option}}
5196
form is used, @samp{-stats} will cause counters to be summed over the
5197
whole compilation unit while @samp{-details} will dump every event as
5198
the passes generate them.  The default with no option is to sum
5199
counters for each function compiled.
5200
 
5201
@item -fdump-tree-@var{switch}
5202
@itemx -fdump-tree-@var{switch}-@var{options}
5203
@opindex fdump-tree
5204
Control the dumping at various stages of processing the intermediate
5205
language tree to a file.  The file name is generated by appending a
5206
switch specific suffix to the source file name, and the file is
5207
created in the same directory as the output file.  If the
5208
@samp{-@var{options}} form is used, @var{options} is a list of
5209
@samp{-} separated options that control the details of the dump.  Not
5210
all options are applicable to all dumps, those which are not
5211
meaningful will be ignored.  The following options are available
5212
 
5213
@table @samp
5214
@item address
5215
Print the address of each node.  Usually this is not meaningful as it
5216
changes according to the environment and source file.  Its primary use
5217
is for tying up a dump file with a debug environment.
5218
@item asmname
5219
If @code{DECL_ASSEMBLER_NAME} has been set for a given decl, use that
5220
in the dump instead of @code{DECL_NAME}.  Its primary use is ease of
5221
use working backward from mangled names in the assembly file.
5222
@item slim
5223
Inhibit dumping of members of a scope or body of a function merely
5224
because that scope has been reached.  Only dump such items when they
5225
are directly reachable by some other path.  When dumping pretty-printed
5226
trees, this option inhibits dumping the bodies of control structures.
5227
@item raw
5228
Print a raw representation of the tree.  By default, trees are
5229
pretty-printed into a C-like representation.
5230
@item details
5231
Enable more detailed dumps (not honored by every dump option).
5232
@item stats
5233
Enable dumping various statistics about the pass (not honored by every dump
5234
option).
5235
@item blocks
5236
Enable showing basic block boundaries (disabled in raw dumps).
5237
@item vops
5238
Enable showing virtual operands for every statement.
5239
@item lineno
5240
Enable showing line numbers for statements.
5241
@item uid
5242
Enable showing the unique ID (@code{DECL_UID}) for each variable.
5243
@item verbose
5244
Enable showing the tree dump for each statement.
5245
@item eh
5246
Enable showing the EH region number holding each statement.
5247
@item all
5248
Turn on all options, except @option{raw}, @option{slim}, @option{verbose}
5249
and @option{lineno}.
5250
@end table
5251
 
5252
The following tree dumps are possible:
5253
@table @samp
5254
 
5255
@item original
5256
@opindex fdump-tree-original
5257
Dump before any tree based optimization, to @file{@var{file}.original}.
5258
 
5259
@item optimized
5260
@opindex fdump-tree-optimized
5261
Dump after all tree based optimization, to @file{@var{file}.optimized}.
5262
 
5263
@item gimple
5264
@opindex fdump-tree-gimple
5265
Dump each function before and after the gimplification pass to a file.  The
5266
file name is made by appending @file{.gimple} to the source file name.
5267
 
5268
@item cfg
5269
@opindex fdump-tree-cfg
5270
Dump the control flow graph of each function to a file.  The file name is
5271
made by appending @file{.cfg} to the source file name.
5272
 
5273
@item vcg
5274
@opindex fdump-tree-vcg
5275
Dump the control flow graph of each function to a file in VCG format.  The
5276
file name is made by appending @file{.vcg} to the source file name.  Note
5277
that if the file contains more than one function, the generated file cannot
5278
be used directly by VCG@.  You will need to cut and paste each function's
5279
graph into its own separate file first.
5280
 
5281
@item ch
5282
@opindex fdump-tree-ch
5283
Dump each function after copying loop headers.  The file name is made by
5284
appending @file{.ch} to the source file name.
5285
 
5286
@item ssa
5287
@opindex fdump-tree-ssa
5288
Dump SSA related information to a file.  The file name is made by appending
5289
@file{.ssa} to the source file name.
5290
 
5291
@item alias
5292
@opindex fdump-tree-alias
5293
Dump aliasing information for each function.  The file name is made by
5294
appending @file{.alias} to the source file name.
5295
 
5296
@item ccp
5297
@opindex fdump-tree-ccp
5298
Dump each function after CCP@.  The file name is made by appending
5299
@file{.ccp} to the source file name.
5300
 
5301
@item storeccp
5302
@opindex fdump-tree-storeccp
5303
Dump each function after STORE-CCP@.  The file name is made by appending
5304
@file{.storeccp} to the source file name.
5305
 
5306
@item pre
5307
@opindex fdump-tree-pre
5308
Dump trees after partial redundancy elimination.  The file name is made
5309
by appending @file{.pre} to the source file name.
5310
 
5311
@item fre
5312
@opindex fdump-tree-fre
5313
Dump trees after full redundancy elimination.  The file name is made
5314
by appending @file{.fre} to the source file name.
5315
 
5316
@item copyprop
5317
@opindex fdump-tree-copyprop
5318
Dump trees after copy propagation.  The file name is made
5319
by appending @file{.copyprop} to the source file name.
5320
 
5321
@item store_copyprop
5322
@opindex fdump-tree-store_copyprop
5323
Dump trees after store copy-propagation.  The file name is made
5324
by appending @file{.store_copyprop} to the source file name.
5325
 
5326
@item dce
5327
@opindex fdump-tree-dce
5328
Dump each function after dead code elimination.  The file name is made by
5329
appending @file{.dce} to the source file name.
5330
 
5331
@item mudflap
5332
@opindex fdump-tree-mudflap
5333
Dump each function after adding mudflap instrumentation.  The file name is
5334
made by appending @file{.mudflap} to the source file name.
5335
 
5336
@item sra
5337
@opindex fdump-tree-sra
5338
Dump each function after performing scalar replacement of aggregates.  The
5339
file name is made by appending @file{.sra} to the source file name.
5340
 
5341
@item sink
5342
@opindex fdump-tree-sink
5343
Dump each function after performing code sinking.  The file name is made
5344
by appending @file{.sink} to the source file name.
5345
 
5346
@item dom
5347
@opindex fdump-tree-dom
5348
Dump each function after applying dominator tree optimizations.  The file
5349
name is made by appending @file{.dom} to the source file name.
5350
 
5351
@item dse
5352
@opindex fdump-tree-dse
5353
Dump each function after applying dead store elimination.  The file
5354
name is made by appending @file{.dse} to the source file name.
5355
 
5356
@item phiopt
5357
@opindex fdump-tree-phiopt
5358
Dump each function after optimizing PHI nodes into straightline code.  The file
5359
name is made by appending @file{.phiopt} to the source file name.
5360
 
5361
@item forwprop
5362
@opindex fdump-tree-forwprop
5363
Dump each function after forward propagating single use variables.  The file
5364
name is made by appending @file{.forwprop} to the source file name.
5365
 
5366
@item copyrename
5367
@opindex fdump-tree-copyrename
5368
Dump each function after applying the copy rename optimization.  The file
5369
name is made by appending @file{.copyrename} to the source file name.
5370
 
5371
@item nrv
5372
@opindex fdump-tree-nrv
5373
Dump each function after applying the named return value optimization on
5374
generic trees.  The file name is made by appending @file{.nrv} to the source
5375
file name.
5376
 
5377
@item vect
5378
@opindex fdump-tree-vect
5379
Dump each function after applying vectorization of loops.  The file name is
5380
made by appending @file{.vect} to the source file name.
5381
 
5382
@item slp
5383
@opindex fdump-tree-slp
5384
Dump each function after applying vectorization of basic blocks.  The file name
5385
is made by appending @file{.slp} to the source file name.
5386
 
5387
@item vrp
5388
@opindex fdump-tree-vrp
5389
Dump each function after Value Range Propagation (VRP).  The file name
5390
is made by appending @file{.vrp} to the source file name.
5391
 
5392
@item all
5393
@opindex fdump-tree-all
5394
Enable all the available tree dumps with the flags provided in this option.
5395
@end table
5396
 
5397
@item -ftree-vectorizer-verbose=@var{n}
5398
@opindex ftree-vectorizer-verbose
5399
This option controls the amount of debugging output the vectorizer prints.
5400
This information is written to standard error, unless
5401
@option{-fdump-tree-all} or @option{-fdump-tree-vect} is specified,
5402
in which case it is output to the usual dump listing file, @file{.vect}.
5403
For @var{n}=0 no diagnostic information is reported.
5404
If @var{n}=1 the vectorizer reports each loop that got vectorized,
5405
and the total number of loops that got vectorized.
5406
If @var{n}=2 the vectorizer also reports non-vectorized loops that passed
5407
the first analysis phase (vect_analyze_loop_form) - i.e.@: countable,
5408
inner-most, single-bb, single-entry/exit loops.  This is the same verbosity
5409
level that @option{-fdump-tree-vect-stats} uses.
5410
Higher verbosity levels mean either more information dumped for each
5411
reported loop, or same amount of information reported for more loops:
5412
if @var{n}=3, vectorizer cost model information is reported.
5413
If @var{n}=4, alignment related information is added to the reports.
5414
If @var{n}=5, data-references related information (e.g.@: memory dependences,
5415
memory access-patterns) is added to the reports.
5416
If @var{n}=6, the vectorizer reports also non-vectorized inner-most loops
5417
that did not pass the first analysis phase (i.e., may not be countable, or
5418
may have complicated control-flow).
5419
If @var{n}=7, the vectorizer reports also non-vectorized nested loops.
5420
If @var{n}=8, SLP related information is added to the reports.
5421
For @var{n}=9, all the information the vectorizer generates during its
5422
analysis and transformation is reported.  This is the same verbosity level
5423
that @option{-fdump-tree-vect-details} uses.
5424
 
5425
@item -frandom-seed=@var{string}
5426
@opindex frandom-seed
5427
This option provides a seed that GCC uses when it would otherwise use
5428
random numbers.  It is used to generate certain symbol names
5429
that have to be different in every compiled file.  It is also used to
5430
place unique stamps in coverage data files and the object files that
5431
produce them.  You can use the @option{-frandom-seed} option to produce
5432
reproducibly identical object files.
5433
 
5434
The @var{string} should be different for every file you compile.
5435
 
5436
@item -fsched-verbose=@var{n}
5437
@opindex fsched-verbose
5438
On targets that use instruction scheduling, this option controls the
5439
amount of debugging output the scheduler prints.  This information is
5440
written to standard error, unless @option{-fdump-rtl-sched1} or
5441
@option{-fdump-rtl-sched2} is specified, in which case it is output
5442
to the usual dump listing file, @file{.sched1} or @file{.sched2}
5443
respectively.  However for @var{n} greater than nine, the output is
5444
always printed to standard error.
5445
 
5446
For @var{n} greater than zero, @option{-fsched-verbose} outputs the
5447
same information as @option{-fdump-rtl-sched1} and @option{-fdump-rtl-sched2}.
5448
For @var{n} greater than one, it also output basic block probabilities,
5449
detailed ready list information and unit/insn info.  For @var{n} greater
5450
than two, it includes RTL at abort point, control-flow and regions info.
5451
And for @var{n} over four, @option{-fsched-verbose} also includes
5452
dependence info.
5453
 
5454
@item -save-temps
5455
@itemx -save-temps=cwd
5456
@opindex save-temps
5457
Store the usual ``temporary'' intermediate files permanently; place them
5458
in the current directory and name them based on the source file.  Thus,
5459
compiling @file{foo.c} with @samp{-c -save-temps} would produce files
5460
@file{foo.i} and @file{foo.s}, as well as @file{foo.o}.  This creates a
5461
preprocessed @file{foo.i} output file even though the compiler now
5462
normally uses an integrated preprocessor.
5463
 
5464
When used in combination with the @option{-x} command line option,
5465
@option{-save-temps} is sensible enough to avoid over writing an
5466
input source file with the same extension as an intermediate file.
5467
The corresponding intermediate file may be obtained by renaming the
5468
source file before using @option{-save-temps}.
5469
 
5470
If you invoke GCC in parallel, compiling several different source
5471
files that share a common base name in different subdirectories or the
5472
same source file compiled for multiple output destinations, it is
5473
likely that the different parallel compilers will interfere with each
5474
other, and overwrite the temporary files.  For instance:
5475
 
5476
@smallexample
5477
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
5478
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
5479
@end smallexample
5480
 
5481
may result in @file{foo.i} and @file{foo.o} being written to
5482
simultaneously by both compilers.
5483
 
5484
@item -save-temps=obj
5485
@opindex save-temps=obj
5486
Store the usual ``temporary'' intermediate files permanently.  If the
5487
@option{-o} option is used, the temporary files are based on the
5488
object file.  If the @option{-o} option is not used, the
5489
@option{-save-temps=obj} switch behaves like @option{-save-temps}.
5490
 
5491
For example:
5492
 
5493
@smallexample
5494
gcc -save-temps=obj -c foo.c
5495
gcc -save-temps=obj -c bar.c -o dir/xbar.o
5496
gcc -save-temps=obj foobar.c -o dir2/yfoobar
5497
@end smallexample
5498
 
5499
would create @file{foo.i}, @file{foo.s}, @file{dir/xbar.i},
5500
@file{dir/xbar.s}, @file{dir2/yfoobar.i}, @file{dir2/yfoobar.s}, and
5501
@file{dir2/yfoobar.o}.
5502
 
5503
@item -time@r{[}=@var{file}@r{]}
5504
@opindex time
5505
Report the CPU time taken by each subprocess in the compilation
5506
sequence.  For C source files, this is the compiler proper and assembler
5507
(plus the linker if linking is done).
5508
 
5509
Without the specification of an output file, the output looks like this:
5510
 
5511
@smallexample
5512
# cc1 0.12 0.01
5513
# as 0.00 0.01
5514
@end smallexample
5515
 
5516
The first number on each line is the ``user time'', that is time spent
5517
executing the program itself.  The second number is ``system time'',
5518
time spent executing operating system routines on behalf of the program.
5519
Both numbers are in seconds.
5520
 
5521
With the specification of an output file, the output is appended to the
5522
named file, and it looks like this:
5523
 
5524
@smallexample
5525
0.12 0.01 cc1 @var{options}
5526
0.00 0.01 as @var{options}
5527
@end smallexample
5528
 
5529
The ``user time'' and the ``system time'' are moved before the program
5530
name, and the options passed to the program are displayed, so that one
5531
can later tell what file was being compiled, and with which options.
5532
 
5533
@item -fvar-tracking
5534
@opindex fvar-tracking
5535
Run variable tracking pass.  It computes where variables are stored at each
5536
position in code.  Better debugging information is then generated
5537
(if the debugging information format supports this information).
5538
 
5539
It is enabled by default when compiling with optimization (@option{-Os},
5540
@option{-O}, @option{-O2}, @dots{}), debugging information (@option{-g}) and
5541
the debug info format supports it.
5542
 
5543
@item -fvar-tracking-assignments
5544
@opindex fvar-tracking-assignments
5545
@opindex fno-var-tracking-assignments
5546
Annotate assignments to user variables early in the compilation and
5547
attempt to carry the annotations over throughout the compilation all the
5548
way to the end, in an attempt to improve debug information while
5549
optimizing.  Use of @option{-gdwarf-4} is recommended along with it.
5550
 
5551
It can be enabled even if var-tracking is disabled, in which case
5552
annotations will be created and maintained, but discarded at the end.
5553
 
5554
@item -fvar-tracking-assignments-toggle
5555
@opindex fvar-tracking-assignments-toggle
5556
@opindex fno-var-tracking-assignments-toggle
5557
Toggle @option{-fvar-tracking-assignments}, in the same way that
5558
@option{-gtoggle} toggles @option{-g}.
5559
 
5560
@item -print-file-name=@var{library}
5561
@opindex print-file-name
5562
Print the full absolute name of the library file @var{library} that
5563
would be used when linking---and don't do anything else.  With this
5564
option, GCC does not compile or link anything; it just prints the
5565
file name.
5566
 
5567
@item -print-multi-directory
5568
@opindex print-multi-directory
5569
Print the directory name corresponding to the multilib selected by any
5570
other switches present in the command line.  This directory is supposed
5571
to exist in @env{GCC_EXEC_PREFIX}.
5572
 
5573
@item -print-multi-lib
5574
@opindex print-multi-lib
5575
Print the mapping from multilib directory names to compiler switches
5576
that enable them.  The directory name is separated from the switches by
5577
@samp{;}, and each switch starts with an @samp{@@} instead of the
5578
@samp{-}, without spaces between multiple switches.  This is supposed to
5579
ease shell-processing.
5580
 
5581
@item -print-multi-os-directory
5582
@opindex print-multi-os-directory
5583
Print the path to OS libraries for the selected
5584
multilib, relative to some @file{lib} subdirectory.  If OS libraries are
5585
present in the @file{lib} subdirectory and no multilibs are used, this is
5586
usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}}
5587
sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or
5588
@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}}
5589
subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}.
5590
 
5591
@item -print-prog-name=@var{program}
5592
@opindex print-prog-name
5593
Like @option{-print-file-name}, but searches for a program such as @samp{cpp}.
5594
 
5595
@item -print-libgcc-file-name
5596
@opindex print-libgcc-file-name
5597
Same as @option{-print-file-name=libgcc.a}.
5598
 
5599
This is useful when you use @option{-nostdlib} or @option{-nodefaultlibs}
5600
but you do want to link with @file{libgcc.a}.  You can do
5601
 
5602
@smallexample
5603
gcc -nostdlib @var{files}@dots{} `gcc -print-libgcc-file-name`
5604
@end smallexample
5605
 
5606
@item -print-search-dirs
5607
@opindex print-search-dirs
5608
Print the name of the configured installation directory and a list of
5609
program and library directories @command{gcc} will search---and don't do anything else.
5610
 
5611
This is useful when @command{gcc} prints the error message
5612
@samp{installation problem, cannot exec cpp0: No such file or directory}.
5613
To resolve this you either need to put @file{cpp0} and the other compiler
5614
components where @command{gcc} expects to find them, or you can set the environment
5615
variable @env{GCC_EXEC_PREFIX} to the directory where you installed them.
5616
Don't forget the trailing @samp{/}.
5617
@xref{Environment Variables}.
5618
 
5619
@item -print-sysroot
5620
@opindex print-sysroot
5621
Print the target sysroot directory that will be used during
5622
compilation.  This is the target sysroot specified either at configure
5623
time or using the @option{--sysroot} option, possibly with an extra
5624
suffix that depends on compilation options.  If no target sysroot is
5625
specified, the option prints nothing.
5626
 
5627
@item -print-sysroot-headers-suffix
5628
@opindex print-sysroot-headers-suffix
5629
Print the suffix added to the target sysroot when searching for
5630
headers, or give an error if the compiler is not configured with such
5631
a suffix---and don't do anything else.
5632
 
5633
@item -dumpmachine
5634
@opindex dumpmachine
5635
Print the compiler's target machine (for example,
5636
@samp{i686-pc-linux-gnu})---and don't do anything else.
5637
 
5638
@item -dumpversion
5639
@opindex dumpversion
5640
Print the compiler version (for example, @samp{3.0})---and don't do
5641
anything else.
5642
 
5643
@item -dumpspecs
5644
@opindex dumpspecs
5645
Print the compiler's built-in specs---and don't do anything else.  (This
5646
is used when GCC itself is being built.)  @xref{Spec Files}.
5647
 
5648
@item -feliminate-unused-debug-types
5649
@opindex feliminate-unused-debug-types
5650
Normally, when producing DWARF2 output, GCC will emit debugging
5651
information for all types declared in a compilation
5652
unit, regardless of whether or not they are actually used
5653
in that compilation unit.  Sometimes this is useful, such as
5654
if, in the debugger, you want to cast a value to a type that is
5655
not actually used in your program (but is declared).  More often,
5656
however, this results in a significant amount of wasted space.
5657
With this option, GCC will avoid producing debug symbol output
5658
for types that are nowhere used in the source file being compiled.
5659
@end table
5660
 
5661
@node Optimize Options
5662
@section Options That Control Optimization
5663
@cindex optimize options
5664
@cindex options, optimization
5665
 
5666
These options control various sorts of optimizations.
5667
 
5668
Without any optimization option, the compiler's goal is to reduce the
5669
cost of compilation and to make debugging produce the expected
5670
results.  Statements are independent: if you stop the program with a
5671
breakpoint between statements, you can then assign a new value to any
5672
variable or change the program counter to any other statement in the
5673
function and get exactly the results you would expect from the source
5674
code.
5675
 
5676
Turning on optimization flags makes the compiler attempt to improve
5677
the performance and/or code size at the expense of compilation time
5678
and possibly the ability to debug the program.
5679
 
5680
The compiler performs optimization based on the knowledge it has of the
5681
program.  Compiling multiple files at once to a single output file mode allows
5682
the compiler to use information gained from all of the files when compiling
5683
each of them.
5684
 
5685
Not all optimizations are controlled directly by a flag.  Only
5686
optimizations that have a flag are listed in this section.
5687
 
5688
Most optimizations are only enabled if an @option{-O} level is set on
5689
the command line.  Otherwise they are disabled, even if individual
5690
optimization flags are specified.
5691
 
5692
Depending on the target and how GCC was configured, a slightly different
5693
set of optimizations may be enabled at each @option{-O} level than
5694
those listed here.  You can invoke GCC with @samp{-Q --help=optimizers}
5695
to find out the exact set of optimizations that are enabled at each level.
5696
@xref{Overall Options}, for examples.
5697
 
5698
@table @gcctabopt
5699
@item -O
5700
@itemx -O1
5701
@opindex O
5702
@opindex O1
5703
Optimize.  Optimizing compilation takes somewhat more time, and a lot
5704
more memory for a large function.
5705
 
5706
With @option{-O}, the compiler tries to reduce code size and execution
5707
time, without performing any optimizations that take a great deal of
5708
compilation time.
5709
 
5710
@option{-O} turns on the following optimization flags:
5711
@gccoptlist{
5712
-fauto-inc-dec @gol
5713
-fcprop-registers @gol
5714
-fdce @gol
5715
-fdefer-pop @gol
5716
-fdelayed-branch @gol
5717
-fdse @gol
5718
-fguess-branch-probability @gol
5719
-fif-conversion2 @gol
5720
-fif-conversion @gol
5721
-fipa-pure-const @gol
5722
-fipa-reference @gol
5723
-fmerge-constants
5724
-fsplit-wide-types @gol
5725
-ftree-builtin-call-dce @gol
5726
-ftree-ccp @gol
5727
-ftree-ch @gol
5728
-ftree-copyrename @gol
5729
-ftree-dce @gol
5730
-ftree-dominator-opts @gol
5731
-ftree-dse @gol
5732
-ftree-forwprop @gol
5733
-ftree-fre @gol
5734
-ftree-phiprop @gol
5735
-ftree-sra @gol
5736
-ftree-pta @gol
5737
-ftree-ter @gol
5738
-funit-at-a-time}
5739
 
5740
@option{-O} also turns on @option{-fomit-frame-pointer} on machines
5741
where doing so does not interfere with debugging.
5742
 
5743
@item -O2
5744
@opindex O2
5745
Optimize even more.  GCC performs nearly all supported optimizations
5746
that do not involve a space-speed tradeoff.
5747
As compared to @option{-O}, this option increases both compilation time
5748
and the performance of the generated code.
5749
 
5750
@option{-O2} turns on all optimization flags specified by @option{-O}.  It
5751
also turns on the following optimization flags:
5752
@gccoptlist{-fthread-jumps @gol
5753
-falign-functions  -falign-jumps @gol
5754
-falign-loops  -falign-labels @gol
5755
-fcaller-saves @gol
5756
-fcrossjumping @gol
5757
-fcse-follow-jumps  -fcse-skip-blocks @gol
5758
-fdelete-null-pointer-checks @gol
5759
-fexpensive-optimizations @gol
5760
-fgcse  -fgcse-lm  @gol
5761
-finline-small-functions @gol
5762
-findirect-inlining @gol
5763
-fipa-sra @gol
5764
-foptimize-sibling-calls @gol
5765
-fpeephole2 @gol
5766
-fregmove @gol
5767
-freorder-blocks  -freorder-functions @gol
5768
-frerun-cse-after-loop  @gol
5769
-fsched-interblock  -fsched-spec @gol
5770
-fschedule-insns  -fschedule-insns2 @gol
5771
-fstrict-aliasing -fstrict-overflow @gol
5772
-ftree-switch-conversion @gol
5773
-ftree-pre @gol
5774
-ftree-vrp}
5775
 
5776
Please note the warning under @option{-fgcse} about
5777
invoking @option{-O2} on programs that use computed gotos.
5778
 
5779
@item -O3
5780
@opindex O3
5781
Optimize yet more.  @option{-O3} turns on all optimizations specified
5782
by @option{-O2} and also turns on the @option{-finline-functions},
5783
@option{-funswitch-loops}, @option{-fpredictive-commoning},
5784
@option{-fgcse-after-reload} and @option{-ftree-vectorize} options.
5785
 
5786
@item -O0
5787
@opindex O0
5788
Reduce compilation time and make debugging produce the expected
5789
results.  This is the default.
5790
 
5791
@item -Os
5792
@opindex Os
5793
Optimize for size.  @option{-Os} enables all @option{-O2} optimizations that
5794
do not typically increase code size.  It also performs further
5795
optimizations designed to reduce code size.
5796
 
5797
@option{-Os} disables the following optimization flags:
5798
@gccoptlist{-falign-functions  -falign-jumps  -falign-loops @gol
5799
-falign-labels  -freorder-blocks  -freorder-blocks-and-partition @gol
5800
-fprefetch-loop-arrays  -ftree-vect-loop-version}
5801
 
5802
If you use multiple @option{-O} options, with or without level numbers,
5803
the last such option is the one that is effective.
5804
@end table
5805
 
5806
Options of the form @option{-f@var{flag}} specify machine-independent
5807
flags.  Most flags have both positive and negative forms; the negative
5808
form of @option{-ffoo} would be @option{-fno-foo}.  In the table
5809
below, only one of the forms is listed---the one you typically will
5810
use.  You can figure out the other form by either removing @samp{no-}
5811
or adding it.
5812
 
5813
The following options control specific optimizations.  They are either
5814
activated by @option{-O} options or are related to ones that are.  You
5815
can use the following flags in the rare cases when ``fine-tuning'' of
5816
optimizations to be performed is desired.
5817
 
5818
@table @gcctabopt
5819
@item -fno-default-inline
5820
@opindex fno-default-inline
5821
Do not make member functions inline by default merely because they are
5822
defined inside the class scope (C++ only).  Otherwise, when you specify
5823
@w{@option{-O}}, member functions defined inside class scope are compiled
5824
inline by default; i.e., you don't need to add @samp{inline} in front of
5825
the member function name.
5826
 
5827
@item -fno-defer-pop
5828
@opindex fno-defer-pop
5829
Always pop the arguments to each function call as soon as that function
5830
returns.  For machines which must pop arguments after a function call,
5831
the compiler normally lets arguments accumulate on the stack for several
5832
function calls and pops them all at once.
5833
 
5834
Disabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5835
 
5836
@item -fforward-propagate
5837
@opindex fforward-propagate
5838
Perform a forward propagation pass on RTL@.  The pass tries to combine two
5839
instructions and checks if the result can be simplified.  If loop unrolling
5840
is active, two passes are performed and the second is scheduled after
5841
loop unrolling.
5842
 
5843
This option is enabled by default at optimization levels @option{-O},
5844
@option{-O2}, @option{-O3}, @option{-Os}.
5845
 
5846
@item -fomit-frame-pointer
5847
@opindex fomit-frame-pointer
5848
Don't keep the frame pointer in a register for functions that
5849
don't need one.  This avoids the instructions to save, set up and
5850
restore frame pointers; it also makes an extra register available
5851
in many functions.  @strong{It also makes debugging impossible on
5852
some machines.}
5853
 
5854
On some machines, such as the VAX, this flag has no effect, because
5855
the standard calling sequence automatically handles the frame pointer
5856
and nothing is saved by pretending it doesn't exist.  The
5857
machine-description macro @code{FRAME_POINTER_REQUIRED} controls
5858
whether a target machine supports this flag.  @xref{Registers,,Register
5859
Usage, gccint, GNU Compiler Collection (GCC) Internals}.
5860
 
5861
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5862
 
5863
@item -foptimize-sibling-calls
5864
@opindex foptimize-sibling-calls
5865
Optimize sibling and tail recursive calls.
5866
 
5867
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
5868
 
5869
@item -fno-inline
5870
@opindex fno-inline
5871
Don't pay attention to the @code{inline} keyword.  Normally this option
5872
is used to keep the compiler from expanding any functions inline.
5873
Note that if you are not optimizing, no functions can be expanded inline.
5874
 
5875
@item -finline-small-functions
5876
@opindex finline-small-functions
5877
Integrate functions into their callers when their body is smaller than expected
5878
function call code (so overall size of program gets smaller).  The compiler
5879
heuristically decides which functions are simple enough to be worth integrating
5880
in this way.
5881
 
5882
Enabled at level @option{-O2}.
5883
 
5884
@item -findirect-inlining
5885
@opindex findirect-inlining
5886
Inline also indirect calls that are discovered to be known at compile
5887
time thanks to previous inlining.  This option has any effect only
5888
when inlining itself is turned on by the @option{-finline-functions}
5889
or @option{-finline-small-functions} options.
5890
 
5891
Enabled at level @option{-O2}.
5892
 
5893
@item -finline-functions
5894
@opindex finline-functions
5895
Integrate all simple functions into their callers.  The compiler
5896
heuristically decides which functions are simple enough to be worth
5897
integrating in this way.
5898
 
5899
If all calls to a given function are integrated, and the function is
5900
declared @code{static}, then the function is normally not output as
5901
assembler code in its own right.
5902
 
5903
Enabled at level @option{-O3}.
5904
 
5905
@item -finline-functions-called-once
5906
@opindex finline-functions-called-once
5907
Consider all @code{static} functions called once for inlining into their
5908
caller even if they are not marked @code{inline}.  If a call to a given
5909
function is integrated, then the function is not output as assembler code
5910
in its own right.
5911
 
5912
Enabled at levels @option{-O1}, @option{-O2}, @option{-O3} and @option{-Os}.
5913
 
5914
@item -fearly-inlining
5915
@opindex fearly-inlining
5916
Inline functions marked by @code{always_inline} and functions whose body seems
5917
smaller than the function call overhead early before doing
5918
@option{-fprofile-generate} instrumentation and real inlining pass.  Doing so
5919
makes profiling significantly cheaper and usually inlining faster on programs
5920
having large chains of nested wrapper functions.
5921
 
5922
Enabled by default.
5923
 
5924
@item -fipa-sra
5925
@opindex fipa-sra
5926
Perform interprocedural scalar replacement of aggregates, removal of
5927
unused parameters and replacement of parameters passed by reference
5928
by parameters passed by value.
5929
 
5930
Enabled at levels @option{-O2}, @option{-O3} and @option{-Os}.
5931
 
5932
@item -finline-limit=@var{n}
5933
@opindex finline-limit
5934
By default, GCC limits the size of functions that can be inlined.  This flag
5935
allows coarse control of this limit.  @var{n} is the size of functions that
5936
can be inlined in number of pseudo instructions.
5937
 
5938
Inlining is actually controlled by a number of parameters, which may be
5939
specified individually by using @option{--param @var{name}=@var{value}}.
5940
The @option{-finline-limit=@var{n}} option sets some of these parameters
5941
as follows:
5942
 
5943
@table @gcctabopt
5944
@item max-inline-insns-single
5945
is set to @var{n}/2.
5946
@item max-inline-insns-auto
5947
is set to @var{n}/2.
5948
@end table
5949
 
5950
See below for a documentation of the individual
5951
parameters controlling inlining and for the defaults of these parameters.
5952
 
5953
@emph{Note:} there may be no value to @option{-finline-limit} that results
5954
in default behavior.
5955
 
5956
@emph{Note:} pseudo instruction represents, in this particular context, an
5957
abstract measurement of function's size.  In no way does it represent a count
5958
of assembly instructions and as such its exact meaning might change from one
5959
release to an another.
5960
 
5961
@item -fkeep-inline-functions
5962
@opindex fkeep-inline-functions
5963
In C, emit @code{static} functions that are declared @code{inline}
5964
into the object file, even if the function has been inlined into all
5965
of its callers.  This switch does not affect functions using the
5966
@code{extern inline} extension in GNU C90@.  In C++, emit any and all
5967
inline functions into the object file.
5968
 
5969
@item -fkeep-static-consts
5970
@opindex fkeep-static-consts
5971
Emit variables declared @code{static const} when optimization isn't turned
5972
on, even if the variables aren't referenced.
5973
 
5974
GCC enables this option by default.  If you want to force the compiler to
5975
check if the variable was referenced, regardless of whether or not
5976
optimization is turned on, use the @option{-fno-keep-static-consts} option.
5977
 
5978
@item -fmerge-constants
5979
@opindex fmerge-constants
5980
Attempt to merge identical constants (string constants and floating point
5981
constants) across compilation units.
5982
 
5983
This option is the default for optimized compilation if the assembler and
5984
linker support it.  Use @option{-fno-merge-constants} to inhibit this
5985
behavior.
5986
 
5987
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
5988
 
5989
@item -fmerge-all-constants
5990
@opindex fmerge-all-constants
5991
Attempt to merge identical constants and identical variables.
5992
 
5993
This option implies @option{-fmerge-constants}.  In addition to
5994
@option{-fmerge-constants} this considers e.g.@: even constant initialized
5995
arrays or initialized constant variables with integral or floating point
5996
types.  Languages like C or C++ require each variable, including multiple
5997
instances of the same variable in recursive calls, to have distinct locations,
5998
so using this option will result in non-conforming
5999
behavior.
6000
 
6001
@item -fmodulo-sched
6002
@opindex fmodulo-sched
6003
Perform swing modulo scheduling immediately before the first scheduling
6004
pass.  This pass looks at innermost loops and reorders their
6005
instructions by overlapping different iterations.
6006
 
6007
@item -fmodulo-sched-allow-regmoves
6008
@opindex fmodulo-sched-allow-regmoves
6009
Perform more aggressive SMS based modulo scheduling with register moves
6010
allowed.  By setting this flag certain anti-dependences edges will be
6011
deleted which will trigger the generation of reg-moves based on the
6012
life-range analysis.  This option is effective only with
6013
@option{-fmodulo-sched} enabled.
6014
 
6015
@item -fno-branch-count-reg
6016
@opindex fno-branch-count-reg
6017
Do not use ``decrement and branch'' instructions on a count register,
6018
but instead generate a sequence of instructions that decrement a
6019
register, compare it against zero, then branch based upon the result.
6020
This option is only meaningful on architectures that support such
6021
instructions, which include x86, PowerPC, IA-64 and S/390.
6022
 
6023
The default is @option{-fbranch-count-reg}.
6024
 
6025
@item -fno-function-cse
6026
@opindex fno-function-cse
6027
Do not put function addresses in registers; make each instruction that
6028
calls a constant function contain the function's address explicitly.
6029
 
6030
This option results in less efficient code, but some strange hacks
6031
that alter the assembler output may be confused by the optimizations
6032
performed when this option is not used.
6033
 
6034
The default is @option{-ffunction-cse}
6035
 
6036
@item -fno-zero-initialized-in-bss
6037
@opindex fno-zero-initialized-in-bss
6038
If the target supports a BSS section, GCC by default puts variables that
6039
are initialized to zero into BSS@.  This can save space in the resulting
6040
code.
6041
 
6042
This option turns off this behavior because some programs explicitly
6043
rely on variables going to the data section.  E.g., so that the
6044
resulting executable can find the beginning of that section and/or make
6045
assumptions based on that.
6046
 
6047
The default is @option{-fzero-initialized-in-bss}.
6048
 
6049
@item -fmudflap -fmudflapth -fmudflapir
6050
@opindex fmudflap
6051
@opindex fmudflapth
6052
@opindex fmudflapir
6053
@cindex bounds checking
6054
@cindex mudflap
6055
For front-ends that support it (C and C++), instrument all risky
6056
pointer/array dereferencing operations, some standard library
6057
string/heap functions, and some other associated constructs with
6058
range/validity tests.  Modules so instrumented should be immune to
6059
buffer overflows, invalid heap use, and some other classes of C/C++
6060
programming errors.  The instrumentation relies on a separate runtime
6061
library (@file{libmudflap}), which will be linked into a program if
6062
@option{-fmudflap} is given at link time.  Run-time behavior of the
6063
instrumented program is controlled by the @env{MUDFLAP_OPTIONS}
6064
environment variable.  See @code{env MUDFLAP_OPTIONS=-help a.out}
6065
for its options.
6066
 
6067
Use @option{-fmudflapth} instead of @option{-fmudflap} to compile and to
6068
link if your program is multi-threaded.  Use @option{-fmudflapir}, in
6069
addition to @option{-fmudflap} or @option{-fmudflapth}, if
6070
instrumentation should ignore pointer reads.  This produces less
6071
instrumentation (and therefore faster execution) and still provides
6072
some protection against outright memory corrupting writes, but allows
6073
erroneously read data to propagate within a program.
6074
 
6075
@item -fthread-jumps
6076
@opindex fthread-jumps
6077
Perform optimizations where we check to see if a jump branches to a
6078
location where another comparison subsumed by the first is found.  If
6079
so, the first branch is redirected to either the destination of the
6080
second branch or a point immediately following it, depending on whether
6081
the condition is known to be true or false.
6082
 
6083
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6084
 
6085
@item -fsplit-wide-types
6086
@opindex fsplit-wide-types
6087
When using a type that occupies multiple registers, such as @code{long
6088
long} on a 32-bit system, split the registers apart and allocate them
6089
independently.  This normally generates better code for those types,
6090
but may make debugging more difficult.
6091
 
6092
Enabled at levels @option{-O}, @option{-O2}, @option{-O3},
6093
@option{-Os}.
6094
 
6095
@item -fcse-follow-jumps
6096
@opindex fcse-follow-jumps
6097
In common subexpression elimination (CSE), scan through jump instructions
6098
when the target of the jump is not reached by any other path.  For
6099
example, when CSE encounters an @code{if} statement with an
6100
@code{else} clause, CSE will follow the jump when the condition
6101
tested is false.
6102
 
6103
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6104
 
6105
@item -fcse-skip-blocks
6106
@opindex fcse-skip-blocks
6107
This is similar to @option{-fcse-follow-jumps}, but causes CSE to
6108
follow jumps which conditionally skip over blocks.  When CSE
6109
encounters a simple @code{if} statement with no else clause,
6110
@option{-fcse-skip-blocks} causes CSE to follow the jump around the
6111
body of the @code{if}.
6112
 
6113
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6114
 
6115
@item -frerun-cse-after-loop
6116
@opindex frerun-cse-after-loop
6117
Re-run common subexpression elimination after loop optimizations has been
6118
performed.
6119
 
6120
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6121
 
6122
@item -fgcse
6123
@opindex fgcse
6124
Perform a global common subexpression elimination pass.
6125
This pass also performs global constant and copy propagation.
6126
 
6127
@emph{Note:} When compiling a program using computed gotos, a GCC
6128
extension, you may get better runtime performance if you disable
6129
the global common subexpression elimination pass by adding
6130
@option{-fno-gcse} to the command line.
6131
 
6132
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6133
 
6134
@item -fgcse-lm
6135
@opindex fgcse-lm
6136
When @option{-fgcse-lm} is enabled, global common subexpression elimination will
6137
attempt to move loads which are only killed by stores into themselves.  This
6138
allows a loop containing a load/store sequence to be changed to a load outside
6139
the loop, and a copy/store within the loop.
6140
 
6141
Enabled by default when gcse is enabled.
6142
 
6143
@item -fgcse-sm
6144
@opindex fgcse-sm
6145
When @option{-fgcse-sm} is enabled, a store motion pass is run after
6146
global common subexpression elimination.  This pass will attempt to move
6147
stores out of loops.  When used in conjunction with @option{-fgcse-lm},
6148
loops containing a load/store sequence can be changed to a load before
6149
the loop and a store after the loop.
6150
 
6151
Not enabled at any optimization level.
6152
 
6153
@item -fgcse-las
6154
@opindex fgcse-las
6155
When @option{-fgcse-las} is enabled, the global common subexpression
6156
elimination pass eliminates redundant loads that come after stores to the
6157
same memory location (both partial and full redundancies).
6158
 
6159
Not enabled at any optimization level.
6160
 
6161
@item -fgcse-after-reload
6162
@opindex fgcse-after-reload
6163
When @option{-fgcse-after-reload} is enabled, a redundant load elimination
6164
pass is performed after reload.  The purpose of this pass is to cleanup
6165
redundant spilling.
6166
 
6167
@item -funsafe-loop-optimizations
6168
@opindex funsafe-loop-optimizations
6169
If given, the loop optimizer will assume that loop indices do not
6170
overflow, and that the loops with nontrivial exit condition are not
6171
infinite.  This enables a wider range of loop optimizations even if
6172
the loop optimizer itself cannot prove that these assumptions are valid.
6173
Using @option{-Wunsafe-loop-optimizations}, the compiler will warn you
6174
if it finds this kind of loop.
6175
 
6176
@item -fcrossjumping
6177
@opindex fcrossjumping
6178
Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
6179
resulting code may or may not perform better than without cross-jumping.
6180
 
6181
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6182
 
6183
@item -fauto-inc-dec
6184
@opindex fauto-inc-dec
6185
Combine increments or decrements of addresses with memory accesses.
6186
This pass is always skipped on architectures that do not have
6187
instructions to support this.  Enabled by default at @option{-O} and
6188
higher on architectures that support this.
6189
 
6190
@item -fdce
6191
@opindex fdce
6192
Perform dead code elimination (DCE) on RTL@.
6193
Enabled by default at @option{-O} and higher.
6194
 
6195
@item -fdse
6196
@opindex fdse
6197
Perform dead store elimination (DSE) on RTL@.
6198
Enabled by default at @option{-O} and higher.
6199
 
6200
@item -fif-conversion
6201
@opindex fif-conversion
6202
Attempt to transform conditional jumps into branch-less equivalents.  This
6203
include use of conditional moves, min, max, set flags and abs instructions, and
6204
some tricks doable by standard arithmetics.  The use of conditional execution
6205
on chips where it is available is controlled by @code{if-conversion2}.
6206
 
6207
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6208
 
6209
@item -fif-conversion2
6210
@opindex fif-conversion2
6211
Use conditional execution (where available) to transform conditional jumps into
6212
branch-less equivalents.
6213
 
6214
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6215
 
6216
@item -fdelete-null-pointer-checks
6217
@opindex fdelete-null-pointer-checks
6218
Assume that programs cannot safely dereference null pointers, and that
6219
no code or data element resides there.  This enables simple constant
6220
folding optimizations at all optimization levels.  In addition, other
6221
optimization passes in GCC use this flag to control global dataflow
6222
analyses that eliminate useless checks for null pointers; these assume
6223
that if a pointer is checked after it has already been dereferenced,
6224
it cannot be null.
6225
 
6226
Note however that in some environments this assumption is not true.
6227
Use @option{-fno-delete-null-pointer-checks} to disable this optimization
6228
for programs which depend on that behavior.
6229
 
6230
Some targets, especially embedded ones, disable this option at all levels.
6231
Otherwise it is enabled at all levels: @option{-O0}, @option{-O1},
6232
@option{-O2}, @option{-O3}, @option{-Os}.  Passes that use the information
6233
are enabled independently at different optimization levels.
6234
 
6235
@item -fexpensive-optimizations
6236
@opindex fexpensive-optimizations
6237
Perform a number of minor optimizations that are relatively expensive.
6238
 
6239
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6240
 
6241
@item -foptimize-register-move
6242
@itemx -fregmove
6243
@opindex foptimize-register-move
6244
@opindex fregmove
6245
Attempt to reassign register numbers in move instructions and as
6246
operands of other simple instructions in order to maximize the amount of
6247
register tying.  This is especially helpful on machines with two-operand
6248
instructions.
6249
 
6250
Note @option{-fregmove} and @option{-foptimize-register-move} are the same
6251
optimization.
6252
 
6253
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6254
 
6255
@item -fira-algorithm=@var{algorithm}
6256
Use specified coloring algorithm for the integrated register
6257
allocator.  The @var{algorithm} argument should be @code{priority} or
6258
@code{CB}.  The first algorithm specifies Chow's priority coloring,
6259
the second one specifies Chaitin-Briggs coloring.  The second
6260
algorithm can be unimplemented for some architectures.  If it is
6261
implemented, it is the default because Chaitin-Briggs coloring as a
6262
rule generates a better code.
6263
 
6264
@item -fira-region=@var{region}
6265
Use specified regions for the integrated register allocator.  The
6266
@var{region} argument should be one of @code{all}, @code{mixed}, or
6267
@code{one}.  The first value means using all loops as register
6268
allocation regions, the second value which is the default means using
6269
all loops except for loops with small register pressure as the
6270
regions, and third one means using all function as a single region.
6271
The first value can give best result for machines with small size and
6272
irregular register set, the third one results in faster and generates
6273
decent code and the smallest size code, and the default value usually
6274
give the best results in most cases and for most architectures.
6275
 
6276
@item -fira-coalesce
6277
@opindex fira-coalesce
6278
Do optimistic register coalescing.  This option might be profitable for
6279
architectures with big regular register files.
6280
 
6281
@item -fira-loop-pressure
6282
@opindex fira-loop-pressure
6283
Use IRA to evaluate register pressure in loops for decision to move
6284
loop invariants.  Usage of this option usually results in generation
6285
of faster and smaller code on machines with big register files (>= 32
6286
registers) but it can slow compiler down.
6287
 
6288
This option is enabled at level @option{-O3} for some targets.
6289
 
6290
@item -fno-ira-share-save-slots
6291
@opindex fno-ira-share-save-slots
6292
Switch off sharing stack slots used for saving call used hard
6293
registers living through a call.  Each hard register will get a
6294
separate stack slot and as a result function stack frame will be
6295
bigger.
6296
 
6297
@item -fno-ira-share-spill-slots
6298
@opindex fno-ira-share-spill-slots
6299
Switch off sharing stack slots allocated for pseudo-registers.  Each
6300
pseudo-register which did not get a hard register will get a separate
6301
stack slot and as a result function stack frame will be bigger.
6302
 
6303
@item -fira-verbose=@var{n}
6304
@opindex fira-verbose
6305
Set up how verbose dump file for the integrated register allocator
6306
will be.  Default value is 5.  If the value is greater or equal to 10,
6307
the dump file will be stderr as if the value were @var{n} minus 10.
6308
 
6309
@item -fdelayed-branch
6310
@opindex fdelayed-branch
6311
If supported for the target machine, attempt to reorder instructions
6312
to exploit instruction slots available after delayed branch
6313
instructions.
6314
 
6315
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6316
 
6317
@item -fschedule-insns
6318
@opindex fschedule-insns
6319
If supported for the target machine, attempt to reorder instructions to
6320
eliminate execution stalls due to required data being unavailable.  This
6321
helps machines that have slow floating point or memory load instructions
6322
by allowing other instructions to be issued until the result of the load
6323
or floating point instruction is required.
6324
 
6325
Enabled at levels @option{-O2}, @option{-O3}.
6326
 
6327
@item -fschedule-insns2
6328
@opindex fschedule-insns2
6329
Similar to @option{-fschedule-insns}, but requests an additional pass of
6330
instruction scheduling after register allocation has been done.  This is
6331
especially useful on machines with a relatively small number of
6332
registers and where memory load instructions take more than one cycle.
6333
 
6334
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6335
 
6336
@item -fno-sched-interblock
6337
@opindex fno-sched-interblock
6338
Don't schedule instructions across basic blocks.  This is normally
6339
enabled by default when scheduling before register allocation, i.e.@:
6340
with @option{-fschedule-insns} or at @option{-O2} or higher.
6341
 
6342
@item -fno-sched-spec
6343
@opindex fno-sched-spec
6344
Don't allow speculative motion of non-load instructions.  This is normally
6345
enabled by default when scheduling before register allocation, i.e.@:
6346
with @option{-fschedule-insns} or at @option{-O2} or higher.
6347
 
6348
@item -fsched-pressure
6349
@opindex fsched-pressure
6350
Enable register pressure sensitive insn scheduling before the register
6351
allocation.  This only makes sense when scheduling before register
6352
allocation is enabled, i.e.@: with @option{-fschedule-insns} or at
6353
@option{-O2} or higher.  Usage of this option can improve the
6354
generated code and decrease its size by preventing register pressure
6355
increase above the number of available hard registers and as a
6356
consequence register spills in the register allocation.
6357
 
6358
@item -fsched-spec-load
6359
@opindex fsched-spec-load
6360
Allow speculative motion of some load instructions.  This only makes
6361
sense when scheduling before register allocation, i.e.@: with
6362
@option{-fschedule-insns} or at @option{-O2} or higher.
6363
 
6364
@item -fsched-spec-load-dangerous
6365
@opindex fsched-spec-load-dangerous
6366
Allow speculative motion of more load instructions.  This only makes
6367
sense when scheduling before register allocation, i.e.@: with
6368
@option{-fschedule-insns} or at @option{-O2} or higher.
6369
 
6370
@item -fsched-stalled-insns
6371
@itemx -fsched-stalled-insns=@var{n}
6372
@opindex fsched-stalled-insns
6373
Define how many insns (if any) can be moved prematurely from the queue
6374
of stalled insns into the ready list, during the second scheduling pass.
6375
@option{-fno-sched-stalled-insns} means that no insns will be moved
6376
prematurely, @option{-fsched-stalled-insns=0} means there is no limit
6377
on how many queued insns can be moved prematurely.
6378
@option{-fsched-stalled-insns} without a value is equivalent to
6379
@option{-fsched-stalled-insns=1}.
6380
 
6381
@item -fsched-stalled-insns-dep
6382
@itemx -fsched-stalled-insns-dep=@var{n}
6383
@opindex fsched-stalled-insns-dep
6384
Define how many insn groups (cycles) will be examined for a dependency
6385
on a stalled insn that is candidate for premature removal from the queue
6386
of stalled insns.  This has an effect only during the second scheduling pass,
6387
and only if @option{-fsched-stalled-insns} is used.
6388
@option{-fno-sched-stalled-insns-dep} is equivalent to
6389
@option{-fsched-stalled-insns-dep=0}.
6390
@option{-fsched-stalled-insns-dep} without a value is equivalent to
6391
@option{-fsched-stalled-insns-dep=1}.
6392
 
6393
@item -fsched2-use-superblocks
6394
@opindex fsched2-use-superblocks
6395
When scheduling after register allocation, do use superblock scheduling
6396
algorithm.  Superblock scheduling allows motion across basic block boundaries
6397
resulting on faster schedules.  This option is experimental, as not all machine
6398
descriptions used by GCC model the CPU closely enough to avoid unreliable
6399
results from the algorithm.
6400
 
6401
This only makes sense when scheduling after register allocation, i.e.@: with
6402
@option{-fschedule-insns2} or at @option{-O2} or higher.
6403
 
6404
@item -fsched-group-heuristic
6405
@opindex fsched-group-heuristic
6406
Enable the group heuristic in the scheduler.  This heuristic favors
6407
the instruction that belongs to a schedule group.  This is enabled
6408
by default when scheduling is enabled, i.e.@: with @option{-fschedule-insns}
6409
or @option{-fschedule-insns2} or at @option{-O2} or higher.
6410
 
6411
@item -fsched-critical-path-heuristic
6412
@opindex fsched-critical-path-heuristic
6413
Enable the critical-path heuristic in the scheduler.  This heuristic favors
6414
instructions on the critical path.  This is enabled by default when
6415
scheduling is enabled, i.e.@: with @option{-fschedule-insns}
6416
or @option{-fschedule-insns2} or at @option{-O2} or higher.
6417
 
6418
@item -fsched-spec-insn-heuristic
6419
@opindex fsched-spec-insn-heuristic
6420
Enable the speculative instruction heuristic in the scheduler.  This
6421
heuristic favors speculative instructions with greater dependency weakness.
6422
This is enabled by default when scheduling is enabled, i.e.@:
6423
with @option{-fschedule-insns} or @option{-fschedule-insns2}
6424
or at @option{-O2} or higher.
6425
 
6426
@item -fsched-rank-heuristic
6427
@opindex fsched-rank-heuristic
6428
Enable the rank heuristic in the scheduler.  This heuristic favors
6429
the instruction belonging to a basic block with greater size or frequency.
6430
This is enabled by default when scheduling is enabled, i.e.@:
6431
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
6432
at @option{-O2} or higher.
6433
 
6434
@item -fsched-last-insn-heuristic
6435
@opindex fsched-last-insn-heuristic
6436
Enable the last-instruction heuristic in the scheduler.  This heuristic
6437
favors the instruction that is less dependent on the last instruction
6438
scheduled.  This is enabled by default when scheduling is enabled,
6439
i.e.@: with @option{-fschedule-insns} or @option{-fschedule-insns2} or
6440
at @option{-O2} or higher.
6441
 
6442
@item -fsched-dep-count-heuristic
6443
@opindex fsched-dep-count-heuristic
6444
Enable the dependent-count heuristic in the scheduler.  This heuristic
6445
favors the instruction that has more instructions depending on it.
6446
This is enabled by default when scheduling is enabled, i.e.@:
6447
with @option{-fschedule-insns} or @option{-fschedule-insns2} or
6448
at @option{-O2} or higher.
6449
 
6450
@item -freschedule-modulo-scheduled-loops
6451
@opindex freschedule-modulo-scheduled-loops
6452
The modulo scheduling comes before the traditional scheduling, if a loop
6453
was modulo scheduled we may want to prevent the later scheduling passes
6454
from changing its schedule, we use this option to control that.
6455
 
6456
@item -fselective-scheduling
6457
@opindex fselective-scheduling
6458
Schedule instructions using selective scheduling algorithm.  Selective
6459
scheduling runs instead of the first scheduler pass.
6460
 
6461
@item -fselective-scheduling2
6462
@opindex fselective-scheduling2
6463
Schedule instructions using selective scheduling algorithm.  Selective
6464
scheduling runs instead of the second scheduler pass.
6465
 
6466
@item -fsel-sched-pipelining
6467
@opindex fsel-sched-pipelining
6468
Enable software pipelining of innermost loops during selective scheduling.
6469
This option has no effect until one of @option{-fselective-scheduling} or
6470
@option{-fselective-scheduling2} is turned on.
6471
 
6472
@item -fsel-sched-pipelining-outer-loops
6473
@opindex fsel-sched-pipelining-outer-loops
6474
When pipelining loops during selective scheduling, also pipeline outer loops.
6475
This option has no effect until @option{-fsel-sched-pipelining} is turned on.
6476
 
6477
@item -fcaller-saves
6478
@opindex fcaller-saves
6479
Enable values to be allocated in registers that will be clobbered by
6480
function calls, by emitting extra instructions to save and restore the
6481
registers around such calls.  Such allocation is done only when it
6482
seems to result in better code than would otherwise be produced.
6483
 
6484
This option is always enabled by default on certain machines, usually
6485
those which have no call-preserved registers to use instead.
6486
 
6487
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6488
 
6489
@item -fconserve-stack
6490
@opindex fconserve-stack
6491
Attempt to minimize stack usage.  The compiler will attempt to use less
6492
stack space, even if that makes the program slower.  This option
6493
implies setting the @option{large-stack-frame} parameter to 100
6494
and the @option{large-stack-frame-growth} parameter to 400.
6495
 
6496
@item -ftree-reassoc
6497
@opindex ftree-reassoc
6498
Perform reassociation on trees.  This flag is enabled by default
6499
at @option{-O} and higher.
6500
 
6501
@item -ftree-pre
6502
@opindex ftree-pre
6503
Perform partial redundancy elimination (PRE) on trees.  This flag is
6504
enabled by default at @option{-O2} and @option{-O3}.
6505
 
6506
@item -ftree-forwprop
6507
@opindex ftree-forwprop
6508
Perform forward propagation on trees.  This flag is enabled by default
6509
at @option{-O} and higher.
6510
 
6511
@item -ftree-fre
6512
@opindex ftree-fre
6513
Perform full redundancy elimination (FRE) on trees.  The difference
6514
between FRE and PRE is that FRE only considers expressions
6515
that are computed on all paths leading to the redundant computation.
6516
This analysis is faster than PRE, though it exposes fewer redundancies.
6517
This flag is enabled by default at @option{-O} and higher.
6518
 
6519
@item -ftree-phiprop
6520
@opindex ftree-phiprop
6521
Perform hoisting of loads from conditional pointers on trees.  This
6522
pass is enabled by default at @option{-O} and higher.
6523
 
6524
@item -ftree-copy-prop
6525
@opindex ftree-copy-prop
6526
Perform copy propagation on trees.  This pass eliminates unnecessary
6527
copy operations.  This flag is enabled by default at @option{-O} and
6528
higher.
6529
 
6530
@item -fipa-pure-const
6531
@opindex fipa-pure-const
6532
Discover which functions are pure or constant.
6533
Enabled by default at @option{-O} and higher.
6534
 
6535
@item -fipa-reference
6536
@opindex fipa-reference
6537
Discover which static variables do not escape cannot escape the
6538
compilation unit.
6539
Enabled by default at @option{-O} and higher.
6540
 
6541
@item -fipa-struct-reorg
6542
@opindex fipa-struct-reorg
6543
Perform structure reorganization optimization, that change C-like structures
6544
layout in order to better utilize spatial locality.  This transformation is
6545
affective for programs containing arrays of structures.  Available in two
6546
compilation modes: profile-based (enabled with @option{-fprofile-generate})
6547
or static (which uses built-in heuristics).  Require @option{-fipa-type-escape}
6548
to provide the safety of this transformation.  It works only in whole program
6549
mode, so it requires @option{-fwhole-program} and @option{-combine} to be
6550
enabled.  Structures considered @samp{cold} by this transformation are not
6551
affected (see @option{--param struct-reorg-cold-struct-ratio=@var{value}}).
6552
 
6553
With this flag, the program debug info reflects a new structure layout.
6554
 
6555
@item -fipa-pta
6556
@opindex fipa-pta
6557
Perform interprocedural pointer analysis.  This option is experimental
6558
and does not affect generated code.
6559
 
6560
@item -fipa-cp
6561
@opindex fipa-cp
6562
Perform interprocedural constant propagation.
6563
This optimization analyzes the program to determine when values passed
6564
to functions are constants and then optimizes accordingly.
6565
This optimization can substantially increase performance
6566
if the application has constants passed to functions.
6567
This flag is enabled by default at @option{-O2}, @option{-Os} and @option{-O3}.
6568
 
6569
@item -fipa-cp-clone
6570
@opindex fipa-cp-clone
6571
Perform function cloning to make interprocedural constant propagation stronger.
6572
When enabled, interprocedural constant propagation will perform function cloning
6573
when externally visible function can be called with constant arguments.
6574
Because this optimization can create multiple copies of functions,
6575
it may significantly increase code size
6576
(see @option{--param ipcp-unit-growth=@var{value}}).
6577
This flag is enabled by default at @option{-O3}.
6578
 
6579
@item -fipa-matrix-reorg
6580
@opindex fipa-matrix-reorg
6581
Perform matrix flattening and transposing.
6582
Matrix flattening tries to replace an @math{m}-dimensional matrix
6583
with its equivalent @math{n}-dimensional matrix, where @math{n < m}.
6584
This reduces the level of indirection needed for accessing the elements
6585
of the matrix. The second optimization is matrix transposing that
6586
attempts to change the order of the matrix's dimensions in order to
6587
improve cache locality.
6588
Both optimizations need the @option{-fwhole-program} flag.
6589
Transposing is enabled only if profiling information is available.
6590
 
6591
@item -ftree-sink
6592
@opindex ftree-sink
6593
Perform forward store motion  on trees.  This flag is
6594
enabled by default at @option{-O} and higher.
6595
 
6596
@item -ftree-ccp
6597
@opindex ftree-ccp
6598
Perform sparse conditional constant propagation (CCP) on trees.  This
6599
pass only operates on local scalar variables and is enabled by default
6600
at @option{-O} and higher.
6601
 
6602
@item -ftree-switch-conversion
6603
Perform conversion of simple initializations in a switch to
6604
initializations from a scalar array.  This flag is enabled by default
6605
at @option{-O2} and higher.
6606
 
6607
@item -ftree-dce
6608
@opindex ftree-dce
6609
Perform dead code elimination (DCE) on trees.  This flag is enabled by
6610
default at @option{-O} and higher.
6611
 
6612
@item -ftree-builtin-call-dce
6613
@opindex ftree-builtin-call-dce
6614
Perform conditional dead code elimination (DCE) for calls to builtin functions
6615
that may set @code{errno} but are otherwise side-effect free.  This flag is
6616
enabled by default at @option{-O2} and higher if @option{-Os} is not also
6617
specified.
6618
 
6619
@item -ftree-dominator-opts
6620
@opindex ftree-dominator-opts
6621
Perform a variety of simple scalar cleanups (constant/copy
6622
propagation, redundancy elimination, range propagation and expression
6623
simplification) based on a dominator tree traversal.  This also
6624
performs jump threading (to reduce jumps to jumps). This flag is
6625
enabled by default at @option{-O} and higher.
6626
 
6627
@item -ftree-dse
6628
@opindex ftree-dse
6629
Perform dead store elimination (DSE) on trees.  A dead store is a store into
6630
a memory location which will later be overwritten by another store without
6631
any intervening loads.  In this case the earlier store can be deleted.  This
6632
flag is enabled by default at @option{-O} and higher.
6633
 
6634
@item -ftree-ch
6635
@opindex ftree-ch
6636
Perform loop header copying on trees.  This is beneficial since it increases
6637
effectiveness of code motion optimizations.  It also saves one jump.  This flag
6638
is enabled by default at @option{-O} and higher.  It is not enabled
6639
for @option{-Os}, since it usually increases code size.
6640
 
6641
@item -ftree-loop-optimize
6642
@opindex ftree-loop-optimize
6643
Perform loop optimizations on trees.  This flag is enabled by default
6644
at @option{-O} and higher.
6645
 
6646
@item -ftree-loop-linear
6647
@opindex ftree-loop-linear
6648
Perform linear loop transformations on tree.  This flag can improve cache
6649
performance and allow further loop optimizations to take place.
6650
 
6651
@item -floop-interchange
6652
Perform loop interchange transformations on loops.  Interchanging two
6653
nested loops switches the inner and outer loops.  For example, given a
6654
loop like:
6655
@smallexample
6656
DO J = 1, M
6657
  DO I = 1, N
6658
    A(J, I) = A(J, I) * C
6659
  ENDDO
6660
ENDDO
6661
@end smallexample
6662
loop interchange will transform the loop as if the user had written:
6663
@smallexample
6664
DO I = 1, N
6665
  DO J = 1, M
6666
    A(J, I) = A(J, I) * C
6667
  ENDDO
6668
ENDDO
6669
@end smallexample
6670
which can be beneficial when @code{N} is larger than the caches,
6671
because in Fortran, the elements of an array are stored in memory
6672
contiguously by column, and the original loop iterates over rows,
6673
potentially creating at each access a cache miss.  This optimization
6674
applies to all the languages supported by GCC and is not limited to
6675
Fortran.  To use this code transformation, GCC has to be configured
6676
with @option{--with-ppl} and @option{--with-cloog} to enable the
6677
Graphite loop transformation infrastructure.
6678
 
6679
@item -floop-strip-mine
6680
Perform loop strip mining transformations on loops.  Strip mining
6681
splits a loop into two nested loops.  The outer loop has strides
6682
equal to the strip size and the inner loop has strides of the
6683
original loop within a strip.  The strip length can be changed
6684
using the @option{loop-block-tile-size} parameter.  For example,
6685
given a loop like:
6686
@smallexample
6687
DO I = 1, N
6688
  A(I) = A(I) + C
6689
ENDDO
6690
@end smallexample
6691
loop strip mining will transform the loop as if the user had written:
6692
@smallexample
6693
DO II = 1, N, 51
6694
  DO I = II, min (II + 50, N)
6695
    A(I) = A(I) + C
6696
  ENDDO
6697
ENDDO
6698
@end smallexample
6699
This optimization applies to all the languages supported by GCC and is
6700
not limited to Fortran.  To use this code transformation, GCC has to
6701
be configured with @option{--with-ppl} and @option{--with-cloog} to
6702
enable the Graphite loop transformation infrastructure.
6703
 
6704
@item -floop-block
6705
Perform loop blocking transformations on loops.  Blocking strip mines
6706
each loop in the loop nest such that the memory accesses of the
6707
element loops fit inside caches.  The strip length can be changed
6708
using the @option{loop-block-tile-size} parameter.  For example, given
6709
a loop like:
6710
@smallexample
6711
DO I = 1, N
6712
  DO J = 1, M
6713
    A(J, I) = B(I) + C(J)
6714
  ENDDO
6715
ENDDO
6716
@end smallexample
6717
loop blocking will transform the loop as if the user had written:
6718
@smallexample
6719
DO II = 1, N, 51
6720
  DO JJ = 1, M, 51
6721
    DO I = II, min (II + 50, N)
6722
      DO J = JJ, min (JJ + 50, M)
6723
        A(J, I) = B(I) + C(J)
6724
      ENDDO
6725
    ENDDO
6726
  ENDDO
6727
ENDDO
6728
@end smallexample
6729
which can be beneficial when @code{M} is larger than the caches,
6730
because the innermost loop will iterate over a smaller amount of data
6731
that can be kept in the caches.  This optimization applies to all the
6732
languages supported by GCC and is not limited to Fortran.  To use this
6733
code transformation, GCC has to be configured with @option{--with-ppl}
6734
and @option{--with-cloog} to enable the Graphite loop transformation
6735
infrastructure.
6736
 
6737
@item -fgraphite-identity
6738
@opindex fgraphite-identity
6739
Enable the identity transformation for graphite.  For every SCoP we generate
6740
the polyhedral representation and transform it back to gimple.  Using
6741
@option{-fgraphite-identity} we can check the costs or benefits of the
6742
GIMPLE -> GRAPHITE -> GIMPLE transformation.  Some minimal optimizations
6743
are also performed by the code generator CLooG, like index splitting and
6744
dead code elimination in loops.
6745
 
6746
@item -floop-parallelize-all
6747
Use the Graphite data dependence analysis to identify loops that can
6748
be parallelized.  Parallelize all the loops that can be analyzed to
6749
not contain loop carried dependences without checking that it is
6750
profitable to parallelize the loops.
6751
 
6752
@item -fcheck-data-deps
6753
@opindex fcheck-data-deps
6754
Compare the results of several data dependence analyzers.  This option
6755
is used for debugging the data dependence analyzers.
6756
 
6757
@item -ftree-loop-distribution
6758
Perform loop distribution.  This flag can improve cache performance on
6759
big loop bodies and allow further loop optimizations, like
6760
parallelization or vectorization, to take place.  For example, the loop
6761
@smallexample
6762
DO I = 1, N
6763
  A(I) = B(I) + C
6764
  D(I) = E(I) * F
6765
ENDDO
6766
@end smallexample
6767
is transformed to
6768
@smallexample
6769
DO I = 1, N
6770
   A(I) = B(I) + C
6771
ENDDO
6772
DO I = 1, N
6773
   D(I) = E(I) * F
6774
ENDDO
6775
@end smallexample
6776
 
6777
@item -ftree-loop-im
6778
@opindex ftree-loop-im
6779
Perform loop invariant motion on trees.  This pass moves only invariants that
6780
would be hard to handle at RTL level (function calls, operations that expand to
6781
nontrivial sequences of insns).  With @option{-funswitch-loops} it also moves
6782
operands of conditions that are invariant out of the loop, so that we can use
6783
just trivial invariantness analysis in loop unswitching.  The pass also includes
6784
store motion.
6785
 
6786
@item -ftree-loop-ivcanon
6787
@opindex ftree-loop-ivcanon
6788
Create a canonical counter for number of iterations in the loop for that
6789
determining number of iterations requires complicated analysis.  Later
6790
optimizations then may determine the number easily.  Useful especially
6791
in connection with unrolling.
6792
 
6793
@item -fivopts
6794
@opindex fivopts
6795
Perform induction variable optimizations (strength reduction, induction
6796
variable merging and induction variable elimination) on trees.
6797
 
6798
@item -ftree-parallelize-loops=n
6799
@opindex ftree-parallelize-loops
6800
Parallelize loops, i.e., split their iteration space to run in n threads.
6801
This is only possible for loops whose iterations are independent
6802
and can be arbitrarily reordered.  The optimization is only
6803
profitable on multiprocessor machines, for loops that are CPU-intensive,
6804
rather than constrained e.g.@: by memory bandwidth.  This option
6805
implies @option{-pthread}, and thus is only supported on targets
6806
that have support for @option{-pthread}.
6807
 
6808
@item -ftree-pta
6809
@opindex ftree-pta
6810
Perform function-local points-to analysis on trees.  This flag is
6811
enabled by default at @option{-O} and higher.
6812
 
6813
@item -ftree-sra
6814
@opindex ftree-sra
6815
Perform scalar replacement of aggregates.  This pass replaces structure
6816
references with scalars to prevent committing structures to memory too
6817
early.  This flag is enabled by default at @option{-O} and higher.
6818
 
6819
@item -ftree-copyrename
6820
@opindex ftree-copyrename
6821
Perform copy renaming on trees.  This pass attempts to rename compiler
6822
temporaries to other variables at copy locations, usually resulting in
6823
variable names which more closely resemble the original variables.  This flag
6824
is enabled by default at @option{-O} and higher.
6825
 
6826
@item -ftree-ter
6827
@opindex ftree-ter
6828
Perform temporary expression replacement during the SSA->normal phase.  Single
6829
use/single def temporaries are replaced at their use location with their
6830
defining expression.  This results in non-GIMPLE code, but gives the expanders
6831
much more complex trees to work on resulting in better RTL generation.  This is
6832
enabled by default at @option{-O} and higher.
6833
 
6834
@item -ftree-vectorize
6835
@opindex ftree-vectorize
6836
Perform loop vectorization on trees. This flag is enabled by default at
6837
@option{-O3}.
6838
 
6839
@item -ftree-slp-vectorize
6840
@opindex ftree-slp-vectorize
6841
Perform basic block vectorization on trees. This flag is enabled by default at
6842
@option{-O3} and when @option{-ftree-vectorize} is enabled.
6843
 
6844
@item -ftree-vect-loop-version
6845
@opindex ftree-vect-loop-version
6846
Perform loop versioning when doing loop vectorization on trees.  When a loop
6847
appears to be vectorizable except that data alignment or data dependence cannot
6848
be determined at compile time then vectorized and non-vectorized versions of
6849
the loop are generated along with runtime checks for alignment or dependence
6850
to control which version is executed.  This option is enabled by default
6851
except at level @option{-Os} where it is disabled.
6852
 
6853
@item -fvect-cost-model
6854
@opindex fvect-cost-model
6855
Enable cost model for vectorization.
6856
 
6857
@item -ftree-vrp
6858
@opindex ftree-vrp
6859
Perform Value Range Propagation on trees.  This is similar to the
6860
constant propagation pass, but instead of values, ranges of values are
6861
propagated.  This allows the optimizers to remove unnecessary range
6862
checks like array bound checks and null pointer checks.  This is
6863
enabled by default at @option{-O2} and higher.  Null pointer check
6864
elimination is only done if @option{-fdelete-null-pointer-checks} is
6865
enabled.
6866
 
6867
@item -ftracer
6868
@opindex ftracer
6869
Perform tail duplication to enlarge superblock size.  This transformation
6870
simplifies the control flow of the function allowing other optimizations to do
6871
better job.
6872
 
6873
@item -funroll-loops
6874
@opindex funroll-loops
6875
Unroll loops whose number of iterations can be determined at compile
6876
time or upon entry to the loop.  @option{-funroll-loops} implies
6877
@option{-frerun-cse-after-loop}.  This option makes code larger,
6878
and may or may not make it run faster.
6879
 
6880
@item -funroll-all-loops
6881
@opindex funroll-all-loops
6882
Unroll all loops, even if their number of iterations is uncertain when
6883
the loop is entered.  This usually makes programs run more slowly.
6884
@option{-funroll-all-loops} implies the same options as
6885
@option{-funroll-loops},
6886
 
6887
@item -fsplit-ivs-in-unroller
6888
@opindex fsplit-ivs-in-unroller
6889
Enables expressing of values of induction variables in later iterations
6890
of the unrolled loop using the value in the first iteration.  This breaks
6891
long dependency chains, thus improving efficiency of the scheduling passes.
6892
 
6893
Combination of @option{-fweb} and CSE is often sufficient to obtain the
6894
same effect.  However in cases the loop body is more complicated than
6895
a single basic block, this is not reliable.  It also does not work at all
6896
on some of the architectures due to restrictions in the CSE pass.
6897
 
6898
This optimization is enabled by default.
6899
 
6900
@item -fvariable-expansion-in-unroller
6901
@opindex fvariable-expansion-in-unroller
6902
With this option, the compiler will create multiple copies of some
6903
local variables when unrolling a loop which can result in superior code.
6904
 
6905
@item -fpredictive-commoning
6906
@opindex fpredictive-commoning
6907
Perform predictive commoning optimization, i.e., reusing computations
6908
(especially memory loads and stores) performed in previous
6909
iterations of loops.
6910
 
6911
This option is enabled at level @option{-O3}.
6912
 
6913
@item -fprefetch-loop-arrays
6914
@opindex fprefetch-loop-arrays
6915
If supported by the target machine, generate instructions to prefetch
6916
memory to improve the performance of loops that access large arrays.
6917
 
6918
This option may generate better or worse code; results are highly
6919
dependent on the structure of loops within the source code.
6920
 
6921
Disabled at level @option{-Os}.
6922
 
6923
@item -fno-peephole
6924
@itemx -fno-peephole2
6925
@opindex fno-peephole
6926
@opindex fno-peephole2
6927
Disable any machine-specific peephole optimizations.  The difference
6928
between @option{-fno-peephole} and @option{-fno-peephole2} is in how they
6929
are implemented in the compiler; some targets use one, some use the
6930
other, a few use both.
6931
 
6932
@option{-fpeephole} is enabled by default.
6933
@option{-fpeephole2} enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6934
 
6935
@item -fno-guess-branch-probability
6936
@opindex fno-guess-branch-probability
6937
Do not guess branch probabilities using heuristics.
6938
 
6939
GCC will use heuristics to guess branch probabilities if they are
6940
not provided by profiling feedback (@option{-fprofile-arcs}).  These
6941
heuristics are based on the control flow graph.  If some branch probabilities
6942
are specified by @samp{__builtin_expect}, then the heuristics will be
6943
used to guess branch probabilities for the rest of the control flow graph,
6944
taking the @samp{__builtin_expect} info into account.  The interactions
6945
between the heuristics and @samp{__builtin_expect} can be complex, and in
6946
some cases, it may be useful to disable the heuristics so that the effects
6947
of @samp{__builtin_expect} are easier to understand.
6948
 
6949
The default is @option{-fguess-branch-probability} at levels
6950
@option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
6951
 
6952
@item -freorder-blocks
6953
@opindex freorder-blocks
6954
Reorder basic blocks in the compiled function in order to reduce number of
6955
taken branches and improve code locality.
6956
 
6957
Enabled at levels @option{-O2}, @option{-O3}.
6958
 
6959
@item -freorder-blocks-and-partition
6960
@opindex freorder-blocks-and-partition
6961
In addition to reordering basic blocks in the compiled function, in order
6962
to reduce number of taken branches, partitions hot and cold basic blocks
6963
into separate sections of the assembly and .o files, to improve
6964
paging and cache locality performance.
6965
 
6966
This optimization is automatically turned off in the presence of
6967
exception handling, for linkonce sections, for functions with a user-defined
6968
section attribute and on any architecture that does not support named
6969
sections.
6970
 
6971
@item -freorder-functions
6972
@opindex freorder-functions
6973
Reorder functions in the object file in order to
6974
improve code locality.  This is implemented by using special
6975
subsections @code{.text.hot} for most frequently executed functions and
6976
@code{.text.unlikely} for unlikely executed functions.  Reordering is done by
6977
the linker so object file format must support named sections and linker must
6978
place them in a reasonable way.
6979
 
6980
Also profile feedback must be available in to make this option effective.  See
6981
@option{-fprofile-arcs} for details.
6982
 
6983
Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
6984
 
6985
@item -fstrict-aliasing
6986
@opindex fstrict-aliasing
6987
Allow the compiler to assume the strictest aliasing rules applicable to
6988
the language being compiled.  For C (and C++), this activates
6989
optimizations based on the type of expressions.  In particular, an
6990
object of one type is assumed never to reside at the same address as an
6991
object of a different type, unless the types are almost the same.  For
6992
example, an @code{unsigned int} can alias an @code{int}, but not a
6993
@code{void*} or a @code{double}.  A character type may alias any other
6994
type.
6995
 
6996
@anchor{Type-punning}Pay special attention to code like this:
6997
@smallexample
6998
union a_union @{
6999
  int i;
7000
  double d;
7001
@};
7002
 
7003
int f() @{
7004
  union a_union t;
7005
  t.d = 3.0;
7006
  return t.i;
7007
@}
7008
@end smallexample
7009
The practice of reading from a different union member than the one most
7010
recently written to (called ``type-punning'') is common.  Even with
7011
@option{-fstrict-aliasing}, type-punning is allowed, provided the memory
7012
is accessed through the union type.  So, the code above will work as
7013
expected.  @xref{Structures unions enumerations and bit-fields
7014
implementation}.  However, this code might not:
7015
@smallexample
7016
int f() @{
7017
  union a_union t;
7018
  int* ip;
7019
  t.d = 3.0;
7020
  ip = &t.i;
7021
  return *ip;
7022
@}
7023
@end smallexample
7024
 
7025
Similarly, access by taking the address, casting the resulting pointer
7026
and dereferencing the result has undefined behavior, even if the cast
7027
uses a union type, e.g.:
7028
@smallexample
7029
int f() @{
7030
  double d = 3.0;
7031
  return ((union a_union *) &d)->i;
7032
@}
7033
@end smallexample
7034
 
7035
The @option{-fstrict-aliasing} option is enabled at levels
7036
@option{-O2}, @option{-O3}, @option{-Os}.
7037
 
7038
@item -fstrict-overflow
7039
@opindex fstrict-overflow
7040
Allow the compiler to assume strict signed overflow rules, depending
7041
on the language being compiled.  For C (and C++) this means that
7042
overflow when doing arithmetic with signed numbers is undefined, which
7043
means that the compiler may assume that it will not happen.  This
7044
permits various optimizations.  For example, the compiler will assume
7045
that an expression like @code{i + 10 > i} will always be true for
7046
signed @code{i}.  This assumption is only valid if signed overflow is
7047
undefined, as the expression is false if @code{i + 10} overflows when
7048
using twos complement arithmetic.  When this option is in effect any
7049
attempt to determine whether an operation on signed numbers will
7050
overflow must be written carefully to not actually involve overflow.
7051
 
7052
This option also allows the compiler to assume strict pointer
7053
semantics: given a pointer to an object, if adding an offset to that
7054
pointer does not produce a pointer to the same object, the addition is
7055
undefined.  This permits the compiler to conclude that @code{p + u >
7056
p} is always true for a pointer @code{p} and unsigned integer
7057
@code{u}.  This assumption is only valid because pointer wraparound is
7058
undefined, as the expression is false if @code{p + u} overflows using
7059
twos complement arithmetic.
7060
 
7061
See also the @option{-fwrapv} option.  Using @option{-fwrapv} means
7062
that integer signed overflow is fully defined: it wraps.  When
7063
@option{-fwrapv} is used, there is no difference between
7064
@option{-fstrict-overflow} and @option{-fno-strict-overflow} for
7065
integers.  With @option{-fwrapv} certain types of overflow are
7066
permitted.  For example, if the compiler gets an overflow when doing
7067
arithmetic on constants, the overflowed value can still be used with
7068
@option{-fwrapv}, but not otherwise.
7069
 
7070
The @option{-fstrict-overflow} option is enabled at levels
7071
@option{-O2}, @option{-O3}, @option{-Os}.
7072
 
7073
@item -falign-functions
7074
@itemx -falign-functions=@var{n}
7075
@opindex falign-functions
7076
Align the start of functions to the next power-of-two greater than
7077
@var{n}, skipping up to @var{n} bytes.  For instance,
7078
@option{-falign-functions=32} aligns functions to the next 32-byte
7079
boundary, but @option{-falign-functions=24} would align to the next
7080
32-byte boundary only if this can be done by skipping 23 bytes or less.
7081
 
7082
@option{-fno-align-functions} and @option{-falign-functions=1} are
7083
equivalent and mean that functions will not be aligned.
7084
 
7085
Some assemblers only support this flag when @var{n} is a power of two;
7086
in that case, it is rounded up.
7087
 
7088
If @var{n} is not specified or is zero, use a machine-dependent default.
7089
 
7090
Enabled at levels @option{-O2}, @option{-O3}.
7091
 
7092
@item -falign-labels
7093
@itemx -falign-labels=@var{n}
7094
@opindex falign-labels
7095
Align all branch targets to a power-of-two boundary, skipping up to
7096
@var{n} bytes like @option{-falign-functions}.  This option can easily
7097
make code slower, because it must insert dummy operations for when the
7098
branch target is reached in the usual flow of the code.
7099
 
7100
@option{-fno-align-labels} and @option{-falign-labels=1} are
7101
equivalent and mean that labels will not be aligned.
7102
 
7103
If @option{-falign-loops} or @option{-falign-jumps} are applicable and
7104
are greater than this value, then their values are used instead.
7105
 
7106
If @var{n} is not specified or is zero, use a machine-dependent default
7107
which is very likely to be @samp{1}, meaning no alignment.
7108
 
7109
Enabled at levels @option{-O2}, @option{-O3}.
7110
 
7111
@item -falign-loops
7112
@itemx -falign-loops=@var{n}
7113
@opindex falign-loops
7114
Align loops to a power-of-two boundary, skipping up to @var{n} bytes
7115
like @option{-falign-functions}.  The hope is that the loop will be
7116
executed many times, which will make up for any execution of the dummy
7117
operations.
7118
 
7119
@option{-fno-align-loops} and @option{-falign-loops=1} are
7120
equivalent and mean that loops will not be aligned.
7121
 
7122
If @var{n} is not specified or is zero, use a machine-dependent default.
7123
 
7124
Enabled at levels @option{-O2}, @option{-O3}.
7125
 
7126
@item -falign-jumps
7127
@itemx -falign-jumps=@var{n}
7128
@opindex falign-jumps
7129
Align branch targets to a power-of-two boundary, for branch targets
7130
where the targets can only be reached by jumping, skipping up to @var{n}
7131
bytes like @option{-falign-functions}.  In this case, no dummy operations
7132
need be executed.
7133
 
7134
@option{-fno-align-jumps} and @option{-falign-jumps=1} are
7135
equivalent and mean that loops will not be aligned.
7136
 
7137
If @var{n} is not specified or is zero, use a machine-dependent default.
7138
 
7139
Enabled at levels @option{-O2}, @option{-O3}.
7140
 
7141
@item -funit-at-a-time
7142
@opindex funit-at-a-time
7143
This option is left for compatibility reasons. @option{-funit-at-a-time}
7144
has no effect, while @option{-fno-unit-at-a-time} implies
7145
@option{-fno-toplevel-reorder} and @option{-fno-section-anchors}.
7146
 
7147
Enabled by default.
7148
 
7149
@item -fno-toplevel-reorder
7150
@opindex fno-toplevel-reorder
7151
Do not reorder top-level functions, variables, and @code{asm}
7152
statements.  Output them in the same order that they appear in the
7153
input file.  When this option is used, unreferenced static variables
7154
will not be removed.  This option is intended to support existing code
7155
which relies on a particular ordering.  For new code, it is better to
7156
use attributes.
7157
 
7158
Enabled at level @option{-O0}.  When disabled explicitly, it also imply
7159
@option{-fno-section-anchors} that is otherwise enabled at @option{-O0} on some
7160
targets.
7161
 
7162
@item -fweb
7163
@opindex fweb
7164
Constructs webs as commonly used for register allocation purposes and assign
7165
each web individual pseudo register.  This allows the register allocation pass
7166
to operate on pseudos directly, but also strengthens several other optimization
7167
passes, such as CSE, loop optimizer and trivial dead code remover.  It can,
7168
however, make debugging impossible, since variables will no longer stay in a
7169
``home register''.
7170
 
7171
Enabled by default with @option{-funroll-loops}.
7172
 
7173
@item -fwhole-program
7174
@opindex fwhole-program
7175
Assume that the current compilation unit represents the whole program being
7176
compiled.  All public functions and variables with the exception of @code{main}
7177
and those merged by attribute @code{externally_visible} become static functions
7178
and in effect are optimized more aggressively by interprocedural optimizers.
7179
While this option is equivalent to proper use of the @code{static} keyword for
7180
programs consisting of a single file, in combination with option
7181
@option{-combine}, @option{-flto} or @option{-fwhopr} this flag can be used to
7182
compile many smaller scale programs since the functions and variables become
7183
local for the whole combined compilation unit, not for the single source file
7184
itself.
7185
 
7186
This option implies @option{-fwhole-file} for Fortran programs.
7187
 
7188
@item -flto
7189
@opindex flto
7190
This option runs the standard link-time optimizer.  When invoked
7191
with source code, it generates GIMPLE (one of GCC's internal
7192
representations) and writes it to special ELF sections in the object
7193
file.  When the object files are linked together, all the function
7194
bodies are read from these ELF sections and instantiated as if they
7195
had been part of the same translation unit.
7196
 
7197
To use the link-timer optimizer, @option{-flto} needs to be specified at
7198
compile time and during the final link.  For example,
7199
 
7200
@smallexample
7201
gcc -c -O2 -flto foo.c
7202
gcc -c -O2 -flto bar.c
7203
gcc -o myprog -flto -O2 foo.o bar.o
7204
@end smallexample
7205
 
7206
The first two invocations to GCC will save a bytecode representation
7207
of GIMPLE into special ELF sections inside @file{foo.o} and
7208
@file{bar.o}.  The final invocation will read the GIMPLE bytecode from
7209
@file{foo.o} and @file{bar.o}, merge the two files into a single
7210
internal image, and compile the result as usual.  Since both
7211
@file{foo.o} and @file{bar.o} are merged into a single image, this
7212
causes all the inter-procedural analyses and optimizations in GCC to
7213
work across the two files as if they were a single one.  This means,
7214
for example, that the inliner will be able to inline functions in
7215
@file{bar.o} into functions in @file{foo.o} and vice-versa.
7216
 
7217
Another (simpler) way to enable link-time optimization is,
7218
 
7219
@smallexample
7220
gcc -o myprog -flto -O2 foo.c bar.c
7221
@end smallexample
7222
 
7223
The above will generate bytecode for @file{foo.c} and @file{bar.c},
7224
merge them together into a single GIMPLE representation and optimize
7225
them as usual to produce @file{myprog}.
7226
 
7227
The only important thing to keep in mind is that to enable link-time
7228
optimizations the @option{-flto} flag needs to be passed to both the
7229
compile and the link commands.
7230
 
7231
Note that when a file is compiled with @option{-flto}, the generated
7232
object file will be larger than a regular object file because it will
7233
contain GIMPLE bytecodes and the usual final code.  This means that
7234
object files with LTO information can be linked as a normal object
7235
file.  So, in the previous example, if the final link is done with
7236
 
7237
@smallexample
7238
gcc -o myprog foo.o bar.o
7239
@end smallexample
7240
 
7241
The only difference will be that no inter-procedural optimizations
7242
will be applied to produce @file{myprog}.  The two object files
7243
@file{foo.o} and @file{bar.o} will be simply sent to the regular
7244
linker.
7245
 
7246
Additionally, the optimization flags used to compile individual files
7247
are not necessarily related to those used at link-time.  For instance,
7248
 
7249
@smallexample
7250
gcc -c -O0 -flto foo.c
7251
gcc -c -O0 -flto bar.c
7252
gcc -o myprog -flto -O3 foo.o bar.o
7253
@end smallexample
7254
 
7255
This will produce individual object files with unoptimized assembler
7256
code, but the resulting binary @file{myprog} will be optimized at
7257
@option{-O3}.  Now, if the final binary is generated without
7258
@option{-flto}, then @file{myprog} will not be optimized.
7259
 
7260
When producing the final binary with @option{-flto}, GCC will only
7261
apply link-time optimizations to those files that contain bytecode.
7262
Therefore, you can mix and match object files and libraries with
7263
GIMPLE bytecodes and final object code.  GCC will automatically select
7264
which files to optimize in LTO mode and which files to link without
7265
further processing.
7266
 
7267
There are some code generation flags that GCC will preserve when
7268
generating bytecodes, as they need to be used during the final link
7269
stage.  Currently, the following options are saved into the GIMPLE
7270
bytecode files: @option{-fPIC}, @option{-fcommon} and all the
7271
@option{-m} target flags.
7272
 
7273
At link time, these options are read-in and reapplied.  Note that the
7274
current implementation makes no attempt at recognizing conflicting
7275
values for these options.  If two or more files have a conflicting
7276
value (e.g., one file is compiled with @option{-fPIC} and another
7277
isn't), the compiler will simply use the last value read from the
7278
bytecode files.  It is recommended, then, that all the files
7279
participating in the same link be compiled with the same options.
7280
 
7281
Another feature of LTO is that it is possible to apply interprocedural
7282
optimizations on files written in different languages.  This requires
7283
some support in the language front end.  Currently, the C, C++ and
7284
Fortran front ends are capable of emitting GIMPLE bytecodes, so
7285
something like this should work
7286
 
7287
@smallexample
7288
gcc -c -flto foo.c
7289
g++ -c -flto bar.cc
7290
gfortran -c -flto baz.f90
7291
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
7292
@end smallexample
7293
 
7294
Notice that the final link is done with @command{g++} to get the C++
7295
runtime libraries and @option{-lgfortran} is added to get the Fortran
7296
runtime libraries.  In general, when mixing languages in LTO mode, you
7297
should use the same link command used when mixing languages in a
7298
regular (non-LTO) compilation.  This means that if your build process
7299
was mixing languages before, all you need to add is @option{-flto} to
7300
all the compile and link commands.
7301
 
7302
If LTO encounters objects with C linkage declared with incompatible
7303
types in separate translation units to be linked together (undefined
7304
behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
7305
issued.  The behavior is still undefined at runtime.
7306
 
7307
If object files containing GIMPLE bytecode are stored in a library
7308
archive, say @file{libfoo.a}, it is possible to extract and use them
7309
in an LTO link if you are using @command{gold} as the linker (which,
7310
in turn requires GCC to be configured with @option{--enable-gold}).
7311
To enable this feature, use the flag @option{-fuse-linker-plugin} at
7312
link-time:
7313
 
7314
@smallexample
7315
gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
7316
@end smallexample
7317
 
7318
With the linker plugin enabled, @command{gold} will extract the needed
7319
GIMPLE files from @file{libfoo.a} and pass them on to the running GCC
7320
to make them part of the aggregated GIMPLE image to be optimized.
7321
 
7322
If you are not using @command{gold} and/or do not specify
7323
@option{-fuse-linker-plugin} then the objects inside @file{libfoo.a}
7324
will be extracted and linked as usual, but they will not participate
7325
in the LTO optimization process.
7326
 
7327
Link time optimizations do not require the presence of the whole
7328
program to operate.  If the program does not require any symbols to
7329
be exported, it is possible to combine @option{-flto} and
7330
@option{-fwhopr} with @option{-fwhole-program} to allow the
7331
interprocedural optimizers to use more aggressive assumptions which
7332
may lead to improved optimization opportunities.
7333
 
7334
Regarding portability: the current implementation of LTO makes no
7335
attempt at generating bytecode that can be ported between different
7336
types of hosts.  The bytecode files are versioned and there is a
7337
strict version check, so bytecode files generated in one version of
7338
GCC will not work with an older/newer version of GCC.
7339
 
7340
Link time optimization does not play well with generating debugging
7341
information.  Combining @option{-flto} or @option{-fwhopr} with
7342
@option{-g} is experimental.
7343
 
7344
This option is disabled by default.
7345
 
7346
@item -fwhopr
7347
@opindex fwhopr
7348
This option is identical in functionality to @option{-flto} but it
7349
differs in how the final link stage is executed.  Instead of loading
7350
all the function bodies in memory, the callgraph is analyzed and
7351
optimization decisions are made (whole program analysis or WPA). Once
7352
optimization decisions are made, the callgraph is partitioned and the
7353
different sections are compiled separately (local transformations or
7354
LTRANS)@.  This process allows optimizations on very large programs
7355
that otherwise would not fit in memory.  This option enables
7356
@option{-fwpa} and @option{-fltrans} automatically.
7357
 
7358
Disabled by default.
7359
 
7360
This option is experimental.
7361
 
7362
@item -fwpa
7363
@opindex fwpa
7364
This is an internal option used by GCC when compiling with
7365
@option{-fwhopr}.  You should never need to use it.
7366
 
7367
This option runs the link-time optimizer in the whole-program-analysis
7368
(WPA) mode, which reads in summary information from all inputs and
7369
performs a whole-program analysis based on summary information only.
7370
It generates object files for subsequent runs of the link-time
7371
optimizer where individual object files are optimized using both
7372
summary information from the WPA mode and the actual function bodies.
7373
It then drives the LTRANS phase.
7374
 
7375
Disabled by default.
7376
 
7377
@item -fltrans
7378
@opindex fltrans
7379
This is an internal option used by GCC when compiling with
7380
@option{-fwhopr}.  You should never need to use it.
7381
 
7382
This option runs the link-time optimizer in the local-transformation (LTRANS)
7383
mode, which reads in output from a previous run of the LTO in WPA mode.
7384
In the LTRANS mode, LTO optimizes an object and produces the final assembly.
7385
 
7386
Disabled by default.
7387
 
7388
@item -fltrans-output-list=@var{file}
7389
@opindex fltrans-output-list
7390
This is an internal option used by GCC when compiling with
7391
@option{-fwhopr}.  You should never need to use it.
7392
 
7393
This option specifies a file to which the names of LTRANS output files are
7394
written.  This option is only meaningful in conjunction with @option{-fwpa}.
7395
 
7396
Disabled by default.
7397
 
7398
@item -flto-compression-level=@var{n}
7399
This option specifies the level of compression used for intermediate
7400
language written to LTO object files, and is only meaningful in
7401
conjunction with LTO mode (@option{-fwhopr}, @option{-flto}).  Valid
7402
values are 0 (no compression) to 9 (maximum compression).  Values
7403
outside this range are clamped to either 0 or 9.  If the option is not
7404
given, a default balanced compression setting is used.
7405
 
7406
@item -flto-report
7407
Prints a report with internal details on the workings of the link-time
7408
optimizer.  The contents of this report vary from version to version,
7409
it is meant to be useful to GCC developers when processing object
7410
files in LTO mode (via @option{-fwhopr} or @option{-flto}).
7411
 
7412
Disabled by default.
7413
 
7414
@item -fuse-linker-plugin
7415
Enables the extraction of objects with GIMPLE bytecode information
7416
from library archives.  This option relies on features available only
7417
in @command{gold}, so to use this you must configure GCC with
7418
@option{--enable-gold}.  See @option{-flto} for a description on the
7419
effect of this flag and how to use it.
7420
 
7421
Disabled by default.
7422
 
7423
@item -fcprop-registers
7424
@opindex fcprop-registers
7425
After register allocation and post-register allocation instruction splitting,
7426
we perform a copy-propagation pass to try to reduce scheduling dependencies
7427
and occasionally eliminate the copy.
7428
 
7429
Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}.
7430
 
7431
@item -fprofile-correction
7432
@opindex fprofile-correction
7433
Profiles collected using an instrumented binary for multi-threaded programs may
7434
be inconsistent due to missed counter updates. When this option is specified,
7435
GCC will use heuristics to correct or smooth out such inconsistencies. By
7436
default, GCC will emit an error message when an inconsistent profile is detected.
7437
 
7438
@item -fprofile-dir=@var{path}
7439
@opindex fprofile-dir
7440
 
7441
Set the directory to search the profile data files in to @var{path}.
7442
This option affects only the profile data generated by
7443
@option{-fprofile-generate}, @option{-ftest-coverage}, @option{-fprofile-arcs}
7444
and used by @option{-fprofile-use} and @option{-fbranch-probabilities}
7445
and its related options.
7446
By default, GCC will use the current directory as @var{path}
7447
thus the profile data file will appear in the same directory as the object file.
7448
 
7449
@item -fprofile-generate
7450
@itemx -fprofile-generate=@var{path}
7451
@opindex fprofile-generate
7452
 
7453
Enable options usually used for instrumenting application to produce
7454
profile useful for later recompilation with profile feedback based
7455
optimization.  You must use @option{-fprofile-generate} both when
7456
compiling and when linking your program.
7457
 
7458
The following options are enabled: @code{-fprofile-arcs}, @code{-fprofile-values}, @code{-fvpt}.
7459
 
7460
If @var{path} is specified, GCC will look at the @var{path} to find
7461
the profile feedback data files. See @option{-fprofile-dir}.
7462
 
7463
@item -fprofile-use
7464
@itemx -fprofile-use=@var{path}
7465
@opindex fprofile-use
7466
Enable profile feedback directed optimizations, and optimizations
7467
generally profitable only with profile feedback available.
7468
 
7469
The following options are enabled: @code{-fbranch-probabilities}, @code{-fvpt},
7470
@code{-funroll-loops}, @code{-fpeel-loops}, @code{-ftracer}
7471
 
7472
By default, GCC emits an error message if the feedback profiles do not
7473
match the source code.  This error can be turned into a warning by using
7474
@option{-Wcoverage-mismatch}.  Note this may result in poorly optimized
7475
code.
7476
 
7477
If @var{path} is specified, GCC will look at the @var{path} to find
7478
the profile feedback data files. See @option{-fprofile-dir}.
7479
@end table
7480
 
7481
The following options control compiler behavior regarding floating
7482
point arithmetic.  These options trade off between speed and
7483
correctness.  All must be specifically enabled.
7484
 
7485
@table @gcctabopt
7486
@item -ffloat-store
7487
@opindex ffloat-store
7488
Do not store floating point variables in registers, and inhibit other
7489
options that might change whether a floating point value is taken from a
7490
register or memory.
7491
 
7492
@cindex floating point precision
7493
This option prevents undesirable excess precision on machines such as
7494
the 68000 where the floating registers (of the 68881) keep more
7495
precision than a @code{double} is supposed to have.  Similarly for the
7496
x86 architecture.  For most programs, the excess precision does only
7497
good, but a few programs rely on the precise definition of IEEE floating
7498
point.  Use @option{-ffloat-store} for such programs, after modifying
7499
them to store all pertinent intermediate computations into variables.
7500
 
7501
@item -fexcess-precision=@var{style}
7502
@opindex fexcess-precision
7503
This option allows further control over excess precision on machines
7504
where floating-point registers have more precision than the IEEE
7505
@code{float} and @code{double} types and the processor does not
7506
support operations rounding to those types.  By default,
7507
@option{-fexcess-precision=fast} is in effect; this means that
7508
operations are carried out in the precision of the registers and that
7509
it is unpredictable when rounding to the types specified in the source
7510
code takes place.  When compiling C, if
7511
@option{-fexcess-precision=standard} is specified then excess
7512
precision will follow the rules specified in ISO C99; in particular,
7513
both casts and assignments cause values to be rounded to their
7514
semantic types (whereas @option{-ffloat-store} only affects
7515
assignments).  This option is enabled by default for C if a strict
7516
conformance option such as @option{-std=c99} is used.
7517
 
7518
@opindex mfpmath
7519
@option{-fexcess-precision=standard} is not implemented for languages
7520
other than C, and has no effect if
7521
@option{-funsafe-math-optimizations} or @option{-ffast-math} is
7522
specified.  On the x86, it also has no effect if @option{-mfpmath=sse}
7523
or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
7524
semantics apply without excess precision, and in the latter, rounding
7525
is unpredictable.
7526
 
7527
@item -ffast-math
7528
@opindex ffast-math
7529
Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
7530
@option{-ffinite-math-only}, @option{-fno-rounding-math},
7531
@option{-fno-signaling-nans} and @option{-fcx-limited-range}.
7532
 
7533
This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
7534
 
7535
This option is not turned on by any @option{-O} option since
7536
it can result in incorrect output for programs which depend on
7537
an exact implementation of IEEE or ISO rules/specifications for
7538
math functions. It may, however, yield faster code for programs
7539
that do not require the guarantees of these specifications.
7540
 
7541
@item -fno-math-errno
7542
@opindex fno-math-errno
7543
Do not set ERRNO after calling math functions that are executed
7544
with a single instruction, e.g., sqrt.  A program that relies on
7545
IEEE exceptions for math error handling may want to use this flag
7546
for speed while maintaining IEEE arithmetic compatibility.
7547
 
7548
This option is not turned on by any @option{-O} option since
7549
it can result in incorrect output for programs which depend on
7550
an exact implementation of IEEE or ISO rules/specifications for
7551
math functions. It may, however, yield faster code for programs
7552
that do not require the guarantees of these specifications.
7553
 
7554
The default is @option{-fmath-errno}.
7555
 
7556
On Darwin systems, the math library never sets @code{errno}.  There is
7557
therefore no reason for the compiler to consider the possibility that
7558
it might, and @option{-fno-math-errno} is the default.
7559
 
7560
@item -funsafe-math-optimizations
7561
@opindex funsafe-math-optimizations
7562
 
7563
Allow optimizations for floating-point arithmetic that (a) assume
7564
that arguments and results are valid and (b) may violate IEEE or
7565
ANSI standards.  When used at link-time, it may include libraries
7566
or startup files that change the default FPU control word or other
7567
similar optimizations.
7568
 
7569
This option is not turned on by any @option{-O} option since
7570
it can result in incorrect output for programs which depend on
7571
an exact implementation of IEEE or ISO rules/specifications for
7572
math functions. It may, however, yield faster code for programs
7573
that do not require the guarantees of these specifications.
7574
Enables @option{-fno-signed-zeros}, @option{-fno-trapping-math},
7575
@option{-fassociative-math} and @option{-freciprocal-math}.
7576
 
7577
The default is @option{-fno-unsafe-math-optimizations}.
7578
 
7579
@item -fassociative-math
7580
@opindex fassociative-math
7581
 
7582
Allow re-association of operands in series of floating-point operations.
7583
This violates the ISO C and C++ language standard by possibly changing
7584
computation result.  NOTE: re-ordering may change the sign of zero as
7585
well as ignore NaNs and inhibit or create underflow or overflow (and
7586
thus cannot be used on a code which relies on rounding behavior like
7587
@code{(x + 2**52) - 2**52)}.  May also reorder floating-point comparisons
7588
and thus may not be used when ordered comparisons are required.
7589
This option requires that both @option{-fno-signed-zeros} and
7590
@option{-fno-trapping-math} be in effect.  Moreover, it doesn't make
7591
much sense with @option{-frounding-math}. For Fortran the option
7592
is automatically enabled when both @option{-fno-signed-zeros} and
7593
@option{-fno-trapping-math} are in effect.
7594
 
7595
The default is @option{-fno-associative-math}.
7596
 
7597
@item -freciprocal-math
7598
@opindex freciprocal-math
7599
 
7600
Allow the reciprocal of a value to be used instead of dividing by
7601
the value if this enables optimizations.  For example @code{x / y}
7602
can be replaced with @code{x * (1/y)} which is useful if @code{(1/y)}
7603
is subject to common subexpression elimination.  Note that this loses
7604
precision and increases the number of flops operating on the value.
7605
 
7606
The default is @option{-fno-reciprocal-math}.
7607
 
7608
@item -ffinite-math-only
7609
@opindex ffinite-math-only
7610
Allow optimizations for floating-point arithmetic that assume
7611
that arguments and results are not NaNs or +-Infs.
7612
 
7613
This option is not turned on by any @option{-O} option since
7614
it can result in incorrect output for programs which depend on
7615
an exact implementation of IEEE or ISO rules/specifications for
7616
math functions. It may, however, yield faster code for programs
7617
that do not require the guarantees of these specifications.
7618
 
7619
The default is @option{-fno-finite-math-only}.
7620
 
7621
@item -fno-signed-zeros
7622
@opindex fno-signed-zeros
7623
Allow optimizations for floating point arithmetic that ignore the
7624
signedness of zero.  IEEE arithmetic specifies the behavior of
7625
distinct +0.0 and @minus{}0.0 values, which then prohibits simplification
7626
of expressions such as x+0.0 or 0.0*x (even with @option{-ffinite-math-only}).
7627
This option implies that the sign of a zero result isn't significant.
7628
 
7629
The default is @option{-fsigned-zeros}.
7630
 
7631
@item -fno-trapping-math
7632
@opindex fno-trapping-math
7633
Compile code assuming that floating-point operations cannot generate
7634
user-visible traps.  These traps include division by zero, overflow,
7635
underflow, inexact result and invalid operation.  This option requires
7636
that @option{-fno-signaling-nans} be in effect.  Setting this option may
7637
allow faster code if one relies on ``non-stop'' IEEE arithmetic, for example.
7638
 
7639
This option should never be turned on by any @option{-O} option since
7640
it can result in incorrect output for programs which depend on
7641
an exact implementation of IEEE or ISO rules/specifications for
7642
math functions.
7643
 
7644
The default is @option{-ftrapping-math}.
7645
 
7646
@item -frounding-math
7647
@opindex frounding-math
7648
Disable transformations and optimizations that assume default floating
7649
point rounding behavior.  This is round-to-zero for all floating point
7650
to integer conversions, and round-to-nearest for all other arithmetic
7651
truncations.  This option should be specified for programs that change
7652
the FP rounding mode dynamically, or that may be executed with a
7653
non-default rounding mode.  This option disables constant folding of
7654
floating point expressions at compile-time (which may be affected by
7655
rounding mode) and arithmetic transformations that are unsafe in the
7656
presence of sign-dependent rounding modes.
7657
 
7658
The default is @option{-fno-rounding-math}.
7659
 
7660
This option is experimental and does not currently guarantee to
7661
disable all GCC optimizations that are affected by rounding mode.
7662
Future versions of GCC may provide finer control of this setting
7663
using C99's @code{FENV_ACCESS} pragma.  This command line option
7664
will be used to specify the default state for @code{FENV_ACCESS}.
7665
 
7666
@item -fsignaling-nans
7667
@opindex fsignaling-nans
7668
Compile code assuming that IEEE signaling NaNs may generate user-visible
7669
traps during floating-point operations.  Setting this option disables
7670
optimizations that may change the number of exceptions visible with
7671
signaling NaNs.  This option implies @option{-ftrapping-math}.
7672
 
7673
This option causes the preprocessor macro @code{__SUPPORT_SNAN__} to
7674
be defined.
7675
 
7676
The default is @option{-fno-signaling-nans}.
7677
 
7678
This option is experimental and does not currently guarantee to
7679
disable all GCC optimizations that affect signaling NaN behavior.
7680
 
7681
@item -fsingle-precision-constant
7682
@opindex fsingle-precision-constant
7683
Treat floating point constant as single precision constant instead of
7684
implicitly converting it to double precision constant.
7685
 
7686
@item -fcx-limited-range
7687
@opindex fcx-limited-range
7688
When enabled, this option states that a range reduction step is not
7689
needed when performing complex division.  Also, there is no checking
7690
whether the result of a complex multiplication or division is @code{NaN
7691
+ I*NaN}, with an attempt to rescue the situation in that case.  The
7692
default is @option{-fno-cx-limited-range}, but is enabled by
7693
@option{-ffast-math}.
7694
 
7695
This option controls the default setting of the ISO C99
7696
@code{CX_LIMITED_RANGE} pragma.  Nevertheless, the option applies to
7697
all languages.
7698
 
7699
@item -fcx-fortran-rules
7700
@opindex fcx-fortran-rules
7701
Complex multiplication and division follow Fortran rules.  Range
7702
reduction is done as part of complex division, but there is no checking
7703
whether the result of a complex multiplication or division is @code{NaN
7704
+ I*NaN}, with an attempt to rescue the situation in that case.
7705
 
7706
The default is @option{-fno-cx-fortran-rules}.
7707
 
7708
@end table
7709
 
7710
The following options control optimizations that may improve
7711
performance, but are not enabled by any @option{-O} options.  This
7712
section includes experimental options that may produce broken code.
7713
 
7714
@table @gcctabopt
7715
@item -fbranch-probabilities
7716
@opindex fbranch-probabilities
7717
After running a program compiled with @option{-fprofile-arcs}
7718
(@pxref{Debugging Options,, Options for Debugging Your Program or
7719
@command{gcc}}), you can compile it a second time using
7720
@option{-fbranch-probabilities}, to improve optimizations based on
7721
the number of times each branch was taken.  When the program
7722
compiled with @option{-fprofile-arcs} exits it saves arc execution
7723
counts to a file called @file{@var{sourcename}.gcda} for each source
7724
file.  The information in this data file is very dependent on the
7725
structure of the generated code, so you must use the same source code
7726
and the same optimization options for both compilations.
7727
 
7728
With @option{-fbranch-probabilities}, GCC puts a
7729
@samp{REG_BR_PROB} note on each @samp{JUMP_INSN} and @samp{CALL_INSN}.
7730
These can be used to improve optimization.  Currently, they are only
7731
used in one place: in @file{reorg.c}, instead of guessing which path a
7732
branch is mostly to take, the @samp{REG_BR_PROB} values are used to
7733
exactly determine which path is taken more often.
7734
 
7735
@item -fprofile-values
7736
@opindex fprofile-values
7737
If combined with @option{-fprofile-arcs}, it adds code so that some
7738
data about values of expressions in the program is gathered.
7739
 
7740
With @option{-fbranch-probabilities}, it reads back the data gathered
7741
from profiling values of expressions and adds @samp{REG_VALUE_PROFILE}
7742
notes to instructions for their later usage in optimizations.
7743
 
7744
Enabled with @option{-fprofile-generate} and @option{-fprofile-use}.
7745
 
7746
@item -fvpt
7747
@opindex fvpt
7748
If combined with @option{-fprofile-arcs}, it instructs the compiler to add
7749
a code to gather information about values of expressions.
7750
 
7751
With @option{-fbranch-probabilities}, it reads back the data gathered
7752
and actually performs the optimizations based on them.
7753
Currently the optimizations include specialization of division operation
7754
using the knowledge about the value of the denominator.
7755
 
7756
@item -frename-registers
7757
@opindex frename-registers
7758
Attempt to avoid false dependencies in scheduled code by making use
7759
of registers left over after register allocation.  This optimization
7760
will most benefit processors with lots of registers.  Depending on the
7761
debug information format adopted by the target, however, it can
7762
make debugging impossible, since variables will no longer stay in
7763
a ``home register''.
7764
 
7765
Enabled by default with @option{-funroll-loops} and @option{-fpeel-loops}.
7766
 
7767
@item -ftracer
7768
@opindex ftracer
7769
Perform tail duplication to enlarge superblock size.  This transformation
7770
simplifies the control flow of the function allowing other optimizations to do
7771
better job.
7772
 
7773
Enabled with @option{-fprofile-use}.
7774
 
7775
@item -funroll-loops
7776
@opindex funroll-loops
7777
Unroll loops whose number of iterations can be determined at compile time or
7778
upon entry to the loop.  @option{-funroll-loops} implies
7779
@option{-frerun-cse-after-loop}, @option{-fweb} and @option{-frename-registers}.
7780
It also turns on complete loop peeling (i.e.@: complete removal of loops with
7781
small constant number of iterations).  This option makes code larger, and may
7782
or may not make it run faster.
7783
 
7784
Enabled with @option{-fprofile-use}.
7785
 
7786
@item -funroll-all-loops
7787
@opindex funroll-all-loops
7788
Unroll all loops, even if their number of iterations is uncertain when
7789
the loop is entered.  This usually makes programs run more slowly.
7790
@option{-funroll-all-loops} implies the same options as
7791
@option{-funroll-loops}.
7792
 
7793
@item -fpeel-loops
7794
@opindex fpeel-loops
7795
Peels the loops for that there is enough information that they do not
7796
roll much (from profile feedback).  It also turns on complete loop peeling
7797
(i.e.@: complete removal of loops with small constant number of iterations).
7798
 
7799
Enabled with @option{-fprofile-use}.
7800
 
7801
@item -fmove-loop-invariants
7802
@opindex fmove-loop-invariants
7803
Enables the loop invariant motion pass in the RTL loop optimizer.  Enabled
7804
at level @option{-O1}
7805
 
7806
@item -funswitch-loops
7807
@opindex funswitch-loops
7808
Move branches with loop invariant conditions out of the loop, with duplicates
7809
of the loop on both branches (modified according to result of the condition).
7810
 
7811
@item -ffunction-sections
7812
@itemx -fdata-sections
7813
@opindex ffunction-sections
7814
@opindex fdata-sections
7815
Place each function or data item into its own section in the output
7816
file if the target supports arbitrary sections.  The name of the
7817
function or the name of the data item determines the section's name
7818
in the output file.
7819
 
7820
Use these options on systems where the linker can perform optimizations
7821
to improve locality of reference in the instruction space.  Most systems
7822
using the ELF object format and SPARC processors running Solaris 2 have
7823
linkers with such optimizations.  AIX may have these optimizations in
7824
the future.
7825
 
7826
Only use these options when there are significant benefits from doing
7827
so.  When you specify these options, the assembler and linker will
7828
create larger object and executable files and will also be slower.
7829
You will not be able to use @code{gprof} on all systems if you
7830
specify this option and you may have problems with debugging if
7831
you specify both this option and @option{-g}.
7832
 
7833
@item -fbranch-target-load-optimize
7834
@opindex fbranch-target-load-optimize
7835
Perform branch target register load optimization before prologue / epilogue
7836
threading.
7837
The use of target registers can typically be exposed only during reload,
7838
thus hoisting loads out of loops and doing inter-block scheduling needs
7839
a separate optimization pass.
7840
 
7841
@item -fbranch-target-load-optimize2
7842
@opindex fbranch-target-load-optimize2
7843
Perform branch target register load optimization after prologue / epilogue
7844
threading.
7845
 
7846
@item -fbtr-bb-exclusive
7847
@opindex fbtr-bb-exclusive
7848
When performing branch target register load optimization, don't reuse
7849
branch target registers in within any basic block.
7850
 
7851
@item -fstack-protector
7852
@opindex fstack-protector
7853
Emit extra code to check for buffer overflows, such as stack smashing
7854
attacks.  This is done by adding a guard variable to functions with
7855
vulnerable objects.  This includes functions that call alloca, and
7856
functions with buffers larger than 8 bytes.  The guards are initialized
7857
when a function is entered and then checked when the function exits.
7858
If a guard check fails, an error message is printed and the program exits.
7859
 
7860
@item -fstack-protector-all
7861
@opindex fstack-protector-all
7862
Like @option{-fstack-protector} except that all functions are protected.
7863
 
7864
@item -fsection-anchors
7865
@opindex fsection-anchors
7866
Try to reduce the number of symbolic address calculations by using
7867
shared ``anchor'' symbols to address nearby objects.  This transformation
7868
can help to reduce the number of GOT entries and GOT accesses on some
7869
targets.
7870
 
7871
For example, the implementation of the following function @code{foo}:
7872
 
7873
@smallexample
7874
static int a, b, c;
7875
int foo (void) @{ return a + b + c; @}
7876
@end smallexample
7877
 
7878
would usually calculate the addresses of all three variables, but if you
7879
compile it with @option{-fsection-anchors}, it will access the variables
7880
from a common anchor point instead.  The effect is similar to the
7881
following pseudocode (which isn't valid C):
7882
 
7883
@smallexample
7884
int foo (void)
7885
@{
7886
  register int *xr = &x;
7887
  return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
7888
@}
7889
@end smallexample
7890
 
7891
Not all targets support this option.
7892
 
7893
@item --param @var{name}=@var{value}
7894
@opindex param
7895
In some places, GCC uses various constants to control the amount of
7896
optimization that is done.  For example, GCC will not inline functions
7897
that contain more that a certain number of instructions.  You can
7898
control some of these constants on the command-line using the
7899
@option{--param} option.
7900
 
7901
The names of specific parameters, and the meaning of the values, are
7902
tied to the internals of the compiler, and are subject to change
7903
without notice in future releases.
7904
 
7905
In each case, the @var{value} is an integer.  The allowable choices for
7906
@var{name} are given in the following table:
7907
 
7908
@table @gcctabopt
7909
@item struct-reorg-cold-struct-ratio
7910
The threshold ratio (as a percentage) between a structure frequency
7911
and the frequency of the hottest structure in the program.  This parameter
7912
is used by struct-reorg optimization enabled by @option{-fipa-struct-reorg}.
7913
We say that if the ratio of a structure frequency, calculated by profiling,
7914
to the hottest structure frequency in the program is less than this
7915
parameter, then structure reorganization is not applied to this structure.
7916
The default is 10.
7917
 
7918
@item predictable-branch-outcome
7919
When branch is predicted to be taken with probability lower than this threshold
7920
(in percent), then it is considered well predictable. The default is 10.
7921
 
7922
@item max-crossjump-edges
7923
The maximum number of incoming edges to consider for crossjumping.
7924
The algorithm used by @option{-fcrossjumping} is @math{O(N^2)} in
7925
the number of edges incoming to each block.  Increasing values mean
7926
more aggressive optimization, making the compile time increase with
7927
probably small improvement in executable size.
7928
 
7929
@item min-crossjump-insns
7930
The minimum number of instructions which must be matched at the end
7931
of two blocks before crossjumping will be performed on them.  This
7932
value is ignored in the case where all instructions in the block being
7933
crossjumped from are matched.  The default value is 5.
7934
 
7935
@item max-grow-copy-bb-insns
7936
The maximum code size expansion factor when copying basic blocks
7937
instead of jumping.  The expansion is relative to a jump instruction.
7938
The default value is 8.
7939
 
7940
@item max-goto-duplication-insns
7941
The maximum number of instructions to duplicate to a block that jumps
7942
to a computed goto.  To avoid @math{O(N^2)} behavior in a number of
7943
passes, GCC factors computed gotos early in the compilation process,
7944
and unfactors them as late as possible.  Only computed jumps at the
7945
end of a basic blocks with no more than max-goto-duplication-insns are
7946
unfactored.  The default value is 8.
7947
 
7948
@item max-delay-slot-insn-search
7949
The maximum number of instructions to consider when looking for an
7950
instruction to fill a delay slot.  If more than this arbitrary number of
7951
instructions is searched, the time savings from filling the delay slot
7952
will be minimal so stop searching.  Increasing values mean more
7953
aggressive optimization, making the compile time increase with probably
7954
small improvement in executable run time.
7955
 
7956
@item max-delay-slot-live-search
7957
When trying to fill delay slots, the maximum number of instructions to
7958
consider when searching for a block with valid live register
7959
information.  Increasing this arbitrarily chosen value means more
7960
aggressive optimization, increasing the compile time.  This parameter
7961
should be removed when the delay slot code is rewritten to maintain the
7962
control-flow graph.
7963
 
7964
@item max-gcse-memory
7965
The approximate maximum amount of memory that will be allocated in
7966
order to perform the global common subexpression elimination
7967
optimization.  If more memory than specified is required, the
7968
optimization will not be done.
7969
 
7970
@item max-pending-list-length
7971
The maximum number of pending dependencies scheduling will allow
7972
before flushing the current state and starting over.  Large functions
7973
with few branches or calls can create excessively large lists which
7974
needlessly consume memory and resources.
7975
 
7976
@item max-inline-insns-single
7977
Several parameters control the tree inliner used in gcc.
7978
This number sets the maximum number of instructions (counted in GCC's
7979
internal representation) in a single function that the tree inliner
7980
will consider for inlining.  This only affects functions declared
7981
inline and methods implemented in a class declaration (C++).
7982
The default value is 300.
7983
 
7984
@item max-inline-insns-auto
7985
When you use @option{-finline-functions} (included in @option{-O3}),
7986
a lot of functions that would otherwise not be considered for inlining
7987
by the compiler will be investigated.  To those functions, a different
7988
(more restrictive) limit compared to functions declared inline can
7989
be applied.
7990
The default value is 50.
7991
 
7992
@item large-function-insns
7993
The limit specifying really large functions.  For functions larger than this
7994
limit after inlining, inlining is constrained by
7995
@option{--param large-function-growth}.  This parameter is useful primarily
7996
to avoid extreme compilation time caused by non-linear algorithms used by the
7997
backend.
7998
The default value is 2700.
7999
 
8000
@item large-function-growth
8001
Specifies maximal growth of large function caused by inlining in percents.
8002
The default value is 100 which limits large function growth to 2.0 times
8003
the original size.
8004
 
8005
@item large-unit-insns
8006
The limit specifying large translation unit.  Growth caused by inlining of
8007
units larger than this limit is limited by @option{--param inline-unit-growth}.
8008
For small units this might be too tight (consider unit consisting of function A
8009
that is inline and B that just calls A three time.  If B is small relative to
8010
A, the growth of unit is 300\% and yet such inlining is very sane.  For very
8011
large units consisting of small inlineable functions however the overall unit
8012
growth limit is needed to avoid exponential explosion of code size.  Thus for
8013
smaller units, the size is increased to @option{--param large-unit-insns}
8014
before applying @option{--param inline-unit-growth}.  The default is 10000
8015
 
8016
@item inline-unit-growth
8017
Specifies maximal overall growth of the compilation unit caused by inlining.
8018
The default value is 30 which limits unit growth to 1.3 times the original
8019
size.
8020
 
8021
@item ipcp-unit-growth
8022
Specifies maximal overall growth of the compilation unit caused by
8023
interprocedural constant propagation.  The default value is 10 which limits
8024
unit growth to 1.1 times the original size.
8025
 
8026
@item large-stack-frame
8027
The limit specifying large stack frames.  While inlining the algorithm is trying
8028
to not grow past this limit too much.  Default value is 256 bytes.
8029
 
8030
@item large-stack-frame-growth
8031
Specifies maximal growth of large stack frames caused by inlining in percents.
8032
The default value is 1000 which limits large stack frame growth to 11 times
8033
the original size.
8034
 
8035
@item max-inline-insns-recursive
8036
@itemx max-inline-insns-recursive-auto
8037
Specifies maximum number of instructions out-of-line copy of self recursive inline
8038
function can grow into by performing recursive inlining.
8039
 
8040
For functions declared inline @option{--param max-inline-insns-recursive} is
8041
taken into account.  For function not declared inline, recursive inlining
8042
happens only when @option{-finline-functions} (included in @option{-O3}) is
8043
enabled and @option{--param max-inline-insns-recursive-auto} is used.  The
8044
default value is 450.
8045
 
8046
@item max-inline-recursive-depth
8047
@itemx max-inline-recursive-depth-auto
8048
Specifies maximum recursion depth used by the recursive inlining.
8049
 
8050
For functions declared inline @option{--param max-inline-recursive-depth} is
8051
taken into account.  For function not declared inline, recursive inlining
8052
happens only when @option{-finline-functions} (included in @option{-O3}) is
8053
enabled and @option{--param max-inline-recursive-depth-auto} is used.  The
8054
default value is 8.
8055
 
8056
@item min-inline-recursive-probability
8057
Recursive inlining is profitable only for function having deep recursion
8058
in average and can hurt for function having little recursion depth by
8059
increasing the prologue size or complexity of function body to other
8060
optimizers.
8061
 
8062
When profile feedback is available (see @option{-fprofile-generate}) the actual
8063
recursion depth can be guessed from probability that function will recurse via
8064
given call expression.  This parameter limits inlining only to call expression
8065
whose probability exceeds given threshold (in percents).  The default value is
8066
10.
8067
 
8068
@item early-inlining-insns
8069
Specify growth that early inliner can make.  In effect it increases amount of
8070
inlining for code having large abstraction penalty.  The default value is 8.
8071
 
8072
@item max-early-inliner-iterations
8073
@itemx max-early-inliner-iterations
8074
Limit of iterations of early inliner.  This basically bounds number of nested
8075
indirect calls early inliner can resolve.  Deeper chains are still handled by
8076
late inlining.
8077
 
8078
@item min-vect-loop-bound
8079
The minimum number of iterations under which a loop will not get vectorized
8080
when @option{-ftree-vectorize} is used.  The number of iterations after
8081
vectorization needs to be greater than the value specified by this option
8082
to allow vectorization.  The default value is 0.
8083
 
8084
@item max-unrolled-insns
8085
The maximum number of instructions that a loop should have if that loop
8086
is unrolled, and if the loop is unrolled, it determines how many times
8087
the loop code is unrolled.
8088
 
8089
@item max-average-unrolled-insns
8090
The maximum number of instructions biased by probabilities of their execution
8091
that a loop should have if that loop is unrolled, and if the loop is unrolled,
8092
it determines how many times the loop code is unrolled.
8093
 
8094
@item max-unroll-times
8095
The maximum number of unrollings of a single loop.
8096
 
8097
@item max-peeled-insns
8098
The maximum number of instructions that a loop should have if that loop
8099
is peeled, and if the loop is peeled, it determines how many times
8100
the loop code is peeled.
8101
 
8102
@item max-peel-times
8103
The maximum number of peelings of a single loop.
8104
 
8105
@item max-completely-peeled-insns
8106
The maximum number of insns of a completely peeled loop.
8107
 
8108
@item max-completely-peel-times
8109
The maximum number of iterations of a loop to be suitable for complete peeling.
8110
 
8111
@item max-completely-peel-loop-nest-depth
8112
The maximum depth of a loop nest suitable for complete peeling.
8113
 
8114
@item max-unswitch-insns
8115
The maximum number of insns of an unswitched loop.
8116
 
8117
@item max-unswitch-level
8118
The maximum number of branches unswitched in a single loop.
8119
 
8120
@item lim-expensive
8121
The minimum cost of an expensive expression in the loop invariant motion.
8122
 
8123
@item iv-consider-all-candidates-bound
8124
Bound on number of candidates for induction variables below that
8125
all candidates are considered for each use in induction variable
8126
optimizations.  Only the most relevant candidates are considered
8127
if there are more candidates, to avoid quadratic time complexity.
8128
 
8129
@item iv-max-considered-uses
8130
The induction variable optimizations give up on loops that contain more
8131
induction variable uses.
8132
 
8133
@item iv-always-prune-cand-set-bound
8134
If number of candidates in the set is smaller than this value,
8135
we always try to remove unnecessary ivs from the set during its
8136
optimization when a new iv is added to the set.
8137
 
8138
@item scev-max-expr-size
8139
Bound on size of expressions used in the scalar evolutions analyzer.
8140
Large expressions slow the analyzer.
8141
 
8142
@item omega-max-vars
8143
The maximum number of variables in an Omega constraint system.
8144
The default value is 128.
8145
 
8146
@item omega-max-geqs
8147
The maximum number of inequalities in an Omega constraint system.
8148
The default value is 256.
8149
 
8150
@item omega-max-eqs
8151
The maximum number of equalities in an Omega constraint system.
8152
The default value is 128.
8153
 
8154
@item omega-max-wild-cards
8155
The maximum number of wildcard variables that the Omega solver will
8156
be able to insert.  The default value is 18.
8157
 
8158
@item omega-hash-table-size
8159
The size of the hash table in the Omega solver.  The default value is
8160
550.
8161
 
8162
@item omega-max-keys
8163
The maximal number of keys used by the Omega solver.  The default
8164
value is 500.
8165
 
8166
@item omega-eliminate-redundant-constraints
8167
When set to 1, use expensive methods to eliminate all redundant
8168
constraints.  The default value is 0.
8169
 
8170
@item vect-max-version-for-alignment-checks
8171
The maximum number of runtime checks that can be performed when
8172
doing loop versioning for alignment in the vectorizer.  See option
8173
ftree-vect-loop-version for more information.
8174
 
8175
@item vect-max-version-for-alias-checks
8176
The maximum number of runtime checks that can be performed when
8177
doing loop versioning for alias in the vectorizer.  See option
8178
ftree-vect-loop-version for more information.
8179
 
8180
@item max-iterations-to-track
8181
 
8182
The maximum number of iterations of a loop the brute force algorithm
8183
for analysis of # of iterations of the loop tries to evaluate.
8184
 
8185
@item hot-bb-count-fraction
8186
Select fraction of the maximal count of repetitions of basic block in program
8187
given basic block needs to have to be considered hot.
8188
 
8189
@item hot-bb-frequency-fraction
8190
Select fraction of the maximal frequency of executions of basic block in
8191
function given basic block needs to have to be considered hot
8192
 
8193
@item max-predicted-iterations
8194
The maximum number of loop iterations we predict statically.  This is useful
8195
in cases where function contain single loop with known bound and other loop
8196
with unknown.  We predict the known number of iterations correctly, while
8197
the unknown number of iterations average to roughly 10.  This means that the
8198
loop without bounds would appear artificially cold relative to the other one.
8199
 
8200
@item align-threshold
8201
 
8202
Select fraction of the maximal frequency of executions of basic block in
8203
function given basic block will get aligned.
8204
 
8205
@item align-loop-iterations
8206
 
8207
A loop expected to iterate at lest the selected number of iterations will get
8208
aligned.
8209
 
8210
@item tracer-dynamic-coverage
8211
@itemx tracer-dynamic-coverage-feedback
8212
 
8213
This value is used to limit superblock formation once the given percentage of
8214
executed instructions is covered.  This limits unnecessary code size
8215
expansion.
8216
 
8217
The @option{tracer-dynamic-coverage-feedback} is used only when profile
8218
feedback is available.  The real profiles (as opposed to statically estimated
8219
ones) are much less balanced allowing the threshold to be larger value.
8220
 
8221
@item tracer-max-code-growth
8222
Stop tail duplication once code growth has reached given percentage.  This is
8223
rather hokey argument, as most of the duplicates will be eliminated later in
8224
cross jumping, so it may be set to much higher values than is the desired code
8225
growth.
8226
 
8227
@item tracer-min-branch-ratio
8228
 
8229
Stop reverse growth when the reverse probability of best edge is less than this
8230
threshold (in percent).
8231
 
8232
@item tracer-min-branch-ratio
8233
@itemx tracer-min-branch-ratio-feedback
8234
 
8235
Stop forward growth if the best edge do have probability lower than this
8236
threshold.
8237
 
8238
Similarly to @option{tracer-dynamic-coverage} two values are present, one for
8239
compilation for profile feedback and one for compilation without.  The value
8240
for compilation with profile feedback needs to be more conservative (higher) in
8241
order to make tracer effective.
8242
 
8243
@item max-cse-path-length
8244
 
8245
Maximum number of basic blocks on path that cse considers.  The default is 10.
8246
 
8247
@item max-cse-insns
8248
The maximum instructions CSE process before flushing. The default is 1000.
8249
 
8250
@item ggc-min-expand
8251
 
8252
GCC uses a garbage collector to manage its own memory allocation.  This
8253
parameter specifies the minimum percentage by which the garbage
8254
collector's heap should be allowed to expand between collections.
8255
Tuning this may improve compilation speed; it has no effect on code
8256
generation.
8257
 
8258
The default is 30% + 70% * (RAM/1GB) with an upper bound of 100% when
8259
RAM >= 1GB@.  If @code{getrlimit} is available, the notion of "RAM" is
8260
the smallest of actual RAM and @code{RLIMIT_DATA} or @code{RLIMIT_AS}.  If
8261
GCC is not able to calculate RAM on a particular platform, the lower
8262
bound of 30% is used.  Setting this parameter and
8263
@option{ggc-min-heapsize} to zero causes a full collection to occur at
8264
every opportunity.  This is extremely slow, but can be useful for
8265
debugging.
8266
 
8267
@item ggc-min-heapsize
8268
 
8269
Minimum size of the garbage collector's heap before it begins bothering
8270
to collect garbage.  The first collection occurs after the heap expands
8271
by @option{ggc-min-expand}% beyond @option{ggc-min-heapsize}.  Again,
8272
tuning this may improve compilation speed, and has no effect on code
8273
generation.
8274
 
8275
The default is the smaller of RAM/8, RLIMIT_RSS, or a limit which
8276
tries to ensure that RLIMIT_DATA or RLIMIT_AS are not exceeded, but
8277
with a lower bound of 4096 (four megabytes) and an upper bound of
8278
131072 (128 megabytes).  If GCC is not able to calculate RAM on a
8279
particular platform, the lower bound is used.  Setting this parameter
8280
very large effectively disables garbage collection.  Setting this
8281
parameter and @option{ggc-min-expand} to zero causes a full collection
8282
to occur at every opportunity.
8283
 
8284
@item max-reload-search-insns
8285
The maximum number of instruction reload should look backward for equivalent
8286
register.  Increasing values mean more aggressive optimization, making the
8287
compile time increase with probably slightly better performance.  The default
8288
value is 100.
8289
 
8290
@item max-cselib-memory-locations
8291
The maximum number of memory locations cselib should take into account.
8292
Increasing values mean more aggressive optimization, making the compile time
8293
increase with probably slightly better performance.  The default value is 500.
8294
 
8295
@item reorder-blocks-duplicate
8296
@itemx reorder-blocks-duplicate-feedback
8297
 
8298
Used by basic block reordering pass to decide whether to use unconditional
8299
branch or duplicate the code on its destination.  Code is duplicated when its
8300
estimated size is smaller than this value multiplied by the estimated size of
8301
unconditional jump in the hot spots of the program.
8302
 
8303
The @option{reorder-block-duplicate-feedback} is used only when profile
8304
feedback is available and may be set to higher values than
8305
@option{reorder-block-duplicate} since information about the hot spots is more
8306
accurate.
8307
 
8308
@item max-sched-ready-insns
8309
The maximum number of instructions ready to be issued the scheduler should
8310
consider at any given time during the first scheduling pass.  Increasing
8311
values mean more thorough searches, making the compilation time increase
8312
with probably little benefit.  The default value is 100.
8313
 
8314
@item max-sched-region-blocks
8315
The maximum number of blocks in a region to be considered for
8316
interblock scheduling.  The default value is 10.
8317
 
8318
@item max-pipeline-region-blocks
8319
The maximum number of blocks in a region to be considered for
8320
pipelining in the selective scheduler.  The default value is 15.
8321
 
8322
@item max-sched-region-insns
8323
The maximum number of insns in a region to be considered for
8324
interblock scheduling.  The default value is 100.
8325
 
8326
@item max-pipeline-region-insns
8327
The maximum number of insns in a region to be considered for
8328
pipelining in the selective scheduler.  The default value is 200.
8329
 
8330
@item min-spec-prob
8331
The minimum probability (in percents) of reaching a source block
8332
for interblock speculative scheduling.  The default value is 40.
8333
 
8334
@item max-sched-extend-regions-iters
8335
The maximum number of iterations through CFG to extend regions.
8336
 
8337
N - do at most N iterations.
8338
The default value is 0.
8339
 
8340
@item max-sched-insn-conflict-delay
8341
The maximum conflict delay for an insn to be considered for speculative motion.
8342
The default value is 3.
8343
 
8344
@item sched-spec-prob-cutoff
8345
The minimal probability of speculation success (in percents), so that
8346
speculative insn will be scheduled.
8347
The default value is 40.
8348
 
8349
@item sched-mem-true-dep-cost
8350
Minimal distance (in CPU cycles) between store and load targeting same
8351
memory locations.  The default value is 1.
8352
 
8353
@item selsched-max-lookahead
8354
The maximum size of the lookahead window of selective scheduling.  It is a
8355
depth of search for available instructions.
8356
The default value is 50.
8357
 
8358
@item selsched-max-sched-times
8359
The maximum number of times that an instruction will be scheduled during
8360
selective scheduling.  This is the limit on the number of iterations
8361
through which the instruction may be pipelined.  The default value is 2.
8362
 
8363
@item selsched-max-insns-to-rename
8364
The maximum number of best instructions in the ready list that are considered
8365
for renaming in the selective scheduler.  The default value is 2.
8366
 
8367
@item max-last-value-rtl
8368
The maximum size measured as number of RTLs that can be recorded in an expression
8369
in combiner for a pseudo register as last known value of that register.  The default
8370
is 10000.
8371
 
8372
@item integer-share-limit
8373
Small integer constants can use a shared data structure, reducing the
8374
compiler's memory usage and increasing its speed.  This sets the maximum
8375
value of a shared integer constant.  The default value is 256.
8376
 
8377
@item min-virtual-mappings
8378
Specifies the minimum number of virtual mappings in the incremental
8379
SSA updater that should be registered to trigger the virtual mappings
8380
heuristic defined by virtual-mappings-ratio.  The default value is
8381
100.
8382
 
8383
@item virtual-mappings-ratio
8384
If the number of virtual mappings is virtual-mappings-ratio bigger
8385
than the number of virtual symbols to be updated, then the incremental
8386
SSA updater switches to a full update for those symbols.  The default
8387
ratio is 3.
8388
 
8389
@item ssp-buffer-size
8390
The minimum size of buffers (i.e.@: arrays) that will receive stack smashing
8391
protection when @option{-fstack-protection} is used.
8392
 
8393
@item max-jump-thread-duplication-stmts
8394
Maximum number of statements allowed in a block that needs to be
8395
duplicated when threading jumps.
8396
 
8397
@item max-fields-for-field-sensitive
8398
Maximum number of fields in a structure we will treat in
8399
a field sensitive manner during pointer analysis.  The default is zero
8400
for -O0, and -O1 and 100 for -Os, -O2, and -O3.
8401
 
8402
@item prefetch-latency
8403
Estimate on average number of instructions that are executed before
8404
prefetch finishes.  The distance we prefetch ahead is proportional
8405
to this constant.  Increasing this number may also lead to less
8406
streams being prefetched (see @option{simultaneous-prefetches}).
8407
 
8408
@item simultaneous-prefetches
8409
Maximum number of prefetches that can run at the same time.
8410
 
8411
@item l1-cache-line-size
8412
The size of cache line in L1 cache, in bytes.
8413
 
8414
@item l1-cache-size
8415
The size of L1 cache, in kilobytes.
8416
 
8417
@item l2-cache-size
8418
The size of L2 cache, in kilobytes.
8419
 
8420
@item min-insn-to-prefetch-ratio
8421
The minimum ratio between the number of instructions and the
8422
number of prefetches to enable prefetching in a loop with an
8423
unknown trip count.
8424
 
8425
@item prefetch-min-insn-to-mem-ratio
8426
The minimum ratio between the number of instructions and the
8427
number of memory references to enable prefetching in a loop.
8428
 
8429
@item use-canonical-types
8430
Whether the compiler should use the ``canonical'' type system.  By
8431
default, this should always be 1, which uses a more efficient internal
8432
mechanism for comparing types in C++ and Objective-C++.  However, if
8433
bugs in the canonical type system are causing compilation failures,
8434
set this value to 0 to disable canonical types.
8435
 
8436
@item switch-conversion-max-branch-ratio
8437
Switch initialization conversion will refuse to create arrays that are
8438
bigger than @option{switch-conversion-max-branch-ratio} times the number of
8439
branches in the switch.
8440
 
8441
@item max-partial-antic-length
8442
Maximum length of the partial antic set computed during the tree
8443
partial redundancy elimination optimization (@option{-ftree-pre}) when
8444
optimizing at @option{-O3} and above.  For some sorts of source code
8445
the enhanced partial redundancy elimination optimization can run away,
8446
consuming all of the memory available on the host machine.  This
8447
parameter sets a limit on the length of the sets that are computed,
8448
which prevents the runaway behavior.  Setting a value of 0 for
8449
this parameter will allow an unlimited set length.
8450
 
8451
@item sccvn-max-scc-size
8452
Maximum size of a strongly connected component (SCC) during SCCVN
8453
processing.  If this limit is hit, SCCVN processing for the whole
8454
function will not be done and optimizations depending on it will
8455
be disabled.  The default maximum SCC size is 10000.
8456
 
8457
@item ira-max-loops-num
8458
IRA uses a regional register allocation by default.  If a function
8459
contains loops more than number given by the parameter, only at most
8460
given number of the most frequently executed loops will form regions
8461
for the regional register allocation.  The default value of the
8462
parameter is 100.
8463
 
8464
@item ira-max-conflict-table-size
8465
Although IRA uses a sophisticated algorithm of compression conflict
8466
table, the table can be still big for huge functions.  If the conflict
8467
table for a function could be more than size in MB given by the
8468
parameter, the conflict table is not built and faster, simpler, and
8469
lower quality register allocation algorithm will be used.  The
8470
algorithm do not use pseudo-register conflicts.  The default value of
8471
the parameter is 2000.
8472
 
8473
@item ira-loop-reserved-regs
8474
IRA can be used to evaluate more accurate register pressure in loops
8475
for decision to move loop invariants (see @option{-O3}).  The number
8476
of available registers reserved for some other purposes is described
8477
by this parameter.  The default value of the parameter is 2 which is
8478
minimal number of registers needed for execution of typical
8479
instruction.  This value is the best found from numerous experiments.
8480
 
8481
@item loop-invariant-max-bbs-in-loop
8482
Loop invariant motion can be very expensive, both in compile time and
8483
in amount of needed compile time memory, with very large loops.  Loops
8484
with more basic blocks than this parameter won't have loop invariant
8485
motion optimization performed on them.  The default value of the
8486
parameter is 1000 for -O1 and 10000 for -O2 and above.
8487
 
8488
@item max-vartrack-size
8489
Sets a maximum number of hash table slots to use during variable
8490
tracking dataflow analysis of any function.  If this limit is exceeded
8491
with variable tracking at assignments enabled, analysis for that
8492
function is retried without it, after removing all debug insns from
8493
the function.  If the limit is exceeded even without debug insns, var
8494
tracking analysis is completely disabled for the function.  Setting
8495
the parameter to zero makes it unlimited.
8496
 
8497
@item min-nondebug-insn-uid
8498
Use uids starting at this parameter for nondebug insns.  The range below
8499
the parameter is reserved exclusively for debug insns created by
8500
@option{-fvar-tracking-assignments}, but debug insns may get
8501
(non-overlapping) uids above it if the reserved range is exhausted.
8502
 
8503
@item ipa-sra-ptr-growth-factor
8504
IPA-SRA will replace a pointer to an aggregate with one or more new
8505
parameters only when their cumulative size is less or equal to
8506
@option{ipa-sra-ptr-growth-factor} times the size of the original
8507
pointer parameter.
8508
 
8509
@item graphite-max-nb-scop-params
8510
To avoid exponential effects in the Graphite loop transforms, the
8511
number of parameters in a Static Control Part (SCoP) is bounded.  The
8512
default value is 10 parameters.  A variable whose value is unknown at
8513
compile time and defined outside a SCoP is a parameter of the SCoP.
8514
 
8515
@item graphite-max-bbs-per-function
8516
To avoid exponential effects in the detection of SCoPs, the size of
8517
the functions analyzed by Graphite is bounded.  The default value is
8518
100 basic blocks.
8519
 
8520
@item loop-block-tile-size
8521
Loop blocking or strip mining transforms, enabled with
8522
@option{-floop-block} or @option{-floop-strip-mine}, strip mine each
8523
loop in the loop nest by a given number of iterations.  The strip
8524
length can be changed using the @option{loop-block-tile-size}
8525
parameter.  The default value is 51 iterations.
8526
 
8527
@end table
8528
@end table
8529
 
8530
@node Preprocessor Options
8531
@section Options Controlling the Preprocessor
8532
@cindex preprocessor options
8533
@cindex options, preprocessor
8534
 
8535
These options control the C preprocessor, which is run on each C source
8536
file before actual compilation.
8537
 
8538
If you use the @option{-E} option, nothing is done except preprocessing.
8539
Some of these options make sense only together with @option{-E} because
8540
they cause the preprocessor output to be unsuitable for actual
8541
compilation.
8542
 
8543
@table @gcctabopt
8544
@item -Wp,@var{option}
8545
@opindex Wp
8546
You can use @option{-Wp,@var{option}} to bypass the compiler driver
8547
and pass @var{option} directly through to the preprocessor.  If
8548
@var{option} contains commas, it is split into multiple options at the
8549
commas.  However, many options are modified, translated or interpreted
8550
by the compiler driver before being passed to the preprocessor, and
8551
@option{-Wp} forcibly bypasses this phase.  The preprocessor's direct
8552
interface is undocumented and subject to change, so whenever possible
8553
you should avoid using @option{-Wp} and let the driver handle the
8554
options instead.
8555
 
8556
@item -Xpreprocessor @var{option}
8557
@opindex Xpreprocessor
8558
Pass @var{option} as an option to the preprocessor.  You can use this to
8559
supply system-specific preprocessor options which GCC does not know how to
8560
recognize.
8561
 
8562
If you want to pass an option that takes an argument, you must use
8563
@option{-Xpreprocessor} twice, once for the option and once for the argument.
8564
@end table
8565
 
8566
@include cppopts.texi
8567
 
8568
@node Assembler Options
8569
@section Passing Options to the Assembler
8570
 
8571
@c prevent bad page break with this line
8572
You can pass options to the assembler.
8573
 
8574
@table @gcctabopt
8575
@item -Wa,@var{option}
8576
@opindex Wa
8577
Pass @var{option} as an option to the assembler.  If @var{option}
8578
contains commas, it is split into multiple options at the commas.
8579
 
8580
@item -Xassembler @var{option}
8581
@opindex Xassembler
8582
Pass @var{option} as an option to the assembler.  You can use this to
8583
supply system-specific assembler options which GCC does not know how to
8584
recognize.
8585
 
8586
If you want to pass an option that takes an argument, you must use
8587
@option{-Xassembler} twice, once for the option and once for the argument.
8588
 
8589
@end table
8590
 
8591
@node Link Options
8592
@section Options for Linking
8593
@cindex link options
8594
@cindex options, linking
8595
 
8596
These options come into play when the compiler links object files into
8597
an executable output file.  They are meaningless if the compiler is
8598
not doing a link step.
8599
 
8600
@table @gcctabopt
8601
@cindex file names
8602
@item @var{object-file-name}
8603
A file name that does not end in a special recognized suffix is
8604
considered to name an object file or library.  (Object files are
8605
distinguished from libraries by the linker according to the file
8606
contents.)  If linking is done, these object files are used as input
8607
to the linker.
8608
 
8609
@item -c
8610
@itemx -S
8611
@itemx -E
8612
@opindex c
8613
@opindex S
8614
@opindex E
8615
If any of these options is used, then the linker is not run, and
8616
object file names should not be used as arguments.  @xref{Overall
8617
Options}.
8618
 
8619
@cindex Libraries
8620
@item -l@var{library}
8621
@itemx -l @var{library}
8622
@opindex l
8623
Search the library named @var{library} when linking.  (The second
8624
alternative with the library as a separate argument is only for
8625
POSIX compliance and is not recommended.)
8626
 
8627
It makes a difference where in the command you write this option; the
8628
linker searches and processes libraries and object files in the order they
8629
are specified.  Thus, @samp{foo.o -lz bar.o} searches library @samp{z}
8630
after file @file{foo.o} but before @file{bar.o}.  If @file{bar.o} refers
8631
to functions in @samp{z}, those functions may not be loaded.
8632
 
8633
The linker searches a standard list of directories for the library,
8634
which is actually a file named @file{lib@var{library}.a}.  The linker
8635
then uses this file as if it had been specified precisely by name.
8636
 
8637
The directories searched include several standard system directories
8638
plus any that you specify with @option{-L}.
8639
 
8640
Normally the files found this way are library files---archive files
8641
whose members are object files.  The linker handles an archive file by
8642
scanning through it for members which define symbols that have so far
8643
been referenced but not defined.  But if the file that is found is an
8644
ordinary object file, it is linked in the usual fashion.  The only
8645
difference between using an @option{-l} option and specifying a file name
8646
is that @option{-l} surrounds @var{library} with @samp{lib} and @samp{.a}
8647
and searches several directories.
8648
 
8649
@item -lobjc
8650
@opindex lobjc
8651
You need this special case of the @option{-l} option in order to
8652
link an Objective-C or Objective-C++ program.
8653
 
8654
@item -nostartfiles
8655
@opindex nostartfiles
8656
Do not use the standard system startup files when linking.
8657
The standard system libraries are used normally, unless @option{-nostdlib}
8658
or @option{-nodefaultlibs} is used.
8659
 
8660
@item -nodefaultlibs
8661
@opindex nodefaultlibs
8662
Do not use the standard system libraries when linking.
8663
Only the libraries you specify will be passed to the linker, options
8664
specifying linkage of the system libraries, such as @code{-static-libgcc}
8665
or @code{-shared-libgcc}, will be ignored.
8666
The standard startup files are used normally, unless @option{-nostartfiles}
8667
is used.  The compiler may generate calls to @code{memcmp},
8668
@code{memset}, @code{memcpy} and @code{memmove}.
8669
These entries are usually resolved by entries in
8670
libc.  These entry points should be supplied through some other
8671
mechanism when this option is specified.
8672
 
8673
@item -nostdlib
8674
@opindex nostdlib
8675
Do not use the standard system startup files or libraries when linking.
8676
No startup files and only the libraries you specify will be passed to
8677
the linker, options specifying linkage of the system libraries, such as
8678
@code{-static-libgcc} or @code{-shared-libgcc}, will be ignored.
8679
The compiler may generate calls to @code{memcmp}, @code{memset},
8680
@code{memcpy} and @code{memmove}.
8681
These entries are usually resolved by entries in
8682
libc.  These entry points should be supplied through some other
8683
mechanism when this option is specified.
8684
 
8685
@cindex @option{-lgcc}, use with @option{-nostdlib}
8686
@cindex @option{-nostdlib} and unresolved references
8687
@cindex unresolved references and @option{-nostdlib}
8688
@cindex @option{-lgcc}, use with @option{-nodefaultlibs}
8689
@cindex @option{-nodefaultlibs} and unresolved references
8690
@cindex unresolved references and @option{-nodefaultlibs}
8691
One of the standard libraries bypassed by @option{-nostdlib} and
8692
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
8693
that GCC uses to overcome shortcomings of particular machines, or special
8694
needs for some languages.
8695
(@xref{Interface,,Interfacing to GCC Output,gccint,GNU Compiler
8696
Collection (GCC) Internals},
8697
for more discussion of @file{libgcc.a}.)
8698
In most cases, you need @file{libgcc.a} even when you want to avoid
8699
other standard libraries.  In other words, when you specify @option{-nostdlib}
8700
or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
8701
This ensures that you have no unresolved references to internal GCC
8702
library subroutines.  (For example, @samp{__main}, used to ensure C++
8703
constructors will be called; @pxref{Collect2,,@code{collect2}, gccint,
8704
GNU Compiler Collection (GCC) Internals}.)
8705
 
8706
@item -pie
8707
@opindex pie
8708
Produce a position independent executable on targets which support it.
8709
For predictable results, you must also specify the same set of options
8710
that were used to generate code (@option{-fpie}, @option{-fPIE},
8711
or model suboptions) when you specify this option.
8712
 
8713
@item -rdynamic
8714
@opindex rdynamic
8715
Pass the flag @option{-export-dynamic} to the ELF linker, on targets
8716
that support it. This instructs the linker to add all symbols, not
8717
only used ones, to the dynamic symbol table. This option is needed
8718
for some uses of @code{dlopen} or to allow obtaining backtraces
8719
from within a program.
8720
 
8721
@item -s
8722
@opindex s
8723
Remove all symbol table and relocation information from the executable.
8724
 
8725
@item -static
8726
@opindex static
8727
On systems that support dynamic linking, this prevents linking with the shared
8728
libraries.  On other systems, this option has no effect.
8729
 
8730
@item -shared
8731
@opindex shared
8732
Produce a shared object which can then be linked with other objects to
8733
form an executable.  Not all systems support this option.  For predictable
8734
results, you must also specify the same set of options that were used to
8735
generate code (@option{-fpic}, @option{-fPIC}, or model suboptions)
8736
when you specify this option.@footnote{On some systems, @samp{gcc -shared}
8737
needs to build supplementary stub code for constructors to work.  On
8738
multi-libbed systems, @samp{gcc -shared} must select the correct support
8739
libraries to link against.  Failing to supply the correct flags may lead
8740
to subtle defects.  Supplying them in cases where they are not necessary
8741
is innocuous.}
8742
 
8743
@item -shared-libgcc
8744
@itemx -static-libgcc
8745
@opindex shared-libgcc
8746
@opindex static-libgcc
8747
On systems that provide @file{libgcc} as a shared library, these options
8748
force the use of either the shared or static version respectively.
8749
If no shared version of @file{libgcc} was built when the compiler was
8750
configured, these options have no effect.
8751
 
8752
There are several situations in which an application should use the
8753
shared @file{libgcc} instead of the static version.  The most common
8754
of these is when the application wishes to throw and catch exceptions
8755
across different shared libraries.  In that case, each of the libraries
8756
as well as the application itself should use the shared @file{libgcc}.
8757
 
8758
Therefore, the G++ and GCJ drivers automatically add
8759
@option{-shared-libgcc} whenever you build a shared library or a main
8760
executable, because C++ and Java programs typically use exceptions, so
8761
this is the right thing to do.
8762
 
8763
If, instead, you use the GCC driver to create shared libraries, you may
8764
find that they will not always be linked with the shared @file{libgcc}.
8765
If GCC finds, at its configuration time, that you have a non-GNU linker
8766
or a GNU linker that does not support option @option{--eh-frame-hdr},
8767
it will link the shared version of @file{libgcc} into shared libraries
8768
by default.  Otherwise, it will take advantage of the linker and optimize
8769
away the linking with the shared version of @file{libgcc}, linking with
8770
the static version of libgcc by default.  This allows exceptions to
8771
propagate through such shared libraries, without incurring relocation
8772
costs at library load time.
8773
 
8774
However, if a library or main executable is supposed to throw or catch
8775
exceptions, you must link it using the G++ or GCJ driver, as appropriate
8776
for the languages used in the program, or using the option
8777
@option{-shared-libgcc}, such that it is linked with the shared
8778
@file{libgcc}.
8779
 
8780
@item -static-libstdc++
8781
When the @command{g++} program is used to link a C++ program, it will
8782
normally automatically link against @option{libstdc++}.  If
8783
@file{libstdc++} is available as a shared library, and the
8784
@option{-static} option is not used, then this will link against the
8785
shared version of @file{libstdc++}.  That is normally fine.  However, it
8786
is sometimes useful to freeze the version of @file{libstdc++} used by
8787
the program without going all the way to a fully static link.  The
8788
@option{-static-libstdc++} option directs the @command{g++} driver to
8789
link @file{libstdc++} statically, without necessarily linking other
8790
libraries statically.
8791
 
8792
@item -symbolic
8793
@opindex symbolic
8794
Bind references to global symbols when building a shared object.  Warn
8795
about any unresolved references (unless overridden by the link editor
8796
option @samp{-Xlinker -z -Xlinker defs}).  Only a few systems support
8797
this option.
8798
 
8799
@item -T @var{script}
8800
@opindex T
8801
@cindex linker script
8802
Use @var{script} as the linker script.  This option is supported by most
8803
systems using the GNU linker.  On some targets, such as bare-board
8804
targets without an operating system, the @option{-T} option may be required
8805
when linking to avoid references to undefined symbols.
8806
 
8807
@item -Xlinker @var{option}
8808
@opindex Xlinker
8809
Pass @var{option} as an option to the linker.  You can use this to
8810
supply system-specific linker options which GCC does not know how to
8811
recognize.
8812
 
8813
If you want to pass an option that takes a separate argument, you must use
8814
@option{-Xlinker} twice, once for the option and once for the argument.
8815
For example, to pass @option{-assert definitions}, you must write
8816
@samp{-Xlinker -assert -Xlinker definitions}.  It does not work to write
8817
@option{-Xlinker "-assert definitions"}, because this passes the entire
8818
string as a single argument, which is not what the linker expects.
8819
 
8820
When using the GNU linker, it is usually more convenient to pass
8821
arguments to linker options using the @option{@var{option}=@var{value}}
8822
syntax than as separate arguments.  For example, you can specify
8823
@samp{-Xlinker -Map=output.map} rather than
8824
@samp{-Xlinker -Map -Xlinker output.map}.  Other linkers may not support
8825
this syntax for command-line options.
8826
 
8827
@item -Wl,@var{option}
8828
@opindex Wl
8829
Pass @var{option} as an option to the linker.  If @var{option} contains
8830
commas, it is split into multiple options at the commas.  You can use this
8831
syntax to pass an argument to the option.
8832
For example, @samp{-Wl,-Map,output.map} passes @samp{-Map output.map} to the
8833
linker.  When using the GNU linker, you can also get the same effect with
8834
@samp{-Wl,-Map=output.map}.
8835
 
8836
@item -u @var{symbol}
8837
@opindex u
8838
Pretend the symbol @var{symbol} is undefined, to force linking of
8839
library modules to define it.  You can use @option{-u} multiple times with
8840
different symbols to force loading of additional library modules.
8841
@end table
8842
 
8843
@node Directory Options
8844
@section Options for Directory Search
8845
@cindex directory options
8846
@cindex options, directory search
8847
@cindex search path
8848
 
8849
These options specify directories to search for header files, for
8850
libraries and for parts of the compiler:
8851
 
8852
@table @gcctabopt
8853
@item -I@var{dir}
8854
@opindex I
8855
Add the directory @var{dir} to the head of the list of directories to be
8856
searched for header files.  This can be used to override a system header
8857
file, substituting your own version, since these directories are
8858
searched before the system header file directories.  However, you should
8859
not use this option to add directories that contain vendor-supplied
8860
system header files (use @option{-isystem} for that).  If you use more than
8861
one @option{-I} option, the directories are scanned in left-to-right
8862
order; the standard system directories come after.
8863
 
8864
If a standard system include directory, or a directory specified with
8865
@option{-isystem}, is also specified with @option{-I}, the @option{-I}
8866
option will be ignored.  The directory will still be searched but as a
8867
system directory at its normal position in the system include chain.
8868
This is to ensure that GCC's procedure to fix buggy system headers and
8869
the ordering for the include_next directive are not inadvertently changed.
8870
If you really need to change the search order for system directories,
8871
use the @option{-nostdinc} and/or @option{-isystem} options.
8872
 
8873
@item -iquote@var{dir}
8874
@opindex iquote
8875
Add the directory @var{dir} to the head of the list of directories to
8876
be searched for header files only for the case of @samp{#include
8877
"@var{file}"}; they are not searched for @samp{#include <@var{file}>},
8878
otherwise just like @option{-I}.
8879
 
8880
@item -L@var{dir}
8881
@opindex L
8882
Add directory @var{dir} to the list of directories to be searched
8883
for @option{-l}.
8884
 
8885
@item -B@var{prefix}
8886
@opindex B
8887
This option specifies where to find the executables, libraries,
8888
include files, and data files of the compiler itself.
8889
 
8890
The compiler driver program runs one or more of the subprograms
8891
@file{cpp}, @file{cc1}, @file{as} and @file{ld}.  It tries
8892
@var{prefix} as a prefix for each program it tries to run, both with and
8893
without @samp{@var{machine}/@var{version}/} (@pxref{Target Options}).
8894
 
8895
For each subprogram to be run, the compiler driver first tries the
8896
@option{-B} prefix, if any.  If that name is not found, or if @option{-B}
8897
was not specified, the driver tries two standard prefixes, which are
8898
@file{/usr/lib/gcc/} and @file{/usr/local/lib/gcc/}.  If neither of
8899
those results in a file name that is found, the unmodified program
8900
name is searched for using the directories specified in your
8901
@env{PATH} environment variable.
8902
 
8903
The compiler will check to see if the path provided by the @option{-B}
8904
refers to a directory, and if necessary it will add a directory
8905
separator character at the end of the path.
8906
 
8907
@option{-B} prefixes that effectively specify directory names also apply
8908
to libraries in the linker, because the compiler translates these
8909
options into @option{-L} options for the linker.  They also apply to
8910
includes files in the preprocessor, because the compiler translates these
8911
options into @option{-isystem} options for the preprocessor.  In this case,
8912
the compiler appends @samp{include} to the prefix.
8913
 
8914
The run-time support file @file{libgcc.a} can also be searched for using
8915
the @option{-B} prefix, if needed.  If it is not found there, the two
8916
standard prefixes above are tried, and that is all.  The file is left
8917
out of the link if it is not found by those means.
8918
 
8919
Another way to specify a prefix much like the @option{-B} prefix is to use
8920
the environment variable @env{GCC_EXEC_PREFIX}.  @xref{Environment
8921
Variables}.
8922
 
8923
As a special kludge, if the path provided by @option{-B} is
8924
@file{[dir/]stage@var{N}/}, where @var{N} is a number in the range 0 to
8925
9, then it will be replaced by @file{[dir/]include}.  This is to help
8926
with boot-strapping the compiler.
8927
 
8928
@item -specs=@var{file}
8929
@opindex specs
8930
Process @var{file} after the compiler reads in the standard @file{specs}
8931
file, in order to override the defaults that the @file{gcc} driver
8932
program uses when determining what switches to pass to @file{cc1},
8933
@file{cc1plus}, @file{as}, @file{ld}, etc.  More than one
8934
@option{-specs=@var{file}} can be specified on the command line, and they
8935
are processed in order, from left to right.
8936
 
8937
@item --sysroot=@var{dir}
8938
@opindex sysroot
8939
Use @var{dir} as the logical root directory for headers and libraries.
8940
For example, if the compiler would normally search for headers in
8941
@file{/usr/include} and libraries in @file{/usr/lib}, it will instead
8942
search @file{@var{dir}/usr/include} and @file{@var{dir}/usr/lib}.
8943
 
8944
If you use both this option and the @option{-isysroot} option, then
8945
the @option{--sysroot} option will apply to libraries, but the
8946
@option{-isysroot} option will apply to header files.
8947
 
8948
The GNU linker (beginning with version 2.16) has the necessary support
8949
for this option.  If your linker does not support this option, the
8950
header file aspect of @option{--sysroot} will still work, but the
8951
library aspect will not.
8952
 
8953
@item -I-
8954
@opindex I-
8955
This option has been deprecated.  Please use @option{-iquote} instead for
8956
@option{-I} directories before the @option{-I-} and remove the @option{-I-}.
8957
Any directories you specify with @option{-I} options before the @option{-I-}
8958
option are searched only for the case of @samp{#include "@var{file}"};
8959
they are not searched for @samp{#include <@var{file}>}.
8960
 
8961
If additional directories are specified with @option{-I} options after
8962
the @option{-I-}, these directories are searched for all @samp{#include}
8963
directives.  (Ordinarily @emph{all} @option{-I} directories are used
8964
this way.)
8965
 
8966
In addition, the @option{-I-} option inhibits the use of the current
8967
directory (where the current input file came from) as the first search
8968
directory for @samp{#include "@var{file}"}.  There is no way to
8969
override this effect of @option{-I-}.  With @option{-I.} you can specify
8970
searching the directory which was current when the compiler was
8971
invoked.  That is not exactly the same as what the preprocessor does
8972
by default, but it is often satisfactory.
8973
 
8974
@option{-I-} does not inhibit the use of the standard system directories
8975
for header files.  Thus, @option{-I-} and @option{-nostdinc} are
8976
independent.
8977
@end table
8978
 
8979
@c man end
8980
 
8981
@node Spec Files
8982
@section Specifying subprocesses and the switches to pass to them
8983
@cindex Spec Files
8984
 
8985
@command{gcc} is a driver program.  It performs its job by invoking a
8986
sequence of other programs to do the work of compiling, assembling and
8987
linking.  GCC interprets its command-line parameters and uses these to
8988
deduce which programs it should invoke, and which command-line options
8989
it ought to place on their command lines.  This behavior is controlled
8990
by @dfn{spec strings}.  In most cases there is one spec string for each
8991
program that GCC can invoke, but a few programs have multiple spec
8992
strings to control their behavior.  The spec strings built into GCC can
8993
be overridden by using the @option{-specs=} command-line switch to specify
8994
a spec file.
8995
 
8996
@dfn{Spec files} are plaintext files that are used to construct spec
8997
strings.  They consist of a sequence of directives separated by blank
8998
lines.  The type of directive is determined by the first non-whitespace
8999
character on the line and it can be one of the following:
9000
 
9001
@table @code
9002
@item %@var{command}
9003
Issues a @var{command} to the spec file processor.  The commands that can
9004
appear here are:
9005
 
9006
@table @code
9007
@item %include <@var{file}>
9008
@cindex %include
9009
Search for @var{file} and insert its text at the current point in the
9010
specs file.
9011
 
9012
@item %include_noerr <@var{file}>
9013
@cindex %include_noerr
9014
Just like @samp{%include}, but do not generate an error message if the include
9015
file cannot be found.
9016
 
9017
@item %rename @var{old_name} @var{new_name}
9018
@cindex %rename
9019
Rename the spec string @var{old_name} to @var{new_name}.
9020
 
9021
@end table
9022
 
9023
@item *[@var{spec_name}]:
9024
This tells the compiler to create, override or delete the named spec
9025
string.  All lines after this directive up to the next directive or
9026
blank line are considered to be the text for the spec string.  If this
9027
results in an empty string then the spec will be deleted.  (Or, if the
9028
spec did not exist, then nothing will happened.)  Otherwise, if the spec
9029
does not currently exist a new spec will be created.  If the spec does
9030
exist then its contents will be overridden by the text of this
9031
directive, unless the first character of that text is the @samp{+}
9032
character, in which case the text will be appended to the spec.
9033
 
9034
@item [@var{suffix}]:
9035
Creates a new @samp{[@var{suffix}] spec} pair.  All lines after this directive
9036
and up to the next directive or blank line are considered to make up the
9037
spec string for the indicated suffix.  When the compiler encounters an
9038
input file with the named suffix, it will processes the spec string in
9039
order to work out how to compile that file.  For example:
9040
 
9041
@smallexample
9042
.ZZ:
9043
z-compile -input %i
9044
@end smallexample
9045
 
9046
This says that any input file whose name ends in @samp{.ZZ} should be
9047
passed to the program @samp{z-compile}, which should be invoked with the
9048
command-line switch @option{-input} and with the result of performing the
9049
@samp{%i} substitution.  (See below.)
9050
 
9051
As an alternative to providing a spec string, the text that follows a
9052
suffix directive can be one of the following:
9053
 
9054
@table @code
9055
@item @@@var{language}
9056
This says that the suffix is an alias for a known @var{language}.  This is
9057
similar to using the @option{-x} command-line switch to GCC to specify a
9058
language explicitly.  For example:
9059
 
9060
@smallexample
9061
.ZZ:
9062
@@c++
9063
@end smallexample
9064
 
9065
Says that .ZZ files are, in fact, C++ source files.
9066
 
9067
@item #@var{name}
9068
This causes an error messages saying:
9069
 
9070
@smallexample
9071
@var{name} compiler not installed on this system.
9072
@end smallexample
9073
@end table
9074
 
9075
GCC already has an extensive list of suffixes built into it.
9076
This directive will add an entry to the end of the list of suffixes, but
9077
since the list is searched from the end backwards, it is effectively
9078
possible to override earlier entries using this technique.
9079
 
9080
@end table
9081
 
9082
GCC has the following spec strings built into it.  Spec files can
9083
override these strings or create their own.  Note that individual
9084
targets can also add their own spec strings to this list.
9085
 
9086
@smallexample
9087
asm          Options to pass to the assembler
9088
asm_final    Options to pass to the assembler post-processor
9089
cpp          Options to pass to the C preprocessor
9090
cc1          Options to pass to the C compiler
9091
cc1plus      Options to pass to the C++ compiler
9092
endfile      Object files to include at the end of the link
9093
link         Options to pass to the linker
9094
lib          Libraries to include on the command line to the linker
9095
libgcc       Decides which GCC support library to pass to the linker
9096
linker       Sets the name of the linker
9097
predefines   Defines to be passed to the C preprocessor
9098
signed_char  Defines to pass to CPP to say whether @code{char} is signed
9099
             by default
9100
startfile    Object files to include at the start of the link
9101
@end smallexample
9102
 
9103
Here is a small example of a spec file:
9104
 
9105
@smallexample
9106
%rename lib                 old_lib
9107
 
9108
*lib:
9109
--start-group -lgcc -lc -leval1 --end-group %(old_lib)
9110
@end smallexample
9111
 
9112
This example renames the spec called @samp{lib} to @samp{old_lib} and
9113
then overrides the previous definition of @samp{lib} with a new one.
9114
The new definition adds in some extra command-line options before
9115
including the text of the old definition.
9116
 
9117
@dfn{Spec strings} are a list of command-line options to be passed to their
9118
corresponding program.  In addition, the spec strings can contain
9119
@samp{%}-prefixed sequences to substitute variable text or to
9120
conditionally insert text into the command line.  Using these constructs
9121
it is possible to generate quite complex command lines.
9122
 
9123
Here is a table of all defined @samp{%}-sequences for spec
9124
strings.  Note that spaces are not generated automatically around the
9125
results of expanding these sequences.  Therefore you can concatenate them
9126
together or combine them with constant text in a single argument.
9127
 
9128
@table @code
9129
@item %%
9130
Substitute one @samp{%} into the program name or argument.
9131
 
9132
@item %i
9133
Substitute the name of the input file being processed.
9134
 
9135
@item %b
9136
Substitute the basename of the input file being processed.
9137
This is the substring up to (and not including) the last period
9138
and not including the directory.
9139
 
9140
@item %B
9141
This is the same as @samp{%b}, but include the file suffix (text after
9142
the last period).
9143
 
9144
@item %d
9145
Marks the argument containing or following the @samp{%d} as a
9146
temporary file name, so that that file will be deleted if GCC exits
9147
successfully.  Unlike @samp{%g}, this contributes no text to the
9148
argument.
9149
 
9150
@item %g@var{suffix}
9151
Substitute a file name that has suffix @var{suffix} and is chosen
9152
once per compilation, and mark the argument in the same way as
9153
@samp{%d}.  To reduce exposure to denial-of-service attacks, the file
9154
name is now chosen in a way that is hard to predict even when previously
9155
chosen file names are known.  For example, @samp{%g.s @dots{} %g.o @dots{} %g.s}
9156
might turn into @samp{ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s}.  @var{suffix} matches
9157
the regexp @samp{[.A-Za-z]*} or the special string @samp{%O}, which is
9158
treated exactly as if @samp{%O} had been preprocessed.  Previously, @samp{%g}
9159
was simply substituted with a file name chosen once per compilation,
9160
without regard to any appended suffix (which was therefore treated
9161
just like ordinary text), making such attacks more likely to succeed.
9162
 
9163
@item %u@var{suffix}
9164
Like @samp{%g}, but generates a new temporary file name even if
9165
@samp{%u@var{suffix}} was already seen.
9166
 
9167
@item %U@var{suffix}
9168
Substitutes the last file name generated with @samp{%u@var{suffix}}, generating a
9169
new one if there is no such last file name.  In the absence of any
9170
@samp{%u@var{suffix}}, this is just like @samp{%g@var{suffix}}, except they don't share
9171
the same suffix @emph{space}, so @samp{%g.s @dots{} %U.s @dots{} %g.s @dots{} %U.s}
9172
would involve the generation of two distinct file names, one
9173
for each @samp{%g.s} and another for each @samp{%U.s}.  Previously, @samp{%U} was
9174
simply substituted with a file name chosen for the previous @samp{%u},
9175
without regard to any appended suffix.
9176
 
9177
@item %j@var{suffix}
9178
Substitutes the name of the @code{HOST_BIT_BUCKET}, if any, and if it is
9179
writable, and if save-temps is off; otherwise, substitute the name
9180
of a temporary file, just like @samp{%u}.  This temporary file is not
9181
meant for communication between processes, but rather as a junk
9182
disposal mechanism.
9183
 
9184
@item %|@var{suffix}
9185
@itemx %m@var{suffix}
9186
Like @samp{%g}, except if @option{-pipe} is in effect.  In that case
9187
@samp{%|} substitutes a single dash and @samp{%m} substitutes nothing at
9188
all.  These are the two most common ways to instruct a program that it
9189
should read from standard input or write to standard output.  If you
9190
need something more elaborate you can use an @samp{%@{pipe:@code{X}@}}
9191
construct: see for example @file{f/lang-specs.h}.
9192
 
9193
@item %.@var{SUFFIX}
9194
Substitutes @var{.SUFFIX} for the suffixes of a matched switch's args
9195
when it is subsequently output with @samp{%*}.  @var{SUFFIX} is
9196
terminated by the next space or %.
9197
 
9198
@item %w
9199
Marks the argument containing or following the @samp{%w} as the
9200
designated output file of this compilation.  This puts the argument
9201
into the sequence of arguments that @samp{%o} will substitute later.
9202
 
9203
@item %o
9204
Substitutes the names of all the output files, with spaces
9205
automatically placed around them.  You should write spaces
9206
around the @samp{%o} as well or the results are undefined.
9207
@samp{%o} is for use in the specs for running the linker.
9208
Input files whose names have no recognized suffix are not compiled
9209
at all, but they are included among the output files, so they will
9210
be linked.
9211
 
9212
@item %O
9213
Substitutes the suffix for object files.  Note that this is
9214
handled specially when it immediately follows @samp{%g, %u, or %U},
9215
because of the need for those to form complete file names.  The
9216
handling is such that @samp{%O} is treated exactly as if it had already
9217
been substituted, except that @samp{%g, %u, and %U} do not currently
9218
support additional @var{suffix} characters following @samp{%O} as they would
9219
following, for example, @samp{.o}.
9220
 
9221
@item %p
9222
Substitutes the standard macro predefinitions for the
9223
current target machine.  Use this when running @code{cpp}.
9224
 
9225
@item %P
9226
Like @samp{%p}, but puts @samp{__} before and after the name of each
9227
predefined macro, except for macros that start with @samp{__} or with
9228
@samp{_@var{L}}, where @var{L} is an uppercase letter.  This is for ISO
9229
C@.
9230
 
9231
@item %I
9232
Substitute any of @option{-iprefix} (made from @env{GCC_EXEC_PREFIX}),
9233
@option{-isysroot} (made from @env{TARGET_SYSTEM_ROOT}),
9234
@option{-isystem} (made from @env{COMPILER_PATH} and @option{-B} options)
9235
and @option{-imultilib} as necessary.
9236
 
9237
@item %s
9238
Current argument is the name of a library or startup file of some sort.
9239
Search for that file in a standard list of directories and substitute
9240
the full name found.  The current working directory is included in the
9241
list of directories scanned.
9242
 
9243
@item %T
9244
Current argument is the name of a linker script.  Search for that file
9245
in the current list of directories to scan for libraries. If the file
9246
is located insert a @option{--script} option into the command line
9247
followed by the full path name found.  If the file is not found then
9248
generate an error message.  Note: the current working directory is not
9249
searched.
9250
 
9251
@item %e@var{str}
9252
Print @var{str} as an error message.  @var{str} is terminated by a newline.
9253
Use this when inconsistent options are detected.
9254
 
9255
@item %(@var{name})
9256
Substitute the contents of spec string @var{name} at this point.
9257
 
9258
@item %[@var{name}]
9259
Like @samp{%(@dots{})} but put @samp{__} around @option{-D} arguments.
9260
 
9261
@item %x@{@var{option}@}
9262
Accumulate an option for @samp{%X}.
9263
 
9264
@item %X
9265
Output the accumulated linker options specified by @option{-Wl} or a @samp{%x}
9266
spec string.
9267
 
9268
@item %Y
9269
Output the accumulated assembler options specified by @option{-Wa}.
9270
 
9271
@item %Z
9272
Output the accumulated preprocessor options specified by @option{-Wp}.
9273
 
9274
@item %a
9275
Process the @code{asm} spec.  This is used to compute the
9276
switches to be passed to the assembler.
9277
 
9278
@item %A
9279
Process the @code{asm_final} spec.  This is a spec string for
9280
passing switches to an assembler post-processor, if such a program is
9281
needed.
9282
 
9283
@item %l
9284
Process the @code{link} spec.  This is the spec for computing the
9285
command line passed to the linker.  Typically it will make use of the
9286
@samp{%L %G %S %D and %E} sequences.
9287
 
9288
@item %D
9289
Dump out a @option{-L} option for each directory that GCC believes might
9290
contain startup files.  If the target supports multilibs then the
9291
current multilib directory will be prepended to each of these paths.
9292
 
9293
@item %L
9294
Process the @code{lib} spec.  This is a spec string for deciding which
9295
libraries should be included on the command line to the linker.
9296
 
9297
@item %G
9298
Process the @code{libgcc} spec.  This is a spec string for deciding
9299
which GCC support library should be included on the command line to the linker.
9300
 
9301
@item %S
9302
Process the @code{startfile} spec.  This is a spec for deciding which
9303
object files should be the first ones passed to the linker.  Typically
9304
this might be a file named @file{crt0.o}.
9305
 
9306
@item %E
9307
Process the @code{endfile} spec.  This is a spec string that specifies
9308
the last object files that will be passed to the linker.
9309
 
9310
@item %C
9311
Process the @code{cpp} spec.  This is used to construct the arguments
9312
to be passed to the C preprocessor.
9313
 
9314
@item %1
9315
Process the @code{cc1} spec.  This is used to construct the options to be
9316
passed to the actual C compiler (@samp{cc1}).
9317
 
9318
@item %2
9319
Process the @code{cc1plus} spec.  This is used to construct the options to be
9320
passed to the actual C++ compiler (@samp{cc1plus}).
9321
 
9322
@item %*
9323
Substitute the variable part of a matched option.  See below.
9324
Note that each comma in the substituted string is replaced by
9325
a single space.
9326
 
9327
@item %<@code{S}
9328
Remove all occurrences of @code{-S} from the command line.  Note---this
9329
command is position dependent.  @samp{%} commands in the spec string
9330
before this one will see @code{-S}, @samp{%} commands in the spec string
9331
after this one will not.
9332
 
9333
@item %:@var{function}(@var{args})
9334
Call the named function @var{function}, passing it @var{args}.
9335
@var{args} is first processed as a nested spec string, then split
9336
into an argument vector in the usual fashion.  The function returns
9337
a string which is processed as if it had appeared literally as part
9338
of the current spec.
9339
 
9340
The following built-in spec functions are provided:
9341
 
9342
@table @code
9343
@item @code{getenv}
9344
The @code{getenv} spec function takes two arguments: an environment
9345
variable name and a string.  If the environment variable is not
9346
defined, a fatal error is issued.  Otherwise, the return value is the
9347
value of the environment variable concatenated with the string.  For
9348
example, if @env{TOPDIR} is defined as @file{/path/to/top}, then:
9349
 
9350
@smallexample
9351
%:getenv(TOPDIR /include)
9352
@end smallexample
9353
 
9354
expands to @file{/path/to/top/include}.
9355
 
9356
@item @code{if-exists}
9357
The @code{if-exists} spec function takes one argument, an absolute
9358
pathname to a file.  If the file exists, @code{if-exists} returns the
9359
pathname.  Here is a small example of its usage:
9360
 
9361
@smallexample
9362
*startfile:
9363
crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
9364
@end smallexample
9365
 
9366
@item @code{if-exists-else}
9367
The @code{if-exists-else} spec function is similar to the @code{if-exists}
9368
spec function, except that it takes two arguments.  The first argument is
9369
an absolute pathname to a file.  If the file exists, @code{if-exists-else}
9370
returns the pathname.  If it does not exist, it returns the second argument.
9371
This way, @code{if-exists-else} can be used to select one file or another,
9372
based on the existence of the first.  Here is a small example of its usage:
9373
 
9374
@smallexample
9375
*startfile:
9376
crt0%O%s %:if-exists(crti%O%s) \
9377
%:if-exists-else(crtbeginT%O%s crtbegin%O%s)
9378
@end smallexample
9379
 
9380
@item @code{replace-outfile}
9381
The @code{replace-outfile} spec function takes two arguments.  It looks for the
9382
first argument in the outfiles array and replaces it with the second argument.  Here
9383
is a small example of its usage:
9384
 
9385
@smallexample
9386
%@{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)@}
9387
@end smallexample
9388
 
9389
@item @code{print-asm-header}
9390
The @code{print-asm-header} function takes no arguments and simply
9391
prints a banner like:
9392
 
9393
@smallexample
9394
Assembler options
9395
=================
9396
 
9397
Use "-Wa,OPTION" to pass "OPTION" to the assembler.
9398
@end smallexample
9399
 
9400
It is used to separate compiler options from assembler options
9401
in the @option{--target-help} output.
9402
@end table
9403
 
9404
@item %@{@code{S}@}
9405
Substitutes the @code{-S} switch, if that switch was given to GCC@.
9406
If that switch was not specified, this substitutes nothing.  Note that
9407
the leading dash is omitted when specifying this option, and it is
9408
automatically inserted if the substitution is performed.  Thus the spec
9409
string @samp{%@{foo@}} would match the command-line option @option{-foo}
9410
and would output the command line option @option{-foo}.
9411
 
9412
@item %W@{@code{S}@}
9413
Like %@{@code{S}@} but mark last argument supplied within as a file to be
9414
deleted on failure.
9415
 
9416
@item %@{@code{S}*@}
9417
Substitutes all the switches specified to GCC whose names start
9418
with @code{-S}, but which also take an argument.  This is used for
9419
switches like @option{-o}, @option{-D}, @option{-I}, etc.
9420
GCC considers @option{-o foo} as being
9421
one switch whose names starts with @samp{o}.  %@{o*@} would substitute this
9422
text, including the space.  Thus two arguments would be generated.
9423
 
9424
@item %@{@code{S}*&@code{T}*@}
9425
Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options
9426
(the order of @code{S} and @code{T} in the spec is not significant).
9427
There can be any number of ampersand-separated variables; for each the
9428
wild card is optional.  Useful for CPP as @samp{%@{D*&U*&A*@}}.
9429
 
9430
@item %@{@code{S}:@code{X}@}
9431
Substitutes @code{X}, if the @samp{-S} switch was given to GCC@.
9432
 
9433
@item %@{!@code{S}:@code{X}@}
9434
Substitutes @code{X}, if the @samp{-S} switch was @emph{not} given to GCC@.
9435
 
9436
@item %@{@code{S}*:@code{X}@}
9437
Substitutes @code{X} if one or more switches whose names start with
9438
@code{-S} are specified to GCC@.  Normally @code{X} is substituted only
9439
once, no matter how many such switches appeared.  However, if @code{%*}
9440
appears somewhere in @code{X}, then @code{X} will be substituted once
9441
for each matching switch, with the @code{%*} replaced by the part of
9442
that switch that matched the @code{*}.
9443
 
9444
@item %@{.@code{S}:@code{X}@}
9445
Substitutes @code{X}, if processing a file with suffix @code{S}.
9446
 
9447
@item %@{!.@code{S}:@code{X}@}
9448
Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}.
9449
 
9450
@item %@{,@code{S}:@code{X}@}
9451
Substitutes @code{X}, if processing a file for language @code{S}.
9452
 
9453
@item %@{!,@code{S}:@code{X}@}
9454
Substitutes @code{X}, if not processing a file for language @code{S}.
9455
 
9456
@item %@{@code{S}|@code{P}:@code{X}@}
9457
Substitutes @code{X} if either @code{-S} or @code{-P} was given to
9458
GCC@.  This may be combined with @samp{!}, @samp{.}, @samp{,}, and
9459
@code{*} sequences as well, although they have a stronger binding than
9460
the @samp{|}.  If @code{%*} appears in @code{X}, all of the
9461
alternatives must be starred, and only the first matching alternative
9462
is substituted.
9463
 
9464
For example, a spec string like this:
9465
 
9466
@smallexample
9467
%@{.c:-foo@} %@{!.c:-bar@} %@{.c|d:-baz@} %@{!.c|d:-boggle@}
9468
@end smallexample
9469
 
9470
will output the following command-line options from the following input
9471
command-line options:
9472
 
9473
@smallexample
9474
fred.c        -foo -baz
9475
jim.d         -bar -boggle
9476
-d fred.c     -foo -baz -boggle
9477
-d jim.d      -bar -baz -boggle
9478
@end smallexample
9479
 
9480
@item %@{S:X; T:Y; :D@}
9481
 
9482
If @code{S} was given to GCC, substitutes @code{X}; else if @code{T} was
9483
given to GCC, substitutes @code{Y}; else substitutes @code{D}.  There can
9484
be as many clauses as you need.  This may be combined with @code{.},
9485
@code{,}, @code{!}, @code{|}, and @code{*} as needed.
9486
 
9487
 
9488
@end table
9489
 
9490
The conditional text @code{X} in a %@{@code{S}:@code{X}@} or similar
9491
construct may contain other nested @samp{%} constructs or spaces, or
9492
even newlines.  They are processed as usual, as described above.
9493
Trailing white space in @code{X} is ignored.  White space may also
9494
appear anywhere on the left side of the colon in these constructs,
9495
except between @code{.} or @code{*} and the corresponding word.
9496
 
9497
The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are
9498
handled specifically in these constructs.  If another value of
9499
@option{-O} or the negated form of a @option{-f}, @option{-m}, or
9500
@option{-W} switch is found later in the command line, the earlier
9501
switch value is ignored, except with @{@code{S}*@} where @code{S} is
9502
just one letter, which passes all matching options.
9503
 
9504
The character @samp{|} at the beginning of the predicate text is used to
9505
indicate that a command should be piped to the following command, but
9506
only if @option{-pipe} is specified.
9507
 
9508
It is built into GCC which switches take arguments and which do not.
9509
(You might think it would be useful to generalize this to allow each
9510
compiler's spec to say which switches take arguments.  But this cannot
9511
be done in a consistent fashion.  GCC cannot even decide which input
9512
files have been specified without knowing which switches take arguments,
9513
and it must know which input files to compile in order to tell which
9514
compilers to run).
9515
 
9516
GCC also knows implicitly that arguments starting in @option{-l} are to be
9517
treated as compiler output files, and passed to the linker in their
9518
proper position among the other output files.
9519
 
9520
@c man begin OPTIONS
9521
 
9522
@node Target Options
9523
@section Specifying Target Machine and Compiler Version
9524
@cindex target options
9525
@cindex cross compiling
9526
@cindex specifying machine version
9527
@cindex specifying compiler version and target machine
9528
@cindex compiler version, specifying
9529
@cindex target machine, specifying
9530
 
9531
The usual way to run GCC is to run the executable called @file{gcc}, or
9532
@file{<machine>-gcc} when cross-compiling, or
9533
@file{<machine>-gcc-<version>} to run a version other than the one that
9534
was installed last.  Sometimes this is inconvenient, so GCC provides
9535
options that will switch to another cross-compiler or version.
9536
 
9537
@table @gcctabopt
9538
@item -b @var{machine}
9539
@opindex b
9540
The argument @var{machine} specifies the target machine for compilation.
9541
 
9542
The value to use for @var{machine} is the same as was specified as the
9543
machine type when configuring GCC as a cross-compiler.  For
9544
example, if a cross-compiler was configured with @samp{configure
9545
arm-elf}, meaning to compile for an arm processor with elf binaries,
9546
then you would specify @option{-b arm-elf} to run that cross compiler.
9547
Because there are other options beginning with @option{-b}, the
9548
configuration must contain a hyphen, or @option{-b} alone should be one
9549
argument followed by the configuration in the next argument.
9550
 
9551
@item -V @var{version}
9552
@opindex V
9553
The argument @var{version} specifies which version of GCC to run.
9554
This is useful when multiple versions are installed.  For example,
9555
@var{version} might be @samp{4.0}, meaning to run GCC version 4.0.
9556
@end table
9557
 
9558
The @option{-V} and @option{-b} options work by running the
9559
@file{<machine>-gcc-<version>} executable, so there's no real reason to
9560
use them if you can just run that directly.
9561
 
9562
@node Submodel Options
9563
@section Hardware Models and Configurations
9564
@cindex submodel options
9565
@cindex specifying hardware config
9566
@cindex hardware models and configurations, specifying
9567
@cindex machine dependent options
9568
 
9569
Earlier we discussed the standard option @option{-b} which chooses among
9570
different installed compilers for completely different target
9571
machines, such as VAX vs.@: 68000 vs.@: 80386.
9572
 
9573
In addition, each of these target machine types can have its own
9574
special options, starting with @samp{-m}, to choose among various
9575
hardware models or configurations---for example, 68010 vs 68020,
9576
floating coprocessor or none.  A single installed version of the
9577
compiler can compile for any model or configuration, according to the
9578
options specified.
9579
 
9580
Some configurations of the compiler also support additional special
9581
options, usually for compatibility with other compilers on the same
9582
platform.
9583
 
9584
@c This list is ordered alphanumerically by subsection name.
9585
@c It should be the same order and spelling as these options are listed
9586
@c in Machine Dependent Options
9587
 
9588
@menu
9589
* ARC Options::
9590
* ARM Options::
9591
* AVR Options::
9592
* Blackfin Options::
9593
* CRIS Options::
9594
* CRX Options::
9595
* Darwin Options::
9596
* DEC Alpha Options::
9597
* DEC Alpha/VMS Options::
9598
* FR30 Options::
9599
* FRV Options::
9600
* GNU/Linux Options::
9601
* H8/300 Options::
9602
* HPPA Options::
9603
* i386 and x86-64 Options::
9604
* i386 and x86-64 Windows Options::
9605
* IA-64 Options::
9606
* IA-64/VMS Options::
9607
* LM32 Options::
9608
* M32C Options::
9609
* M32R/D Options::
9610
* M680x0 Options::
9611
* M68hc1x Options::
9612
* MCore Options::
9613
* MeP Options::
9614
* MIPS Options::
9615
* MMIX Options::
9616
* MN10300 Options::
9617 333 jeremybenn
* OpenRISC 1000 Options::
9618 284 jeremybenn
* PDP-11 Options::
9619
* picoChip Options::
9620
* PowerPC Options::
9621
* RS/6000 and PowerPC Options::
9622
* RX Options::
9623
* S/390 and zSeries Options::
9624
* Score Options::
9625
* SH Options::
9626
* SPARC Options::
9627
* SPU Options::
9628
* System V Options::
9629
* V850 Options::
9630
* VAX Options::
9631
* VxWorks Options::
9632
* x86-64 Options::
9633
* Xstormy16 Options::
9634
* Xtensa Options::
9635
* zSeries Options::
9636
@end menu
9637
 
9638
@node ARC Options
9639
@subsection ARC Options
9640
@cindex ARC Options
9641
 
9642
These options are defined for ARC implementations:
9643
 
9644
@table @gcctabopt
9645
@item -EL
9646
@opindex EL
9647
Compile code for little endian mode.  This is the default.
9648
 
9649
@item -EB
9650
@opindex EB
9651
Compile code for big endian mode.
9652
 
9653
@item -mmangle-cpu
9654
@opindex mmangle-cpu
9655
Prepend the name of the cpu to all public symbol names.
9656
In multiple-processor systems, there are many ARC variants with different
9657
instruction and register set characteristics.  This flag prevents code
9658
compiled for one cpu to be linked with code compiled for another.
9659
No facility exists for handling variants that are ``almost identical''.
9660
This is an all or nothing option.
9661
 
9662
@item -mcpu=@var{cpu}
9663
@opindex mcpu
9664
Compile code for ARC variant @var{cpu}.
9665
Which variants are supported depend on the configuration.
9666
All variants support @option{-mcpu=base}, this is the default.
9667
 
9668
@item -mtext=@var{text-section}
9669
@itemx -mdata=@var{data-section}
9670
@itemx -mrodata=@var{readonly-data-section}
9671
@opindex mtext
9672
@opindex mdata
9673
@opindex mrodata
9674
Put functions, data, and readonly data in @var{text-section},
9675
@var{data-section}, and @var{readonly-data-section} respectively
9676
by default.  This can be overridden with the @code{section} attribute.
9677
@xref{Variable Attributes}.
9678
 
9679
@item -mfix-cortex-m3-ldrd
9680
@opindex mfix-cortex-m3-ldrd
9681
Some Cortex-M3 cores can cause data corruption when @code{ldrd} instructions
9682
with overlapping destination and base registers are used.  This option avoids
9683
generating these instructions.  This option is enabled by default when
9684
@option{-mcpu=cortex-m3} is specified.
9685
 
9686
@end table
9687
 
9688
@node ARM Options
9689
@subsection ARM Options
9690
@cindex ARM options
9691
 
9692
These @samp{-m} options are defined for Advanced RISC Machines (ARM)
9693
architectures:
9694
 
9695
@table @gcctabopt
9696
@item -mabi=@var{name}
9697
@opindex mabi
9698
Generate code for the specified ABI@.  Permissible values are: @samp{apcs-gnu},
9699
@samp{atpcs}, @samp{aapcs}, @samp{aapcs-linux} and @samp{iwmmxt}.
9700
 
9701
@item -mapcs-frame
9702
@opindex mapcs-frame
9703
Generate a stack frame that is compliant with the ARM Procedure Call
9704
Standard for all functions, even if this is not strictly necessary for
9705
correct execution of the code.  Specifying @option{-fomit-frame-pointer}
9706
with this option will cause the stack frames not to be generated for
9707
leaf functions.  The default is @option{-mno-apcs-frame}.
9708
 
9709
@item -mapcs
9710
@opindex mapcs
9711
This is a synonym for @option{-mapcs-frame}.
9712
 
9713
@ignore
9714
@c not currently implemented
9715
@item -mapcs-stack-check
9716
@opindex mapcs-stack-check
9717
Generate code to check the amount of stack space available upon entry to
9718
every function (that actually uses some stack space).  If there is
9719
insufficient space available then either the function
9720
@samp{__rt_stkovf_split_small} or @samp{__rt_stkovf_split_big} will be
9721
called, depending upon the amount of stack space required.  The run time
9722
system is required to provide these functions.  The default is
9723
@option{-mno-apcs-stack-check}, since this produces smaller code.
9724
 
9725
@c not currently implemented
9726
@item -mapcs-float
9727
@opindex mapcs-float
9728
Pass floating point arguments using the float point registers.  This is
9729
one of the variants of the APCS@.  This option is recommended if the
9730
target hardware has a floating point unit or if a lot of floating point
9731
arithmetic is going to be performed by the code.  The default is
9732
@option{-mno-apcs-float}, since integer only code is slightly increased in
9733
size if @option{-mapcs-float} is used.
9734
 
9735
@c not currently implemented
9736
@item -mapcs-reentrant
9737
@opindex mapcs-reentrant
9738
Generate reentrant, position independent code.  The default is
9739
@option{-mno-apcs-reentrant}.
9740
@end ignore
9741
 
9742
@item -mthumb-interwork
9743
@opindex mthumb-interwork
9744
Generate code which supports calling between the ARM and Thumb
9745
instruction sets.  Without this option the two instruction sets cannot
9746
be reliably used inside one program.  The default is
9747
@option{-mno-thumb-interwork}, since slightly larger code is generated
9748
when @option{-mthumb-interwork} is specified.
9749
 
9750
@item -mno-sched-prolog
9751
@opindex mno-sched-prolog
9752
Prevent the reordering of instructions in the function prolog, or the
9753
merging of those instruction with the instructions in the function's
9754
body.  This means that all functions will start with a recognizable set
9755
of instructions (or in fact one of a choice from a small set of
9756
different function prologues), and this information can be used to
9757
locate the start if functions inside an executable piece of code.  The
9758
default is @option{-msched-prolog}.
9759
 
9760
@item -mfloat-abi=@var{name}
9761
@opindex mfloat-abi
9762
Specifies which floating-point ABI to use.  Permissible values
9763
are: @samp{soft}, @samp{softfp} and @samp{hard}.
9764
 
9765
Specifying @samp{soft} causes GCC to generate output containing
9766
library calls for floating-point operations.
9767
@samp{softfp} allows the generation of code using hardware floating-point
9768
instructions, but still uses the soft-float calling conventions.
9769
@samp{hard} allows generation of floating-point instructions
9770
and uses FPU-specific calling conventions.
9771
 
9772
The default depends on the specific target configuration.  Note that
9773
the hard-float and soft-float ABIs are not link-compatible; you must
9774
compile your entire program with the same ABI, and link with a
9775
compatible set of libraries.
9776
 
9777
@item -mhard-float
9778
@opindex mhard-float
9779
Equivalent to @option{-mfloat-abi=hard}.
9780
 
9781
@item -msoft-float
9782
@opindex msoft-float
9783
Equivalent to @option{-mfloat-abi=soft}.
9784
 
9785
@item -mlittle-endian
9786
@opindex mlittle-endian
9787
Generate code for a processor running in little-endian mode.  This is
9788
the default for all standard configurations.
9789
 
9790
@item -mbig-endian
9791
@opindex mbig-endian
9792
Generate code for a processor running in big-endian mode; the default is
9793
to compile code for a little-endian processor.
9794
 
9795
@item -mwords-little-endian
9796
@opindex mwords-little-endian
9797
This option only applies when generating code for big-endian processors.
9798
Generate code for a little-endian word order but a big-endian byte
9799
order.  That is, a byte order of the form @samp{32107654}.  Note: this
9800
option should only be used if you require compatibility with code for
9801
big-endian ARM processors generated by versions of the compiler prior to
9802
2.8.
9803
 
9804
@item -mcpu=@var{name}
9805
@opindex mcpu
9806
This specifies the name of the target ARM processor.  GCC uses this name
9807
to determine what kind of instructions it can emit when generating
9808
assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
9809
@samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
9810
@samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
9811
@samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
9812
@samp{arm700i}, @samp{arm710}, @samp{arm710c}, @samp{arm7100},
9813
@samp{arm720},
9814
@samp{arm7500}, @samp{arm7500fe}, @samp{arm7tdmi}, @samp{arm7tdmi-s},
9815
@samp{arm710t}, @samp{arm720t}, @samp{arm740t},
9816
@samp{strongarm}, @samp{strongarm110}, @samp{strongarm1100},
9817
@samp{strongarm1110},
9818
@samp{arm8}, @samp{arm810}, @samp{arm9}, @samp{arm9e}, @samp{arm920},
9819
@samp{arm920t}, @samp{arm922t}, @samp{arm946e-s}, @samp{arm966e-s},
9820
@samp{arm968e-s}, @samp{arm926ej-s}, @samp{arm940t}, @samp{arm9tdmi},
9821
@samp{arm10tdmi}, @samp{arm1020t}, @samp{arm1026ej-s},
9822
@samp{arm10e}, @samp{arm1020e}, @samp{arm1022e},
9823
@samp{arm1136j-s}, @samp{arm1136jf-s}, @samp{mpcore}, @samp{mpcorenovfp},
9824
@samp{arm1156t2-s}, @samp{arm1156t2f-s}, @samp{arm1176jz-s}, @samp{arm1176jzf-s},
9825
@samp{cortex-a5}, @samp{cortex-a8}, @samp{cortex-a9},
9826
@samp{cortex-r4}, @samp{cortex-r4f}, @samp{cortex-m3},
9827
@samp{cortex-m1},
9828
@samp{cortex-m0},
9829
@samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9830
 
9831
@item -mtune=@var{name}
9832
@opindex mtune
9833
This option is very similar to the @option{-mcpu=} option, except that
9834
instead of specifying the actual target processor type, and hence
9835
restricting which instructions can be used, it specifies that GCC should
9836
tune the performance of the code as if the target were of the type
9837
specified in this option, but still choosing the instructions that it
9838
will generate based on the cpu specified by a @option{-mcpu=} option.
9839
For some ARM implementations better performance can be obtained by using
9840
this option.
9841
 
9842
@item -march=@var{name}
9843
@opindex march
9844
This specifies the name of the target ARM architecture.  GCC uses this
9845
name to determine what kind of instructions it can emit when generating
9846
assembly code.  This option can be used in conjunction with or instead
9847
of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
9848
@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
9849
@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
9850
@samp{armv6}, @samp{armv6j},
9851
@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
9852
@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
9853
@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
9854
 
9855
@item -mfpu=@var{name}
9856
@itemx -mfpe=@var{number}
9857
@itemx -mfp=@var{number}
9858
@opindex mfpu
9859
@opindex mfpe
9860
@opindex mfp
9861
This specifies what floating point hardware (or hardware emulation) is
9862
available on the target.  Permissible names are: @samp{fpa}, @samp{fpe2},
9863
@samp{fpe3}, @samp{maverick}, @samp{vfp}, @samp{vfpv3}, @samp{vfpv3-fp16},
9864
@samp{vfpv3-d16}, @samp{vfpv3-d16-fp16}, @samp{vfpv3xd}, @samp{vfpv3xd-fp16},
9865
@samp{neon}, @samp{neon-fp16}, @samp{vfpv4}, @samp{vfpv4-d16},
9866
@samp{fpv4-sp-d16} and @samp{neon-vfpv4}.
9867
@option{-mfp} and @option{-mfpe} are synonyms for
9868
@option{-mfpu}=@samp{fpe}@var{number}, for compatibility with older versions
9869
of GCC@.
9870
 
9871
If @option{-msoft-float} is specified this specifies the format of
9872
floating point values.
9873
 
9874
@item -mfp16-format=@var{name}
9875
@opindex mfp16-format
9876
Specify the format of the @code{__fp16} half-precision floating-point type.
9877
Permissible names are @samp{none}, @samp{ieee}, and @samp{alternative};
9878
the default is @samp{none}, in which case the @code{__fp16} type is not
9879
defined.  @xref{Half-Precision}, for more information.
9880
 
9881
@item -mstructure-size-boundary=@var{n}
9882
@opindex mstructure-size-boundary
9883
The size of all structures and unions will be rounded up to a multiple
9884
of the number of bits set by this option.  Permissible values are 8, 32
9885
and 64.  The default value varies for different toolchains.  For the COFF
9886
targeted toolchain the default value is 8.  A value of 64 is only allowed
9887
if the underlying ABI supports it.
9888
 
9889
Specifying the larger number can produce faster, more efficient code, but
9890
can also increase the size of the program.  Different values are potentially
9891
incompatible.  Code compiled with one value cannot necessarily expect to
9892
work with code or libraries compiled with another value, if they exchange
9893
information using structures or unions.
9894
 
9895
@item -mabort-on-noreturn
9896
@opindex mabort-on-noreturn
9897
Generate a call to the function @code{abort} at the end of a
9898
@code{noreturn} function.  It will be executed if the function tries to
9899
return.
9900
 
9901
@item -mlong-calls
9902
@itemx -mno-long-calls
9903
@opindex mlong-calls
9904
@opindex mno-long-calls
9905
Tells the compiler to perform function calls by first loading the
9906
address of the function into a register and then performing a subroutine
9907
call on this register.  This switch is needed if the target function
9908
will lie outside of the 64 megabyte addressing range of the offset based
9909
version of subroutine call instruction.
9910
 
9911
Even if this switch is enabled, not all function calls will be turned
9912
into long calls.  The heuristic is that static functions, functions
9913
which have the @samp{short-call} attribute, functions that are inside
9914
the scope of a @samp{#pragma no_long_calls} directive and functions whose
9915
definitions have already been compiled within the current compilation
9916
unit, will not be turned into long calls.  The exception to this rule is
9917
that weak function definitions, functions with the @samp{long-call}
9918
attribute or the @samp{section} attribute, and functions that are within
9919
the scope of a @samp{#pragma long_calls} directive, will always be
9920
turned into long calls.
9921
 
9922
This feature is not enabled by default.  Specifying
9923
@option{-mno-long-calls} will restore the default behavior, as will
9924
placing the function calls within the scope of a @samp{#pragma
9925
long_calls_off} directive.  Note these switches have no effect on how
9926
the compiler generates code to handle function calls via function
9927
pointers.
9928
 
9929
@item -msingle-pic-base
9930
@opindex msingle-pic-base
9931
Treat the register used for PIC addressing as read-only, rather than
9932
loading it in the prologue for each function.  The run-time system is
9933
responsible for initializing this register with an appropriate value
9934
before execution begins.
9935
 
9936
@item -mpic-register=@var{reg}
9937
@opindex mpic-register
9938
Specify the register to be used for PIC addressing.  The default is R10
9939
unless stack-checking is enabled, when R9 is used.
9940
 
9941
@item -mcirrus-fix-invalid-insns
9942
@opindex mcirrus-fix-invalid-insns
9943
@opindex mno-cirrus-fix-invalid-insns
9944
Insert NOPs into the instruction stream to in order to work around
9945
problems with invalid Maverick instruction combinations.  This option
9946
is only valid if the @option{-mcpu=ep9312} option has been used to
9947
enable generation of instructions for the Cirrus Maverick floating
9948
point co-processor.  This option is not enabled by default, since the
9949
problem is only present in older Maverick implementations.  The default
9950
can be re-enabled by use of the @option{-mno-cirrus-fix-invalid-insns}
9951
switch.
9952
 
9953
@item -mpoke-function-name
9954
@opindex mpoke-function-name
9955
Write the name of each function into the text section, directly
9956
preceding the function prologue.  The generated code is similar to this:
9957
 
9958
@smallexample
9959
     t0
9960
         .ascii "arm_poke_function_name", 0
9961
         .align
9962
     t1
9963
         .word 0xff000000 + (t1 - t0)
9964
     arm_poke_function_name
9965
         mov     ip, sp
9966
         stmfd   sp!, @{fp, ip, lr, pc@}
9967
         sub     fp, ip, #4
9968
@end smallexample
9969
 
9970
When performing a stack backtrace, code can inspect the value of
9971
@code{pc} stored at @code{fp + 0}.  If the trace function then looks at
9972
location @code{pc - 12} and the top 8 bits are set, then we know that
9973
there is a function name embedded immediately preceding this location
9974
and has length @code{((pc[-3]) & 0xff000000)}.
9975
 
9976
@item -mthumb
9977
@opindex mthumb
9978
Generate code for the Thumb instruction set.  The default is to
9979
use the 32-bit ARM instruction set.
9980
This option automatically enables either 16-bit Thumb-1 or
9981
mixed 16/32-bit Thumb-2 instructions based on the @option{-mcpu=@var{name}}
9982
and @option{-march=@var{name}} options.  This option is not passed to the
9983
assembler. If you want to force assembler files to be interpreted as Thumb code,
9984
either add a @samp{.thumb} directive to the source or pass the @option{-mthumb}
9985
option directly to the assembler by prefixing it with @option{-Wa}.
9986
 
9987
@item -mtpcs-frame
9988
@opindex mtpcs-frame
9989
Generate a stack frame that is compliant with the Thumb Procedure Call
9990
Standard for all non-leaf functions.  (A leaf function is one that does
9991
not call any other functions.)  The default is @option{-mno-tpcs-frame}.
9992
 
9993
@item -mtpcs-leaf-frame
9994
@opindex mtpcs-leaf-frame
9995
Generate a stack frame that is compliant with the Thumb Procedure Call
9996
Standard for all leaf functions.  (A leaf function is one that does
9997
not call any other functions.)  The default is @option{-mno-apcs-leaf-frame}.
9998
 
9999
@item -mcallee-super-interworking
10000
@opindex mcallee-super-interworking
10001
Gives all externally visible functions in the file being compiled an ARM
10002
instruction set header which switches to Thumb mode before executing the
10003
rest of the function.  This allows these functions to be called from
10004
non-interworking code.  This option is not valid in AAPCS configurations
10005
because interworking is enabled by default.
10006
 
10007
@item -mcaller-super-interworking
10008
@opindex mcaller-super-interworking
10009
Allows calls via function pointers (including virtual functions) to
10010
execute correctly regardless of whether the target code has been
10011
compiled for interworking or not.  There is a small overhead in the cost
10012
of executing a function pointer if this option is enabled.  This option
10013
is not valid in AAPCS configurations because interworking is enabled
10014
by default.
10015
 
10016
@item -mtp=@var{name}
10017
@opindex mtp
10018
Specify the access model for the thread local storage pointer.  The valid
10019
models are @option{soft}, which generates calls to @code{__aeabi_read_tp},
10020
@option{cp15}, which fetches the thread pointer from @code{cp15} directly
10021
(supported in the arm6k architecture), and @option{auto}, which uses the
10022
best available method for the selected processor.  The default setting is
10023
@option{auto}.
10024
 
10025
@item -mword-relocations
10026
@opindex mword-relocations
10027
Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
10028
This is enabled by default on targets (uClinux, SymbianOS) where the runtime
10029
loader imposes this restriction, and when @option{-fpic} or @option{-fPIC}
10030
is specified.
10031
 
10032
@end table
10033
 
10034
@node AVR Options
10035
@subsection AVR Options
10036
@cindex AVR Options
10037
 
10038
These options are defined for AVR implementations:
10039
 
10040
@table @gcctabopt
10041
@item -mmcu=@var{mcu}
10042
@opindex mmcu
10043
Specify ATMEL AVR instruction set or MCU type.
10044
 
10045
Instruction set avr1 is for the minimal AVR core, not supported by the C
10046
compiler, only for assembler programs (MCU types: at90s1200, attiny10,
10047
attiny11, attiny12, attiny15, attiny28).
10048
 
10049
Instruction set avr2 (default) is for the classic AVR core with up to
10050
8K program memory space (MCU types: at90s2313, at90s2323, attiny22,
10051
at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
10052
at90c8534, at90s8535).
10053
 
10054
Instruction set avr3 is for the classic AVR core with up to 128K program
10055
memory space (MCU types: atmega103, atmega603, at43usb320, at76c711).
10056
 
10057
Instruction set avr4 is for the enhanced AVR core with up to 8K program
10058
memory space (MCU types: atmega8, atmega83, atmega85).
10059
 
10060
Instruction set avr5 is for the enhanced AVR core with up to 128K program
10061
memory space (MCU types: atmega16, atmega161, atmega163, atmega32, atmega323,
10062
atmega64, atmega128, at43usb355, at94k).
10063
 
10064
@item -mno-interrupts
10065
@opindex mno-interrupts
10066
Generated code is not compatible with hardware interrupts.
10067
Code size will be smaller.
10068
 
10069
@item -mcall-prologues
10070
@opindex mcall-prologues
10071
Functions prologues/epilogues expanded as call to appropriate
10072
subroutines.  Code size will be smaller.
10073
 
10074
@item -mtiny-stack
10075
@opindex mtiny-stack
10076
Change only the low 8 bits of the stack pointer.
10077
 
10078
@item -mint8
10079
@opindex mint8
10080
Assume int to be 8 bit integer.  This affects the sizes of all types: A
10081
char will be 1 byte, an int will be 1 byte, a long will be 2 bytes
10082
and long long will be 4 bytes.  Please note that this option does not
10083
comply to the C standards, but it will provide you with smaller code
10084
size.
10085
@end table
10086
 
10087
@node Blackfin Options
10088
@subsection Blackfin Options
10089
@cindex Blackfin Options
10090
 
10091
@table @gcctabopt
10092
@item -mcpu=@var{cpu}@r{[}-@var{sirevision}@r{]}
10093
@opindex mcpu=
10094
Specifies the name of the target Blackfin processor.  Currently, @var{cpu}
10095
can be one of @samp{bf512}, @samp{bf514}, @samp{bf516}, @samp{bf518},
10096
@samp{bf522}, @samp{bf523}, @samp{bf524}, @samp{bf525}, @samp{bf526},
10097
@samp{bf527}, @samp{bf531}, @samp{bf532}, @samp{bf533},
10098
@samp{bf534}, @samp{bf536}, @samp{bf537}, @samp{bf538}, @samp{bf539},
10099
@samp{bf542}, @samp{bf544}, @samp{bf547}, @samp{bf548}, @samp{bf549},
10100
@samp{bf542m}, @samp{bf544m}, @samp{bf547m}, @samp{bf548m}, @samp{bf549m},
10101
@samp{bf561}.
10102
The optional @var{sirevision} specifies the silicon revision of the target
10103
Blackfin processor.  Any workarounds available for the targeted silicon revision
10104
will be enabled.  If @var{sirevision} is @samp{none}, no workarounds are enabled.
10105
If @var{sirevision} is @samp{any}, all workarounds for the targeted processor
10106
will be enabled.  The @code{__SILICON_REVISION__} macro is defined to two
10107
hexadecimal digits representing the major and minor numbers in the silicon
10108
revision.  If @var{sirevision} is @samp{none}, the @code{__SILICON_REVISION__}
10109
is not defined.  If @var{sirevision} is @samp{any}, the
10110
@code{__SILICON_REVISION__} is defined to be @code{0xffff}.
10111
If this optional @var{sirevision} is not used, GCC assumes the latest known
10112
silicon revision of the targeted Blackfin processor.
10113
 
10114
Support for @samp{bf561} is incomplete.  For @samp{bf561},
10115
Only the processor macro is defined.
10116
Without this option, @samp{bf532} is used as the processor by default.
10117
The corresponding predefined processor macros for @var{cpu} is to
10118
be defined.  And for @samp{bfin-elf} toolchain, this causes the hardware BSP
10119
provided by libgloss to be linked in if @option{-msim} is not given.
10120
 
10121
@item -msim
10122
@opindex msim
10123
Specifies that the program will be run on the simulator.  This causes
10124
the simulator BSP provided by libgloss to be linked in.  This option
10125
has effect only for @samp{bfin-elf} toolchain.
10126
Certain other options, such as @option{-mid-shared-library} and
10127
@option{-mfdpic}, imply @option{-msim}.
10128
 
10129
@item -momit-leaf-frame-pointer
10130
@opindex momit-leaf-frame-pointer
10131
Don't keep the frame pointer in a register for leaf functions.  This
10132
avoids the instructions to save, set up and restore frame pointers and
10133
makes an extra register available in leaf functions.  The option
10134
@option{-fomit-frame-pointer} removes the frame pointer for all functions
10135
which might make debugging harder.
10136
 
10137
@item -mspecld-anomaly
10138
@opindex mspecld-anomaly
10139
When enabled, the compiler will ensure that the generated code does not
10140
contain speculative loads after jump instructions. If this option is used,
10141
@code{__WORKAROUND_SPECULATIVE_LOADS} is defined.
10142
 
10143
@item -mno-specld-anomaly
10144
@opindex mno-specld-anomaly
10145
Don't generate extra code to prevent speculative loads from occurring.
10146
 
10147
@item -mcsync-anomaly
10148
@opindex mcsync-anomaly
10149
When enabled, the compiler will ensure that the generated code does not
10150
contain CSYNC or SSYNC instructions too soon after conditional branches.
10151
If this option is used, @code{__WORKAROUND_SPECULATIVE_SYNCS} is defined.
10152
 
10153
@item -mno-csync-anomaly
10154
@opindex mno-csync-anomaly
10155
Don't generate extra code to prevent CSYNC or SSYNC instructions from
10156
occurring too soon after a conditional branch.
10157
 
10158
@item -mlow-64k
10159
@opindex mlow-64k
10160
When enabled, the compiler is free to take advantage of the knowledge that
10161
the entire program fits into the low 64k of memory.
10162
 
10163
@item -mno-low-64k
10164
@opindex mno-low-64k
10165
Assume that the program is arbitrarily large.  This is the default.
10166
 
10167
@item -mstack-check-l1
10168
@opindex mstack-check-l1
10169
Do stack checking using information placed into L1 scratchpad memory by the
10170
uClinux kernel.
10171
 
10172
@item -mid-shared-library
10173
@opindex mid-shared-library
10174
Generate code that supports shared libraries via the library ID method.
10175
This allows for execute in place and shared libraries in an environment
10176
without virtual memory management.  This option implies @option{-fPIC}.
10177
With a @samp{bfin-elf} target, this option implies @option{-msim}.
10178
 
10179
@item -mno-id-shared-library
10180
@opindex mno-id-shared-library
10181
Generate code that doesn't assume ID based shared libraries are being used.
10182
This is the default.
10183
 
10184
@item -mleaf-id-shared-library
10185
@opindex mleaf-id-shared-library
10186
Generate code that supports shared libraries via the library ID method,
10187
but assumes that this library or executable won't link against any other
10188
ID shared libraries.  That allows the compiler to use faster code for jumps
10189
and calls.
10190
 
10191
@item -mno-leaf-id-shared-library
10192
@opindex mno-leaf-id-shared-library
10193
Do not assume that the code being compiled won't link against any ID shared
10194
libraries.  Slower code will be generated for jump and call insns.
10195
 
10196
@item -mshared-library-id=n
10197
@opindex mshared-library-id
10198
Specified the identification number of the ID based shared library being
10199
compiled.  Specifying a value of 0 will generate more compact code, specifying
10200
other values will force the allocation of that number to the current
10201
library but is no more space or time efficient than omitting this option.
10202
 
10203
@item -msep-data
10204
@opindex msep-data
10205
Generate code that allows the data segment to be located in a different
10206
area of memory from the text segment.  This allows for execute in place in
10207
an environment without virtual memory management by eliminating relocations
10208
against the text section.
10209
 
10210
@item -mno-sep-data
10211
@opindex mno-sep-data
10212
Generate code that assumes that the data segment follows the text segment.
10213
This is the default.
10214
 
10215
@item -mlong-calls
10216
@itemx -mno-long-calls
10217
@opindex mlong-calls
10218
@opindex mno-long-calls
10219
Tells the compiler to perform function calls by first loading the
10220
address of the function into a register and then performing a subroutine
10221
call on this register.  This switch is needed if the target function
10222
will lie outside of the 24 bit addressing range of the offset based
10223
version of subroutine call instruction.
10224
 
10225
This feature is not enabled by default.  Specifying
10226
@option{-mno-long-calls} will restore the default behavior.  Note these
10227
switches have no effect on how the compiler generates code to handle
10228
function calls via function pointers.
10229
 
10230
@item -mfast-fp
10231
@opindex mfast-fp
10232
Link with the fast floating-point library. This library relaxes some of
10233
the IEEE floating-point standard's rules for checking inputs against
10234
Not-a-Number (NAN), in the interest of performance.
10235
 
10236
@item -minline-plt
10237
@opindex minline-plt
10238
Enable inlining of PLT entries in function calls to functions that are
10239
not known to bind locally.  It has no effect without @option{-mfdpic}.
10240
 
10241
@item -mmulticore
10242
@opindex mmulticore
10243
Build standalone application for multicore Blackfin processor. Proper
10244
start files and link scripts will be used to support multicore.
10245
This option defines @code{__BFIN_MULTICORE}. It can only be used with
10246
@option{-mcpu=bf561@r{[}-@var{sirevision}@r{]}}. It can be used with
10247
@option{-mcorea} or @option{-mcoreb}. If it's used without
10248
@option{-mcorea} or @option{-mcoreb}, single application/dual core
10249
programming model is used. In this model, the main function of Core B
10250
should be named as coreb_main. If it's used with @option{-mcorea} or
10251
@option{-mcoreb}, one application per core programming model is used.
10252
If this option is not used, single core application programming
10253
model is used.
10254
 
10255
@item -mcorea
10256
@opindex mcorea
10257
Build standalone application for Core A of BF561 when using
10258
one application per core programming model. Proper start files
10259
and link scripts will be used to support Core A. This option
10260
defines @code{__BFIN_COREA}. It must be used with @option{-mmulticore}.
10261
 
10262
@item -mcoreb
10263
@opindex mcoreb
10264
Build standalone application for Core B of BF561 when using
10265
one application per core programming model. Proper start files
10266
and link scripts will be used to support Core B. This option
10267
defines @code{__BFIN_COREB}. When this option is used, coreb_main
10268
should be used instead of main. It must be used with
10269
@option{-mmulticore}.
10270
 
10271
@item -msdram
10272
@opindex msdram
10273
Build standalone application for SDRAM. Proper start files and
10274
link scripts will be used to put the application into SDRAM.
10275
Loader should initialize SDRAM before loading the application
10276
into SDRAM. This option defines @code{__BFIN_SDRAM}.
10277
 
10278
@item -micplb
10279
@opindex micplb
10280
Assume that ICPLBs are enabled at runtime.  This has an effect on certain
10281
anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
10282
are enabled; for standalone applications the default is off.
10283
@end table
10284
 
10285
@node CRIS Options
10286
@subsection CRIS Options
10287
@cindex CRIS Options
10288
 
10289
These options are defined specifically for the CRIS ports.
10290
 
10291
@table @gcctabopt
10292
@item -march=@var{architecture-type}
10293
@itemx -mcpu=@var{architecture-type}
10294
@opindex march
10295
@opindex mcpu
10296
Generate code for the specified architecture.  The choices for
10297
@var{architecture-type} are @samp{v3}, @samp{v8} and @samp{v10} for
10298
respectively ETRAX@w{ }4, ETRAX@w{ }100, and ETRAX@w{ }100@w{ }LX@.
10299
Default is @samp{v0} except for cris-axis-linux-gnu, where the default is
10300
@samp{v10}.
10301
 
10302
@item -mtune=@var{architecture-type}
10303
@opindex mtune
10304
Tune to @var{architecture-type} everything applicable about the generated
10305
code, except for the ABI and the set of available instructions.  The
10306
choices for @var{architecture-type} are the same as for
10307
@option{-march=@var{architecture-type}}.
10308
 
10309
@item -mmax-stack-frame=@var{n}
10310
@opindex mmax-stack-frame
10311
Warn when the stack frame of a function exceeds @var{n} bytes.
10312
 
10313
@item -metrax4
10314
@itemx -metrax100
10315
@opindex metrax4
10316
@opindex metrax100
10317
The options @option{-metrax4} and @option{-metrax100} are synonyms for
10318
@option{-march=v3} and @option{-march=v8} respectively.
10319
 
10320
@item -mmul-bug-workaround
10321
@itemx -mno-mul-bug-workaround
10322
@opindex mmul-bug-workaround
10323
@opindex mno-mul-bug-workaround
10324
Work around a bug in the @code{muls} and @code{mulu} instructions for CPU
10325
models where it applies.  This option is active by default.
10326
 
10327
@item -mpdebug
10328
@opindex mpdebug
10329
Enable CRIS-specific verbose debug-related information in the assembly
10330
code.  This option also has the effect to turn off the @samp{#NO_APP}
10331
formatted-code indicator to the assembler at the beginning of the
10332
assembly file.
10333
 
10334
@item -mcc-init
10335
@opindex mcc-init
10336
Do not use condition-code results from previous instruction; always emit
10337
compare and test instructions before use of condition codes.
10338
 
10339
@item -mno-side-effects
10340
@opindex mno-side-effects
10341
Do not emit instructions with side-effects in addressing modes other than
10342
post-increment.
10343
 
10344
@item -mstack-align
10345
@itemx -mno-stack-align
10346
@itemx -mdata-align
10347
@itemx -mno-data-align
10348
@itemx -mconst-align
10349
@itemx -mno-const-align
10350
@opindex mstack-align
10351
@opindex mno-stack-align
10352
@opindex mdata-align
10353
@opindex mno-data-align
10354
@opindex mconst-align
10355
@opindex mno-const-align
10356
These options (no-options) arranges (eliminate arrangements) for the
10357
stack-frame, individual data and constants to be aligned for the maximum
10358
single data access size for the chosen CPU model.  The default is to
10359
arrange for 32-bit alignment.  ABI details such as structure layout are
10360
not affected by these options.
10361
 
10362
@item -m32-bit
10363
@itemx -m16-bit
10364
@itemx -m8-bit
10365
@opindex m32-bit
10366
@opindex m16-bit
10367
@opindex m8-bit
10368
Similar to the stack- data- and const-align options above, these options
10369
arrange for stack-frame, writable data and constants to all be 32-bit,
10370
16-bit or 8-bit aligned.  The default is 32-bit alignment.
10371
 
10372
@item -mno-prologue-epilogue
10373
@itemx -mprologue-epilogue
10374
@opindex mno-prologue-epilogue
10375
@opindex mprologue-epilogue
10376
With @option{-mno-prologue-epilogue}, the normal function prologue and
10377
epilogue that sets up the stack-frame are omitted and no return
10378
instructions or return sequences are generated in the code.  Use this
10379
option only together with visual inspection of the compiled code: no
10380
warnings or errors are generated when call-saved registers must be saved,
10381
or storage for local variable needs to be allocated.
10382
 
10383
@item -mno-gotplt
10384
@itemx -mgotplt
10385
@opindex mno-gotplt
10386
@opindex mgotplt
10387
With @option{-fpic} and @option{-fPIC}, don't generate (do generate)
10388
instruction sequences that load addresses for functions from the PLT part
10389
of the GOT rather than (traditional on other architectures) calls to the
10390
PLT@.  The default is @option{-mgotplt}.
10391
 
10392
@item -melf
10393
@opindex melf
10394
Legacy no-op option only recognized with the cris-axis-elf and
10395
cris-axis-linux-gnu targets.
10396
 
10397
@item -mlinux
10398
@opindex mlinux
10399
Legacy no-op option only recognized with the cris-axis-linux-gnu target.
10400
 
10401
@item -sim
10402
@opindex sim
10403
This option, recognized for the cris-axis-elf arranges
10404
to link with input-output functions from a simulator library.  Code,
10405
initialized data and zero-initialized data are allocated consecutively.
10406
 
10407
@item -sim2
10408
@opindex sim2
10409
Like @option{-sim}, but pass linker options to locate initialized data at
10410
0x40000000 and zero-initialized data at 0x80000000.
10411
@end table
10412
 
10413
@node CRX Options
10414
@subsection CRX Options
10415
@cindex CRX Options
10416
 
10417
These options are defined specifically for the CRX ports.
10418
 
10419
@table @gcctabopt
10420
 
10421
@item -mmac
10422
@opindex mmac
10423
Enable the use of multiply-accumulate instructions. Disabled by default.
10424
 
10425
@item -mpush-args
10426
@opindex mpush-args
10427
Push instructions will be used to pass outgoing arguments when functions
10428
are called. Enabled by default.
10429
@end table
10430
 
10431
@node Darwin Options
10432
@subsection Darwin Options
10433
@cindex Darwin options
10434
 
10435
These options are defined for all architectures running the Darwin operating
10436
system.
10437
 
10438
FSF GCC on Darwin does not create ``fat'' object files; it will create
10439
an object file for the single architecture that it was built to
10440
target.  Apple's GCC on Darwin does create ``fat'' files if multiple
10441
@option{-arch} options are used; it does so by running the compiler or
10442
linker multiple times and joining the results together with
10443
@file{lipo}.
10444
 
10445
The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or
10446
@samp{i686}) is determined by the flags that specify the ISA
10447
that GCC is targetting, like @option{-mcpu} or @option{-march}.  The
10448
@option{-force_cpusubtype_ALL} option can be used to override this.
10449
 
10450
The Darwin tools vary in their behavior when presented with an ISA
10451
mismatch.  The assembler, @file{as}, will only permit instructions to
10452
be used that are valid for the subtype of the file it is generating,
10453
so you cannot put 64-bit instructions in a @samp{ppc750} object file.
10454
The linker for shared libraries, @file{/usr/bin/libtool}, will fail
10455
and print an error if asked to create a shared library with a less
10456
restrictive subtype than its input files (for instance, trying to put
10457
a @samp{ppc970} object file in a @samp{ppc7400} library).  The linker
10458
for executables, @file{ld}, will quietly give the executable the most
10459
restrictive subtype of any of its input files.
10460
 
10461
@table @gcctabopt
10462
@item -F@var{dir}
10463
@opindex F
10464
Add the framework directory @var{dir} to the head of the list of
10465
directories to be searched for header files.  These directories are
10466
interleaved with those specified by @option{-I} options and are
10467
scanned in a left-to-right order.
10468
 
10469
A framework directory is a directory with frameworks in it.  A
10470
framework is a directory with a @samp{"Headers"} and/or
10471
@samp{"PrivateHeaders"} directory contained directly in it that ends
10472
in @samp{".framework"}.  The name of a framework is the name of this
10473
directory excluding the @samp{".framework"}.  Headers associated with
10474
the framework are found in one of those two directories, with
10475
@samp{"Headers"} being searched first.  A subframework is a framework
10476
directory that is in a framework's @samp{"Frameworks"} directory.
10477
Includes of subframework headers can only appear in a header of a
10478
framework that contains the subframework, or in a sibling subframework
10479
header.  Two subframeworks are siblings if they occur in the same
10480
framework.  A subframework should not have the same name as a
10481
framework, a warning will be issued if this is violated.  Currently a
10482
subframework cannot have subframeworks, in the future, the mechanism
10483
may be extended to support this.  The standard frameworks can be found
10484
in @samp{"/System/Library/Frameworks"} and
10485
@samp{"/Library/Frameworks"}.  An example include looks like
10486
@code{#include <Framework/header.h>}, where @samp{Framework} denotes
10487
the name of the framework and header.h is found in the
10488
@samp{"PrivateHeaders"} or @samp{"Headers"} directory.
10489
 
10490
@item -iframework@var{dir}
10491
@opindex iframework
10492
Like @option{-F} except the directory is a treated as a system
10493
directory.  The main difference between this @option{-iframework} and
10494
@option{-F} is that with @option{-iframework} the compiler does not
10495
warn about constructs contained within header files found via
10496
@var{dir}.  This option is valid only for the C family of languages.
10497
 
10498
@item -gused
10499
@opindex gused
10500
Emit debugging information for symbols that are used.  For STABS
10501
debugging format, this enables @option{-feliminate-unused-debug-symbols}.
10502
This is by default ON@.
10503
 
10504
@item -gfull
10505
@opindex gfull
10506
Emit debugging information for all symbols and types.
10507
 
10508
@item -mmacosx-version-min=@var{version}
10509
The earliest version of MacOS X that this executable will run on
10510
is @var{version}.  Typical values of @var{version} include @code{10.1},
10511
@code{10.2}, and @code{10.3.9}.
10512
 
10513
If the compiler was built to use the system's headers by default,
10514
then the default for this option is the system version on which the
10515
compiler is running, otherwise the default is to make choices which
10516
are compatible with as many systems and code bases as possible.
10517
 
10518
@item -mkernel
10519
@opindex mkernel
10520
Enable kernel development mode.  The @option{-mkernel} option sets
10521
@option{-static}, @option{-fno-common}, @option{-fno-cxa-atexit},
10522
@option{-fno-exceptions}, @option{-fno-non-call-exceptions},
10523
@option{-fapple-kext}, @option{-fno-weak} and @option{-fno-rtti} where
10524
applicable.  This mode also sets @option{-mno-altivec},
10525
@option{-msoft-float}, @option{-fno-builtin} and
10526
@option{-mlong-branch} for PowerPC targets.
10527
 
10528
@item -mone-byte-bool
10529
@opindex mone-byte-bool
10530
Override the defaults for @samp{bool} so that @samp{sizeof(bool)==1}.
10531
By default @samp{sizeof(bool)} is @samp{4} when compiling for
10532
Darwin/PowerPC and @samp{1} when compiling for Darwin/x86, so this
10533
option has no effect on x86.
10534
 
10535
@strong{Warning:} The @option{-mone-byte-bool} switch causes GCC
10536
to generate code that is not binary compatible with code generated
10537
without that switch.  Using this switch may require recompiling all
10538
other modules in a program, including system libraries.  Use this
10539
switch to conform to a non-default data model.
10540
 
10541
@item -mfix-and-continue
10542
@itemx -ffix-and-continue
10543
@itemx -findirect-data
10544
@opindex mfix-and-continue
10545
@opindex ffix-and-continue
10546
@opindex findirect-data
10547
Generate code suitable for fast turn around development.  Needed to
10548
enable gdb to dynamically load @code{.o} files into already running
10549
programs.  @option{-findirect-data} and @option{-ffix-and-continue}
10550
are provided for backwards compatibility.
10551
 
10552
@item -all_load
10553
@opindex all_load
10554
Loads all members of static archive libraries.
10555
See man ld(1) for more information.
10556
 
10557
@item -arch_errors_fatal
10558
@opindex arch_errors_fatal
10559
Cause the errors having to do with files that have the wrong architecture
10560
to be fatal.
10561
 
10562
@item -bind_at_load
10563
@opindex bind_at_load
10564
Causes the output file to be marked such that the dynamic linker will
10565
bind all undefined references when the file is loaded or launched.
10566
 
10567
@item -bundle
10568
@opindex bundle
10569
Produce a Mach-o bundle format file.
10570
See man ld(1) for more information.
10571
 
10572
@item -bundle_loader @var{executable}
10573
@opindex bundle_loader
10574
This option specifies the @var{executable} that will be loading the build
10575
output file being linked.  See man ld(1) for more information.
10576
 
10577
@item -dynamiclib
10578
@opindex dynamiclib
10579
When passed this option, GCC will produce a dynamic library instead of
10580
an executable when linking, using the Darwin @file{libtool} command.
10581
 
10582
@item -force_cpusubtype_ALL
10583
@opindex force_cpusubtype_ALL
10584
This causes GCC's output file to have the @var{ALL} subtype, instead of
10585
one controlled by the @option{-mcpu} or @option{-march} option.
10586
 
10587
@item -allowable_client  @var{client_name}
10588
@itemx -client_name
10589
@itemx -compatibility_version
10590
@itemx -current_version
10591
@itemx -dead_strip
10592
@itemx -dependency-file
10593
@itemx -dylib_file
10594
@itemx -dylinker_install_name
10595
@itemx -dynamic
10596
@itemx -exported_symbols_list
10597
@itemx -filelist
10598
@itemx -flat_namespace
10599
@itemx -force_flat_namespace
10600
@itemx -headerpad_max_install_names
10601
@itemx -image_base
10602
@itemx -init
10603
@itemx -install_name
10604
@itemx -keep_private_externs
10605
@itemx -multi_module
10606
@itemx -multiply_defined
10607
@itemx -multiply_defined_unused
10608
@itemx -noall_load
10609
@itemx -no_dead_strip_inits_and_terms
10610
@itemx -nofixprebinding
10611
@itemx -nomultidefs
10612
@itemx -noprebind
10613
@itemx -noseglinkedit
10614
@itemx -pagezero_size
10615
@itemx -prebind
10616
@itemx -prebind_all_twolevel_modules
10617
@itemx -private_bundle
10618
@itemx -read_only_relocs
10619
@itemx -sectalign
10620
@itemx -sectobjectsymbols
10621
@itemx -whyload
10622
@itemx -seg1addr
10623
@itemx -sectcreate
10624
@itemx -sectobjectsymbols
10625
@itemx -sectorder
10626
@itemx -segaddr
10627
@itemx -segs_read_only_addr
10628
@itemx -segs_read_write_addr
10629
@itemx -seg_addr_table
10630
@itemx -seg_addr_table_filename
10631
@itemx -seglinkedit
10632
@itemx -segprot
10633
@itemx -segs_read_only_addr
10634
@itemx -segs_read_write_addr
10635
@itemx -single_module
10636
@itemx -static
10637
@itemx -sub_library
10638
@itemx -sub_umbrella
10639
@itemx -twolevel_namespace
10640
@itemx -umbrella
10641
@itemx -undefined
10642
@itemx -unexported_symbols_list
10643
@itemx -weak_reference_mismatches
10644
@itemx -whatsloaded
10645
@opindex allowable_client
10646
@opindex client_name
10647
@opindex compatibility_version
10648
@opindex current_version
10649
@opindex dead_strip
10650
@opindex dependency-file
10651
@opindex dylib_file
10652
@opindex dylinker_install_name
10653
@opindex dynamic
10654
@opindex exported_symbols_list
10655
@opindex filelist
10656
@opindex flat_namespace
10657
@opindex force_flat_namespace
10658
@opindex headerpad_max_install_names
10659
@opindex image_base
10660
@opindex init
10661
@opindex install_name
10662
@opindex keep_private_externs
10663
@opindex multi_module
10664
@opindex multiply_defined
10665
@opindex multiply_defined_unused
10666
@opindex noall_load
10667
@opindex no_dead_strip_inits_and_terms
10668
@opindex nofixprebinding
10669
@opindex nomultidefs
10670
@opindex noprebind
10671
@opindex noseglinkedit
10672
@opindex pagezero_size
10673
@opindex prebind
10674
@opindex prebind_all_twolevel_modules
10675
@opindex private_bundle
10676
@opindex read_only_relocs
10677
@opindex sectalign
10678
@opindex sectobjectsymbols
10679
@opindex whyload
10680
@opindex seg1addr
10681
@opindex sectcreate
10682
@opindex sectobjectsymbols
10683
@opindex sectorder
10684
@opindex segaddr
10685
@opindex segs_read_only_addr
10686
@opindex segs_read_write_addr
10687
@opindex seg_addr_table
10688
@opindex seg_addr_table_filename
10689
@opindex seglinkedit
10690
@opindex segprot
10691
@opindex segs_read_only_addr
10692
@opindex segs_read_write_addr
10693
@opindex single_module
10694
@opindex static
10695
@opindex sub_library
10696
@opindex sub_umbrella
10697
@opindex twolevel_namespace
10698
@opindex umbrella
10699
@opindex undefined
10700
@opindex unexported_symbols_list
10701
@opindex weak_reference_mismatches
10702
@opindex whatsloaded
10703
These options are passed to the Darwin linker.  The Darwin linker man page
10704
describes them in detail.
10705
@end table
10706
 
10707
@node DEC Alpha Options
10708
@subsection DEC Alpha Options
10709
 
10710
These @samp{-m} options are defined for the DEC Alpha implementations:
10711
 
10712
@table @gcctabopt
10713
@item -mno-soft-float
10714
@itemx -msoft-float
10715
@opindex mno-soft-float
10716
@opindex msoft-float
10717
Use (do not use) the hardware floating-point instructions for
10718
floating-point operations.  When @option{-msoft-float} is specified,
10719
functions in @file{libgcc.a} will be used to perform floating-point
10720
operations.  Unless they are replaced by routines that emulate the
10721
floating-point operations, or compiled in such a way as to call such
10722
emulations routines, these routines will issue floating-point
10723
operations.   If you are compiling for an Alpha without floating-point
10724
operations, you must ensure that the library is built so as not to call
10725
them.
10726
 
10727
Note that Alpha implementations without floating-point operations are
10728
required to have floating-point registers.
10729
 
10730
@item -mfp-reg
10731
@itemx -mno-fp-regs
10732
@opindex mfp-reg
10733
@opindex mno-fp-regs
10734
Generate code that uses (does not use) the floating-point register set.
10735
@option{-mno-fp-regs} implies @option{-msoft-float}.  If the floating-point
10736
register set is not used, floating point operands are passed in integer
10737
registers as if they were integers and floating-point results are passed
10738
in @code{$0} instead of @code{$f0}.  This is a non-standard calling sequence,
10739
so any function with a floating-point argument or return value called by code
10740
compiled with @option{-mno-fp-regs} must also be compiled with that
10741
option.
10742
 
10743
A typical use of this option is building a kernel that does not use,
10744
and hence need not save and restore, any floating-point registers.
10745
 
10746
@item -mieee
10747
@opindex mieee
10748
The Alpha architecture implements floating-point hardware optimized for
10749
maximum performance.  It is mostly compliant with the IEEE floating
10750
point standard.  However, for full compliance, software assistance is
10751
required.  This option generates code fully IEEE compliant code
10752
@emph{except} that the @var{inexact-flag} is not maintained (see below).
10753
If this option is turned on, the preprocessor macro @code{_IEEE_FP} is
10754
defined during compilation.  The resulting code is less efficient but is
10755
able to correctly support denormalized numbers and exceptional IEEE
10756
values such as not-a-number and plus/minus infinity.  Other Alpha
10757
compilers call this option @option{-ieee_with_no_inexact}.
10758
 
10759
@item -mieee-with-inexact
10760
@opindex mieee-with-inexact
10761
This is like @option{-mieee} except the generated code also maintains
10762
the IEEE @var{inexact-flag}.  Turning on this option causes the
10763
generated code to implement fully-compliant IEEE math.  In addition to
10764
@code{_IEEE_FP}, @code{_IEEE_FP_EXACT} is defined as a preprocessor
10765
macro.  On some Alpha implementations the resulting code may execute
10766
significantly slower than the code generated by default.  Since there is
10767
very little code that depends on the @var{inexact-flag}, you should
10768
normally not specify this option.  Other Alpha compilers call this
10769
option @option{-ieee_with_inexact}.
10770
 
10771
@item -mfp-trap-mode=@var{trap-mode}
10772
@opindex mfp-trap-mode
10773
This option controls what floating-point related traps are enabled.
10774
Other Alpha compilers call this option @option{-fptm @var{trap-mode}}.
10775
The trap mode can be set to one of four values:
10776
 
10777
@table @samp
10778
@item n
10779
This is the default (normal) setting.  The only traps that are enabled
10780
are the ones that cannot be disabled in software (e.g., division by zero
10781
trap).
10782
 
10783
@item u
10784
In addition to the traps enabled by @samp{n}, underflow traps are enabled
10785
as well.
10786
 
10787
@item su
10788
Like @samp{u}, but the instructions are marked to be safe for software
10789
completion (see Alpha architecture manual for details).
10790
 
10791
@item sui
10792
Like @samp{su}, but inexact traps are enabled as well.
10793
@end table
10794
 
10795
@item -mfp-rounding-mode=@var{rounding-mode}
10796
@opindex mfp-rounding-mode
10797
Selects the IEEE rounding mode.  Other Alpha compilers call this option
10798
@option{-fprm @var{rounding-mode}}.  The @var{rounding-mode} can be one
10799
of:
10800
 
10801
@table @samp
10802
@item n
10803
Normal IEEE rounding mode.  Floating point numbers are rounded towards
10804
the nearest machine number or towards the even machine number in case
10805
of a tie.
10806
 
10807
@item m
10808
Round towards minus infinity.
10809
 
10810
@item c
10811
Chopped rounding mode.  Floating point numbers are rounded towards zero.
10812
 
10813
@item d
10814
Dynamic rounding mode.  A field in the floating point control register
10815
(@var{fpcr}, see Alpha architecture reference manual) controls the
10816
rounding mode in effect.  The C library initializes this register for
10817
rounding towards plus infinity.  Thus, unless your program modifies the
10818
@var{fpcr}, @samp{d} corresponds to round towards plus infinity.
10819
@end table
10820
 
10821
@item -mtrap-precision=@var{trap-precision}
10822
@opindex mtrap-precision
10823
In the Alpha architecture, floating point traps are imprecise.  This
10824
means without software assistance it is impossible to recover from a
10825
floating trap and program execution normally needs to be terminated.
10826
GCC can generate code that can assist operating system trap handlers
10827
in determining the exact location that caused a floating point trap.
10828
Depending on the requirements of an application, different levels of
10829
precisions can be selected:
10830
 
10831
@table @samp
10832
@item p
10833
Program precision.  This option is the default and means a trap handler
10834
can only identify which program caused a floating point exception.
10835
 
10836
@item f
10837
Function precision.  The trap handler can determine the function that
10838
caused a floating point exception.
10839
 
10840
@item i
10841
Instruction precision.  The trap handler can determine the exact
10842
instruction that caused a floating point exception.
10843
@end table
10844
 
10845
Other Alpha compilers provide the equivalent options called
10846
@option{-scope_safe} and @option{-resumption_safe}.
10847
 
10848
@item -mieee-conformant
10849
@opindex mieee-conformant
10850
This option marks the generated code as IEEE conformant.  You must not
10851
use this option unless you also specify @option{-mtrap-precision=i} and either
10852
@option{-mfp-trap-mode=su} or @option{-mfp-trap-mode=sui}.  Its only effect
10853
is to emit the line @samp{.eflag 48} in the function prologue of the
10854
generated assembly file.  Under DEC Unix, this has the effect that
10855
IEEE-conformant math library routines will be linked in.
10856
 
10857
@item -mbuild-constants
10858
@opindex mbuild-constants
10859
Normally GCC examines a 32- or 64-bit integer constant to
10860
see if it can construct it from smaller constants in two or three
10861
instructions.  If it cannot, it will output the constant as a literal and
10862
generate code to load it from the data segment at runtime.
10863
 
10864
Use this option to require GCC to construct @emph{all} integer constants
10865
using code, even if it takes more instructions (the maximum is six).
10866
 
10867
You would typically use this option to build a shared library dynamic
10868
loader.  Itself a shared library, it must relocate itself in memory
10869
before it can find the variables and constants in its own data segment.
10870
 
10871
@item -malpha-as
10872
@itemx -mgas
10873
@opindex malpha-as
10874
@opindex mgas
10875
Select whether to generate code to be assembled by the vendor-supplied
10876
assembler (@option{-malpha-as}) or by the GNU assembler @option{-mgas}.
10877
 
10878
@item -mbwx
10879
@itemx -mno-bwx
10880
@itemx -mcix
10881
@itemx -mno-cix
10882
@itemx -mfix
10883
@itemx -mno-fix
10884
@itemx -mmax
10885
@itemx -mno-max
10886
@opindex mbwx
10887
@opindex mno-bwx
10888
@opindex mcix
10889
@opindex mno-cix
10890
@opindex mfix
10891
@opindex mno-fix
10892
@opindex mmax
10893
@opindex mno-max
10894
Indicate whether GCC should generate code to use the optional BWX,
10895
CIX, FIX and MAX instruction sets.  The default is to use the instruction
10896
sets supported by the CPU type specified via @option{-mcpu=} option or that
10897
of the CPU on which GCC was built if none was specified.
10898
 
10899
@item -mfloat-vax
10900
@itemx -mfloat-ieee
10901
@opindex mfloat-vax
10902
@opindex mfloat-ieee
10903
Generate code that uses (does not use) VAX F and G floating point
10904
arithmetic instead of IEEE single and double precision.
10905
 
10906
@item -mexplicit-relocs
10907
@itemx -mno-explicit-relocs
10908
@opindex mexplicit-relocs
10909
@opindex mno-explicit-relocs
10910
Older Alpha assemblers provided no way to generate symbol relocations
10911
except via assembler macros.  Use of these macros does not allow
10912
optimal instruction scheduling.  GNU binutils as of version 2.12
10913
supports a new syntax that allows the compiler to explicitly mark
10914
which relocations should apply to which instructions.  This option
10915
is mostly useful for debugging, as GCC detects the capabilities of
10916
the assembler when it is built and sets the default accordingly.
10917
 
10918
@item -msmall-data
10919
@itemx -mlarge-data
10920
@opindex msmall-data
10921
@opindex mlarge-data
10922
When @option{-mexplicit-relocs} is in effect, static data is
10923
accessed via @dfn{gp-relative} relocations.  When @option{-msmall-data}
10924
is used, objects 8 bytes long or smaller are placed in a @dfn{small data area}
10925
(the @code{.sdata} and @code{.sbss} sections) and are accessed via
10926
16-bit relocations off of the @code{$gp} register.  This limits the
10927
size of the small data area to 64KB, but allows the variables to be
10928
directly accessed via a single instruction.
10929
 
10930
The default is @option{-mlarge-data}.  With this option the data area
10931
is limited to just below 2GB@.  Programs that require more than 2GB of
10932
data must use @code{malloc} or @code{mmap} to allocate the data in the
10933
heap instead of in the program's data segment.
10934
 
10935
When generating code for shared libraries, @option{-fpic} implies
10936
@option{-msmall-data} and @option{-fPIC} implies @option{-mlarge-data}.
10937
 
10938
@item -msmall-text
10939
@itemx -mlarge-text
10940
@opindex msmall-text
10941
@opindex mlarge-text
10942
When @option{-msmall-text} is used, the compiler assumes that the
10943
code of the entire program (or shared library) fits in 4MB, and is
10944
thus reachable with a branch instruction.  When @option{-msmall-data}
10945
is used, the compiler can assume that all local symbols share the
10946
same @code{$gp} value, and thus reduce the number of instructions
10947
required for a function call from 4 to 1.
10948
 
10949
The default is @option{-mlarge-text}.
10950
 
10951
@item -mcpu=@var{cpu_type}
10952
@opindex mcpu
10953
Set the instruction set and instruction scheduling parameters for
10954
machine type @var{cpu_type}.  You can specify either the @samp{EV}
10955
style name or the corresponding chip number.  GCC supports scheduling
10956
parameters for the EV4, EV5 and EV6 family of processors and will
10957
choose the default values for the instruction set from the processor
10958
you specify.  If you do not specify a processor type, GCC will default
10959
to the processor on which the compiler was built.
10960
 
10961
Supported values for @var{cpu_type} are
10962
 
10963
@table @samp
10964
@item ev4
10965
@itemx ev45
10966
@itemx 21064
10967
Schedules as an EV4 and has no instruction set extensions.
10968
 
10969
@item ev5
10970
@itemx 21164
10971
Schedules as an EV5 and has no instruction set extensions.
10972
 
10973
@item ev56
10974
@itemx 21164a
10975
Schedules as an EV5 and supports the BWX extension.
10976
 
10977
@item pca56
10978
@itemx 21164pc
10979
@itemx 21164PC
10980
Schedules as an EV5 and supports the BWX and MAX extensions.
10981
 
10982
@item ev6
10983
@itemx 21264
10984
Schedules as an EV6 and supports the BWX, FIX, and MAX extensions.
10985
 
10986
@item ev67
10987
@itemx 21264a
10988
Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX extensions.
10989
@end table
10990
 
10991
Native Linux/GNU toolchains also support the value @samp{native},
10992
which selects the best architecture option for the host processor.
10993
@option{-mcpu=native} has no effect if GCC does not recognize
10994
the processor.
10995
 
10996
@item -mtune=@var{cpu_type}
10997
@opindex mtune
10998
Set only the instruction scheduling parameters for machine type
10999
@var{cpu_type}.  The instruction set is not changed.
11000
 
11001
Native Linux/GNU toolchains also support the value @samp{native},
11002
which selects the best architecture option for the host processor.
11003
@option{-mtune=native} has no effect if GCC does not recognize
11004
the processor.
11005
 
11006
@item -mmemory-latency=@var{time}
11007
@opindex mmemory-latency
11008
Sets the latency the scheduler should assume for typical memory
11009
references as seen by the application.  This number is highly
11010
dependent on the memory access patterns used by the application
11011
and the size of the external cache on the machine.
11012
 
11013
Valid options for @var{time} are
11014
 
11015
@table @samp
11016
@item @var{number}
11017
A decimal number representing clock cycles.
11018
 
11019
@item L1
11020
@itemx L2
11021
@itemx L3
11022
@itemx main
11023
The compiler contains estimates of the number of clock cycles for
11024
``typical'' EV4 & EV5 hardware for the Level 1, 2 & 3 caches
11025
(also called Dcache, Scache, and Bcache), as well as to main memory.
11026
Note that L3 is only valid for EV5.
11027
 
11028
@end table
11029
@end table
11030
 
11031
@node DEC Alpha/VMS Options
11032
@subsection DEC Alpha/VMS Options
11033
 
11034
These @samp{-m} options are defined for the DEC Alpha/VMS implementations:
11035
 
11036
@table @gcctabopt
11037
@item -mvms-return-codes
11038
@opindex mvms-return-codes
11039
Return VMS condition codes from main.  The default is to return POSIX
11040
style condition (e.g.@: error) codes.
11041
 
11042
@item -mdebug-main=@var{prefix}
11043
@opindex mdebug-main=@var{prefix}
11044
Flag the first routine whose name starts with @var{prefix} as the main
11045
routine for the debugger.
11046
 
11047
@item -mmalloc64
11048
@opindex mmalloc64
11049
Default to 64bit memory allocation routines.
11050
@end table
11051
 
11052
@node FR30 Options
11053
@subsection FR30 Options
11054
@cindex FR30 Options
11055
 
11056
These options are defined specifically for the FR30 port.
11057
 
11058
@table @gcctabopt
11059
 
11060
@item -msmall-model
11061
@opindex msmall-model
11062
Use the small address space model.  This can produce smaller code, but
11063
it does assume that all symbolic values and addresses will fit into a
11064
20-bit range.
11065
 
11066
@item -mno-lsim
11067
@opindex mno-lsim
11068
Assume that run-time support has been provided and so there is no need
11069
to include the simulator library (@file{libsim.a}) on the linker
11070
command line.
11071
 
11072
@end table
11073
 
11074
@node FRV Options
11075
@subsection FRV Options
11076
@cindex FRV Options
11077
 
11078
@table @gcctabopt
11079
@item -mgpr-32
11080
@opindex mgpr-32
11081
 
11082
Only use the first 32 general purpose registers.
11083
 
11084
@item -mgpr-64
11085
@opindex mgpr-64
11086
 
11087
Use all 64 general purpose registers.
11088
 
11089
@item -mfpr-32
11090
@opindex mfpr-32
11091
 
11092
Use only the first 32 floating point registers.
11093
 
11094
@item -mfpr-64
11095
@opindex mfpr-64
11096
 
11097
Use all 64 floating point registers
11098
 
11099
@item -mhard-float
11100
@opindex mhard-float
11101
 
11102
Use hardware instructions for floating point operations.
11103
 
11104
@item -msoft-float
11105
@opindex msoft-float
11106
 
11107
Use library routines for floating point operations.
11108
 
11109
@item -malloc-cc
11110
@opindex malloc-cc
11111
 
11112
Dynamically allocate condition code registers.
11113
 
11114
@item -mfixed-cc
11115
@opindex mfixed-cc
11116
 
11117
Do not try to dynamically allocate condition code registers, only
11118
use @code{icc0} and @code{fcc0}.
11119
 
11120
@item -mdword
11121
@opindex mdword
11122
 
11123
Change ABI to use double word insns.
11124
 
11125
@item -mno-dword
11126
@opindex mno-dword
11127
 
11128
Do not use double word instructions.
11129
 
11130
@item -mdouble
11131
@opindex mdouble
11132
 
11133
Use floating point double instructions.
11134
 
11135
@item -mno-double
11136
@opindex mno-double
11137
 
11138
Do not use floating point double instructions.
11139
 
11140
@item -mmedia
11141
@opindex mmedia
11142
 
11143
Use media instructions.
11144
 
11145
@item -mno-media
11146
@opindex mno-media
11147
 
11148
Do not use media instructions.
11149
 
11150
@item -mmuladd
11151
@opindex mmuladd
11152
 
11153
Use multiply and add/subtract instructions.
11154
 
11155
@item -mno-muladd
11156
@opindex mno-muladd
11157
 
11158
Do not use multiply and add/subtract instructions.
11159
 
11160
@item -mfdpic
11161
@opindex mfdpic
11162
 
11163
Select the FDPIC ABI, that uses function descriptors to represent
11164
pointers to functions.  Without any PIC/PIE-related options, it
11165
implies @option{-fPIE}.  With @option{-fpic} or @option{-fpie}, it
11166
assumes GOT entries and small data are within a 12-bit range from the
11167
GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
11168
are computed with 32 bits.
11169
With a @samp{bfin-elf} target, this option implies @option{-msim}.
11170
 
11171
@item -minline-plt
11172
@opindex minline-plt
11173
 
11174
Enable inlining of PLT entries in function calls to functions that are
11175
not known to bind locally.  It has no effect without @option{-mfdpic}.
11176
It's enabled by default if optimizing for speed and compiling for
11177
shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
11178
optimization option such as @option{-O3} or above is present in the
11179
command line.
11180
 
11181
@item -mTLS
11182
@opindex mTLS
11183
 
11184
Assume a large TLS segment when generating thread-local code.
11185
 
11186
@item -mtls
11187
@opindex mtls
11188
 
11189
Do not assume a large TLS segment when generating thread-local code.
11190
 
11191
@item -mgprel-ro
11192
@opindex mgprel-ro
11193
 
11194
Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
11195
that is known to be in read-only sections.  It's enabled by default,
11196
except for @option{-fpic} or @option{-fpie}: even though it may help
11197
make the global offset table smaller, it trades 1 instruction for 4.
11198
With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
11199
one of which may be shared by multiple symbols, and it avoids the need
11200
for a GOT entry for the referenced symbol, so it's more likely to be a
11201
win.  If it is not, @option{-mno-gprel-ro} can be used to disable it.
11202
 
11203
@item -multilib-library-pic
11204
@opindex multilib-library-pic
11205
 
11206
Link with the (library, not FD) pic libraries.  It's implied by
11207
@option{-mlibrary-pic}, as well as by @option{-fPIC} and
11208
@option{-fpic} without @option{-mfdpic}.  You should never have to use
11209
it explicitly.
11210
 
11211
@item -mlinked-fp
11212
@opindex mlinked-fp
11213
 
11214
Follow the EABI requirement of always creating a frame pointer whenever
11215
a stack frame is allocated.  This option is enabled by default and can
11216
be disabled with @option{-mno-linked-fp}.
11217
 
11218
@item -mlong-calls
11219
@opindex mlong-calls
11220
 
11221
Use indirect addressing to call functions outside the current
11222
compilation unit.  This allows the functions to be placed anywhere
11223
within the 32-bit address space.
11224
 
11225
@item -malign-labels
11226
@opindex malign-labels
11227
 
11228
Try to align labels to an 8-byte boundary by inserting nops into the
11229
previous packet.  This option only has an effect when VLIW packing
11230
is enabled.  It doesn't create new packets; it merely adds nops to
11231
existing ones.
11232
 
11233
@item -mlibrary-pic
11234
@opindex mlibrary-pic
11235
 
11236
Generate position-independent EABI code.
11237
 
11238
@item -macc-4
11239
@opindex macc-4
11240
 
11241
Use only the first four media accumulator registers.
11242
 
11243
@item -macc-8
11244
@opindex macc-8
11245
 
11246
Use all eight media accumulator registers.
11247
 
11248
@item -mpack
11249
@opindex mpack
11250
 
11251
Pack VLIW instructions.
11252
 
11253
@item -mno-pack
11254
@opindex mno-pack
11255
 
11256
Do not pack VLIW instructions.
11257
 
11258
@item -mno-eflags
11259
@opindex mno-eflags
11260
 
11261
Do not mark ABI switches in e_flags.
11262
 
11263
@item -mcond-move
11264
@opindex mcond-move
11265
 
11266
Enable the use of conditional-move instructions (default).
11267
 
11268
This switch is mainly for debugging the compiler and will likely be removed
11269
in a future version.
11270
 
11271
@item -mno-cond-move
11272
@opindex mno-cond-move
11273
 
11274
Disable the use of conditional-move instructions.
11275
 
11276
This switch is mainly for debugging the compiler and will likely be removed
11277
in a future version.
11278
 
11279
@item -mscc
11280
@opindex mscc
11281
 
11282
Enable the use of conditional set instructions (default).
11283
 
11284
This switch is mainly for debugging the compiler and will likely be removed
11285
in a future version.
11286
 
11287
@item -mno-scc
11288
@opindex mno-scc
11289
 
11290
Disable the use of conditional set instructions.
11291
 
11292
This switch is mainly for debugging the compiler and will likely be removed
11293
in a future version.
11294
 
11295
@item -mcond-exec
11296
@opindex mcond-exec
11297
 
11298
Enable the use of conditional execution (default).
11299
 
11300
This switch is mainly for debugging the compiler and will likely be removed
11301
in a future version.
11302
 
11303
@item -mno-cond-exec
11304
@opindex mno-cond-exec
11305
 
11306
Disable the use of conditional execution.
11307
 
11308
This switch is mainly for debugging the compiler and will likely be removed
11309
in a future version.
11310
 
11311
@item -mvliw-branch
11312
@opindex mvliw-branch
11313
 
11314
Run a pass to pack branches into VLIW instructions (default).
11315
 
11316
This switch is mainly for debugging the compiler and will likely be removed
11317
in a future version.
11318
 
11319
@item -mno-vliw-branch
11320
@opindex mno-vliw-branch
11321
 
11322
Do not run a pass to pack branches into VLIW instructions.
11323
 
11324
This switch is mainly for debugging the compiler and will likely be removed
11325
in a future version.
11326
 
11327
@item -mmulti-cond-exec
11328
@opindex mmulti-cond-exec
11329
 
11330
Enable optimization of @code{&&} and @code{||} in conditional execution
11331
(default).
11332
 
11333
This switch is mainly for debugging the compiler and will likely be removed
11334
in a future version.
11335
 
11336
@item -mno-multi-cond-exec
11337
@opindex mno-multi-cond-exec
11338
 
11339
Disable optimization of @code{&&} and @code{||} in conditional execution.
11340
 
11341
This switch is mainly for debugging the compiler and will likely be removed
11342
in a future version.
11343
 
11344
@item -mnested-cond-exec
11345
@opindex mnested-cond-exec
11346
 
11347
Enable nested conditional execution optimizations (default).
11348
 
11349
This switch is mainly for debugging the compiler and will likely be removed
11350
in a future version.
11351
 
11352
@item -mno-nested-cond-exec
11353
@opindex mno-nested-cond-exec
11354
 
11355
Disable nested conditional execution optimizations.
11356
 
11357
This switch is mainly for debugging the compiler and will likely be removed
11358
in a future version.
11359
 
11360
@item -moptimize-membar
11361
@opindex moptimize-membar
11362
 
11363
This switch removes redundant @code{membar} instructions from the
11364
compiler generated code.  It is enabled by default.
11365
 
11366
@item -mno-optimize-membar
11367
@opindex mno-optimize-membar
11368
 
11369
This switch disables the automatic removal of redundant @code{membar}
11370
instructions from the generated code.
11371
 
11372
@item -mtomcat-stats
11373
@opindex mtomcat-stats
11374
 
11375
Cause gas to print out tomcat statistics.
11376
 
11377
@item -mcpu=@var{cpu}
11378
@opindex mcpu
11379
 
11380
Select the processor type for which to generate code.  Possible values are
11381
@samp{frv}, @samp{fr550}, @samp{tomcat}, @samp{fr500}, @samp{fr450},
11382
@samp{fr405}, @samp{fr400}, @samp{fr300} and @samp{simple}.
11383
 
11384
@end table
11385
 
11386
@node GNU/Linux Options
11387
@subsection GNU/Linux Options
11388
 
11389
These @samp{-m} options are defined for GNU/Linux targets:
11390
 
11391
@table @gcctabopt
11392
@item -mglibc
11393
@opindex mglibc
11394
Use the GNU C library instead of uClibc.  This is the default except
11395
on @samp{*-*-linux-*uclibc*} targets.
11396
 
11397
@item -muclibc
11398
@opindex muclibc
11399
Use uClibc instead of the GNU C library.  This is the default on
11400
@samp{*-*-linux-*uclibc*} targets.
11401
@end table
11402
 
11403
@node H8/300 Options
11404
@subsection H8/300 Options
11405
 
11406
These @samp{-m} options are defined for the H8/300 implementations:
11407
 
11408
@table @gcctabopt
11409
@item -mrelax
11410
@opindex mrelax
11411
Shorten some address references at link time, when possible; uses the
11412
linker option @option{-relax}.  @xref{H8/300,, @code{ld} and the H8/300,
11413
ld, Using ld}, for a fuller description.
11414
 
11415
@item -mh
11416
@opindex mh
11417
Generate code for the H8/300H@.
11418
 
11419
@item -ms
11420
@opindex ms
11421
Generate code for the H8S@.
11422
 
11423
@item -mn
11424
@opindex mn
11425
Generate code for the H8S and H8/300H in the normal mode.  This switch
11426
must be used either with @option{-mh} or @option{-ms}.
11427
 
11428
@item -ms2600
11429
@opindex ms2600
11430
Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
11431
 
11432
@item -mint32
11433
@opindex mint32
11434
Make @code{int} data 32 bits by default.
11435
 
11436
@item -malign-300
11437
@opindex malign-300
11438
On the H8/300H and H8S, use the same alignment rules as for the H8/300.
11439
The default for the H8/300H and H8S is to align longs and floats on 4
11440
byte boundaries.
11441
@option{-malign-300} causes them to be aligned on 2 byte boundaries.
11442
This option has no effect on the H8/300.
11443
@end table
11444
 
11445
@node HPPA Options
11446
@subsection HPPA Options
11447
@cindex HPPA Options
11448
 
11449
These @samp{-m} options are defined for the HPPA family of computers:
11450
 
11451
@table @gcctabopt
11452
@item -march=@var{architecture-type}
11453
@opindex march
11454
Generate code for the specified architecture.  The choices for
11455
@var{architecture-type} are @samp{1.0} for PA 1.0, @samp{1.1} for PA
11456
1.1, and @samp{2.0} for PA 2.0 processors.  Refer to
11457
@file{/usr/lib/sched.models} on an HP-UX system to determine the proper
11458
architecture option for your machine.  Code compiled for lower numbered
11459
architectures will run on higher numbered architectures, but not the
11460
other way around.
11461
 
11462
@item -mpa-risc-1-0
11463
@itemx -mpa-risc-1-1
11464
@itemx -mpa-risc-2-0
11465
@opindex mpa-risc-1-0
11466
@opindex mpa-risc-1-1
11467
@opindex mpa-risc-2-0
11468
Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
11469
 
11470
@item -mbig-switch
11471
@opindex mbig-switch
11472
Generate code suitable for big switch tables.  Use this option only if
11473
the assembler/linker complain about out of range branches within a switch
11474
table.
11475
 
11476
@item -mjump-in-delay
11477
@opindex mjump-in-delay
11478
Fill delay slots of function calls with unconditional jump instructions
11479
by modifying the return pointer for the function call to be the target
11480
of the conditional jump.
11481
 
11482
@item -mdisable-fpregs
11483
@opindex mdisable-fpregs
11484
Prevent floating point registers from being used in any manner.  This is
11485
necessary for compiling kernels which perform lazy context switching of
11486
floating point registers.  If you use this option and attempt to perform
11487
floating point operations, the compiler will abort.
11488
 
11489
@item -mdisable-indexing
11490
@opindex mdisable-indexing
11491
Prevent the compiler from using indexing address modes.  This avoids some
11492
rather obscure problems when compiling MIG generated code under MACH@.
11493
 
11494
@item -mno-space-regs
11495
@opindex mno-space-regs
11496
Generate code that assumes the target has no space registers.  This allows
11497
GCC to generate faster indirect calls and use unscaled index address modes.
11498
 
11499
Such code is suitable for level 0 PA systems and kernels.
11500
 
11501
@item -mfast-indirect-calls
11502
@opindex mfast-indirect-calls
11503
Generate code that assumes calls never cross space boundaries.  This
11504
allows GCC to emit code which performs faster indirect calls.
11505
 
11506
This option will not work in the presence of shared libraries or nested
11507
functions.
11508
 
11509
@item -mfixed-range=@var{register-range}
11510
@opindex mfixed-range
11511
Generate code treating the given register range as fixed registers.
11512
A fixed register is one that the register allocator can not use.  This is
11513
useful when compiling kernel code.  A register range is specified as
11514
two registers separated by a dash.  Multiple register ranges can be
11515
specified separated by a comma.
11516
 
11517
@item -mlong-load-store
11518
@opindex mlong-load-store
11519
Generate 3-instruction load and store sequences as sometimes required by
11520
the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
11521
the HP compilers.
11522
 
11523
@item -mportable-runtime
11524
@opindex mportable-runtime
11525
Use the portable calling conventions proposed by HP for ELF systems.
11526
 
11527
@item -mgas
11528
@opindex mgas
11529
Enable the use of assembler directives only GAS understands.
11530
 
11531
@item -mschedule=@var{cpu-type}
11532
@opindex mschedule
11533
Schedule code according to the constraints for the machine type
11534
@var{cpu-type}.  The choices for @var{cpu-type} are @samp{700}
11535
@samp{7100}, @samp{7100LC}, @samp{7200}, @samp{7300} and @samp{8000}.  Refer
11536
to @file{/usr/lib/sched.models} on an HP-UX system to determine the
11537
proper scheduling option for your machine.  The default scheduling is
11538
@samp{8000}.
11539
 
11540
@item -mlinker-opt
11541
@opindex mlinker-opt
11542
Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
11543
debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
11544
linkers in which they give bogus error messages when linking some programs.
11545
 
11546
@item -msoft-float
11547
@opindex msoft-float
11548
Generate output containing library calls for floating point.
11549
@strong{Warning:} the requisite libraries are not available for all HPPA
11550
targets.  Normally the facilities of the machine's usual C compiler are
11551
used, but this cannot be done directly in cross-compilation.  You must make
11552
your own arrangements to provide suitable library functions for
11553
cross-compilation.
11554
 
11555
@option{-msoft-float} changes the calling convention in the output file;
11556
therefore, it is only useful if you compile @emph{all} of a program with
11557
this option.  In particular, you need to compile @file{libgcc.a}, the
11558
library that comes with GCC, with @option{-msoft-float} in order for
11559
this to work.
11560
 
11561
@item -msio
11562
@opindex msio
11563
Generate the predefine, @code{_SIO}, for server IO@.  The default is
11564
@option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
11565
@code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
11566
options are available under HP-UX and HI-UX@.
11567
 
11568
@item -mgnu-ld
11569
@opindex mgnu-ld
11570
Use GNU ld specific options.  This passes @option{-shared} to ld when
11571
building a shared library.  It is the default when GCC is configured,
11572
explicitly or implicitly, with the GNU linker.  This option does not
11573
have any affect on which ld is called, it only changes what parameters
11574
are passed to that ld.  The ld that is called is determined by the
11575
@option{--with-ld} configure option, GCC's program search path, and
11576
finally by the user's @env{PATH}.  The linker used by GCC can be printed
11577
using @samp{which `gcc -print-prog-name=ld`}.  This option is only available
11578
on the 64 bit HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
11579
 
11580
@item -mhp-ld
11581
@opindex mhp-ld
11582
Use HP ld specific options.  This passes @option{-b} to ld when building
11583
a shared library and passes @option{+Accept TypeMismatch} to ld on all
11584
links.  It is the default when GCC is configured, explicitly or
11585
implicitly, with the HP linker.  This option does not have any affect on
11586
which ld is called, it only changes what parameters are passed to that
11587
ld.  The ld that is called is determined by the @option{--with-ld}
11588
configure option, GCC's program search path, and finally by the user's
11589
@env{PATH}.  The linker used by GCC can be printed using @samp{which
11590
`gcc -print-prog-name=ld`}.  This option is only available on the 64 bit
11591
HP-UX GCC, i.e.@: configured with @samp{hppa*64*-*-hpux*}.
11592
 
11593
@item -mlong-calls
11594
@opindex mno-long-calls
11595
Generate code that uses long call sequences.  This ensures that a call
11596
is always able to reach linker generated stubs.  The default is to generate
11597
long calls only when the distance from the call site to the beginning
11598
of the function or translation unit, as the case may be, exceeds a
11599
predefined limit set by the branch type being used.  The limits for
11600
normal calls are 7,600,000 and 240,000 bytes, respectively for the
11601
PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
11602
240,000 bytes.
11603
 
11604
Distances are measured from the beginning of functions when using the
11605
@option{-ffunction-sections} option, or when using the @option{-mgas}
11606
and @option{-mno-portable-runtime} options together under HP-UX with
11607
the SOM linker.
11608
 
11609
It is normally not desirable to use this option as it will degrade
11610
performance.  However, it may be useful in large applications,
11611
particularly when partial linking is used to build the application.
11612
 
11613
The types of long calls used depends on the capabilities of the
11614
assembler and linker, and the type of code being generated.  The
11615
impact on systems that support long absolute calls, and long pic
11616
symbol-difference or pc-relative calls should be relatively small.
11617
However, an indirect call is used on 32-bit ELF systems in pic code
11618
and it is quite long.
11619
 
11620
@item -munix=@var{unix-std}
11621
@opindex march
11622
Generate compiler predefines and select a startfile for the specified
11623
UNIX standard.  The choices for @var{unix-std} are @samp{93}, @samp{95}
11624
and @samp{98}.  @samp{93} is supported on all HP-UX versions.  @samp{95}
11625
is available on HP-UX 10.10 and later.  @samp{98} is available on HP-UX
11626
11.11 and later.  The default values are @samp{93} for HP-UX 10.00,
11627
@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
11628
and later.
11629
 
11630
@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
11631
@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
11632
and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
11633
@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
11634
@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
11635
@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
11636
 
11637
It is @emph{important} to note that this option changes the interfaces
11638
for various library routines.  It also affects the operational behavior
11639
of the C library.  Thus, @emph{extreme} care is needed in using this
11640
option.
11641
 
11642
Library code that is intended to operate with more than one UNIX
11643
standard must test, set and restore the variable @var{__xpg4_extended_mask}
11644
as appropriate.  Most GNU software doesn't provide this capability.
11645
 
11646
@item -nolibdld
11647
@opindex nolibdld
11648
Suppress the generation of link options to search libdld.sl when the
11649
@option{-static} option is specified on HP-UX 10 and later.
11650
 
11651
@item -static
11652
@opindex static
11653
The HP-UX implementation of setlocale in libc has a dependency on
11654
libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
11655
when the @option{-static} option is specified, special link options
11656
are needed to resolve this dependency.
11657
 
11658
On HP-UX 10 and later, the GCC driver adds the necessary options to
11659
link with libdld.sl when the @option{-static} option is specified.
11660
This causes the resulting binary to be dynamic.  On the 64-bit port,
11661
the linkers generate dynamic binaries by default in any case.  The
11662
@option{-nolibdld} option can be used to prevent the GCC driver from
11663
adding these link options.
11664
 
11665
@item -threads
11666
@opindex threads
11667
Add support for multithreading with the @dfn{dce thread} library
11668
under HP-UX@.  This option sets flags for both the preprocessor and
11669
linker.
11670
@end table
11671
 
11672
@node i386 and x86-64 Options
11673
@subsection Intel 386 and AMD x86-64 Options
11674
@cindex i386 Options
11675
@cindex x86-64 Options
11676
@cindex Intel 386 Options
11677
@cindex AMD x86-64 Options
11678
 
11679
These @samp{-m} options are defined for the i386 and x86-64 family of
11680
computers:
11681
 
11682
@table @gcctabopt
11683
@item -mtune=@var{cpu-type}
11684
@opindex mtune
11685
Tune to @var{cpu-type} everything applicable about the generated code, except
11686
for the ABI and the set of available instructions.  The choices for
11687
@var{cpu-type} are:
11688
@table @emph
11689
@item generic
11690
Produce code optimized for the most common IA32/AMD64/EM64T processors.
11691
If you know the CPU on which your code will run, then you should use
11692
the corresponding @option{-mtune} option instead of
11693
@option{-mtune=generic}.  But, if you do not know exactly what CPU users
11694
of your application will have, then you should use this option.
11695
 
11696
As new processors are deployed in the marketplace, the behavior of this
11697
option will change.  Therefore, if you upgrade to a newer version of
11698
GCC, the code generated option will change to reflect the processors
11699
that were most common when that version of GCC was released.
11700
 
11701
There is no @option{-march=generic} option because @option{-march}
11702
indicates the instruction set the compiler can use, and there is no
11703
generic instruction set applicable to all processors.  In contrast,
11704
@option{-mtune} indicates the processor (or, in this case, collection of
11705
processors) for which the code is optimized.
11706
@item native
11707
This selects the CPU to tune for at compilation time by determining
11708
the processor type of the compiling machine.  Using @option{-mtune=native}
11709
will produce code optimized for the local machine under the constraints
11710
of the selected instruction set.  Using @option{-march=native} will
11711
enable all instruction subsets supported by the local machine (hence
11712
the result might not run on different machines).
11713
@item i386
11714
Original Intel's i386 CPU@.
11715
@item i486
11716
Intel's i486 CPU@.  (No scheduling is implemented for this chip.)
11717
@item i586, pentium
11718
Intel Pentium CPU with no MMX support.
11719
@item pentium-mmx
11720
Intel PentiumMMX CPU based on Pentium core with MMX instruction set support.
11721
@item pentiumpro
11722
Intel PentiumPro CPU@.
11723
@item i686
11724
Same as @code{generic}, but when used as @code{march} option, PentiumPro
11725
instruction set will be used, so the code will run on all i686 family chips.
11726
@item pentium2
11727
Intel Pentium2 CPU based on PentiumPro core with MMX instruction set support.
11728
@item pentium3, pentium3m
11729
Intel Pentium3 CPU based on PentiumPro core with MMX and SSE instruction set
11730
support.
11731
@item pentium-m
11732
Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2 instruction set
11733
support.  Used by Centrino notebooks.
11734
@item pentium4, pentium4m
11735
Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set support.
11736
@item prescott
11737
Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and SSE3 instruction
11738
set support.
11739
@item nocona
11740
Improved version of Intel Pentium4 CPU with 64-bit extensions, MMX, SSE,
11741
SSE2 and SSE3 instruction set support.
11742
@item core2
11743
Intel Core2 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
11744
instruction set support.
11745
@item atom
11746
Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
11747
instruction set support.
11748
@item k6
11749
AMD K6 CPU with MMX instruction set support.
11750
@item k6-2, k6-3
11751
Improved versions of AMD K6 CPU with MMX and 3DNow!@: instruction set support.
11752
@item athlon, athlon-tbird
11753
AMD Athlon CPU with MMX, 3dNOW!, enhanced 3DNow!@: and SSE prefetch instructions
11754
support.
11755
@item athlon-4, athlon-xp, athlon-mp
11756
Improved AMD Athlon CPU with MMX, 3DNow!, enhanced 3DNow!@: and full SSE
11757
instruction set support.
11758
@item k8, opteron, athlon64, athlon-fx
11759
AMD K8 core based CPUs with x86-64 instruction set support.  (This supersets
11760
MMX, SSE, SSE2, 3DNow!, enhanced 3DNow!@: and 64-bit instruction set extensions.)
11761
@item k8-sse3, opteron-sse3, athlon64-sse3
11762
Improved versions of k8, opteron and athlon64 with SSE3 instruction set support.
11763
@item amdfam10, barcelona
11764
AMD Family 10h core based CPUs with x86-64 instruction set support.  (This
11765
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM and 64-bit
11766
instruction set extensions.)
11767
@item winchip-c6
11768
IDT Winchip C6 CPU, dealt in same way as i486 with additional MMX instruction
11769
set support.
11770
@item winchip2
11771
IDT Winchip2 CPU, dealt in same way as i486 with additional MMX and 3DNow!@:
11772
instruction set support.
11773
@item c3
11774
Via C3 CPU with MMX and 3DNow!@: instruction set support.  (No scheduling is
11775
implemented for this chip.)
11776
@item c3-2
11777
Via C3-2 CPU with MMX and SSE instruction set support.  (No scheduling is
11778
implemented for this chip.)
11779
@item geode
11780
Embedded AMD CPU with MMX and 3DNow!@: instruction set support.
11781
@end table
11782
 
11783
While picking a specific @var{cpu-type} will schedule things appropriately
11784
for that particular chip, the compiler will not generate any code that
11785
does not run on the i386 without the @option{-march=@var{cpu-type}} option
11786
being used.
11787
 
11788
@item -march=@var{cpu-type}
11789
@opindex march
11790
Generate instructions for the machine type @var{cpu-type}.  The choices
11791
for @var{cpu-type} are the same as for @option{-mtune}.  Moreover,
11792
specifying @option{-march=@var{cpu-type}} implies @option{-mtune=@var{cpu-type}}.
11793
 
11794
@item -mcpu=@var{cpu-type}
11795
@opindex mcpu
11796
A deprecated synonym for @option{-mtune}.
11797
 
11798
@item -mfpmath=@var{unit}
11799
@opindex mfpmath
11800
Generate floating point arithmetics for selected unit @var{unit}.  The choices
11801
for @var{unit} are:
11802
 
11803
@table @samp
11804
@item 387
11805
Use the standard 387 floating point coprocessor present majority of chips and
11806
emulated otherwise.  Code compiled with this option will run almost everywhere.
11807
The temporary results are computed in 80bit precision instead of precision
11808
specified by the type resulting in slightly different results compared to most
11809
of other chips.  See @option{-ffloat-store} for more detailed description.
11810
 
11811
This is the default choice for i386 compiler.
11812
 
11813
@item sse
11814
Use scalar floating point instructions present in the SSE instruction set.
11815
This instruction set is supported by Pentium3 and newer chips, in the AMD line
11816
by Athlon-4, Athlon-xp and Athlon-mp chips.  The earlier version of SSE
11817
instruction set supports only single precision arithmetics, thus the double and
11818
extended precision arithmetics is still done using 387.  Later version, present
11819
only in Pentium4 and the future AMD x86-64 chips supports double precision
11820
arithmetics too.
11821
 
11822
For the i386 compiler, you need to use @option{-march=@var{cpu-type}}, @option{-msse}
11823
or @option{-msse2} switches to enable SSE extensions and make this option
11824
effective.  For the x86-64 compiler, these extensions are enabled by default.
11825
 
11826
The resulting code should be considerably faster in the majority of cases and avoid
11827
the numerical instability problems of 387 code, but may break some existing
11828
code that expects temporaries to be 80bit.
11829
 
11830
This is the default choice for the x86-64 compiler.
11831
 
11832
@item sse,387
11833
@itemx sse+387
11834
@itemx both
11835
Attempt to utilize both instruction sets at once.  This effectively double the
11836
amount of available registers and on chips with separate execution units for
11837
387 and SSE the execution resources too.  Use this option with care, as it is
11838
still experimental, because the GCC register allocator does not model separate
11839
functional units well resulting in instable performance.
11840
@end table
11841
 
11842
@item -masm=@var{dialect}
11843
@opindex masm=@var{dialect}
11844
Output asm instructions using selected @var{dialect}.  Supported
11845
choices are @samp{intel} or @samp{att} (the default one).  Darwin does
11846
not support @samp{intel}.
11847
 
11848
@item -mieee-fp
11849
@itemx -mno-ieee-fp
11850
@opindex mieee-fp
11851
@opindex mno-ieee-fp
11852
Control whether or not the compiler uses IEEE floating point
11853
comparisons.  These handle correctly the case where the result of a
11854
comparison is unordered.
11855
 
11856
@item -msoft-float
11857
@opindex msoft-float
11858
Generate output containing library calls for floating point.
11859
@strong{Warning:} the requisite libraries are not part of GCC@.
11860
Normally the facilities of the machine's usual C compiler are used, but
11861
this can't be done directly in cross-compilation.  You must make your
11862
own arrangements to provide suitable library functions for
11863
cross-compilation.
11864
 
11865
On machines where a function returns floating point results in the 80387
11866
register stack, some floating point opcodes may be emitted even if
11867
@option{-msoft-float} is used.
11868
 
11869
@item -mno-fp-ret-in-387
11870
@opindex mno-fp-ret-in-387
11871
Do not use the FPU registers for return values of functions.
11872
 
11873
The usual calling convention has functions return values of types
11874
@code{float} and @code{double} in an FPU register, even if there
11875
is no FPU@.  The idea is that the operating system should emulate
11876
an FPU@.
11877
 
11878
The option @option{-mno-fp-ret-in-387} causes such values to be returned
11879
in ordinary CPU registers instead.
11880
 
11881
@item -mno-fancy-math-387
11882
@opindex mno-fancy-math-387
11883
Some 387 emulators do not support the @code{sin}, @code{cos} and
11884
@code{sqrt} instructions for the 387.  Specify this option to avoid
11885
generating those instructions.  This option is the default on FreeBSD,
11886
OpenBSD and NetBSD@.  This option is overridden when @option{-march}
11887
indicates that the target cpu will always have an FPU and so the
11888
instruction will not need emulation.  As of revision 2.6.1, these
11889
instructions are not generated unless you also use the
11890
@option{-funsafe-math-optimizations} switch.
11891
 
11892
@item -malign-double
11893
@itemx -mno-align-double
11894
@opindex malign-double
11895
@opindex mno-align-double
11896
Control whether GCC aligns @code{double}, @code{long double}, and
11897
@code{long long} variables on a two word boundary or a one word
11898
boundary.  Aligning @code{double} variables on a two word boundary will
11899
produce code that runs somewhat faster on a @samp{Pentium} at the
11900
expense of more memory.
11901
 
11902
On x86-64, @option{-malign-double} is enabled by default.
11903
 
11904
@strong{Warning:} if you use the @option{-malign-double} switch,
11905
structures containing the above types will be aligned differently than
11906
the published application binary interface specifications for the 386
11907
and will not be binary compatible with structures in code compiled
11908
without that switch.
11909
 
11910
@item -m96bit-long-double
11911
@itemx -m128bit-long-double
11912
@opindex m96bit-long-double
11913
@opindex m128bit-long-double
11914
These switches control the size of @code{long double} type.  The i386
11915
application binary interface specifies the size to be 96 bits,
11916
so @option{-m96bit-long-double} is the default in 32 bit mode.
11917
 
11918
Modern architectures (Pentium and newer) would prefer @code{long double}
11919
to be aligned to an 8 or 16 byte boundary.  In arrays or structures
11920
conforming to the ABI, this would not be possible.  So specifying a
11921
@option{-m128bit-long-double} will align @code{long double}
11922
to a 16 byte boundary by padding the @code{long double} with an additional
11923
32 bit zero.
11924
 
11925
In the x86-64 compiler, @option{-m128bit-long-double} is the default choice as
11926
its ABI specifies that @code{long double} is to be aligned on 16 byte boundary.
11927
 
11928
Notice that neither of these options enable any extra precision over the x87
11929
standard of 80 bits for a @code{long double}.
11930
 
11931
@strong{Warning:} if you override the default value for your target ABI, the
11932
structures and arrays containing @code{long double} variables will change
11933
their size as well as function calling convention for function taking
11934
@code{long double} will be modified.  Hence they will not be binary
11935
compatible with arrays or structures in code compiled without that switch.
11936
 
11937
@item -mlarge-data-threshold=@var{number}
11938
@opindex mlarge-data-threshold=@var{number}
11939
When @option{-mcmodel=medium} is specified, the data greater than
11940
@var{threshold} are placed in large data section.  This value must be the
11941
same across all object linked into the binary and defaults to 65535.
11942
 
11943
@item -mrtd
11944
@opindex mrtd
11945
Use a different function-calling convention, in which functions that
11946
take a fixed number of arguments return with the @code{ret} @var{num}
11947
instruction, which pops their arguments while returning.  This saves one
11948
instruction in the caller since there is no need to pop the arguments
11949
there.
11950
 
11951
You can specify that an individual function is called with this calling
11952
sequence with the function attribute @samp{stdcall}.  You can also
11953
override the @option{-mrtd} option by using the function attribute
11954
@samp{cdecl}.  @xref{Function Attributes}.
11955
 
11956
@strong{Warning:} this calling convention is incompatible with the one
11957
normally used on Unix, so you cannot use it if you need to call
11958
libraries compiled with the Unix compiler.
11959
 
11960
Also, you must provide function prototypes for all functions that
11961
take variable numbers of arguments (including @code{printf});
11962
otherwise incorrect code will be generated for calls to those
11963
functions.
11964
 
11965
In addition, seriously incorrect code will result if you call a
11966
function with too many arguments.  (Normally, extra arguments are
11967
harmlessly ignored.)
11968
 
11969
@item -mregparm=@var{num}
11970
@opindex mregparm
11971
Control how many registers are used to pass integer arguments.  By
11972
default, no registers are used to pass arguments, and at most 3
11973
registers can be used.  You can control this behavior for a specific
11974
function by using the function attribute @samp{regparm}.
11975
@xref{Function Attributes}.
11976
 
11977
@strong{Warning:} if you use this switch, and
11978
@var{num} is nonzero, then you must build all modules with the same
11979
value, including any libraries.  This includes the system libraries and
11980
startup modules.
11981
 
11982
@item -msseregparm
11983
@opindex msseregparm
11984
Use SSE register passing conventions for float and double arguments
11985
and return values.  You can control this behavior for a specific
11986
function by using the function attribute @samp{sseregparm}.
11987
@xref{Function Attributes}.
11988
 
11989
@strong{Warning:} if you use this switch then you must build all
11990
modules with the same value, including any libraries.  This includes
11991
the system libraries and startup modules.
11992
 
11993
@item -mpc32
11994
@itemx -mpc64
11995
@itemx -mpc80
11996
@opindex mpc32
11997
@opindex mpc64
11998
@opindex mpc80
11999
 
12000
Set 80387 floating-point precision to 32, 64 or 80 bits.  When @option{-mpc32}
12001
is specified, the significands of results of floating-point operations are
12002
rounded to 24 bits (single precision); @option{-mpc64} rounds the
12003
significands of results of floating-point operations to 53 bits (double
12004
precision) and @option{-mpc80} rounds the significands of results of
12005
floating-point operations to 64 bits (extended double precision), which is
12006
the default.  When this option is used, floating-point operations in higher
12007
precisions are not available to the programmer without setting the FPU
12008
control word explicitly.
12009
 
12010
Setting the rounding of floating-point operations to less than the default
12011
80 bits can speed some programs by 2% or more.  Note that some mathematical
12012
libraries assume that extended precision (80 bit) floating-point operations
12013
are enabled by default; routines in such libraries could suffer significant
12014
loss of accuracy, typically through so-called "catastrophic cancellation",
12015
when this option is used to set the precision to less than extended precision.
12016
 
12017
@item -mstackrealign
12018
@opindex mstackrealign
12019
Realign the stack at entry.  On the Intel x86, the @option{-mstackrealign}
12020
option will generate an alternate prologue and epilogue that realigns the
12021
runtime stack if necessary.  This supports mixing legacy codes that keep
12022
a 4-byte aligned stack with modern codes that keep a 16-byte stack for
12023
SSE compatibility.  See also the attribute @code{force_align_arg_pointer},
12024
applicable to individual functions.
12025
 
12026
@item -mpreferred-stack-boundary=@var{num}
12027
@opindex mpreferred-stack-boundary
12028
Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
12029
byte boundary.  If @option{-mpreferred-stack-boundary} is not specified,
12030
the default is 4 (16 bytes or 128 bits).
12031
 
12032
@item -mincoming-stack-boundary=@var{num}
12033
@opindex mincoming-stack-boundary
12034
Assume the incoming stack is aligned to a 2 raised to @var{num} byte
12035
boundary.  If @option{-mincoming-stack-boundary} is not specified,
12036
the one specified by @option{-mpreferred-stack-boundary} will be used.
12037
 
12038
On Pentium and PentiumPro, @code{double} and @code{long double} values
12039
should be aligned to an 8 byte boundary (see @option{-malign-double}) or
12040
suffer significant run time performance penalties.  On Pentium III, the
12041
Streaming SIMD Extension (SSE) data type @code{__m128} may not work
12042
properly if it is not 16 byte aligned.
12043
 
12044
To ensure proper alignment of this values on the stack, the stack boundary
12045
must be as aligned as that required by any value stored on the stack.
12046
Further, every function must be generated such that it keeps the stack
12047
aligned.  Thus calling a function compiled with a higher preferred
12048
stack boundary from a function compiled with a lower preferred stack
12049
boundary will most likely misalign the stack.  It is recommended that
12050
libraries that use callbacks always use the default setting.
12051
 
12052
This extra alignment does consume extra stack space, and generally
12053
increases code size.  Code that is sensitive to stack space usage, such
12054
as embedded systems and operating system kernels, may want to reduce the
12055
preferred alignment to @option{-mpreferred-stack-boundary=2}.
12056
 
12057
@item -mmmx
12058
@itemx -mno-mmx
12059
@itemx -msse
12060
@itemx -mno-sse
12061
@itemx -msse2
12062
@itemx -mno-sse2
12063
@itemx -msse3
12064
@itemx -mno-sse3
12065
@itemx -mssse3
12066
@itemx -mno-ssse3
12067
@itemx -msse4.1
12068
@itemx -mno-sse4.1
12069
@itemx -msse4.2
12070
@itemx -mno-sse4.2
12071
@itemx -msse4
12072
@itemx -mno-sse4
12073
@itemx -mavx
12074
@itemx -mno-avx
12075
@itemx -maes
12076
@itemx -mno-aes
12077
@itemx -mpclmul
12078
@itemx -mno-pclmul
12079
@itemx -msse4a
12080
@itemx -mno-sse4a
12081
@itemx -mfma4
12082
@itemx -mno-fma4
12083
@itemx -mxop
12084
@itemx -mno-xop
12085
@itemx -mlwp
12086
@itemx -mno-lwp
12087
@itemx -m3dnow
12088
@itemx -mno-3dnow
12089
@itemx -mpopcnt
12090
@itemx -mno-popcnt
12091
@itemx -mabm
12092
@itemx -mno-abm
12093
@opindex mmmx
12094
@opindex mno-mmx
12095
@opindex msse
12096
@opindex mno-sse
12097
@opindex m3dnow
12098
@opindex mno-3dnow
12099
These switches enable or disable the use of instructions in the MMX,
12100
SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AES, PCLMUL, SSE4A, FMA4, XOP,
12101
LWP, ABM or 3DNow!@: extended instruction sets.
12102
These extensions are also available as built-in functions: see
12103
@ref{X86 Built-in Functions}, for details of the functions enabled and
12104
disabled by these switches.
12105
 
12106
To have SSE/SSE2 instructions generated automatically from floating-point
12107
code (as opposed to 387 instructions), see @option{-mfpmath=sse}.
12108
 
12109
GCC depresses SSEx instructions when @option{-mavx} is used. Instead, it
12110
generates new AVX instructions or AVX equivalence for all SSEx instructions
12111
when needed.
12112
 
12113
These options will enable GCC to use these extended instructions in
12114
generated code, even without @option{-mfpmath=sse}.  Applications which
12115
perform runtime CPU detection must compile separate files for each
12116
supported architecture, using the appropriate flags.  In particular,
12117
the file containing the CPU detection code should be compiled without
12118
these options.
12119
 
12120
@item -mfused-madd
12121
@itemx -mno-fused-madd
12122
@opindex mfused-madd
12123
@opindex mno-fused-madd
12124
Do (don't) generate code that uses the fused multiply/add or multiply/subtract
12125
instructions.  The default is to use these instructions.
12126
 
12127
@item -mcld
12128
@opindex mcld
12129
This option instructs GCC to emit a @code{cld} instruction in the prologue
12130
of functions that use string instructions.  String instructions depend on
12131
the DF flag to select between autoincrement or autodecrement mode.  While the
12132
ABI specifies the DF flag to be cleared on function entry, some operating
12133
systems violate this specification by not clearing the DF flag in their
12134
exception dispatchers.  The exception handler can be invoked with the DF flag
12135
set which leads to wrong direction mode, when string instructions are used.
12136
This option can be enabled by default on 32-bit x86 targets by configuring
12137
GCC with the @option{--enable-cld} configure option.  Generation of @code{cld}
12138
instructions can be suppressed with the @option{-mno-cld} compiler option
12139
in this case.
12140
 
12141
@item -mcx16
12142
@opindex mcx16
12143
This option will enable GCC to use CMPXCHG16B instruction in generated code.
12144
CMPXCHG16B allows for atomic operations on 128-bit double quadword (or oword)
12145
data types.  This is useful for high resolution counters that could be updated
12146
by multiple processors (or cores).  This instruction is generated as part of
12147
atomic built-in functions: see @ref{Atomic Builtins} for details.
12148
 
12149
@item -msahf
12150
@opindex msahf
12151
This option will enable GCC to use SAHF instruction in generated 64-bit code.
12152
Early Intel CPUs with Intel 64 lacked LAHF and SAHF instructions supported
12153
by AMD64 until introduction of Pentium 4 G1 step in December 2005.  LAHF and
12154
SAHF are load and store instructions, respectively, for certain status flags.
12155
In 64-bit mode, SAHF instruction is used to optimize @code{fmod}, @code{drem}
12156
or @code{remainder} built-in functions: see @ref{Other Builtins} for details.
12157
 
12158
@item -mmovbe
12159
@opindex mmovbe
12160
This option will enable GCC to use movbe instruction to implement
12161
@code{__builtin_bswap32} and @code{__builtin_bswap64}.
12162
 
12163
@item -mcrc32
12164
@opindex mcrc32
12165
This option will enable built-in functions, @code{__builtin_ia32_crc32qi},
12166
@code{__builtin_ia32_crc32hi}. @code{__builtin_ia32_crc32si} and
12167
@code{__builtin_ia32_crc32di} to generate the crc32 machine instruction.
12168
 
12169
@item -mrecip
12170
@opindex mrecip
12171
This option will enable GCC to use RCPSS and RSQRTSS instructions (and their
12172
vectorized variants RCPPS and RSQRTPS) with an additional Newton-Raphson step
12173
to increase precision instead of DIVSS and SQRTSS (and their vectorized
12174
variants) for single precision floating point arguments.  These instructions
12175
are generated only when @option{-funsafe-math-optimizations} is enabled
12176
together with @option{-finite-math-only} and @option{-fno-trapping-math}.
12177
Note that while the throughput of the sequence is higher than the throughput
12178
of the non-reciprocal instruction, the precision of the sequence can be
12179
decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
12180
 
12181
Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or RSQRTPS)
12182
already with @option{-ffast-math} (or the above option combination), and
12183
doesn't need @option{-mrecip}.
12184
 
12185
@item -mveclibabi=@var{type}
12186
@opindex mveclibabi
12187
Specifies the ABI type to use for vectorizing intrinsics using an
12188
external library.  Supported types are @code{svml} for the Intel short
12189
vector math library and @code{acml} for the AMD math core library style
12190
of interfacing.  GCC will currently emit calls to @code{vmldExp2},
12191
@code{vmldLn2}, @code{vmldLog102}, @code{vmldLog102}, @code{vmldPow2},
12192
@code{vmldTanh2}, @code{vmldTan2}, @code{vmldAtan2}, @code{vmldAtanh2},
12193
@code{vmldCbrt2}, @code{vmldSinh2}, @code{vmldSin2}, @code{vmldAsinh2},
12194
@code{vmldAsin2}, @code{vmldCosh2}, @code{vmldCos2}, @code{vmldAcosh2},
12195
@code{vmldAcos2}, @code{vmlsExp4}, @code{vmlsLn4}, @code{vmlsLog104},
12196
@code{vmlsLog104}, @code{vmlsPow4}, @code{vmlsTanh4}, @code{vmlsTan4},
12197
@code{vmlsAtan4}, @code{vmlsAtanh4}, @code{vmlsCbrt4}, @code{vmlsSinh4},
12198
@code{vmlsSin4}, @code{vmlsAsinh4}, @code{vmlsAsin4}, @code{vmlsCosh4},
12199
@code{vmlsCos4}, @code{vmlsAcosh4} and @code{vmlsAcos4} for corresponding
12200
function type when @option{-mveclibabi=svml} is used and @code{__vrd2_sin},
12201
@code{__vrd2_cos}, @code{__vrd2_exp}, @code{__vrd2_log}, @code{__vrd2_log2},
12202
@code{__vrd2_log10}, @code{__vrs4_sinf}, @code{__vrs4_cosf},
12203
@code{__vrs4_expf}, @code{__vrs4_logf}, @code{__vrs4_log2f},
12204
@code{__vrs4_log10f} and @code{__vrs4_powf} for corresponding function type
12205
when @option{-mveclibabi=acml} is used. Both @option{-ftree-vectorize} and
12206
@option{-funsafe-math-optimizations} have to be enabled. A SVML or ACML ABI
12207
compatible library will have to be specified at link time.
12208
 
12209
@item -mabi=@var{name}
12210
@opindex mabi
12211
Generate code for the specified calling convention.  Permissible values
12212
are: @samp{sysv} for the ABI used on GNU/Linux and other systems and
12213
@samp{ms} for the Microsoft ABI.  The default is to use the Microsoft
12214
ABI when targeting Windows.  On all other systems, the default is the
12215
SYSV ABI.  You can control this behavior for a specific function by
12216
using the function attribute @samp{ms_abi}/@samp{sysv_abi}.
12217
@xref{Function Attributes}.
12218
 
12219
@item -mpush-args
12220
@itemx -mno-push-args
12221
@opindex mpush-args
12222
@opindex mno-push-args
12223
Use PUSH operations to store outgoing parameters.  This method is shorter
12224
and usually equally fast as method using SUB/MOV operations and is enabled
12225
by default.  In some cases disabling it may improve performance because of
12226
improved scheduling and reduced dependencies.
12227
 
12228
@item -maccumulate-outgoing-args
12229
@opindex maccumulate-outgoing-args
12230
If enabled, the maximum amount of space required for outgoing arguments will be
12231
computed in the function prologue.  This is faster on most modern CPUs
12232
because of reduced dependencies, improved scheduling and reduced stack usage
12233
when preferred stack boundary is not equal to 2.  The drawback is a notable
12234
increase in code size.  This switch implies @option{-mno-push-args}.
12235
 
12236
@item -mthreads
12237
@opindex mthreads
12238
Support thread-safe exception handling on @samp{Mingw32}.  Code that relies
12239
on thread-safe exception handling must compile and link all code with the
12240
@option{-mthreads} option.  When compiling, @option{-mthreads} defines
12241
@option{-D_MT}; when linking, it links in a special thread helper library
12242
@option{-lmingwthrd} which cleans up per thread exception handling data.
12243
 
12244
@item -mno-align-stringops
12245
@opindex mno-align-stringops
12246
Do not align destination of inlined string operations.  This switch reduces
12247
code size and improves performance in case the destination is already aligned,
12248
but GCC doesn't know about it.
12249
 
12250
@item -minline-all-stringops
12251
@opindex minline-all-stringops
12252
By default GCC inlines string operations only when destination is known to be
12253
aligned at least to 4 byte boundary.  This enables more inlining, increase code
12254
size, but may improve performance of code that depends on fast memcpy, strlen
12255
and memset for short lengths.
12256
 
12257
@item -minline-stringops-dynamically
12258
@opindex minline-stringops-dynamically
12259
For string operation of unknown size, inline runtime checks so for small
12260
blocks inline code is used, while for large blocks library call is used.
12261
 
12262
@item -mstringop-strategy=@var{alg}
12263
@opindex mstringop-strategy=@var{alg}
12264
Overwrite internal decision heuristic about particular algorithm to inline
12265
string operation with.  The allowed values are @code{rep_byte},
12266
@code{rep_4byte}, @code{rep_8byte} for expanding using i386 @code{rep} prefix
12267
of specified size, @code{byte_loop}, @code{loop}, @code{unrolled_loop} for
12268
expanding inline loop, @code{libcall} for always expanding library call.
12269
 
12270
@item -momit-leaf-frame-pointer
12271
@opindex momit-leaf-frame-pointer
12272
Don't keep the frame pointer in a register for leaf functions.  This
12273
avoids the instructions to save, set up and restore frame pointers and
12274
makes an extra register available in leaf functions.  The option
12275
@option{-fomit-frame-pointer} removes the frame pointer for all functions
12276
which might make debugging harder.
12277
 
12278
@item -mtls-direct-seg-refs
12279
@itemx -mno-tls-direct-seg-refs
12280
@opindex mtls-direct-seg-refs
12281
Controls whether TLS variables may be accessed with offsets from the
12282
TLS segment register (@code{%gs} for 32-bit, @code{%fs} for 64-bit),
12283
or whether the thread base pointer must be added.  Whether or not this
12284
is legal depends on the operating system, and whether it maps the
12285
segment to cover the entire TLS area.
12286
 
12287
For systems that use GNU libc, the default is on.
12288
 
12289
@item -msse2avx
12290
@itemx -mno-sse2avx
12291
@opindex msse2avx
12292
Specify that the assembler should encode SSE instructions with VEX
12293
prefix.  The option @option{-mavx} turns this on by default.
12294
@end table
12295
 
12296
These @samp{-m} switches are supported in addition to the above
12297
on AMD x86-64 processors in 64-bit environments.
12298
 
12299
@table @gcctabopt
12300
@item -m32
12301
@itemx -m64
12302
@opindex m32
12303
@opindex m64
12304
Generate code for a 32-bit or 64-bit environment.
12305
The 32-bit environment sets int, long and pointer to 32 bits and
12306
generates code that runs on any i386 system.
12307
The 64-bit environment sets int to 32 bits and long and pointer
12308
to 64 bits and generates code for AMD's x86-64 architecture. For
12309
darwin only the -m64 option turns off the @option{-fno-pic} and
12310
@option{-mdynamic-no-pic} options.
12311
 
12312
@item -mno-red-zone
12313
@opindex mno-red-zone
12314
Do not use a so called red zone for x86-64 code.  The red zone is mandated
12315
by the x86-64 ABI, it is a 128-byte area beyond the location of the
12316
stack pointer that will not be modified by signal or interrupt handlers
12317
and therefore can be used for temporary data without adjusting the stack
12318
pointer.  The flag @option{-mno-red-zone} disables this red zone.
12319
 
12320
@item -mcmodel=small
12321
@opindex mcmodel=small
12322
Generate code for the small code model: the program and its symbols must
12323
be linked in the lower 2 GB of the address space.  Pointers are 64 bits.
12324
Programs can be statically or dynamically linked.  This is the default
12325
code model.
12326
 
12327
@item -mcmodel=kernel
12328
@opindex mcmodel=kernel
12329
Generate code for the kernel code model.  The kernel runs in the
12330
negative 2 GB of the address space.
12331
This model has to be used for Linux kernel code.
12332
 
12333
@item -mcmodel=medium
12334
@opindex mcmodel=medium
12335
Generate code for the medium model: The program is linked in the lower 2
12336
GB of the address space.  Small symbols are also placed there.  Symbols
12337
with sizes larger than @option{-mlarge-data-threshold} are put into
12338
large data or bss sections and can be located above 2GB.  Programs can
12339
be statically or dynamically linked.
12340
 
12341
@item -mcmodel=large
12342
@opindex mcmodel=large
12343
Generate code for the large model: This model makes no assumptions
12344
about addresses and sizes of sections.
12345
@end table
12346
 
12347
@node IA-64 Options
12348
@subsection IA-64 Options
12349
@cindex IA-64 Options
12350
 
12351
These are the @samp{-m} options defined for the Intel IA-64 architecture.
12352
 
12353
@table @gcctabopt
12354
@item -mbig-endian
12355
@opindex mbig-endian
12356
Generate code for a big endian target.  This is the default for HP-UX@.
12357
 
12358
@item -mlittle-endian
12359
@opindex mlittle-endian
12360
Generate code for a little endian target.  This is the default for AIX5
12361
and GNU/Linux.
12362
 
12363
@item -mgnu-as
12364
@itemx -mno-gnu-as
12365
@opindex mgnu-as
12366
@opindex mno-gnu-as
12367
Generate (or don't) code for the GNU assembler.  This is the default.
12368
@c Also, this is the default if the configure option @option{--with-gnu-as}
12369
@c is used.
12370
 
12371
@item -mgnu-ld
12372
@itemx -mno-gnu-ld
12373
@opindex mgnu-ld
12374
@opindex mno-gnu-ld
12375
Generate (or don't) code for the GNU linker.  This is the default.
12376
@c Also, this is the default if the configure option @option{--with-gnu-ld}
12377
@c is used.
12378
 
12379
@item -mno-pic
12380
@opindex mno-pic
12381
Generate code that does not use a global pointer register.  The result
12382
is not position independent code, and violates the IA-64 ABI@.
12383
 
12384
@item -mvolatile-asm-stop
12385
@itemx -mno-volatile-asm-stop
12386
@opindex mvolatile-asm-stop
12387
@opindex mno-volatile-asm-stop
12388
Generate (or don't) a stop bit immediately before and after volatile asm
12389
statements.
12390
 
12391
@item -mregister-names
12392
@itemx -mno-register-names
12393
@opindex mregister-names
12394
@opindex mno-register-names
12395
Generate (or don't) @samp{in}, @samp{loc}, and @samp{out} register names for
12396
the stacked registers.  This may make assembler output more readable.
12397
 
12398
@item -mno-sdata
12399
@itemx -msdata
12400
@opindex mno-sdata
12401
@opindex msdata
12402
Disable (or enable) optimizations that use the small data section.  This may
12403
be useful for working around optimizer bugs.
12404
 
12405
@item -mconstant-gp
12406
@opindex mconstant-gp
12407
Generate code that uses a single constant global pointer value.  This is
12408
useful when compiling kernel code.
12409
 
12410
@item -mauto-pic
12411
@opindex mauto-pic
12412
Generate code that is self-relocatable.  This implies @option{-mconstant-gp}.
12413
This is useful when compiling firmware code.
12414
 
12415
@item -minline-float-divide-min-latency
12416
@opindex minline-float-divide-min-latency
12417
Generate code for inline divides of floating point values
12418
using the minimum latency algorithm.
12419
 
12420
@item -minline-float-divide-max-throughput
12421
@opindex minline-float-divide-max-throughput
12422
Generate code for inline divides of floating point values
12423
using the maximum throughput algorithm.
12424
 
12425
@item -mno-inline-float-divide
12426
@opindex mno-inline-float-divide
12427
Do not generate inline code for divides of floating point values.
12428
 
12429
@item -minline-int-divide-min-latency
12430
@opindex minline-int-divide-min-latency
12431
Generate code for inline divides of integer values
12432
using the minimum latency algorithm.
12433
 
12434
@item -minline-int-divide-max-throughput
12435
@opindex minline-int-divide-max-throughput
12436
Generate code for inline divides of integer values
12437
using the maximum throughput algorithm.
12438
 
12439
@item -mno-inline-int-divide
12440
@opindex mno-inline-int-divide
12441
Do not generate inline code for divides of integer values.
12442
 
12443
@item -minline-sqrt-min-latency
12444
@opindex minline-sqrt-min-latency
12445
Generate code for inline square roots
12446
using the minimum latency algorithm.
12447
 
12448
@item -minline-sqrt-max-throughput
12449
@opindex minline-sqrt-max-throughput
12450
Generate code for inline square roots
12451
using the maximum throughput algorithm.
12452
 
12453
@item -mno-inline-sqrt
12454
@opindex mno-inline-sqrt
12455
Do not generate inline code for sqrt.
12456
 
12457
@item -mfused-madd
12458
@itemx -mno-fused-madd
12459
@opindex mfused-madd
12460
@opindex mno-fused-madd
12461
Do (don't) generate code that uses the fused multiply/add or multiply/subtract
12462
instructions.  The default is to use these instructions.
12463
 
12464
@item -mno-dwarf2-asm
12465
@itemx -mdwarf2-asm
12466
@opindex mno-dwarf2-asm
12467
@opindex mdwarf2-asm
12468
Don't (or do) generate assembler code for the DWARF2 line number debugging
12469
info.  This may be useful when not using the GNU assembler.
12470
 
12471
@item -mearly-stop-bits
12472
@itemx -mno-early-stop-bits
12473
@opindex mearly-stop-bits
12474
@opindex mno-early-stop-bits
12475
Allow stop bits to be placed earlier than immediately preceding the
12476
instruction that triggered the stop bit.  This can improve instruction
12477
scheduling, but does not always do so.
12478
 
12479
@item -mfixed-range=@var{register-range}
12480
@opindex mfixed-range
12481
Generate code treating the given register range as fixed registers.
12482
A fixed register is one that the register allocator can not use.  This is
12483
useful when compiling kernel code.  A register range is specified as
12484
two registers separated by a dash.  Multiple register ranges can be
12485
specified separated by a comma.
12486
 
12487
@item -mtls-size=@var{tls-size}
12488
@opindex mtls-size
12489
Specify bit size of immediate TLS offsets.  Valid values are 14, 22, and
12490
64.
12491
 
12492
@item -mtune=@var{cpu-type}
12493
@opindex mtune
12494
Tune the instruction scheduling for a particular CPU, Valid values are
12495
itanium, itanium1, merced, itanium2, and mckinley.
12496
 
12497
@item -milp32
12498
@itemx -mlp64
12499
@opindex milp32
12500
@opindex mlp64
12501
Generate code for a 32-bit or 64-bit environment.
12502
The 32-bit environment sets int, long and pointer to 32 bits.
12503
The 64-bit environment sets int to 32 bits and long and pointer
12504
to 64 bits.  These are HP-UX specific flags.
12505
 
12506
@item -mno-sched-br-data-spec
12507
@itemx -msched-br-data-spec
12508
@opindex mno-sched-br-data-spec
12509
@opindex msched-br-data-spec
12510
(Dis/En)able data speculative scheduling before reload.
12511
This will result in generation of the ld.a instructions and
12512
the corresponding check instructions (ld.c / chk.a).
12513
The default is 'disable'.
12514
 
12515
@item -msched-ar-data-spec
12516
@itemx -mno-sched-ar-data-spec
12517
@opindex msched-ar-data-spec
12518
@opindex mno-sched-ar-data-spec
12519
(En/Dis)able data speculative scheduling after reload.
12520
This will result in generation of the ld.a instructions and
12521
the corresponding check instructions (ld.c / chk.a).
12522
The default is 'enable'.
12523
 
12524
@item -mno-sched-control-spec
12525
@itemx -msched-control-spec
12526
@opindex mno-sched-control-spec
12527
@opindex msched-control-spec
12528
(Dis/En)able control speculative scheduling.  This feature is
12529
available only during region scheduling (i.e.@: before reload).
12530
This will result in generation of the ld.s instructions and
12531
the corresponding check instructions chk.s .
12532
The default is 'disable'.
12533
 
12534
@item -msched-br-in-data-spec
12535
@itemx -mno-sched-br-in-data-spec
12536
@opindex msched-br-in-data-spec
12537
@opindex mno-sched-br-in-data-spec
12538
(En/Dis)able speculative scheduling of the instructions that
12539
are dependent on the data speculative loads before reload.
12540
This is effective only with @option{-msched-br-data-spec} enabled.
12541
The default is 'enable'.
12542
 
12543
@item -msched-ar-in-data-spec
12544
@itemx -mno-sched-ar-in-data-spec
12545
@opindex msched-ar-in-data-spec
12546
@opindex mno-sched-ar-in-data-spec
12547
(En/Dis)able speculative scheduling of the instructions that
12548
are dependent on the data speculative loads after reload.
12549
This is effective only with @option{-msched-ar-data-spec} enabled.
12550
The default is 'enable'.
12551
 
12552
@item -msched-in-control-spec
12553
@itemx -mno-sched-in-control-spec
12554
@opindex msched-in-control-spec
12555
@opindex mno-sched-in-control-spec
12556
(En/Dis)able speculative scheduling of the instructions that
12557
are dependent on the control speculative loads.
12558
This is effective only with @option{-msched-control-spec} enabled.
12559
The default is 'enable'.
12560
 
12561
@item -mno-sched-prefer-non-data-spec-insns
12562
@itemx -msched-prefer-non-data-spec-insns
12563
@opindex mno-sched-prefer-non-data-spec-insns
12564
@opindex msched-prefer-non-data-spec-insns
12565
If enabled, data speculative instructions will be chosen for schedule
12566
only if there are no other choices at the moment.  This will make
12567
the use of the data speculation much more conservative.
12568
The default is 'disable'.
12569
 
12570
@item -mno-sched-prefer-non-control-spec-insns
12571
@itemx -msched-prefer-non-control-spec-insns
12572
@opindex mno-sched-prefer-non-control-spec-insns
12573
@opindex msched-prefer-non-control-spec-insns
12574
If enabled, control speculative instructions will be chosen for schedule
12575
only if there are no other choices at the moment.  This will make
12576
the use of the control speculation much more conservative.
12577
The default is 'disable'.
12578
 
12579
@item -mno-sched-count-spec-in-critical-path
12580
@itemx -msched-count-spec-in-critical-path
12581
@opindex mno-sched-count-spec-in-critical-path
12582
@opindex msched-count-spec-in-critical-path
12583
If enabled, speculative dependencies will be considered during
12584
computation of the instructions priorities.  This will make the use of the
12585
speculation a bit more conservative.
12586
The default is 'disable'.
12587
 
12588
@item -msched-spec-ldc
12589
@opindex msched-spec-ldc
12590
Use a simple data speculation check.  This option is on by default.
12591
 
12592
@item -msched-control-spec-ldc
12593
@opindex msched-spec-ldc
12594
Use a simple check for control speculation.  This option is on by default.
12595
 
12596
@item -msched-stop-bits-after-every-cycle
12597
@opindex msched-stop-bits-after-every-cycle
12598
Place a stop bit after every cycle when scheduling.  This option is on
12599
by default.
12600
 
12601
@item -msched-fp-mem-deps-zero-cost
12602
@opindex msched-fp-mem-deps-zero-cost
12603
Assume that floating-point stores and loads are not likely to cause a conflict
12604
when placed into the same instruction group.  This option is disabled by
12605
default.
12606
 
12607
@item -msel-sched-dont-check-control-spec
12608
@opindex msel-sched-dont-check-control-spec
12609
Generate checks for control speculation in selective scheduling.
12610
This flag is disabled by default.
12611
 
12612
@item -msched-max-memory-insns=@var{max-insns}
12613
@opindex msched-max-memory-insns
12614
Limit on the number of memory insns per instruction group, giving lower
12615
priority to subsequent memory insns attempting to schedule in the same
12616
instruction group. Frequently useful to prevent cache bank conflicts.
12617
The default value is 1.
12618
 
12619
@item -msched-max-memory-insns-hard-limit
12620
@opindex msched-max-memory-insns-hard-limit
12621
Disallow more than `msched-max-memory-insns' in instruction group.
12622
Otherwise, limit is `soft' meaning that we would prefer non-memory operations
12623
when limit is reached but may still schedule memory operations.
12624
 
12625
@end table
12626
 
12627
@node IA-64/VMS Options
12628
@subsection IA-64/VMS Options
12629
 
12630
These @samp{-m} options are defined for the IA-64/VMS implementations:
12631
 
12632
@table @gcctabopt
12633
@item -mvms-return-codes
12634
@opindex mvms-return-codes
12635
Return VMS condition codes from main. The default is to return POSIX
12636
style condition (e.g.@ error) codes.
12637
 
12638
@item -mdebug-main=@var{prefix}
12639
@opindex mdebug-main=@var{prefix}
12640
Flag the first routine whose name starts with @var{prefix} as the main
12641
routine for the debugger.
12642
 
12643
@item -mmalloc64
12644
@opindex mmalloc64
12645
Default to 64bit memory allocation routines.
12646
@end table
12647
 
12648
@node LM32 Options
12649
@subsection LM32 Options
12650
@cindex LM32 options
12651
 
12652
These @option{-m} options are defined for the Lattice Mico32 architecture:
12653
 
12654
@table @gcctabopt
12655
@item -mbarrel-shift-enabled
12656
@opindex mbarrel-shift-enabled
12657
Enable barrel-shift instructions.
12658
 
12659
@item -mdivide-enabled
12660
@opindex mdivide-enabled
12661
Enable divide and modulus instructions.
12662
 
12663
@item -mmultiply-enabled
12664
@opindex multiply-enabled
12665
Enable multiply instructions.
12666
 
12667
@item -msign-extend-enabled
12668
@opindex msign-extend-enabled
12669
Enable sign extend instructions.
12670
 
12671
@item -muser-enabled
12672
@opindex muser-enabled
12673
Enable user-defined instructions.
12674
 
12675
@end table
12676
 
12677
@node M32C Options
12678
@subsection M32C Options
12679
@cindex M32C options
12680
 
12681
@table @gcctabopt
12682
@item -mcpu=@var{name}
12683
@opindex mcpu=
12684
Select the CPU for which code is generated.  @var{name} may be one of
12685
@samp{r8c} for the R8C/Tiny series, @samp{m16c} for the M16C (up to
12686
/60) series, @samp{m32cm} for the M16C/80 series, or @samp{m32c} for
12687
the M32C/80 series.
12688
 
12689
@item -msim
12690
@opindex msim
12691
Specifies that the program will be run on the simulator.  This causes
12692
an alternate runtime library to be linked in which supports, for
12693
example, file I/O@.  You must not use this option when generating
12694
programs that will run on real hardware; you must provide your own
12695
runtime library for whatever I/O functions are needed.
12696
 
12697
@item -memregs=@var{number}
12698
@opindex memregs=
12699
Specifies the number of memory-based pseudo-registers GCC will use
12700
during code generation.  These pseudo-registers will be used like real
12701
registers, so there is a tradeoff between GCC's ability to fit the
12702
code into available registers, and the performance penalty of using
12703
memory instead of registers.  Note that all modules in a program must
12704
be compiled with the same value for this option.  Because of that, you
12705
must not use this option with the default runtime libraries gcc
12706
builds.
12707
 
12708
@end table
12709
 
12710
@node M32R/D Options
12711
@subsection M32R/D Options
12712
@cindex M32R/D options
12713
 
12714
These @option{-m} options are defined for Renesas M32R/D architectures:
12715
 
12716
@table @gcctabopt
12717
@item -m32r2
12718
@opindex m32r2
12719
Generate code for the M32R/2@.
12720
 
12721
@item -m32rx
12722
@opindex m32rx
12723
Generate code for the M32R/X@.
12724
 
12725
@item -m32r
12726
@opindex m32r
12727
Generate code for the M32R@.  This is the default.
12728
 
12729
@item -mmodel=small
12730
@opindex mmodel=small
12731
Assume all objects live in the lower 16MB of memory (so that their addresses
12732
can be loaded with the @code{ld24} instruction), and assume all subroutines
12733
are reachable with the @code{bl} instruction.
12734
This is the default.
12735
 
12736
The addressability of a particular object can be set with the
12737
@code{model} attribute.
12738
 
12739
@item -mmodel=medium
12740
@opindex mmodel=medium
12741
Assume objects may be anywhere in the 32-bit address space (the compiler
12742
will generate @code{seth/add3} instructions to load their addresses), and
12743
assume all subroutines are reachable with the @code{bl} instruction.
12744
 
12745
@item -mmodel=large
12746
@opindex mmodel=large
12747
Assume objects may be anywhere in the 32-bit address space (the compiler
12748
will generate @code{seth/add3} instructions to load their addresses), and
12749
assume subroutines may not be reachable with the @code{bl} instruction
12750
(the compiler will generate the much slower @code{seth/add3/jl}
12751
instruction sequence).
12752
 
12753
@item -msdata=none
12754
@opindex msdata=none
12755
Disable use of the small data area.  Variables will be put into
12756
one of @samp{.data}, @samp{bss}, or @samp{.rodata} (unless the
12757
@code{section} attribute has been specified).
12758
This is the default.
12759
 
12760
The small data area consists of sections @samp{.sdata} and @samp{.sbss}.
12761
Objects may be explicitly put in the small data area with the
12762
@code{section} attribute using one of these sections.
12763
 
12764
@item -msdata=sdata
12765
@opindex msdata=sdata
12766
Put small global and static data in the small data area, but do not
12767
generate special code to reference them.
12768
 
12769
@item -msdata=use
12770
@opindex msdata=use
12771
Put small global and static data in the small data area, and generate
12772
special instructions to reference them.
12773
 
12774
@item -G @var{num}
12775
@opindex G
12776
@cindex smaller data references
12777
Put global and static objects less than or equal to @var{num} bytes
12778
into the small data or bss sections instead of the normal data or bss
12779
sections.  The default value of @var{num} is 8.
12780
The @option{-msdata} option must be set to one of @samp{sdata} or @samp{use}
12781
for this option to have any effect.
12782
 
12783
All modules should be compiled with the same @option{-G @var{num}} value.
12784
Compiling with different values of @var{num} may or may not work; if it
12785
doesn't the linker will give an error message---incorrect code will not be
12786
generated.
12787
 
12788
@item -mdebug
12789
@opindex mdebug
12790
Makes the M32R specific code in the compiler display some statistics
12791
that might help in debugging programs.
12792
 
12793
@item -malign-loops
12794
@opindex malign-loops
12795
Align all loops to a 32-byte boundary.
12796
 
12797
@item -mno-align-loops
12798
@opindex mno-align-loops
12799
Do not enforce a 32-byte alignment for loops.  This is the default.
12800
 
12801
@item -missue-rate=@var{number}
12802
@opindex missue-rate=@var{number}
12803
Issue @var{number} instructions per cycle.  @var{number} can only be 1
12804
or 2.
12805
 
12806
@item -mbranch-cost=@var{number}
12807
@opindex mbranch-cost=@var{number}
12808
@var{number} can only be 1 or 2.  If it is 1 then branches will be
12809
preferred over conditional code, if it is 2, then the opposite will
12810
apply.
12811
 
12812
@item -mflush-trap=@var{number}
12813
@opindex mflush-trap=@var{number}
12814
Specifies the trap number to use to flush the cache.  The default is
12815
12.  Valid numbers are between 0 and 15 inclusive.
12816
 
12817
@item -mno-flush-trap
12818
@opindex mno-flush-trap
12819
Specifies that the cache cannot be flushed by using a trap.
12820
 
12821
@item -mflush-func=@var{name}
12822
@opindex mflush-func=@var{name}
12823
Specifies the name of the operating system function to call to flush
12824
the cache.  The default is @emph{_flush_cache}, but a function call
12825
will only be used if a trap is not available.
12826
 
12827
@item -mno-flush-func
12828
@opindex mno-flush-func
12829
Indicates that there is no OS function for flushing the cache.
12830
 
12831
@end table
12832
 
12833
@node M680x0 Options
12834
@subsection M680x0 Options
12835
@cindex M680x0 options
12836
 
12837
These are the @samp{-m} options defined for M680x0 and ColdFire processors.
12838
The default settings depend on which architecture was selected when
12839
the compiler was configured; the defaults for the most common choices
12840
are given below.
12841
 
12842
@table @gcctabopt
12843
@item -march=@var{arch}
12844
@opindex march
12845
Generate code for a specific M680x0 or ColdFire instruction set
12846
architecture.  Permissible values of @var{arch} for M680x0
12847
architectures are: @samp{68000}, @samp{68010}, @samp{68020},
12848
@samp{68030}, @samp{68040}, @samp{68060} and @samp{cpu32}.  ColdFire
12849
architectures are selected according to Freescale's ISA classification
12850
and the permissible values are: @samp{isaa}, @samp{isaaplus},
12851
@samp{isab} and @samp{isac}.
12852
 
12853
gcc defines a macro @samp{__mcf@var{arch}__} whenever it is generating
12854
code for a ColdFire target.  The @var{arch} in this macro is one of the
12855
@option{-march} arguments given above.
12856
 
12857
When used together, @option{-march} and @option{-mtune} select code
12858
that runs on a family of similar processors but that is optimized
12859
for a particular microarchitecture.
12860
 
12861
@item -mcpu=@var{cpu}
12862
@opindex mcpu
12863
Generate code for a specific M680x0 or ColdFire processor.
12864
The M680x0 @var{cpu}s are: @samp{68000}, @samp{68010}, @samp{68020},
12865
@samp{68030}, @samp{68040}, @samp{68060}, @samp{68302}, @samp{68332}
12866
and @samp{cpu32}.  The ColdFire @var{cpu}s are given by the table
12867
below, which also classifies the CPUs into families:
12868
 
12869
@multitable @columnfractions 0.20 0.80
12870
@item @strong{Family} @tab @strong{@samp{-mcpu} arguments}
12871
@item @samp{51} @tab @samp{51} @samp{51ac} @samp{51cn} @samp{51em} @samp{51qe}
12872
@item @samp{5206} @tab @samp{5202} @samp{5204} @samp{5206}
12873
@item @samp{5206e} @tab @samp{5206e}
12874
@item @samp{5208} @tab @samp{5207} @samp{5208}
12875
@item @samp{5211a} @tab @samp{5210a} @samp{5211a}
12876
@item @samp{5213} @tab @samp{5211} @samp{5212} @samp{5213}
12877
@item @samp{5216} @tab @samp{5214} @samp{5216}
12878
@item @samp{52235} @tab @samp{52230} @samp{52231} @samp{52232} @samp{52233} @samp{52234} @samp{52235}
12879
@item @samp{5225} @tab @samp{5224} @samp{5225}
12880
@item @samp{52259} @tab @samp{52252} @samp{52254} @samp{52255} @samp{52256} @samp{52258} @samp{52259}
12881
@item @samp{5235} @tab @samp{5232} @samp{5233} @samp{5234} @samp{5235} @samp{523x}
12882
@item @samp{5249} @tab @samp{5249}
12883
@item @samp{5250} @tab @samp{5250}
12884
@item @samp{5271} @tab @samp{5270} @samp{5271}
12885
@item @samp{5272} @tab @samp{5272}
12886
@item @samp{5275} @tab @samp{5274} @samp{5275}
12887
@item @samp{5282} @tab @samp{5280} @samp{5281} @samp{5282} @samp{528x}
12888
@item @samp{53017} @tab @samp{53011} @samp{53012} @samp{53013} @samp{53014} @samp{53015} @samp{53016} @samp{53017}
12889
@item @samp{5307} @tab @samp{5307}
12890
@item @samp{5329} @tab @samp{5327} @samp{5328} @samp{5329} @samp{532x}
12891
@item @samp{5373} @tab @samp{5372} @samp{5373} @samp{537x}
12892
@item @samp{5407} @tab @samp{5407}
12893
@item @samp{5475} @tab @samp{5470} @samp{5471} @samp{5472} @samp{5473} @samp{5474} @samp{5475} @samp{547x} @samp{5480} @samp{5481} @samp{5482} @samp{5483} @samp{5484} @samp{5485}
12894
@end multitable
12895
 
12896
@option{-mcpu=@var{cpu}} overrides @option{-march=@var{arch}} if
12897
@var{arch} is compatible with @var{cpu}.  Other combinations of
12898
@option{-mcpu} and @option{-march} are rejected.
12899
 
12900
gcc defines the macro @samp{__mcf_cpu_@var{cpu}} when ColdFire target
12901
@var{cpu} is selected.  It also defines @samp{__mcf_family_@var{family}},
12902
where the value of @var{family} is given by the table above.
12903
 
12904
@item -mtune=@var{tune}
12905
@opindex mtune
12906
Tune the code for a particular microarchitecture, within the
12907
constraints set by @option{-march} and @option{-mcpu}.
12908
The M680x0 microarchitectures are: @samp{68000}, @samp{68010},
12909
@samp{68020}, @samp{68030}, @samp{68040}, @samp{68060}
12910
and @samp{cpu32}.  The ColdFire microarchitectures
12911
are: @samp{cfv1}, @samp{cfv2}, @samp{cfv3}, @samp{cfv4} and @samp{cfv4e}.
12912
 
12913
You can also use @option{-mtune=68020-40} for code that needs
12914
to run relatively well on 68020, 68030 and 68040 targets.
12915
@option{-mtune=68020-60} is similar but includes 68060 targets
12916
as well.  These two options select the same tuning decisions as
12917
@option{-m68020-40} and @option{-m68020-60} respectively.
12918
 
12919
gcc defines the macros @samp{__mc@var{arch}} and @samp{__mc@var{arch}__}
12920
when tuning for 680x0 architecture @var{arch}.  It also defines
12921
@samp{mc@var{arch}} unless either @option{-ansi} or a non-GNU @option{-std}
12922
option is used.  If gcc is tuning for a range of architectures,
12923
as selected by @option{-mtune=68020-40} or @option{-mtune=68020-60},
12924
it defines the macros for every architecture in the range.
12925
 
12926
gcc also defines the macro @samp{__m@var{uarch}__} when tuning for
12927
ColdFire microarchitecture @var{uarch}, where @var{uarch} is one
12928
of the arguments given above.
12929
 
12930
@item -m68000
12931
@itemx -mc68000
12932
@opindex m68000
12933
@opindex mc68000
12934
Generate output for a 68000.  This is the default
12935
when the compiler is configured for 68000-based systems.
12936
It is equivalent to @option{-march=68000}.
12937
 
12938
Use this option for microcontrollers with a 68000 or EC000 core,
12939
including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
12940
 
12941
@item -m68010
12942
@opindex m68010
12943
Generate output for a 68010.  This is the default
12944
when the compiler is configured for 68010-based systems.
12945
It is equivalent to @option{-march=68010}.
12946
 
12947
@item -m68020
12948
@itemx -mc68020
12949
@opindex m68020
12950
@opindex mc68020
12951
Generate output for a 68020.  This is the default
12952
when the compiler is configured for 68020-based systems.
12953
It is equivalent to @option{-march=68020}.
12954
 
12955
@item -m68030
12956
@opindex m68030
12957
Generate output for a 68030.  This is the default when the compiler is
12958
configured for 68030-based systems.  It is equivalent to
12959
@option{-march=68030}.
12960
 
12961
@item -m68040
12962
@opindex m68040
12963
Generate output for a 68040.  This is the default when the compiler is
12964
configured for 68040-based systems.  It is equivalent to
12965
@option{-march=68040}.
12966
 
12967
This option inhibits the use of 68881/68882 instructions that have to be
12968
emulated by software on the 68040.  Use this option if your 68040 does not
12969
have code to emulate those instructions.
12970
 
12971
@item -m68060
12972
@opindex m68060
12973
Generate output for a 68060.  This is the default when the compiler is
12974
configured for 68060-based systems.  It is equivalent to
12975
@option{-march=68060}.
12976
 
12977
This option inhibits the use of 68020 and 68881/68882 instructions that
12978
have to be emulated by software on the 68060.  Use this option if your 68060
12979
does not have code to emulate those instructions.
12980
 
12981
@item -mcpu32
12982
@opindex mcpu32
12983
Generate output for a CPU32.  This is the default
12984
when the compiler is configured for CPU32-based systems.
12985
It is equivalent to @option{-march=cpu32}.
12986
 
12987
Use this option for microcontrollers with a
12988
CPU32 or CPU32+ core, including the 68330, 68331, 68332, 68333, 68334,
12989
68336, 68340, 68341, 68349 and 68360.
12990
 
12991
@item -m5200
12992
@opindex m5200
12993
Generate output for a 520X ColdFire CPU@.  This is the default
12994
when the compiler is configured for 520X-based systems.
12995
It is equivalent to @option{-mcpu=5206}, and is now deprecated
12996
in favor of that option.
12997
 
12998
Use this option for microcontroller with a 5200 core, including
12999
the MCF5202, MCF5203, MCF5204 and MCF5206.
13000
 
13001
@item -m5206e
13002
@opindex m5206e
13003
Generate output for a 5206e ColdFire CPU@.  The option is now
13004
deprecated in favor of the equivalent @option{-mcpu=5206e}.
13005
 
13006
@item -m528x
13007
@opindex m528x
13008
Generate output for a member of the ColdFire 528X family.
13009
The option is now deprecated in favor of the equivalent
13010
@option{-mcpu=528x}.
13011
 
13012
@item -m5307
13013
@opindex m5307
13014
Generate output for a ColdFire 5307 CPU@.  The option is now deprecated
13015
in favor of the equivalent @option{-mcpu=5307}.
13016
 
13017
@item -m5407
13018
@opindex m5407
13019
Generate output for a ColdFire 5407 CPU@.  The option is now deprecated
13020
in favor of the equivalent @option{-mcpu=5407}.
13021
 
13022
@item -mcfv4e
13023
@opindex mcfv4e
13024
Generate output for a ColdFire V4e family CPU (e.g.@: 547x/548x).
13025
This includes use of hardware floating point instructions.
13026
The option is equivalent to @option{-mcpu=547x}, and is now
13027
deprecated in favor of that option.
13028
 
13029
@item -m68020-40
13030
@opindex m68020-40
13031
Generate output for a 68040, without using any of the new instructions.
13032
This results in code which can run relatively efficiently on either a
13033
68020/68881 or a 68030 or a 68040.  The generated code does use the
13034
68881 instructions that are emulated on the 68040.
13035
 
13036
The option is equivalent to @option{-march=68020} @option{-mtune=68020-40}.
13037
 
13038
@item -m68020-60
13039
@opindex m68020-60
13040
Generate output for a 68060, without using any of the new instructions.
13041
This results in code which can run relatively efficiently on either a
13042
68020/68881 or a 68030 or a 68040.  The generated code does use the
13043
68881 instructions that are emulated on the 68060.
13044
 
13045
The option is equivalent to @option{-march=68020} @option{-mtune=68020-60}.
13046
 
13047
@item -mhard-float
13048
@itemx -m68881
13049
@opindex mhard-float
13050
@opindex m68881
13051
Generate floating-point instructions.  This is the default for 68020
13052
and above, and for ColdFire devices that have an FPU@.  It defines the
13053
macro @samp{__HAVE_68881__} on M680x0 targets and @samp{__mcffpu__}
13054
on ColdFire targets.
13055
 
13056
@item -msoft-float
13057
@opindex msoft-float
13058
Do not generate floating-point instructions; use library calls instead.
13059
This is the default for 68000, 68010, and 68832 targets.  It is also
13060
the default for ColdFire devices that have no FPU.
13061
 
13062
@item -mdiv
13063
@itemx -mno-div
13064
@opindex mdiv
13065
@opindex mno-div
13066
Generate (do not generate) ColdFire hardware divide and remainder
13067
instructions.  If @option{-march} is used without @option{-mcpu},
13068
the default is ``on'' for ColdFire architectures and ``off'' for M680x0
13069
architectures.  Otherwise, the default is taken from the target CPU
13070
(either the default CPU, or the one specified by @option{-mcpu}).  For
13071
example, the default is ``off'' for @option{-mcpu=5206} and ``on'' for
13072
@option{-mcpu=5206e}.
13073
 
13074
gcc defines the macro @samp{__mcfhwdiv__} when this option is enabled.
13075
 
13076
@item -mshort
13077
@opindex mshort
13078
Consider type @code{int} to be 16 bits wide, like @code{short int}.
13079
Additionally, parameters passed on the stack are also aligned to a
13080
16-bit boundary even on targets whose API mandates promotion to 32-bit.
13081
 
13082
@item -mno-short
13083
@opindex mno-short
13084
Do not consider type @code{int} to be 16 bits wide.  This is the default.
13085
 
13086
@item -mnobitfield
13087
@itemx -mno-bitfield
13088
@opindex mnobitfield
13089
@opindex mno-bitfield
13090
Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
13091
and @option{-m5200} options imply @w{@option{-mnobitfield}}.
13092
 
13093
@item -mbitfield
13094
@opindex mbitfield
13095
Do use the bit-field instructions.  The @option{-m68020} option implies
13096
@option{-mbitfield}.  This is the default if you use a configuration
13097
designed for a 68020.
13098
 
13099
@item -mrtd
13100
@opindex mrtd
13101
Use a different function-calling convention, in which functions
13102
that take a fixed number of arguments return with the @code{rtd}
13103
instruction, which pops their arguments while returning.  This
13104
saves one instruction in the caller since there is no need to pop
13105
the arguments there.
13106
 
13107
This calling convention is incompatible with the one normally
13108
used on Unix, so you cannot use it if you need to call libraries
13109
compiled with the Unix compiler.
13110
 
13111
Also, you must provide function prototypes for all functions that
13112
take variable numbers of arguments (including @code{printf});
13113
otherwise incorrect code will be generated for calls to those
13114
functions.
13115
 
13116
In addition, seriously incorrect code will result if you call a
13117
function with too many arguments.  (Normally, extra arguments are
13118
harmlessly ignored.)
13119
 
13120
The @code{rtd} instruction is supported by the 68010, 68020, 68030,
13121
68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
13122
 
13123
@item -mno-rtd
13124
@opindex mno-rtd
13125
Do not use the calling conventions selected by @option{-mrtd}.
13126
This is the default.
13127
 
13128
@item -malign-int
13129
@itemx -mno-align-int
13130
@opindex malign-int
13131
@opindex mno-align-int
13132
Control whether GCC aligns @code{int}, @code{long}, @code{long long},
13133
@code{float}, @code{double}, and @code{long double} variables on a 32-bit
13134
boundary (@option{-malign-int}) or a 16-bit boundary (@option{-mno-align-int}).
13135
Aligning variables on 32-bit boundaries produces code that runs somewhat
13136
faster on processors with 32-bit busses at the expense of more memory.
13137
 
13138
@strong{Warning:} if you use the @option{-malign-int} switch, GCC will
13139
align structures containing the above types  differently than
13140
most published application binary interface specifications for the m68k.
13141
 
13142
@item -mpcrel
13143
@opindex mpcrel
13144
Use the pc-relative addressing mode of the 68000 directly, instead of
13145
using a global offset table.  At present, this option implies @option{-fpic},
13146
allowing at most a 16-bit offset for pc-relative addressing.  @option{-fPIC} is
13147
not presently supported with @option{-mpcrel}, though this could be supported for
13148
68020 and higher processors.
13149
 
13150
@item -mno-strict-align
13151
@itemx -mstrict-align
13152
@opindex mno-strict-align
13153
@opindex mstrict-align
13154
Do not (do) assume that unaligned memory references will be handled by
13155
the system.
13156
 
13157
@item -msep-data
13158
Generate code that allows the data segment to be located in a different
13159
area of memory from the text segment.  This allows for execute in place in
13160
an environment without virtual memory management.  This option implies
13161
@option{-fPIC}.
13162
 
13163
@item -mno-sep-data
13164
Generate code that assumes that the data segment follows the text segment.
13165
This is the default.
13166
 
13167
@item -mid-shared-library
13168
Generate code that supports shared libraries via the library ID method.
13169
This allows for execute in place and shared libraries in an environment
13170
without virtual memory management.  This option implies @option{-fPIC}.
13171
 
13172
@item -mno-id-shared-library
13173
Generate code that doesn't assume ID based shared libraries are being used.
13174
This is the default.
13175
 
13176
@item -mshared-library-id=n
13177
Specified the identification number of the ID based shared library being
13178
compiled.  Specifying a value of 0 will generate more compact code, specifying
13179
other values will force the allocation of that number to the current
13180
library but is no more space or time efficient than omitting this option.
13181
 
13182
@item -mxgot
13183
@itemx -mno-xgot
13184
@opindex mxgot
13185
@opindex mno-xgot
13186
When generating position-independent code for ColdFire, generate code
13187
that works if the GOT has more than 8192 entries.  This code is
13188
larger and slower than code generated without this option.  On M680x0
13189
processors, this option is not needed; @option{-fPIC} suffices.
13190
 
13191
GCC normally uses a single instruction to load values from the GOT@.
13192
While this is relatively efficient, it only works if the GOT
13193
is smaller than about 64k.  Anything larger causes the linker
13194
to report an error such as:
13195
 
13196
@cindex relocation truncated to fit (ColdFire)
13197
@smallexample
13198
relocation truncated to fit: R_68K_GOT16O foobar
13199
@end smallexample
13200
 
13201
If this happens, you should recompile your code with @option{-mxgot}.
13202
It should then work with very large GOTs.  However, code generated with
13203
@option{-mxgot} is less efficient, since it takes 4 instructions to fetch
13204
the value of a global symbol.
13205
 
13206
Note that some linkers, including newer versions of the GNU linker,
13207
can create multiple GOTs and sort GOT entries.  If you have such a linker,
13208
you should only need to use @option{-mxgot} when compiling a single
13209
object file that accesses more than 8192 GOT entries.  Very few do.
13210
 
13211
These options have no effect unless GCC is generating
13212
position-independent code.
13213
 
13214
@end table
13215
 
13216
@node M68hc1x Options
13217
@subsection M68hc1x Options
13218
@cindex M68hc1x options
13219
 
13220
These are the @samp{-m} options defined for the 68hc11 and 68hc12
13221
microcontrollers.  The default values for these options depends on
13222
which style of microcontroller was selected when the compiler was configured;
13223
the defaults for the most common choices are given below.
13224
 
13225
@table @gcctabopt
13226
@item -m6811
13227
@itemx -m68hc11
13228
@opindex m6811
13229
@opindex m68hc11
13230
Generate output for a 68HC11.  This is the default
13231
when the compiler is configured for 68HC11-based systems.
13232
 
13233
@item -m6812
13234
@itemx -m68hc12
13235
@opindex m6812
13236
@opindex m68hc12
13237
Generate output for a 68HC12.  This is the default
13238
when the compiler is configured for 68HC12-based systems.
13239
 
13240
@item -m68S12
13241
@itemx -m68hcs12
13242
@opindex m68S12
13243
@opindex m68hcs12
13244
Generate output for a 68HCS12.
13245
 
13246
@item -mauto-incdec
13247
@opindex mauto-incdec
13248
Enable the use of 68HC12 pre and post auto-increment and auto-decrement
13249
addressing modes.
13250
 
13251
@item -minmax
13252
@itemx -mnominmax
13253
@opindex minmax
13254
@opindex mnominmax
13255
Enable the use of 68HC12 min and max instructions.
13256
 
13257
@item -mlong-calls
13258
@itemx -mno-long-calls
13259
@opindex mlong-calls
13260
@opindex mno-long-calls
13261
Treat all calls as being far away (near).  If calls are assumed to be
13262
far away, the compiler will use the @code{call} instruction to
13263
call a function and the @code{rtc} instruction for returning.
13264
 
13265
@item -mshort
13266
@opindex mshort
13267
Consider type @code{int} to be 16 bits wide, like @code{short int}.
13268
 
13269
@item -msoft-reg-count=@var{count}
13270
@opindex msoft-reg-count
13271
Specify the number of pseudo-soft registers which are used for the
13272
code generation.  The maximum number is 32.  Using more pseudo-soft
13273
register may or may not result in better code depending on the program.
13274
The default is 4 for 68HC11 and 2 for 68HC12.
13275
 
13276
@end table
13277
 
13278
@node MCore Options
13279
@subsection MCore Options
13280
@cindex MCore options
13281
 
13282
These are the @samp{-m} options defined for the Motorola M*Core
13283
processors.
13284
 
13285
@table @gcctabopt
13286
 
13287
@item -mhardlit
13288
@itemx -mno-hardlit
13289
@opindex mhardlit
13290
@opindex mno-hardlit
13291
Inline constants into the code stream if it can be done in two
13292
instructions or less.
13293
 
13294
@item -mdiv
13295
@itemx -mno-div
13296
@opindex mdiv
13297
@opindex mno-div
13298
Use the divide instruction.  (Enabled by default).
13299
 
13300
@item -mrelax-immediate
13301
@itemx -mno-relax-immediate
13302
@opindex mrelax-immediate
13303
@opindex mno-relax-immediate
13304
Allow arbitrary sized immediates in bit operations.
13305
 
13306
@item -mwide-bitfields
13307
@itemx -mno-wide-bitfields
13308
@opindex mwide-bitfields
13309
@opindex mno-wide-bitfields
13310
Always treat bit-fields as int-sized.
13311
 
13312
@item -m4byte-functions
13313
@itemx -mno-4byte-functions
13314
@opindex m4byte-functions
13315
@opindex mno-4byte-functions
13316
Force all functions to be aligned to a four byte boundary.
13317
 
13318
@item -mcallgraph-data
13319
@itemx -mno-callgraph-data
13320
@opindex mcallgraph-data
13321
@opindex mno-callgraph-data
13322
Emit callgraph information.
13323
 
13324
@item -mslow-bytes
13325
@itemx -mno-slow-bytes
13326
@opindex mslow-bytes
13327
@opindex mno-slow-bytes
13328
Prefer word access when reading byte quantities.
13329
 
13330
@item -mlittle-endian
13331
@itemx -mbig-endian
13332
@opindex mlittle-endian
13333
@opindex mbig-endian
13334
Generate code for a little endian target.
13335
 
13336
@item -m210
13337
@itemx -m340
13338
@opindex m210
13339
@opindex m340
13340
Generate code for the 210 processor.
13341
 
13342
@item -mno-lsim
13343
@opindex mno-lsim
13344
Assume that run-time support has been provided and so omit the
13345
simulator library (@file{libsim.a)} from the linker command line.
13346
 
13347
@item -mstack-increment=@var{size}
13348
@opindex mstack-increment
13349
Set the maximum amount for a single stack increment operation.  Large
13350
values can increase the speed of programs which contain functions
13351
that need a large amount of stack space, but they can also trigger a
13352
segmentation fault if the stack is extended too much.  The default
13353
value is 0x1000.
13354
 
13355
@end table
13356
 
13357
@node MeP Options
13358
@subsection MeP Options
13359
@cindex MeP options
13360
 
13361
@table @gcctabopt
13362
 
13363
@item -mabsdiff
13364
@opindex mabsdiff
13365
Enables the @code{abs} instruction, which is the absolute difference
13366
between two registers.
13367
 
13368
@item -mall-opts
13369
@opindex mall-opts
13370
Enables all the optional instructions - average, multiply, divide, bit
13371
operations, leading zero, absolute difference, min/max, clip, and
13372
saturation.
13373
 
13374
 
13375
@item -maverage
13376
@opindex maverage
13377
Enables the @code{ave} instruction, which computes the average of two
13378
registers.
13379
 
13380
@item -mbased=@var{n}
13381
@opindex mbased=
13382
Variables of size @var{n} bytes or smaller will be placed in the
13383
@code{.based} section by default.  Based variables use the @code{$tp}
13384
register as a base register, and there is a 128 byte limit to the
13385
@code{.based} section.
13386
 
13387
@item -mbitops
13388
@opindex mbitops
13389
Enables the bit operation instructions - bit test (@code{btstm}), set
13390
(@code{bsetm}), clear (@code{bclrm}), invert (@code{bnotm}), and
13391
test-and-set (@code{tas}).
13392
 
13393
@item -mc=@var{name}
13394
@opindex mc=
13395
Selects which section constant data will be placed in.  @var{name} may
13396
be @code{tiny}, @code{near}, or @code{far}.
13397
 
13398
@item -mclip
13399
@opindex mclip
13400
Enables the @code{clip} instruction.  Note that @code{-mclip} is not
13401
useful unless you also provide @code{-mminmax}.
13402
 
13403
@item -mconfig=@var{name}
13404
@opindex mconfig=
13405
Selects one of the build-in core configurations.  Each MeP chip has
13406
one or more modules in it; each module has a core CPU and a variety of
13407
coprocessors, optional instructions, and peripherals.  The
13408
@code{MeP-Integrator} tool, not part of GCC, provides these
13409
configurations through this option; using this option is the same as
13410
using all the corresponding command line options.  The default
13411
configuration is @code{default}.
13412
 
13413
@item -mcop
13414
@opindex mcop
13415
Enables the coprocessor instructions.  By default, this is a 32-bit
13416
coprocessor.  Note that the coprocessor is normally enabled via the
13417
@code{-mconfig=} option.
13418
 
13419
@item -mcop32
13420
@opindex mcop32
13421
Enables the 32-bit coprocessor's instructions.
13422
 
13423
@item -mcop64
13424
@opindex mcop64
13425
Enables the 64-bit coprocessor's instructions.
13426
 
13427
@item -mivc2
13428
@opindex mivc2
13429
Enables IVC2 scheduling.  IVC2 is a 64-bit VLIW coprocessor.
13430
 
13431
@item -mdc
13432
@opindex mdc
13433
Causes constant variables to be placed in the @code{.near} section.
13434
 
13435
@item -mdiv
13436
@opindex mdiv
13437
Enables the @code{div} and @code{divu} instructions.
13438
 
13439
@item -meb
13440
@opindex meb
13441
Generate big-endian code.
13442
 
13443
@item -mel
13444
@opindex mel
13445
Generate little-endian code.
13446
 
13447
@item -mio-volatile
13448
@opindex mio-volatile
13449
Tells the compiler that any variable marked with the @code{io}
13450
attribute is to be considered volatile.
13451
 
13452
@item -ml
13453
@opindex ml
13454
Causes variables to be assigned to the @code{.far} section by default.
13455
 
13456
@item -mleadz
13457
@opindex mleadz
13458
Enables the @code{leadz} (leading zero) instruction.
13459
 
13460
@item -mm
13461
@opindex mm
13462
Causes variables to be assigned to the @code{.near} section by default.
13463
 
13464
@item -mminmax
13465
@opindex mminmax
13466
Enables the @code{min} and @code{max} instructions.
13467
 
13468
@item -mmult
13469
@opindex mmult
13470
Enables the multiplication and multiply-accumulate instructions.
13471
 
13472
@item -mno-opts
13473
@opindex mno-opts
13474
Disables all the optional instructions enabled by @code{-mall-opts}.
13475
 
13476
@item -mrepeat
13477
@opindex mrepeat
13478
Enables the @code{repeat} and @code{erepeat} instructions, used for
13479
low-overhead looping.
13480
 
13481
@item -ms
13482
@opindex ms
13483
Causes all variables to default to the @code{.tiny} section.  Note
13484
that there is a 65536 byte limit to this section.  Accesses to these
13485
variables use the @code{%gp} base register.
13486
 
13487
@item -msatur
13488
@opindex msatur
13489
Enables the saturation instructions.  Note that the compiler does not
13490
currently generate these itself, but this option is included for
13491
compatibility with other tools, like @code{as}.
13492
 
13493
@item -msdram
13494
@opindex msdram
13495
Link the SDRAM-based runtime instead of the default ROM-based runtime.
13496
 
13497
@item -msim
13498
@opindex msim
13499
Link the simulator runtime libraries.
13500
 
13501
@item -msimnovec
13502
@opindex msimnovec
13503
Link the simulator runtime libraries, excluding built-in support
13504
for reset and exception vectors and tables.
13505
 
13506
@item -mtf
13507
@opindex mtf
13508
Causes all functions to default to the @code{.far} section.  Without
13509
this option, functions default to the @code{.near} section.
13510
 
13511
@item -mtiny=@var{n}
13512
@opindex mtiny=
13513
Variables that are @var{n} bytes or smaller will be allocated to the
13514
@code{.tiny} section.  These variables use the @code{$gp} base
13515
register.  The default for this option is 4, but note that there's a
13516
65536 byte limit to the @code{.tiny} section.
13517
 
13518
@end table
13519
 
13520
@node MIPS Options
13521
@subsection MIPS Options
13522
@cindex MIPS options
13523
 
13524
@table @gcctabopt
13525
 
13526
@item -EB
13527
@opindex EB
13528
Generate big-endian code.
13529
 
13530
@item -EL
13531
@opindex EL
13532
Generate little-endian code.  This is the default for @samp{mips*el-*-*}
13533
configurations.
13534
 
13535
@item -march=@var{arch}
13536
@opindex march
13537
Generate code that will run on @var{arch}, which can be the name of a
13538
generic MIPS ISA, or the name of a particular processor.
13539
The ISA names are:
13540
@samp{mips1}, @samp{mips2}, @samp{mips3}, @samp{mips4},
13541
@samp{mips32}, @samp{mips32r2}, @samp{mips64} and @samp{mips64r2}.
13542
The processor names are:
13543
@samp{4kc}, @samp{4km}, @samp{4kp}, @samp{4ksc},
13544
@samp{4kec}, @samp{4kem}, @samp{4kep}, @samp{4ksd},
13545
@samp{5kc}, @samp{5kf},
13546
@samp{20kc},
13547
@samp{24kc}, @samp{24kf2_1}, @samp{24kf1_1},
13548
@samp{24kec}, @samp{24kef2_1}, @samp{24kef1_1},
13549
@samp{34kc}, @samp{34kf2_1}, @samp{34kf1_1},
13550
@samp{74kc}, @samp{74kf2_1}, @samp{74kf1_1}, @samp{74kf3_2},
13551
@samp{1004kc}, @samp{1004kf2_1}, @samp{1004kf1_1},
13552
@samp{loongson2e}, @samp{loongson2f},
13553
@samp{m4k},
13554
@samp{octeon},
13555
@samp{orion},
13556
@samp{r2000}, @samp{r3000}, @samp{r3900}, @samp{r4000}, @samp{r4400},
13557
@samp{r4600}, @samp{r4650}, @samp{r6000}, @samp{r8000},
13558
@samp{rm7000}, @samp{rm9000},
13559
@samp{r10000}, @samp{r12000}, @samp{r14000}, @samp{r16000},
13560
@samp{sb1},
13561
@samp{sr71000},
13562
@samp{vr4100}, @samp{vr4111}, @samp{vr4120}, @samp{vr4130}, @samp{vr4300},
13563
@samp{vr5000}, @samp{vr5400}, @samp{vr5500}
13564
and @samp{xlr}.
13565
The special value @samp{from-abi} selects the
13566
most compatible architecture for the selected ABI (that is,
13567
@samp{mips1} for 32-bit ABIs and @samp{mips3} for 64-bit ABIs)@.
13568
 
13569
Native Linux/GNU toolchains also support the value @samp{native},
13570
which selects the best architecture option for the host processor.
13571
@option{-march=native} has no effect if GCC does not recognize
13572
the processor.
13573
 
13574
In processor names, a final @samp{000} can be abbreviated as @samp{k}
13575
(for example, @samp{-march=r2k}).  Prefixes are optional, and
13576
@samp{vr} may be written @samp{r}.
13577
 
13578
Names of the form @samp{@var{n}f2_1} refer to processors with
13579
FPUs clocked at half the rate of the core, names of the form
13580
@samp{@var{n}f1_1} refer to processors with FPUs clocked at the same
13581
rate as the core, and names of the form @samp{@var{n}f3_2} refer to
13582
processors with FPUs clocked a ratio of 3:2 with respect to the core.
13583
For compatibility reasons, @samp{@var{n}f} is accepted as a synonym
13584
for @samp{@var{n}f2_1} while @samp{@var{n}x} and @samp{@var{b}fx} are
13585
accepted as synonyms for @samp{@var{n}f1_1}.
13586
 
13587
GCC defines two macros based on the value of this option.  The first
13588
is @samp{_MIPS_ARCH}, which gives the name of target architecture, as
13589
a string.  The second has the form @samp{_MIPS_ARCH_@var{foo}},
13590
where @var{foo} is the capitalized value of @samp{_MIPS_ARCH}@.
13591
For example, @samp{-march=r2000} will set @samp{_MIPS_ARCH}
13592
to @samp{"r2000"} and define the macro @samp{_MIPS_ARCH_R2000}.
13593
 
13594
Note that the @samp{_MIPS_ARCH} macro uses the processor names given
13595
above.  In other words, it will have the full prefix and will not
13596
abbreviate @samp{000} as @samp{k}.  In the case of @samp{from-abi},
13597
the macro names the resolved architecture (either @samp{"mips1"} or
13598
@samp{"mips3"}).  It names the default architecture when no
13599
@option{-march} option is given.
13600
 
13601
@item -mtune=@var{arch}
13602
@opindex mtune
13603
Optimize for @var{arch}.  Among other things, this option controls
13604
the way instructions are scheduled, and the perceived cost of arithmetic
13605
operations.  The list of @var{arch} values is the same as for
13606
@option{-march}.
13607
 
13608
When this option is not used, GCC will optimize for the processor
13609
specified by @option{-march}.  By using @option{-march} and
13610
@option{-mtune} together, it is possible to generate code that will
13611
run on a family of processors, but optimize the code for one
13612
particular member of that family.
13613
 
13614
@samp{-mtune} defines the macros @samp{_MIPS_TUNE} and
13615
@samp{_MIPS_TUNE_@var{foo}}, which work in the same way as the
13616
@samp{-march} ones described above.
13617
 
13618
@item -mips1
13619
@opindex mips1
13620
Equivalent to @samp{-march=mips1}.
13621
 
13622
@item -mips2
13623
@opindex mips2
13624
Equivalent to @samp{-march=mips2}.
13625
 
13626
@item -mips3
13627
@opindex mips3
13628
Equivalent to @samp{-march=mips3}.
13629
 
13630
@item -mips4
13631
@opindex mips4
13632
Equivalent to @samp{-march=mips4}.
13633
 
13634
@item -mips32
13635
@opindex mips32
13636
Equivalent to @samp{-march=mips32}.
13637
 
13638
@item -mips32r2
13639
@opindex mips32r2
13640
Equivalent to @samp{-march=mips32r2}.
13641
 
13642
@item -mips64
13643
@opindex mips64
13644
Equivalent to @samp{-march=mips64}.
13645
 
13646
@item -mips64r2
13647
@opindex mips64r2
13648
Equivalent to @samp{-march=mips64r2}.
13649
 
13650
@item -mips16
13651
@itemx -mno-mips16
13652
@opindex mips16
13653
@opindex mno-mips16
13654
Generate (do not generate) MIPS16 code.  If GCC is targetting a
13655
MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE@.
13656
 
13657
MIPS16 code generation can also be controlled on a per-function basis
13658
by means of @code{mips16} and @code{nomips16} attributes.
13659
@xref{Function Attributes}, for more information.
13660
 
13661
@item -mflip-mips16
13662
@opindex mflip-mips16
13663
Generate MIPS16 code on alternating functions.  This option is provided
13664
for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
13665
not intended for ordinary use in compiling user code.
13666
 
13667
@item -minterlink-mips16
13668
@itemx -mno-interlink-mips16
13669
@opindex minterlink-mips16
13670
@opindex mno-interlink-mips16
13671
Require (do not require) that non-MIPS16 code be link-compatible with
13672
MIPS16 code.
13673
 
13674
For example, non-MIPS16 code cannot jump directly to MIPS16 code;
13675
it must either use a call or an indirect jump.  @option{-minterlink-mips16}
13676
therefore disables direct jumps unless GCC knows that the target of the
13677
jump is not MIPS16.
13678
 
13679
@item -mabi=32
13680
@itemx -mabi=o64
13681
@itemx -mabi=n32
13682
@itemx -mabi=64
13683
@itemx -mabi=eabi
13684
@opindex mabi=32
13685
@opindex mabi=o64
13686
@opindex mabi=n32
13687
@opindex mabi=64
13688
@opindex mabi=eabi
13689
Generate code for the given ABI@.
13690
 
13691
Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
13692
generates 64-bit code when you select a 64-bit architecture, but you
13693
can use @option{-mgp32} to get 32-bit code instead.
13694
 
13695
For information about the O64 ABI, see
13696
@w{@uref{http://gcc.gnu.org/projects/mipso64-abi.html}}.
13697
 
13698
GCC supports a variant of the o32 ABI in which floating-point registers
13699
are 64 rather than 32 bits wide.  You can select this combination with
13700
@option{-mabi=32} @option{-mfp64}.  This ABI relies on the @samp{mthc1}
13701
and @samp{mfhc1} instructions and is therefore only supported for
13702
MIPS32R2 processors.
13703
 
13704
The register assignments for arguments and return values remain the
13705
same, but each scalar value is passed in a single 64-bit register
13706
rather than a pair of 32-bit registers.  For example, scalar
13707
floating-point values are returned in @samp{$f0} only, not a
13708
@samp{$f0}/@samp{$f1} pair.  The set of call-saved registers also
13709
remains the same, but all 64 bits are saved.
13710
 
13711
@item -mabicalls
13712
@itemx -mno-abicalls
13713
@opindex mabicalls
13714
@opindex mno-abicalls
13715
Generate (do not generate) code that is suitable for SVR4-style
13716
dynamic objects.  @option{-mabicalls} is the default for SVR4-based
13717
systems.
13718
 
13719
@item -mshared
13720
@itemx -mno-shared
13721
Generate (do not generate) code that is fully position-independent,
13722
and that can therefore be linked into shared libraries.  This option
13723
only affects @option{-mabicalls}.
13724
 
13725
All @option{-mabicalls} code has traditionally been position-independent,
13726
regardless of options like @option{-fPIC} and @option{-fpic}.  However,
13727
as an extension, the GNU toolchain allows executables to use absolute
13728
accesses for locally-binding symbols.  It can also use shorter GP
13729
initialization sequences and generate direct calls to locally-defined
13730
functions.  This mode is selected by @option{-mno-shared}.
13731
 
13732
@option{-mno-shared} depends on binutils 2.16 or higher and generates
13733
objects that can only be linked by the GNU linker.  However, the option
13734
does not affect the ABI of the final executable; it only affects the ABI
13735
of relocatable objects.  Using @option{-mno-shared} will generally make
13736
executables both smaller and quicker.
13737
 
13738
@option{-mshared} is the default.
13739
 
13740
@item -mplt
13741
@itemx -mno-plt
13742
@opindex mplt
13743
@opindex mno-plt
13744
Assume (do not assume) that the static and dynamic linkers
13745
support PLTs and copy relocations.  This option only affects
13746
@samp{-mno-shared -mabicalls}.  For the n64 ABI, this option
13747
has no effect without @samp{-msym32}.
13748
 
13749
You can make @option{-mplt} the default by configuring
13750
GCC with @option{--with-mips-plt}.  The default is
13751
@option{-mno-plt} otherwise.
13752
 
13753
@item -mxgot
13754
@itemx -mno-xgot
13755
@opindex mxgot
13756
@opindex mno-xgot
13757
Lift (do not lift) the usual restrictions on the size of the global
13758
offset table.
13759
 
13760
GCC normally uses a single instruction to load values from the GOT@.
13761
While this is relatively efficient, it will only work if the GOT
13762
is smaller than about 64k.  Anything larger will cause the linker
13763
to report an error such as:
13764
 
13765
@cindex relocation truncated to fit (MIPS)
13766
@smallexample
13767
relocation truncated to fit: R_MIPS_GOT16 foobar
13768
@end smallexample
13769
 
13770
If this happens, you should recompile your code with @option{-mxgot}.
13771
It should then work with very large GOTs, although it will also be
13772
less efficient, since it will take three instructions to fetch the
13773
value of a global symbol.
13774
 
13775
Note that some linkers can create multiple GOTs.  If you have such a
13776
linker, you should only need to use @option{-mxgot} when a single object
13777
file accesses more than 64k's worth of GOT entries.  Very few do.
13778
 
13779
These options have no effect unless GCC is generating position
13780
independent code.
13781
 
13782
@item -mgp32
13783
@opindex mgp32
13784
Assume that general-purpose registers are 32 bits wide.
13785
 
13786
@item -mgp64
13787
@opindex mgp64
13788
Assume that general-purpose registers are 64 bits wide.
13789
 
13790
@item -mfp32
13791
@opindex mfp32
13792
Assume that floating-point registers are 32 bits wide.
13793
 
13794
@item -mfp64
13795
@opindex mfp64
13796
Assume that floating-point registers are 64 bits wide.
13797
 
13798
@item -mhard-float
13799
@opindex mhard-float
13800
Use floating-point coprocessor instructions.
13801
 
13802
@item -msoft-float
13803
@opindex msoft-float
13804
Do not use floating-point coprocessor instructions.  Implement
13805
floating-point calculations using library calls instead.
13806
 
13807
@item -msingle-float
13808
@opindex msingle-float
13809
Assume that the floating-point coprocessor only supports single-precision
13810
operations.
13811
 
13812
@item -mdouble-float
13813
@opindex mdouble-float
13814
Assume that the floating-point coprocessor supports double-precision
13815
operations.  This is the default.
13816
 
13817
@item -mllsc
13818
@itemx -mno-llsc
13819
@opindex mllsc
13820
@opindex mno-llsc
13821
Use (do not use) @samp{ll}, @samp{sc}, and @samp{sync} instructions to
13822
implement atomic memory built-in functions.  When neither option is
13823
specified, GCC will use the instructions if the target architecture
13824
supports them.
13825
 
13826
@option{-mllsc} is useful if the runtime environment can emulate the
13827
instructions and @option{-mno-llsc} can be useful when compiling for
13828
nonstandard ISAs.  You can make either option the default by
13829
configuring GCC with @option{--with-llsc} and @option{--without-llsc}
13830
respectively.  @option{--with-llsc} is the default for some
13831
configurations; see the installation documentation for details.
13832
 
13833
@item -mdsp
13834
@itemx -mno-dsp
13835
@opindex mdsp
13836
@opindex mno-dsp
13837
Use (do not use) revision 1 of the MIPS DSP ASE@.
13838
@xref{MIPS DSP Built-in Functions}.  This option defines the
13839
preprocessor macro @samp{__mips_dsp}.  It also defines
13840
@samp{__mips_dsp_rev} to 1.
13841
 
13842
@item -mdspr2
13843
@itemx -mno-dspr2
13844
@opindex mdspr2
13845
@opindex mno-dspr2
13846
Use (do not use) revision 2 of the MIPS DSP ASE@.
13847
@xref{MIPS DSP Built-in Functions}.  This option defines the
13848
preprocessor macros @samp{__mips_dsp} and @samp{__mips_dspr2}.
13849
It also defines @samp{__mips_dsp_rev} to 2.
13850
 
13851
@item -msmartmips
13852
@itemx -mno-smartmips
13853
@opindex msmartmips
13854
@opindex mno-smartmips
13855
Use (do not use) the MIPS SmartMIPS ASE.
13856
 
13857
@item -mpaired-single
13858
@itemx -mno-paired-single
13859
@opindex mpaired-single
13860
@opindex mno-paired-single
13861
Use (do not use) paired-single floating-point instructions.
13862
@xref{MIPS Paired-Single Support}.  This option requires
13863
hardware floating-point support to be enabled.
13864
 
13865
@item -mdmx
13866
@itemx -mno-mdmx
13867
@opindex mdmx
13868
@opindex mno-mdmx
13869
Use (do not use) MIPS Digital Media Extension instructions.
13870
This option can only be used when generating 64-bit code and requires
13871
hardware floating-point support to be enabled.
13872
 
13873
@item -mips3d
13874
@itemx -mno-mips3d
13875
@opindex mips3d
13876
@opindex mno-mips3d
13877
Use (do not use) the MIPS-3D ASE@.  @xref{MIPS-3D Built-in Functions}.
13878
The option @option{-mips3d} implies @option{-mpaired-single}.
13879
 
13880
@item -mmt
13881
@itemx -mno-mt
13882
@opindex mmt
13883
@opindex mno-mt
13884
Use (do not use) MT Multithreading instructions.
13885
 
13886
@item -mlong64
13887
@opindex mlong64
13888
Force @code{long} types to be 64 bits wide.  See @option{-mlong32} for
13889
an explanation of the default and the way that the pointer size is
13890
determined.
13891
 
13892
@item -mlong32
13893
@opindex mlong32
13894
Force @code{long}, @code{int}, and pointer types to be 32 bits wide.
13895
 
13896
The default size of @code{int}s, @code{long}s and pointers depends on
13897
the ABI@.  All the supported ABIs use 32-bit @code{int}s.  The n64 ABI
13898
uses 64-bit @code{long}s, as does the 64-bit EABI; the others use
13899
32-bit @code{long}s.  Pointers are the same size as @code{long}s,
13900
or the same size as integer registers, whichever is smaller.
13901
 
13902
@item -msym32
13903
@itemx -mno-sym32
13904
@opindex msym32
13905
@opindex mno-sym32
13906
Assume (do not assume) that all symbols have 32-bit values, regardless
13907
of the selected ABI@.  This option is useful in combination with
13908
@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC
13909
to generate shorter and faster references to symbolic addresses.
13910
 
13911
@item -G @var{num}
13912
@opindex G
13913
Put definitions of externally-visible data in a small data section
13914
if that data is no bigger than @var{num} bytes.  GCC can then access
13915
the data more efficiently; see @option{-mgpopt} for details.
13916
 
13917
The default @option{-G} option depends on the configuration.
13918
 
13919
@item -mlocal-sdata
13920
@itemx -mno-local-sdata
13921
@opindex mlocal-sdata
13922
@opindex mno-local-sdata
13923
Extend (do not extend) the @option{-G} behavior to local data too,
13924
such as to static variables in C@.  @option{-mlocal-sdata} is the
13925
default for all configurations.
13926
 
13927
If the linker complains that an application is using too much small data,
13928
you might want to try rebuilding the less performance-critical parts with
13929
@option{-mno-local-sdata}.  You might also want to build large
13930
libraries with @option{-mno-local-sdata}, so that the libraries leave
13931
more room for the main program.
13932
 
13933
@item -mextern-sdata
13934
@itemx -mno-extern-sdata
13935
@opindex mextern-sdata
13936
@opindex mno-extern-sdata
13937
Assume (do not assume) that externally-defined data will be in
13938
a small data section if that data is within the @option{-G} limit.
13939
@option{-mextern-sdata} is the default for all configurations.
13940
 
13941
If you compile a module @var{Mod} with @option{-mextern-sdata} @option{-G
13942
@var{num}} @option{-mgpopt}, and @var{Mod} references a variable @var{Var}
13943
that is no bigger than @var{num} bytes, you must make sure that @var{Var}
13944
is placed in a small data section.  If @var{Var} is defined by another
13945
module, you must either compile that module with a high-enough
13946
@option{-G} setting or attach a @code{section} attribute to @var{Var}'s
13947
definition.  If @var{Var} is common, you must link the application
13948
with a high-enough @option{-G} setting.
13949
 
13950
The easiest way of satisfying these restrictions is to compile
13951
and link every module with the same @option{-G} option.  However,
13952
you may wish to build a library that supports several different
13953
small data limits.  You can do this by compiling the library with
13954
the highest supported @option{-G} setting and additionally using
13955
@option{-mno-extern-sdata} to stop the library from making assumptions
13956
about externally-defined data.
13957
 
13958
@item -mgpopt
13959
@itemx -mno-gpopt
13960
@opindex mgpopt
13961
@opindex mno-gpopt
13962
Use (do not use) GP-relative accesses for symbols that are known to be
13963
in a small data section; see @option{-G}, @option{-mlocal-sdata} and
13964
@option{-mextern-sdata}.  @option{-mgpopt} is the default for all
13965
configurations.
13966
 
13967
@option{-mno-gpopt} is useful for cases where the @code{$gp} register
13968
might not hold the value of @code{_gp}.  For example, if the code is
13969
part of a library that might be used in a boot monitor, programs that
13970
call boot monitor routines will pass an unknown value in @code{$gp}.
13971
(In such situations, the boot monitor itself would usually be compiled
13972
with @option{-G0}.)
13973
 
13974
@option{-mno-gpopt} implies @option{-mno-local-sdata} and
13975
@option{-mno-extern-sdata}.
13976
 
13977
@item -membedded-data
13978
@itemx -mno-embedded-data
13979
@opindex membedded-data
13980
@opindex mno-embedded-data
13981
Allocate variables to the read-only data section first if possible, then
13982
next in the small data section if possible, otherwise in data.  This gives
13983
slightly slower code than the default, but reduces the amount of RAM required
13984
when executing, and thus may be preferred for some embedded systems.
13985
 
13986
@item -muninit-const-in-rodata
13987
@itemx -mno-uninit-const-in-rodata
13988
@opindex muninit-const-in-rodata
13989
@opindex mno-uninit-const-in-rodata
13990
Put uninitialized @code{const} variables in the read-only data section.
13991
This option is only meaningful in conjunction with @option{-membedded-data}.
13992
 
13993
@item -mcode-readable=@var{setting}
13994
@opindex mcode-readable
13995
Specify whether GCC may generate code that reads from executable sections.
13996
There are three possible settings:
13997
 
13998
@table @gcctabopt
13999
@item -mcode-readable=yes
14000
Instructions may freely access executable sections.  This is the
14001
default setting.
14002
 
14003
@item -mcode-readable=pcrel
14004
MIPS16 PC-relative load instructions can access executable sections,
14005
but other instructions must not do so.  This option is useful on 4KSc
14006
and 4KSd processors when the code TLBs have the Read Inhibit bit set.
14007
It is also useful on processors that can be configured to have a dual
14008
instruction/data SRAM interface and that, like the M4K, automatically
14009
redirect PC-relative loads to the instruction RAM.
14010
 
14011
@item -mcode-readable=no
14012
Instructions must not access executable sections.  This option can be
14013
useful on targets that are configured to have a dual instruction/data
14014
SRAM interface but that (unlike the M4K) do not automatically redirect
14015
PC-relative loads to the instruction RAM.
14016
@end table
14017
 
14018
@item -msplit-addresses
14019
@itemx -mno-split-addresses
14020
@opindex msplit-addresses
14021
@opindex mno-split-addresses
14022
Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler
14023
relocation operators.  This option has been superseded by
14024
@option{-mexplicit-relocs} but is retained for backwards compatibility.
14025
 
14026
@item -mexplicit-relocs
14027
@itemx -mno-explicit-relocs
14028
@opindex mexplicit-relocs
14029
@opindex mno-explicit-relocs
14030
Use (do not use) assembler relocation operators when dealing with symbolic
14031
addresses.  The alternative, selected by @option{-mno-explicit-relocs},
14032
is to use assembler macros instead.
14033
 
14034
@option{-mexplicit-relocs} is the default if GCC was configured
14035
to use an assembler that supports relocation operators.
14036
 
14037
@item -mcheck-zero-division
14038
@itemx -mno-check-zero-division
14039
@opindex mcheck-zero-division
14040
@opindex mno-check-zero-division
14041
Trap (do not trap) on integer division by zero.
14042
 
14043
The default is @option{-mcheck-zero-division}.
14044
 
14045
@item -mdivide-traps
14046
@itemx -mdivide-breaks
14047
@opindex mdivide-traps
14048
@opindex mdivide-breaks
14049
MIPS systems check for division by zero by generating either a
14050
conditional trap or a break instruction.  Using traps results in
14051
smaller code, but is only supported on MIPS II and later.  Also, some
14052
versions of the Linux kernel have a bug that prevents trap from
14053
generating the proper signal (@code{SIGFPE}).  Use @option{-mdivide-traps} to
14054
allow conditional traps on architectures that support them and
14055
@option{-mdivide-breaks} to force the use of breaks.
14056
 
14057
The default is usually @option{-mdivide-traps}, but this can be
14058
overridden at configure time using @option{--with-divide=breaks}.
14059
Divide-by-zero checks can be completely disabled using
14060
@option{-mno-check-zero-division}.
14061
 
14062
@item -mmemcpy
14063
@itemx -mno-memcpy
14064
@opindex mmemcpy
14065
@opindex mno-memcpy
14066
Force (do not force) the use of @code{memcpy()} for non-trivial block
14067
moves.  The default is @option{-mno-memcpy}, which allows GCC to inline
14068
most constant-sized copies.
14069
 
14070
@item -mlong-calls
14071
@itemx -mno-long-calls
14072
@opindex mlong-calls
14073
@opindex mno-long-calls
14074
Disable (do not disable) use of the @code{jal} instruction.  Calling
14075
functions using @code{jal} is more efficient but requires the caller
14076
and callee to be in the same 256 megabyte segment.
14077
 
14078
This option has no effect on abicalls code.  The default is
14079
@option{-mno-long-calls}.
14080
 
14081
@item -mmad
14082
@itemx -mno-mad
14083
@opindex mmad
14084
@opindex mno-mad
14085
Enable (disable) use of the @code{mad}, @code{madu} and @code{mul}
14086
instructions, as provided by the R4650 ISA@.
14087
 
14088
@item -mfused-madd
14089
@itemx -mno-fused-madd
14090
@opindex mfused-madd
14091
@opindex mno-fused-madd
14092
Enable (disable) use of the floating point multiply-accumulate
14093
instructions, when they are available.  The default is
14094
@option{-mfused-madd}.
14095
 
14096
When multiply-accumulate instructions are used, the intermediate
14097
product is calculated to infinite precision and is not subject to
14098
the FCSR Flush to Zero bit.  This may be undesirable in some
14099
circumstances.
14100
 
14101
@item -nocpp
14102
@opindex nocpp
14103
Tell the MIPS assembler to not run its preprocessor over user
14104
assembler files (with a @samp{.s} suffix) when assembling them.
14105
 
14106
@item -mfix-r4000
14107
@itemx -mno-fix-r4000
14108
@opindex mfix-r4000
14109
@opindex mno-fix-r4000
14110
Work around certain R4000 CPU errata:
14111
@itemize @minus
14112
@item
14113
A double-word or a variable shift may give an incorrect result if executed
14114
immediately after starting an integer division.
14115
@item
14116
A double-word or a variable shift may give an incorrect result if executed
14117
while an integer multiplication is in progress.
14118
@item
14119
An integer division may give an incorrect result if started in a delay slot
14120
of a taken branch or a jump.
14121
@end itemize
14122
 
14123
@item -mfix-r4400
14124
@itemx -mno-fix-r4400
14125
@opindex mfix-r4400
14126
@opindex mno-fix-r4400
14127
Work around certain R4400 CPU errata:
14128
@itemize @minus
14129
@item
14130
A double-word or a variable shift may give an incorrect result if executed
14131
immediately after starting an integer division.
14132
@end itemize
14133
 
14134
@item -mfix-r10000
14135
@itemx -mno-fix-r10000
14136
@opindex mfix-r10000
14137
@opindex mno-fix-r10000
14138
Work around certain R10000 errata:
14139
@itemize @minus
14140
@item
14141
@code{ll}/@code{sc} sequences may not behave atomically on revisions
14142
prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
14143
@end itemize
14144
 
14145
This option can only be used if the target architecture supports
14146
branch-likely instructions.  @option{-mfix-r10000} is the default when
14147
@option{-march=r10000} is used; @option{-mno-fix-r10000} is the default
14148
otherwise.
14149
 
14150
@item -mfix-vr4120
14151
@itemx -mno-fix-vr4120
14152
@opindex mfix-vr4120
14153
Work around certain VR4120 errata:
14154
@itemize @minus
14155
@item
14156
@code{dmultu} does not always produce the correct result.
14157
@item
14158
@code{div} and @code{ddiv} do not always produce the correct result if one
14159
of the operands is negative.
14160
@end itemize
14161
The workarounds for the division errata rely on special functions in
14162
@file{libgcc.a}.  At present, these functions are only provided by
14163
the @code{mips64vr*-elf} configurations.
14164
 
14165
Other VR4120 errata require a nop to be inserted between certain pairs of
14166
instructions.  These errata are handled by the assembler, not by GCC itself.
14167
 
14168
@item -mfix-vr4130
14169
@opindex mfix-vr4130
14170
Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
14171
workarounds are implemented by the assembler rather than by GCC,
14172
although GCC will avoid using @code{mflo} and @code{mfhi} if the
14173
VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi}
14174
instructions are available instead.
14175
 
14176
@item -mfix-sb1
14177
@itemx -mno-fix-sb1
14178
@opindex mfix-sb1
14179
Work around certain SB-1 CPU core errata.
14180
(This flag currently works around the SB-1 revision 2
14181
``F1'' and ``F2'' floating point errata.)
14182
 
14183
@item -mr10k-cache-barrier=@var{setting}
14184
@opindex mr10k-cache-barrier
14185
Specify whether GCC should insert cache barriers to avoid the
14186
side-effects of speculation on R10K processors.
14187
 
14188
In common with many processors, the R10K tries to predict the outcome
14189
of a conditional branch and speculatively executes instructions from
14190
the ``taken'' branch.  It later aborts these instructions if the
14191
predicted outcome was wrong.  However, on the R10K, even aborted
14192
instructions can have side effects.
14193
 
14194
This problem only affects kernel stores and, depending on the system,
14195
kernel loads.  As an example, a speculatively-executed store may load
14196
the target memory into cache and mark the cache line as dirty, even if
14197
the store itself is later aborted.  If a DMA operation writes to the
14198
same area of memory before the ``dirty'' line is flushed, the cached
14199
data will overwrite the DMA-ed data.  See the R10K processor manual
14200
for a full description, including other potential problems.
14201
 
14202
One workaround is to insert cache barrier instructions before every memory
14203
access that might be speculatively executed and that might have side
14204
effects even if aborted.  @option{-mr10k-cache-barrier=@var{setting}}
14205
controls GCC's implementation of this workaround.  It assumes that
14206
aborted accesses to any byte in the following regions will not have
14207
side effects:
14208
 
14209
@enumerate
14210
@item
14211
the memory occupied by the current function's stack frame;
14212
 
14213
@item
14214
the memory occupied by an incoming stack argument;
14215
 
14216
@item
14217
the memory occupied by an object with a link-time-constant address.
14218
@end enumerate
14219
 
14220
It is the kernel's responsibility to ensure that speculative
14221
accesses to these regions are indeed safe.
14222
 
14223
If the input program contains a function declaration such as:
14224
 
14225
@smallexample
14226
void foo (void);
14227
@end smallexample
14228
 
14229
then the implementation of @code{foo} must allow @code{j foo} and
14230
@code{jal foo} to be executed speculatively.  GCC honors this
14231
restriction for functions it compiles itself.  It expects non-GCC
14232
functions (such as hand-written assembly code) to do the same.
14233
 
14234
The option has three forms:
14235
 
14236
@table @gcctabopt
14237
@item -mr10k-cache-barrier=load-store
14238
Insert a cache barrier before a load or store that might be
14239
speculatively executed and that might have side effects even
14240
if aborted.
14241
 
14242
@item -mr10k-cache-barrier=store
14243
Insert a cache barrier before a store that might be speculatively
14244
executed and that might have side effects even if aborted.
14245
 
14246
@item -mr10k-cache-barrier=none
14247
Disable the insertion of cache barriers.  This is the default setting.
14248
@end table
14249
 
14250
@item -mflush-func=@var{func}
14251
@itemx -mno-flush-func
14252
@opindex mflush-func
14253
Specifies the function to call to flush the I and D caches, or to not
14254
call any such function.  If called, the function must take the same
14255
arguments as the common @code{_flush_func()}, that is, the address of the
14256
memory range for which the cache is being flushed, the size of the
14257
memory range, and the number 3 (to flush both caches).  The default
14258
depends on the target GCC was configured for, but commonly is either
14259
@samp{_flush_func} or @samp{__cpu_flush}.
14260
 
14261
@item mbranch-cost=@var{num}
14262
@opindex mbranch-cost
14263
Set the cost of branches to roughly @var{num} ``simple'' instructions.
14264
This cost is only a heuristic and is not guaranteed to produce
14265
consistent results across releases.  A zero cost redundantly selects
14266
the default, which is based on the @option{-mtune} setting.
14267
 
14268
@item -mbranch-likely
14269
@itemx -mno-branch-likely
14270
@opindex mbranch-likely
14271
@opindex mno-branch-likely
14272
Enable or disable use of Branch Likely instructions, regardless of the
14273
default for the selected architecture.  By default, Branch Likely
14274
instructions may be generated if they are supported by the selected
14275
architecture.  An exception is for the MIPS32 and MIPS64 architectures
14276
and processors which implement those architectures; for those, Branch
14277
Likely instructions will not be generated by default because the MIPS32
14278
and MIPS64 architectures specifically deprecate their use.
14279
 
14280
@item -mfp-exceptions
14281
@itemx -mno-fp-exceptions
14282
@opindex mfp-exceptions
14283
Specifies whether FP exceptions are enabled.  This affects how we schedule
14284
FP instructions for some processors.  The default is that FP exceptions are
14285
enabled.
14286
 
14287
For instance, on the SB-1, if FP exceptions are disabled, and we are emitting
14288
64-bit code, then we can use both FP pipes.  Otherwise, we can only use one
14289
FP pipe.
14290
 
14291
@item -mvr4130-align
14292
@itemx -mno-vr4130-align
14293
@opindex mvr4130-align
14294
The VR4130 pipeline is two-way superscalar, but can only issue two
14295
instructions together if the first one is 8-byte aligned.  When this
14296
option is enabled, GCC will align pairs of instructions that it
14297
thinks should execute in parallel.
14298
 
14299
This option only has an effect when optimizing for the VR4130.
14300
It normally makes code faster, but at the expense of making it bigger.
14301
It is enabled by default at optimization level @option{-O3}.
14302
 
14303
@item -msynci
14304
@itemx -mno-synci
14305
@opindex msynci
14306
Enable (disable) generation of @code{synci} instructions on
14307
architectures that support it.  The @code{synci} instructions (if
14308
enabled) will be generated when @code{__builtin___clear_cache()} is
14309
compiled.
14310
 
14311
This option defaults to @code{-mno-synci}, but the default can be
14312
overridden by configuring with @code{--with-synci}.
14313
 
14314
When compiling code for single processor systems, it is generally safe
14315
to use @code{synci}.  However, on many multi-core (SMP) systems, it
14316
will not invalidate the instruction caches on all cores and may lead
14317
to undefined behavior.
14318
 
14319
@item -mrelax-pic-calls
14320
@itemx -mno-relax-pic-calls
14321
@opindex mrelax-pic-calls
14322
Try to turn PIC calls that are normally dispatched via register
14323
@code{$25} into direct calls.  This is only possible if the linker can
14324
resolve the destination at link-time and if the destination is within
14325
range for a direct call.
14326
 
14327
@option{-mrelax-pic-calls} is the default if GCC was configured to use
14328
an assembler and a linker that supports the @code{.reloc} assembly
14329
directive and @code{-mexplicit-relocs} is in effect.  With
14330
@code{-mno-explicit-relocs}, this optimization can be performed by the
14331
assembler and the linker alone without help from the compiler.
14332
 
14333
@item -mmcount-ra-address
14334
@itemx -mno-mcount-ra-address
14335
@opindex mmcount-ra-address
14336
@opindex mno-mcount-ra-address
14337
Emit (do not emit) code that allows @code{_mcount} to modify the
14338
calling function's return address.  When enabled, this option extends
14339
the usual @code{_mcount} interface with a new @var{ra-address}
14340
parameter, which has type @code{intptr_t *} and is passed in register
14341
@code{$12}.  @code{_mcount} can then modify the return address by
14342
doing both of the following:
14343
@itemize
14344
@item
14345
Returning the new address in register @code{$31}.
14346
@item
14347
Storing the new address in @code{*@var{ra-address}},
14348
if @var{ra-address} is nonnull.
14349
@end itemize
14350
 
14351
The default is @option{-mno-mcount-ra-address}.
14352
 
14353
@end table
14354
 
14355
@node MMIX Options
14356
@subsection MMIX Options
14357
@cindex MMIX Options
14358
 
14359
These options are defined for the MMIX:
14360
 
14361
@table @gcctabopt
14362
@item -mlibfuncs
14363
@itemx -mno-libfuncs
14364
@opindex mlibfuncs
14365
@opindex mno-libfuncs
14366
Specify that intrinsic library functions are being compiled, passing all
14367
values in registers, no matter the size.
14368
 
14369
@item -mepsilon
14370
@itemx -mno-epsilon
14371
@opindex mepsilon
14372
@opindex mno-epsilon
14373
Generate floating-point comparison instructions that compare with respect
14374
to the @code{rE} epsilon register.
14375
 
14376
@item -mabi=mmixware
14377
@itemx -mabi=gnu
14378
@opindex mabi=mmixware
14379
@opindex mabi=gnu
14380
Generate code that passes function parameters and return values that (in
14381
the called function) are seen as registers @code{$0} and up, as opposed to
14382
the GNU ABI which uses global registers @code{$231} and up.
14383
 
14384
@item -mzero-extend
14385
@itemx -mno-zero-extend
14386
@opindex mzero-extend
14387
@opindex mno-zero-extend
14388
When reading data from memory in sizes shorter than 64 bits, use (do not
14389
use) zero-extending load instructions by default, rather than
14390
sign-extending ones.
14391
 
14392
@item -mknuthdiv
14393
@itemx -mno-knuthdiv
14394
@opindex mknuthdiv
14395
@opindex mno-knuthdiv
14396
Make the result of a division yielding a remainder have the same sign as
14397
the divisor.  With the default, @option{-mno-knuthdiv}, the sign of the
14398
remainder follows the sign of the dividend.  Both methods are
14399
arithmetically valid, the latter being almost exclusively used.
14400
 
14401
@item -mtoplevel-symbols
14402
@itemx -mno-toplevel-symbols
14403
@opindex mtoplevel-symbols
14404
@opindex mno-toplevel-symbols
14405
Prepend (do not prepend) a @samp{:} to all global symbols, so the assembly
14406
code can be used with the @code{PREFIX} assembly directive.
14407
 
14408
@item -melf
14409
@opindex melf
14410
Generate an executable in the ELF format, rather than the default
14411
@samp{mmo} format used by the @command{mmix} simulator.
14412
 
14413
@item -mbranch-predict
14414
@itemx -mno-branch-predict
14415
@opindex mbranch-predict
14416
@opindex mno-branch-predict
14417
Use (do not use) the probable-branch instructions, when static branch
14418
prediction indicates a probable branch.
14419
 
14420
@item -mbase-addresses
14421
@itemx -mno-base-addresses
14422
@opindex mbase-addresses
14423
@opindex mno-base-addresses
14424
Generate (do not generate) code that uses @emph{base addresses}.  Using a
14425
base address automatically generates a request (handled by the assembler
14426
and the linker) for a constant to be set up in a global register.  The
14427
register is used for one or more base address requests within the range 0
14428
to 255 from the value held in the register.  The generally leads to short
14429
and fast code, but the number of different data items that can be
14430
addressed is limited.  This means that a program that uses lots of static
14431
data may require @option{-mno-base-addresses}.
14432
 
14433
@item -msingle-exit
14434
@itemx -mno-single-exit
14435
@opindex msingle-exit
14436
@opindex mno-single-exit
14437
Force (do not force) generated code to have a single exit point in each
14438
function.
14439
@end table
14440
 
14441
@node MN10300 Options
14442
@subsection MN10300 Options
14443
@cindex MN10300 options
14444
 
14445
These @option{-m} options are defined for Matsushita MN10300 architectures:
14446
 
14447
@table @gcctabopt
14448
@item -mmult-bug
14449
@opindex mmult-bug
14450
Generate code to avoid bugs in the multiply instructions for the MN10300
14451
processors.  This is the default.
14452
 
14453
@item -mno-mult-bug
14454
@opindex mno-mult-bug
14455
Do not generate code to avoid bugs in the multiply instructions for the
14456
MN10300 processors.
14457
 
14458
@item -mam33
14459
@opindex mam33
14460
Generate code which uses features specific to the AM33 processor.
14461
 
14462
@item -mno-am33
14463
@opindex mno-am33
14464
Do not generate code which uses features specific to the AM33 processor.  This
14465
is the default.
14466
 
14467
@item -mreturn-pointer-on-d0
14468
@opindex mreturn-pointer-on-d0
14469
When generating a function which returns a pointer, return the pointer
14470
in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
14471
only in a0, and attempts to call such functions without a prototype
14472
would result in errors.  Note that this option is on by default; use
14473
@option{-mno-return-pointer-on-d0} to disable it.
14474
 
14475
@item -mno-crt0
14476
@opindex mno-crt0
14477
Do not link in the C run-time initialization object file.
14478
 
14479
@item -mrelax
14480
@opindex mrelax
14481
Indicate to the linker that it should perform a relaxation optimization pass
14482
to shorten branches, calls and absolute memory addresses.  This option only
14483
has an effect when used on the command line for the final link step.
14484
 
14485
This option makes symbolic debugging impossible.
14486
@end table
14487
 
14488 333 jeremybenn
@node OpenRISC 1000 Options
14489
@subsection OpenRISC 1000 Options
14490
@cindex OpenRISC 1000 options
14491
 
14492
These @samp{-m} options are defined for OpenRISC 1000 implementations:
14493
 
14494
@table @gcctabopt
14495
 
14496
@item -mhard-float
14497
@opindex mhard-float
14498
Generate code to use hardware (single precision) floating point
14499
opcodes. The default is to use the software floating point library.
14500
 
14501
@item -msoft-float
14502
@opindex msoft-float
14503
Use the software library for floating point. This is enabled by default.
14504
 
14505
@item -mdouble-float
14506
@opindex mdouble-float
14507
Generate code to use double precision hardware floating point
14508
opcodes. The default is not to enable this.  Since no targets (hardware
14509
or modelled) currently implement the double precision floating point
14510
instruction set, this option is of little use, and also has not been
14511
properly tested.
14512
 
14513
@item -mhard-div
14514
@opindex mhard-div
14515
Generate code to use hardware divide instructions.  By default this is
14516
not enabled.
14517
 
14518
@item -msoft-div
14519
@opindex msoft-div
14520
Generate code to use the software library for division.  By default this
14521
is enabled.
14522
 
14523
@item -mhard-mul
14524
@opindex mhard-mul
14525
Generate code to use hardware multiply instructions.  By default this is
14526
enabled.
14527
 
14528
@quotation Note
14529
The standard Verilog RTL for OpenRISC includes a hardware multiply but
14530
not divide instruction, so this will be the correct setting.
14531
@end quotation
14532
 
14533
@item -msoft-mul
14534
@opindex msoft-mul
14535
Generate code to use the software library for multiplication.  By
14536
default this is not enabled.
14537
 
14538
@item -maj
14539
@opindex maj
14540
Align all branch and jump instructions on a double word boundary, padding with
14541
@samp{l.nop} where necessary.  It is not clear why this option exists, of
14542
why it should ever be used.  It is disabled by default and likely to be
14543
removed in a future release of GCC.
14544
 
14545
@item -msext
14546
@opindex msext
14547
Use sign extending instructions. By default this is not enabled. It is
14548
not clear why this has not been enabled by default, since the instructions
14549
concerned are all mandatory on the OpenRISC 1000.
14550
 
14551
@item -mcmov
14552
@opindex mcmov
14553
Use the @samp{l.cmov} instruction in generated code. This is an optional
14554
instruction on the OpenRISC 1000, so by default this option is not
14555
enabled.
14556
 
14557
@item -mlogue
14558
@opindex logue
14559
Generate the prologue and epilogue using patterns in the machine
14560
description, rather than fixed templates.  This potentially allows
14561
generation of more efficient code. However the functionality has not yet been
14562
fully tested, and is disabled by default.
14563
 
14564
@item -mror
14565
@opindex mror
14566
Use rotate instructions in generated code.  This is an optional
14567
instruction on the OpenRISC 1000, so by default this option is not
14568
enabled.
14569
 
14570
@item -msibcall
14571
@opindex msibcall
14572
Generate code to optimize tail calls of sibling functions.  This
14573
potentially allows generation of more efficient code.  However the
14574
functionality has not yet been fully tested, and is disabled by default.
14575
 
14576
@item -mor32-newlib
14577
@opindex mor32-newlib
14578
Use the headers for the simple OpenRISC 1000 newlib library when
14579
preprocessing and includes this library when linking.  This is a small C
14580
library, designed for standalone applications, which offers only
14581
standard output.
14582
 
14583
@item -mor32-newlib-uart
14584
@opindex mor32-newlib-uart
14585
Use the headers for the OpenRISC 1000 newlib library with UART support
14586
when preprocessing and includes this library when linking.  This is a
14587
small C library, designed for standalone applications, which includes a
14588
UART connection for I/O to and from standard output and standard input.
14589
 
14590
@end table
14591
 
14592 284 jeremybenn
@node PDP-11 Options
14593
@subsection PDP-11 Options
14594
@cindex PDP-11 Options
14595
 
14596
These options are defined for the PDP-11:
14597
 
14598
@table @gcctabopt
14599
@item -mfpu
14600
@opindex mfpu
14601
Use hardware FPP floating point.  This is the default.  (FIS floating
14602
point on the PDP-11/40 is not supported.)
14603
 
14604
@item -msoft-float
14605
@opindex msoft-float
14606
Do not use hardware floating point.
14607
 
14608
@item -mac0
14609
@opindex mac0
14610
Return floating-point results in ac0 (fr0 in Unix assembler syntax).
14611
 
14612
@item -mno-ac0
14613
@opindex mno-ac0
14614
Return floating-point results in memory.  This is the default.
14615
 
14616
@item -m40
14617
@opindex m40
14618
Generate code for a PDP-11/40.
14619
 
14620
@item -m45
14621
@opindex m45
14622
Generate code for a PDP-11/45.  This is the default.
14623
 
14624
@item -m10
14625
@opindex m10
14626
Generate code for a PDP-11/10.
14627
 
14628
@item -mbcopy-builtin
14629
@opindex mbcopy-builtin
14630
Use inline @code{movmemhi} patterns for copying memory.  This is the
14631
default.
14632
 
14633
@item -mbcopy
14634
@opindex mbcopy
14635
Do not use inline @code{movmemhi} patterns for copying memory.
14636
 
14637
@item -mint16
14638
@itemx -mno-int32
14639
@opindex mint16
14640
@opindex mno-int32
14641
Use 16-bit @code{int}.  This is the default.
14642
 
14643
@item -mint32
14644
@itemx -mno-int16
14645
@opindex mint32
14646
@opindex mno-int16
14647
Use 32-bit @code{int}.
14648
 
14649
@item -mfloat64
14650
@itemx -mno-float32
14651
@opindex mfloat64
14652
@opindex mno-float32
14653
Use 64-bit @code{float}.  This is the default.
14654
 
14655
@item -mfloat32
14656
@itemx -mno-float64
14657
@opindex mfloat32
14658
@opindex mno-float64
14659
Use 32-bit @code{float}.
14660
 
14661
@item -mabshi
14662
@opindex mabshi
14663
Use @code{abshi2} pattern.  This is the default.
14664
 
14665
@item -mno-abshi
14666
@opindex mno-abshi
14667
Do not use @code{abshi2} pattern.
14668
 
14669
@item -mbranch-expensive
14670
@opindex mbranch-expensive
14671
Pretend that branches are expensive.  This is for experimenting with
14672
code generation only.
14673
 
14674
@item -mbranch-cheap
14675
@opindex mbranch-cheap
14676
Do not pretend that branches are expensive.  This is the default.
14677
 
14678
@item -msplit
14679
@opindex msplit
14680
Generate code for a system with split I&D@.
14681
 
14682
@item -mno-split
14683
@opindex mno-split
14684
Generate code for a system without split I&D@.  This is the default.
14685
 
14686
@item -munix-asm
14687
@opindex munix-asm
14688
Use Unix assembler syntax.  This is the default when configured for
14689
@samp{pdp11-*-bsd}.
14690
 
14691
@item -mdec-asm
14692
@opindex mdec-asm
14693
Use DEC assembler syntax.  This is the default when configured for any
14694
PDP-11 target other than @samp{pdp11-*-bsd}.
14695
@end table
14696
 
14697
@node picoChip Options
14698
@subsection picoChip Options
14699
@cindex picoChip options
14700
 
14701
These @samp{-m} options are defined for picoChip implementations:
14702
 
14703
@table @gcctabopt
14704
 
14705
@item -mae=@var{ae_type}
14706
@opindex mcpu
14707
Set the instruction set, register set, and instruction scheduling
14708
parameters for array element type @var{ae_type}.  Supported values
14709
for @var{ae_type} are @samp{ANY}, @samp{MUL}, and @samp{MAC}.
14710
 
14711
@option{-mae=ANY} selects a completely generic AE type.  Code
14712
generated with this option will run on any of the other AE types.  The
14713
code will not be as efficient as it would be if compiled for a specific
14714
AE type, and some types of operation (e.g., multiplication) will not
14715
work properly on all types of AE.
14716
 
14717
@option{-mae=MUL} selects a MUL AE type.  This is the most useful AE type
14718
for compiled code, and is the default.
14719
 
14720
@option{-mae=MAC} selects a DSP-style MAC AE.  Code compiled with this
14721
option may suffer from poor performance of byte (char) manipulation,
14722
since the DSP AE does not provide hardware support for byte load/stores.
14723
 
14724
@item -msymbol-as-address
14725
Enable the compiler to directly use a symbol name as an address in a
14726
load/store instruction, without first loading it into a
14727
register.  Typically, the use of this option will generate larger
14728
programs, which run faster than when the option isn't used.  However, the
14729
results vary from program to program, so it is left as a user option,
14730
rather than being permanently enabled.
14731
 
14732
@item -mno-inefficient-warnings
14733
Disables warnings about the generation of inefficient code.  These
14734
warnings can be generated, for example, when compiling code which
14735
performs byte-level memory operations on the MAC AE type.  The MAC AE has
14736
no hardware support for byte-level memory operations, so all byte
14737
load/stores must be synthesized from word load/store operations.  This is
14738
inefficient and a warning will be generated indicating to the programmer
14739
that they should rewrite the code to avoid byte operations, or to target
14740
an AE type which has the necessary hardware support.  This option enables
14741
the warning to be turned off.
14742
 
14743
@end table
14744
 
14745
@node PowerPC Options
14746
@subsection PowerPC Options
14747
@cindex PowerPC options
14748
 
14749
These are listed under @xref{RS/6000 and PowerPC Options}.
14750
 
14751
@node RS/6000 and PowerPC Options
14752
@subsection IBM RS/6000 and PowerPC Options
14753
@cindex RS/6000 and PowerPC Options
14754
@cindex IBM RS/6000 and PowerPC Options
14755
 
14756
These @samp{-m} options are defined for the IBM RS/6000 and PowerPC:
14757
@table @gcctabopt
14758
@item -mpower
14759
@itemx -mno-power
14760
@itemx -mpower2
14761
@itemx -mno-power2
14762
@itemx -mpowerpc
14763
@itemx -mno-powerpc
14764
@itemx -mpowerpc-gpopt
14765
@itemx -mno-powerpc-gpopt
14766
@itemx -mpowerpc-gfxopt
14767
@itemx -mno-powerpc-gfxopt
14768
@itemx -mpowerpc64
14769
@itemx -mno-powerpc64
14770
@itemx -mmfcrf
14771
@itemx -mno-mfcrf
14772
@itemx -mpopcntb
14773
@itemx -mno-popcntb
14774
@itemx -mpopcntd
14775
@itemx -mno-popcntd
14776
@itemx -mfprnd
14777
@itemx -mno-fprnd
14778
@itemx -mcmpb
14779
@itemx -mno-cmpb
14780
@itemx -mmfpgpr
14781
@itemx -mno-mfpgpr
14782
@itemx -mhard-dfp
14783
@itemx -mno-hard-dfp
14784
@opindex mpower
14785
@opindex mno-power
14786
@opindex mpower2
14787
@opindex mno-power2
14788
@opindex mpowerpc
14789
@opindex mno-powerpc
14790
@opindex mpowerpc-gpopt
14791
@opindex mno-powerpc-gpopt
14792
@opindex mpowerpc-gfxopt
14793
@opindex mno-powerpc-gfxopt
14794
@opindex mpowerpc64
14795
@opindex mno-powerpc64
14796
@opindex mmfcrf
14797
@opindex mno-mfcrf
14798
@opindex mpopcntb
14799
@opindex mno-popcntb
14800
@opindex mpopcntd
14801
@opindex mno-popcntd
14802
@opindex mfprnd
14803
@opindex mno-fprnd
14804
@opindex mcmpb
14805
@opindex mno-cmpb
14806
@opindex mmfpgpr
14807
@opindex mno-mfpgpr
14808
@opindex mhard-dfp
14809
@opindex mno-hard-dfp
14810
GCC supports two related instruction set architectures for the
14811
RS/6000 and PowerPC@.  The @dfn{POWER} instruction set are those
14812
instructions supported by the @samp{rios} chip set used in the original
14813
RS/6000 systems and the @dfn{PowerPC} instruction set is the
14814
architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
14815
the IBM 4xx, 6xx, and follow-on microprocessors.
14816
 
14817
Neither architecture is a subset of the other.  However there is a
14818
large common subset of instructions supported by both.  An MQ
14819
register is included in processors supporting the POWER architecture.
14820
 
14821
You use these options to specify which instructions are available on the
14822
processor you are using.  The default value of these options is
14823
determined when configuring GCC@.  Specifying the
14824
@option{-mcpu=@var{cpu_type}} overrides the specification of these
14825
options.  We recommend you use the @option{-mcpu=@var{cpu_type}} option
14826
rather than the options listed above.
14827
 
14828
The @option{-mpower} option allows GCC to generate instructions that
14829
are found only in the POWER architecture and to use the MQ register.
14830
Specifying @option{-mpower2} implies @option{-power} and also allows GCC
14831
to generate instructions that are present in the POWER2 architecture but
14832
not the original POWER architecture.
14833
 
14834
The @option{-mpowerpc} option allows GCC to generate instructions that
14835
are found only in the 32-bit subset of the PowerPC architecture.
14836
Specifying @option{-mpowerpc-gpopt} implies @option{-mpowerpc} and also allows
14837
GCC to use the optional PowerPC architecture instructions in the
14838
General Purpose group, including floating-point square root.  Specifying
14839
@option{-mpowerpc-gfxopt} implies @option{-mpowerpc} and also allows GCC to
14840
use the optional PowerPC architecture instructions in the Graphics
14841
group, including floating-point select.
14842
 
14843
The @option{-mmfcrf} option allows GCC to generate the move from
14844
condition register field instruction implemented on the POWER4
14845
processor and other processors that support the PowerPC V2.01
14846
architecture.
14847
The @option{-mpopcntb} option allows GCC to generate the popcount and
14848
double precision FP reciprocal estimate instruction implemented on the
14849
POWER5 processor and other processors that support the PowerPC V2.02
14850
architecture.
14851
The @option{-mpopcntd} option allows GCC to generate the popcount
14852
instruction implemented on the POWER7 processor and other processors
14853
that support the PowerPC V2.06 architecture.
14854
The @option{-mfprnd} option allows GCC to generate the FP round to
14855
integer instructions implemented on the POWER5+ processor and other
14856
processors that support the PowerPC V2.03 architecture.
14857
The @option{-mcmpb} option allows GCC to generate the compare bytes
14858
instruction implemented on the POWER6 processor and other processors
14859
that support the PowerPC V2.05 architecture.
14860
The @option{-mmfpgpr} option allows GCC to generate the FP move to/from
14861
general purpose register instructions implemented on the POWER6X
14862
processor and other processors that support the extended PowerPC V2.05
14863
architecture.
14864
The @option{-mhard-dfp} option allows GCC to generate the decimal floating
14865
point instructions implemented on some POWER processors.
14866
 
14867
The @option{-mpowerpc64} option allows GCC to generate the additional
14868
64-bit instructions that are found in the full PowerPC64 architecture
14869
and to treat GPRs as 64-bit, doubleword quantities.  GCC defaults to
14870
@option{-mno-powerpc64}.
14871
 
14872
If you specify both @option{-mno-power} and @option{-mno-powerpc}, GCC
14873
will use only the instructions in the common subset of both
14874
architectures plus some special AIX common-mode calls, and will not use
14875
the MQ register.  Specifying both @option{-mpower} and @option{-mpowerpc}
14876
permits GCC to use any instruction from either architecture and to
14877
allow use of the MQ register; specify this for the Motorola MPC601.
14878
 
14879
@item -mnew-mnemonics
14880
@itemx -mold-mnemonics
14881
@opindex mnew-mnemonics
14882
@opindex mold-mnemonics
14883
Select which mnemonics to use in the generated assembler code.  With
14884
@option{-mnew-mnemonics}, GCC uses the assembler mnemonics defined for
14885
the PowerPC architecture.  With @option{-mold-mnemonics} it uses the
14886
assembler mnemonics defined for the POWER architecture.  Instructions
14887
defined in only one architecture have only one mnemonic; GCC uses that
14888
mnemonic irrespective of which of these options is specified.
14889
 
14890
GCC defaults to the mnemonics appropriate for the architecture in
14891
use.  Specifying @option{-mcpu=@var{cpu_type}} sometimes overrides the
14892
value of these option.  Unless you are building a cross-compiler, you
14893
should normally not specify either @option{-mnew-mnemonics} or
14894
@option{-mold-mnemonics}, but should instead accept the default.
14895
 
14896
@item -mcpu=@var{cpu_type}
14897
@opindex mcpu
14898
Set architecture type, register usage, choice of mnemonics, and
14899
instruction scheduling parameters for machine type @var{cpu_type}.
14900
Supported values for @var{cpu_type} are @samp{401}, @samp{403},
14901
@samp{405}, @samp{405fp}, @samp{440}, @samp{440fp}, @samp{464}, @samp{464fp},
14902
@samp{476}, @samp{476fp}, @samp{505}, @samp{601}, @samp{602}, @samp{603},
14903
@samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740},
14904
@samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823},
14905
@samp{860}, @samp{970}, @samp{8540}, @samp{a2}, @samp{e300c2},
14906
@samp{e300c3}, @samp{e500mc}, @samp{e500mc64}, @samp{ec603e}, @samp{G3},
14907
@samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3},
14908
@samp{power4}, @samp{power5}, @samp{power5+}, @samp{power6}, @samp{power6x},
14909
@samp{power7}, @samp{common}, @samp{powerpc}, @samp{powerpc64}, @samp{rios},
14910
@samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64}.
14911
 
14912
@option{-mcpu=common} selects a completely generic processor.  Code
14913
generated under this option will run on any POWER or PowerPC processor.
14914
GCC will use only the instructions in the common subset of both
14915
architectures, and will not use the MQ register.  GCC assumes a generic
14916
processor model for scheduling purposes.
14917
 
14918
@option{-mcpu=power}, @option{-mcpu=power2}, @option{-mcpu=powerpc}, and
14919
@option{-mcpu=powerpc64} specify generic POWER, POWER2, pure 32-bit
14920
PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
14921
types, with an appropriate, generic processor model assumed for
14922
scheduling purposes.
14923
 
14924
The other options specify a specific processor.  Code generated under
14925
those options will run best on that processor, and may not run at all on
14926
others.
14927
 
14928
The @option{-mcpu} options automatically enable or disable the
14929
following options:
14930
 
14931
@gccoptlist{-maltivec  -mfprnd  -mhard-float  -mmfcrf  -mmultiple @gol
14932
-mnew-mnemonics  -mpopcntb -mpopcntd  -mpower  -mpower2  -mpowerpc64 @gol
14933
-mpowerpc-gpopt  -mpowerpc-gfxopt  -msingle-float -mdouble-float @gol
14934
-msimple-fpu -mstring  -mmulhw  -mdlmzb  -mmfpgpr -mvsx}
14935
 
14936
The particular options set for any particular CPU will vary between
14937
compiler versions, depending on what setting seems to produce optimal
14938
code for that CPU; it doesn't necessarily reflect the actual hardware's
14939
capabilities.  If you wish to set an individual option to a particular
14940
value, you may specify it after the @option{-mcpu} option, like
14941
@samp{-mcpu=970 -mno-altivec}.
14942
 
14943
On AIX, the @option{-maltivec} and @option{-mpowerpc64} options are
14944
not enabled or disabled by the @option{-mcpu} option at present because
14945
AIX does not have full support for these options.  You may still
14946
enable or disable them individually if you're sure it'll work in your
14947
environment.
14948
 
14949
@item -mtune=@var{cpu_type}
14950
@opindex mtune
14951
Set the instruction scheduling parameters for machine type
14952
@var{cpu_type}, but do not set the architecture type, register usage, or
14953
choice of mnemonics, as @option{-mcpu=@var{cpu_type}} would.  The same
14954
values for @var{cpu_type} are used for @option{-mtune} as for
14955
@option{-mcpu}.  If both are specified, the code generated will use the
14956
architecture, registers, and mnemonics set by @option{-mcpu}, but the
14957
scheduling parameters set by @option{-mtune}.
14958
 
14959
@item -mswdiv
14960
@itemx -mno-swdiv
14961
@opindex mswdiv
14962
@opindex mno-swdiv
14963
Generate code to compute division as reciprocal estimate and iterative
14964
refinement, creating opportunities for increased throughput.  This
14965
feature requires: optional PowerPC Graphics instruction set for single
14966
precision and FRE instruction for double precision, assuming divides
14967
cannot generate user-visible traps, and the domain values not include
14968
Infinities, denormals or zero denominator.
14969
 
14970
@item -maltivec
14971
@itemx -mno-altivec
14972
@opindex maltivec
14973
@opindex mno-altivec
14974
Generate code that uses (does not use) AltiVec instructions, and also
14975
enable the use of built-in functions that allow more direct access to
14976
the AltiVec instruction set.  You may also need to set
14977
@option{-mabi=altivec} to adjust the current ABI with AltiVec ABI
14978
enhancements.
14979
 
14980
@item -mvrsave
14981
@itemx -mno-vrsave
14982
@opindex mvrsave
14983
@opindex mno-vrsave
14984
Generate VRSAVE instructions when generating AltiVec code.
14985
 
14986
@item -mgen-cell-microcode
14987
@opindex mgen-cell-microcode
14988
Generate Cell microcode instructions
14989
 
14990
@item -mwarn-cell-microcode
14991
@opindex mwarn-cell-microcode
14992
Warning when a Cell microcode instruction is going to emitted.  An example
14993
of a Cell microcode instruction is a variable shift.
14994
 
14995
@item -msecure-plt
14996
@opindex msecure-plt
14997
Generate code that allows ld and ld.so to build executables and shared
14998
libraries with non-exec .plt and .got sections.  This is a PowerPC
14999
32-bit SYSV ABI option.
15000
 
15001
@item -mbss-plt
15002
@opindex mbss-plt
15003
Generate code that uses a BSS .plt section that ld.so fills in, and
15004
requires .plt and .got sections that are both writable and executable.
15005
This is a PowerPC 32-bit SYSV ABI option.
15006
 
15007
@item -misel
15008
@itemx -mno-isel
15009
@opindex misel
15010
@opindex mno-isel
15011
This switch enables or disables the generation of ISEL instructions.
15012
 
15013
@item -misel=@var{yes/no}
15014
This switch has been deprecated.  Use @option{-misel} and
15015
@option{-mno-isel} instead.
15016
 
15017
@item -mspe
15018
@itemx -mno-spe
15019
@opindex mspe
15020
@opindex mno-spe
15021
This switch enables or disables the generation of SPE simd
15022
instructions.
15023
 
15024
@item -mpaired
15025
@itemx -mno-paired
15026
@opindex mpaired
15027
@opindex mno-paired
15028
This switch enables or disables the generation of PAIRED simd
15029
instructions.
15030
 
15031
@item -mspe=@var{yes/no}
15032
This option has been deprecated.  Use @option{-mspe} and
15033
@option{-mno-spe} instead.
15034
 
15035
@item -mvsx
15036
@itemx -mno-vsx
15037
@opindex mvsx
15038
@opindex mno-vsx
15039
Generate code that uses (does not use) vector/scalar (VSX)
15040
instructions, and also enable the use of built-in functions that allow
15041
more direct access to the VSX instruction set.
15042
 
15043
@item -mfloat-gprs=@var{yes/single/double/no}
15044
@itemx -mfloat-gprs
15045
@opindex mfloat-gprs
15046
This switch enables or disables the generation of floating point
15047
operations on the general purpose registers for architectures that
15048
support it.
15049
 
15050
The argument @var{yes} or @var{single} enables the use of
15051
single-precision floating point operations.
15052
 
15053
The argument @var{double} enables the use of single and
15054
double-precision floating point operations.
15055
 
15056
The argument @var{no} disables floating point operations on the
15057
general purpose registers.
15058
 
15059
This option is currently only available on the MPC854x.
15060
 
15061
@item -m32
15062
@itemx -m64
15063
@opindex m32
15064
@opindex m64
15065
Generate code for 32-bit or 64-bit environments of Darwin and SVR4
15066
targets (including GNU/Linux).  The 32-bit environment sets int, long
15067
and pointer to 32 bits and generates code that runs on any PowerPC
15068
variant.  The 64-bit environment sets int to 32 bits and long and
15069
pointer to 64 bits, and generates code for PowerPC64, as for
15070
@option{-mpowerpc64}.
15071
 
15072
@item -mfull-toc
15073
@itemx -mno-fp-in-toc
15074
@itemx -mno-sum-in-toc
15075
@itemx -mminimal-toc
15076
@opindex mfull-toc
15077
@opindex mno-fp-in-toc
15078
@opindex mno-sum-in-toc
15079
@opindex mminimal-toc
15080
Modify generation of the TOC (Table Of Contents), which is created for
15081
every executable file.  The @option{-mfull-toc} option is selected by
15082
default.  In that case, GCC will allocate at least one TOC entry for
15083
each unique non-automatic variable reference in your program.  GCC
15084
will also place floating-point constants in the TOC@.  However, only
15085
16,384 entries are available in the TOC@.
15086
 
15087
If you receive a linker error message that saying you have overflowed
15088
the available TOC space, you can reduce the amount of TOC space used
15089
with the @option{-mno-fp-in-toc} and @option{-mno-sum-in-toc} options.
15090
@option{-mno-fp-in-toc} prevents GCC from putting floating-point
15091
constants in the TOC and @option{-mno-sum-in-toc} forces GCC to
15092
generate code to calculate the sum of an address and a constant at
15093
run-time instead of putting that sum into the TOC@.  You may specify one
15094
or both of these options.  Each causes GCC to produce very slightly
15095
slower and larger code at the expense of conserving TOC space.
15096
 
15097
If you still run out of space in the TOC even when you specify both of
15098
these options, specify @option{-mminimal-toc} instead.  This option causes
15099
GCC to make only one TOC entry for every file.  When you specify this
15100
option, GCC will produce code that is slower and larger but which
15101
uses extremely little TOC space.  You may wish to use this option
15102
only on files that contain less frequently executed code.
15103
 
15104
@item -maix64
15105
@itemx -maix32
15106
@opindex maix64
15107
@opindex maix32
15108
Enable 64-bit AIX ABI and calling convention: 64-bit pointers, 64-bit
15109
@code{long} type, and the infrastructure needed to support them.
15110
Specifying @option{-maix64} implies @option{-mpowerpc64} and
15111
@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
15112
implies @option{-mno-powerpc64}.  GCC defaults to @option{-maix32}.
15113
 
15114
@item -mxl-compat
15115
@itemx -mno-xl-compat
15116
@opindex mxl-compat
15117
@opindex mno-xl-compat
15118
Produce code that conforms more closely to IBM XL compiler semantics
15119
when using AIX-compatible ABI@.  Pass floating-point arguments to
15120
prototyped functions beyond the register save area (RSA) on the stack
15121
in addition to argument FPRs.  Do not assume that most significant
15122
double in 128-bit long double value is properly rounded when comparing
15123
values and converting to double.  Use XL symbol names for long double
15124
support routines.
15125
 
15126
The AIX calling convention was extended but not initially documented to
15127
handle an obscure K&R C case of calling a function that takes the
15128
address of its arguments with fewer arguments than declared.  IBM XL
15129
compilers access floating point arguments which do not fit in the
15130
RSA from the stack when a subroutine is compiled without
15131
optimization.  Because always storing floating-point arguments on the
15132
stack is inefficient and rarely needed, this option is not enabled by
15133
default and only is necessary when calling subroutines compiled by IBM
15134
XL compilers without optimization.
15135
 
15136
@item -mpe
15137
@opindex mpe
15138
Support @dfn{IBM RS/6000 SP} @dfn{Parallel Environment} (PE)@.  Link an
15139
application written to use message passing with special startup code to
15140
enable the application to run.  The system must have PE installed in the
15141
standard location (@file{/usr/lpp/ppe.poe/}), or the @file{specs} file
15142
must be overridden with the @option{-specs=} option to specify the
15143
appropriate directory location.  The Parallel Environment does not
15144
support threads, so the @option{-mpe} option and the @option{-pthread}
15145
option are incompatible.
15146
 
15147
@item -malign-natural
15148
@itemx -malign-power
15149
@opindex malign-natural
15150
@opindex malign-power
15151
On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
15152
@option{-malign-natural} overrides the ABI-defined alignment of larger
15153
types, such as floating-point doubles, on their natural size-based boundary.
15154
The option @option{-malign-power} instructs GCC to follow the ABI-specified
15155
alignment rules.  GCC defaults to the standard alignment defined in the ABI@.
15156
 
15157
On 64-bit Darwin, natural alignment is the default, and @option{-malign-power}
15158
is not supported.
15159
 
15160
@item -msoft-float
15161
@itemx -mhard-float
15162
@opindex msoft-float
15163
@opindex mhard-float
15164
Generate code that does not use (uses) the floating-point register set.
15165
Software floating point emulation is provided if you use the
15166
@option{-msoft-float} option, and pass the option to GCC when linking.
15167
 
15168
@item -msingle-float
15169
@itemx -mdouble-float
15170
@opindex msingle-float
15171
@opindex mdouble-float
15172
Generate code for single or double-precision floating point operations.
15173
@option{-mdouble-float} implies @option{-msingle-float}.
15174
 
15175
@item -msimple-fpu
15176
@opindex msimple-fpu
15177
Do not generate sqrt and div instructions for hardware floating point unit.
15178
 
15179
@item -mfpu
15180
@opindex mfpu
15181
Specify type of floating point unit.  Valid values are @var{sp_lite}
15182
(equivalent to -msingle-float -msimple-fpu), @var{dp_lite} (equivalent
15183
to -mdouble-float -msimple-fpu), @var{sp_full} (equivalent to -msingle-float),
15184
and @var{dp_full} (equivalent to -mdouble-float).
15185
 
15186
@item -mxilinx-fpu
15187
@opindex mxilinx-fpu
15188
Perform optimizations for floating point unit on Xilinx PPC 405/440.
15189
 
15190
@item -mmultiple
15191
@itemx -mno-multiple
15192
@opindex mmultiple
15193
@opindex mno-multiple
15194
Generate code that uses (does not use) the load multiple word
15195
instructions and the store multiple word instructions.  These
15196
instructions are generated by default on POWER systems, and not
15197
generated on PowerPC systems.  Do not use @option{-mmultiple} on little
15198
endian PowerPC systems, since those instructions do not work when the
15199
processor is in little endian mode.  The exceptions are PPC740 and
15200
PPC750 which permit the instructions usage in little endian mode.
15201
 
15202
@item -mstring
15203
@itemx -mno-string
15204
@opindex mstring
15205
@opindex mno-string
15206
Generate code that uses (does not use) the load string instructions
15207
and the store string word instructions to save multiple registers and
15208
do small block moves.  These instructions are generated by default on
15209
POWER systems, and not generated on PowerPC systems.  Do not use
15210
@option{-mstring} on little endian PowerPC systems, since those
15211
instructions do not work when the processor is in little endian mode.
15212
The exceptions are PPC740 and PPC750 which permit the instructions
15213
usage in little endian mode.
15214
 
15215
@item -mupdate
15216
@itemx -mno-update
15217
@opindex mupdate
15218
@opindex mno-update
15219
Generate code that uses (does not use) the load or store instructions
15220
that update the base register to the address of the calculated memory
15221
location.  These instructions are generated by default.  If you use
15222
@option{-mno-update}, there is a small window between the time that the
15223
stack pointer is updated and the address of the previous frame is
15224
stored, which means code that walks the stack frame across interrupts or
15225
signals may get corrupted data.
15226
 
15227
@item -mavoid-indexed-addresses
15228
@itemx -mno-avoid-indexed-addresses
15229
@opindex mavoid-indexed-addresses
15230
@opindex mno-avoid-indexed-addresses
15231
Generate code that tries to avoid (not avoid) the use of indexed load
15232
or store instructions. These instructions can incur a performance
15233
penalty on Power6 processors in certain situations, such as when
15234
stepping through large arrays that cross a 16M boundary.  This option
15235
is enabled by default when targetting Power6 and disabled otherwise.
15236
 
15237
@item -mfused-madd
15238
@itemx -mno-fused-madd
15239
@opindex mfused-madd
15240
@opindex mno-fused-madd
15241
Generate code that uses (does not use) the floating point multiply and
15242
accumulate instructions.  These instructions are generated by default if
15243
hardware floating is used.
15244
 
15245
@item -mmulhw
15246
@itemx -mno-mulhw
15247
@opindex mmulhw
15248
@opindex mno-mulhw
15249
Generate code that uses (does not use) the half-word multiply and
15250
multiply-accumulate instructions on the IBM 405, 440, 464 and 476 processors.
15251
These instructions are generated by default when targetting those
15252
processors.
15253
 
15254
@item -mdlmzb
15255
@itemx -mno-dlmzb
15256
@opindex mdlmzb
15257
@opindex mno-dlmzb
15258
Generate code that uses (does not use) the string-search @samp{dlmzb}
15259
instruction on the IBM 405, 440, 464 and 476 processors.  This instruction is
15260
generated by default when targetting those processors.
15261
 
15262
@item -mno-bit-align
15263
@itemx -mbit-align
15264
@opindex mno-bit-align
15265
@opindex mbit-align
15266
On System V.4 and embedded PowerPC systems do not (do) force structures
15267
and unions that contain bit-fields to be aligned to the base type of the
15268
bit-field.
15269
 
15270
For example, by default a structure containing nothing but 8
15271
@code{unsigned} bit-fields of length 1 would be aligned to a 4 byte
15272
boundary and have a size of 4 bytes.  By using @option{-mno-bit-align},
15273
the structure would be aligned to a 1 byte boundary and be one byte in
15274
size.
15275
 
15276
@item -mno-strict-align
15277
@itemx -mstrict-align
15278
@opindex mno-strict-align
15279
@opindex mstrict-align
15280
On System V.4 and embedded PowerPC systems do not (do) assume that
15281
unaligned memory references will be handled by the system.
15282
 
15283
@item -mrelocatable
15284
@itemx -mno-relocatable
15285
@opindex mrelocatable
15286
@opindex mno-relocatable
15287
On embedded PowerPC systems generate code that allows (does not allow)
15288
the program to be relocated to a different address at runtime.  If you
15289
use @option{-mrelocatable} on any module, all objects linked together must
15290
be compiled with @option{-mrelocatable} or @option{-mrelocatable-lib}.
15291
 
15292
@item -mrelocatable-lib
15293
@itemx -mno-relocatable-lib
15294
@opindex mrelocatable-lib
15295
@opindex mno-relocatable-lib
15296
On embedded PowerPC systems generate code that allows (does not allow)
15297
the program to be relocated to a different address at runtime.  Modules
15298
compiled with @option{-mrelocatable-lib} can be linked with either modules
15299
compiled without @option{-mrelocatable} and @option{-mrelocatable-lib} or
15300
with modules compiled with the @option{-mrelocatable} options.
15301
 
15302
@item -mno-toc
15303
@itemx -mtoc
15304
@opindex mno-toc
15305
@opindex mtoc
15306
On System V.4 and embedded PowerPC systems do not (do) assume that
15307
register 2 contains a pointer to a global area pointing to the addresses
15308
used in the program.
15309
 
15310
@item -mlittle
15311
@itemx -mlittle-endian
15312
@opindex mlittle
15313
@opindex mlittle-endian
15314
On System V.4 and embedded PowerPC systems compile code for the
15315
processor in little endian mode.  The @option{-mlittle-endian} option is
15316
the same as @option{-mlittle}.
15317
 
15318
@item -mbig
15319
@itemx -mbig-endian
15320
@opindex mbig
15321
@opindex mbig-endian
15322
On System V.4 and embedded PowerPC systems compile code for the
15323
processor in big endian mode.  The @option{-mbig-endian} option is
15324
the same as @option{-mbig}.
15325
 
15326
@item -mdynamic-no-pic
15327
@opindex mdynamic-no-pic
15328
On Darwin and Mac OS X systems, compile code so that it is not
15329
relocatable, but that its external references are relocatable.  The
15330
resulting code is suitable for applications, but not shared
15331
libraries.
15332
 
15333
@item -mprioritize-restricted-insns=@var{priority}
15334
@opindex mprioritize-restricted-insns
15335
This option controls the priority that is assigned to
15336
dispatch-slot restricted instructions during the second scheduling
15337
pass.  The argument @var{priority} takes the value @var{0/1/2} to assign
15338
@var{no/highest/second-highest} priority to dispatch slot restricted
15339
instructions.
15340
 
15341
@item -msched-costly-dep=@var{dependence_type}
15342
@opindex msched-costly-dep
15343
This option controls which dependences are considered costly
15344
by the target during instruction scheduling.  The argument
15345
@var{dependence_type} takes one of the following values:
15346
@var{no}: no dependence is costly,
15347
@var{all}: all dependences are costly,
15348
@var{true_store_to_load}: a true dependence from store to load is costly,
15349
@var{store_to_load}: any dependence from store to load is costly,
15350
@var{number}: any dependence which latency >= @var{number} is costly.
15351
 
15352
@item -minsert-sched-nops=@var{scheme}
15353
@opindex minsert-sched-nops
15354
This option controls which nop insertion scheme will be used during
15355
the second scheduling pass.  The argument @var{scheme} takes one of the
15356
following values:
15357
@var{no}: Don't insert nops.
15358
@var{pad}: Pad with nops any dispatch group which has vacant issue slots,
15359
according to the scheduler's grouping.
15360
@var{regroup_exact}: Insert nops to force costly dependent insns into
15361
separate groups.  Insert exactly as many nops as needed to force an insn
15362
to a new group, according to the estimated processor grouping.
15363
@var{number}: Insert nops to force costly dependent insns into
15364
separate groups.  Insert @var{number} nops to force an insn to a new group.
15365
 
15366
@item -mcall-sysv
15367
@opindex mcall-sysv
15368
On System V.4 and embedded PowerPC systems compile code using calling
15369
conventions that adheres to the March 1995 draft of the System V
15370
Application Binary Interface, PowerPC processor supplement.  This is the
15371
default unless you configured GCC using @samp{powerpc-*-eabiaix}.
15372
 
15373
@item -mcall-sysv-eabi
15374
@itemx -mcall-eabi
15375
@opindex mcall-sysv-eabi
15376
@opindex mcall-eabi
15377
Specify both @option{-mcall-sysv} and @option{-meabi} options.
15378
 
15379
@item -mcall-sysv-noeabi
15380
@opindex mcall-sysv-noeabi
15381
Specify both @option{-mcall-sysv} and @option{-mno-eabi} options.
15382
 
15383
@item -mcall-aixdesc
15384
@opindex m
15385
On System V.4 and embedded PowerPC systems compile code for the AIX
15386
operating system.
15387
 
15388
@item -mcall-linux
15389
@opindex mcall-linux
15390
On System V.4 and embedded PowerPC systems compile code for the
15391
Linux-based GNU system.
15392
 
15393
@item -mcall-gnu
15394
@opindex mcall-gnu
15395
On System V.4 and embedded PowerPC systems compile code for the
15396
Hurd-based GNU system.
15397
 
15398
@item -mcall-freebsd
15399
@opindex mcall-freebsd
15400
On System V.4 and embedded PowerPC systems compile code for the
15401
FreeBSD operating system.
15402
 
15403
@item -mcall-netbsd
15404
@opindex mcall-netbsd
15405
On System V.4 and embedded PowerPC systems compile code for the
15406
NetBSD operating system.
15407
 
15408
@item -mcall-openbsd
15409
@opindex mcall-netbsd
15410
On System V.4 and embedded PowerPC systems compile code for the
15411
OpenBSD operating system.
15412
 
15413
@item -maix-struct-return
15414
@opindex maix-struct-return
15415
Return all structures in memory (as specified by the AIX ABI)@.
15416
 
15417
@item -msvr4-struct-return
15418
@opindex msvr4-struct-return
15419
Return structures smaller than 8 bytes in registers (as specified by the
15420
SVR4 ABI)@.
15421
 
15422
@item -mabi=@var{abi-type}
15423
@opindex mabi
15424
Extend the current ABI with a particular extension, or remove such extension.
15425
Valid values are @var{altivec}, @var{no-altivec}, @var{spe},
15426
@var{no-spe}, @var{ibmlongdouble}, @var{ieeelongdouble}@.
15427
 
15428
@item -mabi=spe
15429
@opindex mabi=spe
15430
Extend the current ABI with SPE ABI extensions.  This does not change
15431
the default ABI, instead it adds the SPE ABI extensions to the current
15432
ABI@.
15433
 
15434
@item -mabi=no-spe
15435
@opindex mabi=no-spe
15436
Disable Booke SPE ABI extensions for the current ABI@.
15437
 
15438
@item -mabi=ibmlongdouble
15439
@opindex mabi=ibmlongdouble
15440
Change the current ABI to use IBM extended precision long double.
15441
This is a PowerPC 32-bit SYSV ABI option.
15442
 
15443
@item -mabi=ieeelongdouble
15444
@opindex mabi=ieeelongdouble
15445
Change the current ABI to use IEEE extended precision long double.
15446
This is a PowerPC 32-bit Linux ABI option.
15447
 
15448
@item -mprototype
15449
@itemx -mno-prototype
15450
@opindex mprototype
15451
@opindex mno-prototype
15452
On System V.4 and embedded PowerPC systems assume that all calls to
15453
variable argument functions are properly prototyped.  Otherwise, the
15454
compiler must insert an instruction before every non prototyped call to
15455
set or clear bit 6 of the condition code register (@var{CR}) to
15456
indicate whether floating point values were passed in the floating point
15457
registers in case the function takes a variable arguments.  With
15458
@option{-mprototype}, only calls to prototyped variable argument functions
15459
will set or clear the bit.
15460
 
15461
@item -msim
15462
@opindex msim
15463
On embedded PowerPC systems, assume that the startup module is called
15464
@file{sim-crt0.o} and that the standard C libraries are @file{libsim.a} and
15465
@file{libc.a}.  This is the default for @samp{powerpc-*-eabisim}
15466
configurations.
15467
 
15468
@item -mmvme
15469
@opindex mmvme
15470
On embedded PowerPC systems, assume that the startup module is called
15471
@file{crt0.o} and the standard C libraries are @file{libmvme.a} and
15472
@file{libc.a}.
15473
 
15474
@item -mads
15475
@opindex mads
15476
On embedded PowerPC systems, assume that the startup module is called
15477
@file{crt0.o} and the standard C libraries are @file{libads.a} and
15478
@file{libc.a}.
15479
 
15480
@item -myellowknife
15481
@opindex myellowknife
15482
On embedded PowerPC systems, assume that the startup module is called
15483
@file{crt0.o} and the standard C libraries are @file{libyk.a} and
15484
@file{libc.a}.
15485
 
15486
@item -mvxworks
15487
@opindex mvxworks
15488
On System V.4 and embedded PowerPC systems, specify that you are
15489
compiling for a VxWorks system.
15490
 
15491
@item -memb
15492
@opindex memb
15493
On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags
15494
header to indicate that @samp{eabi} extended relocations are used.
15495
 
15496
@item -meabi
15497
@itemx -mno-eabi
15498
@opindex meabi
15499
@opindex mno-eabi
15500
On System V.4 and embedded PowerPC systems do (do not) adhere to the
15501
Embedded Applications Binary Interface (eabi) which is a set of
15502
modifications to the System V.4 specifications.  Selecting @option{-meabi}
15503
means that the stack is aligned to an 8 byte boundary, a function
15504
@code{__eabi} is called to from @code{main} to set up the eabi
15505
environment, and the @option{-msdata} option can use both @code{r2} and
15506
@code{r13} to point to two separate small data areas.  Selecting
15507
@option{-mno-eabi} means that the stack is aligned to a 16 byte boundary,
15508
do not call an initialization function from @code{main}, and the
15509
@option{-msdata} option will only use @code{r13} to point to a single
15510
small data area.  The @option{-meabi} option is on by default if you
15511
configured GCC using one of the @samp{powerpc*-*-eabi*} options.
15512
 
15513
@item -msdata=eabi
15514
@opindex msdata=eabi
15515
On System V.4 and embedded PowerPC systems, put small initialized
15516
@code{const} global and static data in the @samp{.sdata2} section, which
15517
is pointed to by register @code{r2}.  Put small initialized
15518
non-@code{const} global and static data in the @samp{.sdata} section,
15519
which is pointed to by register @code{r13}.  Put small uninitialized
15520
global and static data in the @samp{.sbss} section, which is adjacent to
15521
the @samp{.sdata} section.  The @option{-msdata=eabi} option is
15522
incompatible with the @option{-mrelocatable} option.  The
15523
@option{-msdata=eabi} option also sets the @option{-memb} option.
15524
 
15525
@item -msdata=sysv
15526
@opindex msdata=sysv
15527
On System V.4 and embedded PowerPC systems, put small global and static
15528
data in the @samp{.sdata} section, which is pointed to by register
15529
@code{r13}.  Put small uninitialized global and static data in the
15530
@samp{.sbss} section, which is adjacent to the @samp{.sdata} section.
15531
The @option{-msdata=sysv} option is incompatible with the
15532
@option{-mrelocatable} option.
15533
 
15534
@item -msdata=default
15535
@itemx -msdata
15536
@opindex msdata=default
15537
@opindex msdata
15538
On System V.4 and embedded PowerPC systems, if @option{-meabi} is used,
15539
compile code the same as @option{-msdata=eabi}, otherwise compile code the
15540
same as @option{-msdata=sysv}.
15541
 
15542
@item -msdata=data
15543
@opindex msdata=data
15544
On System V.4 and embedded PowerPC systems, put small global
15545
data in the @samp{.sdata} section.  Put small uninitialized global
15546
data in the @samp{.sbss} section.  Do not use register @code{r13}
15547
to address small data however.  This is the default behavior unless
15548
other @option{-msdata} options are used.
15549
 
15550
@item -msdata=none
15551
@itemx -mno-sdata
15552
@opindex msdata=none
15553
@opindex mno-sdata
15554
On embedded PowerPC systems, put all initialized global and static data
15555
in the @samp{.data} section, and all uninitialized data in the
15556
@samp{.bss} section.
15557
 
15558
@item -G @var{num}
15559
@opindex G
15560
@cindex smaller data references (PowerPC)
15561
@cindex .sdata/.sdata2 references (PowerPC)
15562
On embedded PowerPC systems, put global and static items less than or
15563
equal to @var{num} bytes into the small data or bss sections instead of
15564
the normal data or bss section.  By default, @var{num} is 8.  The
15565
@option{-G @var{num}} switch is also passed to the linker.
15566
All modules should be compiled with the same @option{-G @var{num}} value.
15567
 
15568
@item -mregnames
15569
@itemx -mno-regnames
15570
@opindex mregnames
15571
@opindex mno-regnames
15572
On System V.4 and embedded PowerPC systems do (do not) emit register
15573
names in the assembly language output using symbolic forms.
15574
 
15575
@item -mlongcall
15576
@itemx -mno-longcall
15577
@opindex mlongcall
15578
@opindex mno-longcall
15579
By default assume that all calls are far away so that a longer more
15580
expensive calling sequence is required.  This is required for calls
15581
further than 32 megabytes (33,554,432 bytes) from the current location.
15582
A short call will be generated if the compiler knows
15583
the call cannot be that far away.  This setting can be overridden by
15584
the @code{shortcall} function attribute, or by @code{#pragma
15585
longcall(0)}.
15586
 
15587
Some linkers are capable of detecting out-of-range calls and generating
15588
glue code on the fly.  On these systems, long calls are unnecessary and
15589
generate slower code.  As of this writing, the AIX linker can do this,
15590
as can the GNU linker for PowerPC/64.  It is planned to add this feature
15591
to the GNU linker for 32-bit PowerPC systems as well.
15592
 
15593
On Darwin/PPC systems, @code{#pragma longcall} will generate ``jbsr
15594
callee, L42'', plus a ``branch island'' (glue code).  The two target
15595
addresses represent the callee and the ``branch island''.  The
15596
Darwin/PPC linker will prefer the first address and generate a ``bl
15597
callee'' if the PPC ``bl'' instruction will reach the callee directly;
15598
otherwise, the linker will generate ``bl L42'' to call the ``branch
15599
island''.  The ``branch island'' is appended to the body of the
15600
calling function; it computes the full 32-bit address of the callee
15601
and jumps to it.
15602
 
15603
On Mach-O (Darwin) systems, this option directs the compiler emit to
15604
the glue for every direct call, and the Darwin linker decides whether
15605
to use or discard it.
15606
 
15607
In the future, we may cause GCC to ignore all longcall specifications
15608
when the linker is known to generate glue.
15609
 
15610
@item -mtls-markers
15611
@itemx -mno-tls-markers
15612
@opindex mtls-markers
15613
@opindex mno-tls-markers
15614
Mark (do not mark) calls to @code{__tls_get_addr} with a relocation
15615
specifying the function argument.  The relocation allows ld to
15616
reliably associate function call with argument setup instructions for
15617
TLS optimization, which in turn allows gcc to better schedule the
15618
sequence.
15619
 
15620
@item -pthread
15621
@opindex pthread
15622
Adds support for multithreading with the @dfn{pthreads} library.
15623
This option sets flags for both the preprocessor and linker.
15624
 
15625
@end table
15626
 
15627
@node RX Options
15628
@subsection RX Options
15629
@cindex RX Options
15630
 
15631
These command line options are defined for RX targets:
15632
 
15633
@table @gcctabopt
15634
@item -m64bit-doubles
15635
@itemx -m32bit-doubles
15636
@opindex m64bit-doubles
15637
@opindex m32bit-doubles
15638
Make the @code{double} data type be 64-bits (@option{-m64bit-doubles})
15639
or 32-bits (@option{-m32bit-doubles}) in size.  The default is
15640
@option{-m32bit-doubles}.  @emph{Note} RX floating point hardware only
15641
works on 32-bit values, which is why the default is
15642
@option{-m32bit-doubles}.
15643
 
15644
@item -fpu
15645
@itemx -nofpu
15646
@opindex fpu
15647
@opindex nofpu
15648
Enables (@option{-fpu}) or disables (@option{-nofpu}) the use of RX
15649
floating point hardware.  The default is enabled for the @var{RX600}
15650
series and disabled for the @var{RX200} series.
15651
 
15652
Floating point instructions will only be generated for 32-bit floating
15653
point values however, so if the @option{-m64bit-doubles} option is in
15654
use then the FPU hardware will not be used for doubles.
15655
 
15656
@emph{Note} If the @option{-fpu} option is enabled then
15657
@option{-funsafe-math-optimizations} is also enabled automatically.
15658
This is because the RX FPU instructions are themselves unsafe.
15659
 
15660
@item -mcpu=@var{name}
15661
@itemx -patch=@var{name}
15662
@opindex -mcpu
15663
@opindex -patch
15664
Selects the type of RX CPU to be targeted.  Currently three types are
15665
supported, the generic @var{RX600} and @var{RX200} series hardware and
15666
the specific @var{RX610} cpu.  The default is @var{RX600}.
15667
 
15668
The only difference between @var{RX600} and @var{RX610} is that the
15669
@var{RX610} does not support the @code{MVTIPL} instruction.
15670
 
15671
The @var{RX200} series does not have a hardware floating point unit
15672
and so @option{-nofpu} is enabled by default when this type is
15673
selected.
15674
 
15675
@item -mbig-endian-data
15676
@itemx -mlittle-endian-data
15677
@opindex mbig-endian-data
15678
@opindex mlittle-endian-data
15679
Store data (but not code) in the big-endian format.  The default is
15680
@option{-mlittle-endian-data}, ie to store data in the little endian
15681
format.
15682
 
15683
@item -msmall-data-limit=@var{N}
15684
@opindex msmall-data-limit
15685
Specifies the maximum size in bytes of global and static variables
15686
which can be placed into the small data area.  Using the small data
15687
area can lead to smaller and faster code, but the size of area is
15688
limited and it is up to the programmer to ensure that the area does
15689
not overflow.  Also when the small data area is used one of the RX's
15690
registers (@code{r13}) is reserved for use pointing to this area, so
15691
it is no longer available for use by the compiler.  This could result
15692
in slower and/or larger code if variables which once could have been
15693
held in @code{r13} are now pushed onto the stack.
15694
 
15695
Note, common variables (variables which have not been initialised) and
15696
constants are not placed into the small data area as they are assigned
15697
to other sections in the output executable.
15698
 
15699
The default value is zero, which disables this feature.  Note, this
15700
feature is not enabled by default with higher optimization levels
15701
(@option{-O2} etc) because of the potentially detrimental effects of
15702
reserving register @code{r13}.  It is up to the programmer to
15703
experiment and discover whether this feature is of benefit to their
15704
program.
15705
 
15706
@item -msim
15707
@itemx -mno-sim
15708
@opindex msim
15709
@opindex mno-sim
15710
Use the simulator runtime.  The default is to use the libgloss board
15711
specific runtime.
15712
 
15713
@item -mas100-syntax
15714
@itemx -mno-as100-syntax
15715
@opindex mas100-syntax
15716
@opindex mno-as100-syntax
15717
When generating assembler output use a syntax that is compatible with
15718
Renesas's AS100 assembler.  This syntax can also be handled by the GAS
15719
assembler but it has some restrictions so generating it is not the
15720
default option.
15721
 
15722
@item -mmax-constant-size=@var{N}
15723
@opindex mmax-constant-size
15724
Specifies the maximum size, in bytes, of a constant that can be used as
15725
an operand in a RX instruction.  Although the RX instruction set does
15726
allow constants of up to 4 bytes in length to be used in instructions,
15727
a longer value equates to a longer instruction.  Thus in some
15728
circumstances it can be beneficial to restrict the size of constants
15729
that are used in instructions.  Constants that are too big are instead
15730
placed into a constant pool and referenced via register indirection.
15731
 
15732
The value @var{N} can be between 0 and 4.  A value of 0 (the default)
15733
or 4 means that constants of any size are allowed.
15734
 
15735
@item -mrelax
15736
@opindex mrelax
15737
Enable linker relaxation.  Linker relaxation is a process whereby the
15738
linker will attempt to reduce the size of a program by finding shorter
15739
versions of various instructions.  Disabled by default.
15740
 
15741
@item -mint-register=@var{N}
15742
@opindex mint-register
15743
Specify the number of registers to reserve for fast interrupt handler
15744
functions.  The value @var{N} can be between 0 and 4.  A value of 1
15745
means that register @code{r13} will be reserved for the exclusive use
15746
of fast interrupt handlers.  A value of 2 reserves @code{r13} and
15747
@code{r12}.  A value of 3 reserves @code{r13}, @code{r12} and
15748
@code{r11}, and a value of 4 reserves @code{r13} through @code{r10}.
15749
A value of 0, the default, does not reserve any registers.
15750
 
15751
@item -msave-acc-in-interrupts
15752
@opindex msave-acc-in-interrupts
15753
Specifies that interrupt handler functions should preserve the
15754
accumulator register.  This is only necessary if normal code might use
15755
the accumulator register, for example because it performs 64-bit
15756
multiplications.  The default is to ignore the accumulator as this
15757
makes the interrupt handlers faster.
15758
 
15759
@end table
15760
 
15761
@emph{Note:} The generic GCC command line @option{-ffixed-@var{reg}}
15762
has special significance to the RX port when used with the
15763
@code{interrupt} function attribute.  This attribute indicates a
15764
function intended to process fast interrupts.  GCC will will ensure
15765
that it only uses the registers @code{r10}, @code{r11}, @code{r12}
15766
and/or @code{r13} and only provided that the normal use of the
15767
corresponding registers have been restricted via the
15768
@option{-ffixed-@var{reg}} or @option{-mint-register} command line
15769
options.
15770
 
15771
@node S/390 and zSeries Options
15772
@subsection S/390 and zSeries Options
15773
@cindex S/390 and zSeries Options
15774
 
15775
These are the @samp{-m} options defined for the S/390 and zSeries architecture.
15776
 
15777
@table @gcctabopt
15778
@item -mhard-float
15779
@itemx -msoft-float
15780
@opindex mhard-float
15781
@opindex msoft-float
15782
Use (do not use) the hardware floating-point instructions and registers
15783
for floating-point operations.  When @option{-msoft-float} is specified,
15784
functions in @file{libgcc.a} will be used to perform floating-point
15785
operations.  When @option{-mhard-float} is specified, the compiler
15786
generates IEEE floating-point instructions.  This is the default.
15787
 
15788
@item -mhard-dfp
15789
@itemx -mno-hard-dfp
15790
@opindex mhard-dfp
15791
@opindex mno-hard-dfp
15792
Use (do not use) the hardware decimal-floating-point instructions for
15793
decimal-floating-point operations.  When @option{-mno-hard-dfp} is
15794
specified, functions in @file{libgcc.a} will be used to perform
15795
decimal-floating-point operations.  When @option{-mhard-dfp} is
15796
specified, the compiler generates decimal-floating-point hardware
15797
instructions.  This is the default for @option{-march=z9-ec} or higher.
15798
 
15799
@item -mlong-double-64
15800
@itemx -mlong-double-128
15801
@opindex mlong-double-64
15802
@opindex mlong-double-128
15803
These switches control the size of @code{long double} type. A size
15804
of 64bit makes the @code{long double} type equivalent to the @code{double}
15805
type. This is the default.
15806
 
15807
@item -mbackchain
15808
@itemx -mno-backchain
15809
@opindex mbackchain
15810
@opindex mno-backchain
15811
Store (do not store) the address of the caller's frame as backchain pointer
15812
into the callee's stack frame.
15813
A backchain may be needed to allow debugging using tools that do not understand
15814
DWARF-2 call frame information.
15815
When @option{-mno-packed-stack} is in effect, the backchain pointer is stored
15816
at the bottom of the stack frame; when @option{-mpacked-stack} is in effect,
15817
the backchain is placed into the topmost word of the 96/160 byte register
15818
save area.
15819
 
15820
In general, code compiled with @option{-mbackchain} is call-compatible with
15821
code compiled with @option{-mmo-backchain}; however, use of the backchain
15822
for debugging purposes usually requires that the whole binary is built with
15823
@option{-mbackchain}.  Note that the combination of @option{-mbackchain},
15824
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
15825
to build a linux kernel use @option{-msoft-float}.
15826
 
15827
The default is to not maintain the backchain.
15828
 
15829
@item -mpacked-stack
15830
@itemx -mno-packed-stack
15831
@opindex mpacked-stack
15832
@opindex mno-packed-stack
15833
Use (do not use) the packed stack layout.  When @option{-mno-packed-stack} is
15834
specified, the compiler uses the all fields of the 96/160 byte register save
15835
area only for their default purpose; unused fields still take up stack space.
15836
When @option{-mpacked-stack} is specified, register save slots are densely
15837
packed at the top of the register save area; unused space is reused for other
15838
purposes, allowing for more efficient use of the available stack space.
15839
However, when @option{-mbackchain} is also in effect, the topmost word of
15840
the save area is always used to store the backchain, and the return address
15841
register is always saved two words below the backchain.
15842
 
15843
As long as the stack frame backchain is not used, code generated with
15844
@option{-mpacked-stack} is call-compatible with code generated with
15845
@option{-mno-packed-stack}.  Note that some non-FSF releases of GCC 2.95 for
15846
S/390 or zSeries generated code that uses the stack frame backchain at run
15847
time, not just for debugging purposes.  Such code is not call-compatible
15848
with code compiled with @option{-mpacked-stack}.  Also, note that the
15849
combination of @option{-mbackchain},
15850
@option{-mpacked-stack} and @option{-mhard-float} is not supported.  In order
15851
to build a linux kernel use @option{-msoft-float}.
15852
 
15853
The default is to not use the packed stack layout.
15854
 
15855
@item -msmall-exec
15856
@itemx -mno-small-exec
15857
@opindex msmall-exec
15858
@opindex mno-small-exec
15859
Generate (or do not generate) code using the @code{bras} instruction
15860
to do subroutine calls.
15861
This only works reliably if the total executable size does not
15862
exceed 64k.  The default is to use the @code{basr} instruction instead,
15863
which does not have this limitation.
15864
 
15865
@item -m64
15866
@itemx -m31
15867
@opindex m64
15868
@opindex m31
15869
When @option{-m31} is specified, generate code compliant to the
15870
GNU/Linux for S/390 ABI@.  When @option{-m64} is specified, generate
15871
code compliant to the GNU/Linux for zSeries ABI@.  This allows GCC in
15872
particular to generate 64-bit instructions.  For the @samp{s390}
15873
targets, the default is @option{-m31}, while the @samp{s390x}
15874
targets default to @option{-m64}.
15875
 
15876
@item -mzarch
15877
@itemx -mesa
15878
@opindex mzarch
15879
@opindex mesa
15880
When @option{-mzarch} is specified, generate code using the
15881
instructions available on z/Architecture.
15882
When @option{-mesa} is specified, generate code using the
15883
instructions available on ESA/390.  Note that @option{-mesa} is
15884
not possible with @option{-m64}.
15885
When generating code compliant to the GNU/Linux for S/390 ABI,
15886
the default is @option{-mesa}.  When generating code compliant
15887
to the GNU/Linux for zSeries ABI, the default is @option{-mzarch}.
15888
 
15889
@item -mmvcle
15890
@itemx -mno-mvcle
15891
@opindex mmvcle
15892
@opindex mno-mvcle
15893
Generate (or do not generate) code using the @code{mvcle} instruction
15894
to perform block moves.  When @option{-mno-mvcle} is specified,
15895
use a @code{mvc} loop instead.  This is the default unless optimizing for
15896
size.
15897
 
15898
@item -mdebug
15899
@itemx -mno-debug
15900
@opindex mdebug
15901
@opindex mno-debug
15902
Print (or do not print) additional debug information when compiling.
15903
The default is to not print debug information.
15904
 
15905
@item -march=@var{cpu-type}
15906
@opindex march
15907
Generate code that will run on @var{cpu-type}, which is the name of a system
15908
representing a certain processor type.  Possible values for
15909
@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990},
15910
@samp{z9-109}, @samp{z9-ec} and @samp{z10}.
15911
When generating code using the instructions available on z/Architecture,
15912
the default is @option{-march=z900}.  Otherwise, the default is
15913
@option{-march=g5}.
15914
 
15915
@item -mtune=@var{cpu-type}
15916
@opindex mtune
15917
Tune to @var{cpu-type} everything applicable about the generated code,
15918
except for the ABI and the set of available instructions.
15919
The list of @var{cpu-type} values is the same as for @option{-march}.
15920
The default is the value used for @option{-march}.
15921
 
15922
@item -mtpf-trace
15923
@itemx -mno-tpf-trace
15924
@opindex mtpf-trace
15925
@opindex mno-tpf-trace
15926
Generate code that adds (does not add) in TPF OS specific branches to trace
15927
routines in the operating system.  This option is off by default, even
15928
when compiling for the TPF OS@.
15929
 
15930
@item -mfused-madd
15931
@itemx -mno-fused-madd
15932
@opindex mfused-madd
15933
@opindex mno-fused-madd
15934
Generate code that uses (does not use) the floating point multiply and
15935
accumulate instructions.  These instructions are generated by default if
15936
hardware floating point is used.
15937
 
15938
@item -mwarn-framesize=@var{framesize}
15939
@opindex mwarn-framesize
15940
Emit a warning if the current function exceeds the given frame size.  Because
15941
this is a compile time check it doesn't need to be a real problem when the program
15942
runs.  It is intended to identify functions which most probably cause
15943
a stack overflow.  It is useful to be used in an environment with limited stack
15944
size e.g.@: the linux kernel.
15945
 
15946
@item -mwarn-dynamicstack
15947
@opindex mwarn-dynamicstack
15948
Emit a warning if the function calls alloca or uses dynamically
15949
sized arrays.  This is generally a bad idea with a limited stack size.
15950
 
15951
@item -mstack-guard=@var{stack-guard}
15952
@itemx -mstack-size=@var{stack-size}
15953
@opindex mstack-guard
15954
@opindex mstack-size
15955
If these options are provided the s390 back end emits additional instructions in
15956
the function prologue which trigger a trap if the stack size is @var{stack-guard}
15957
bytes above the @var{stack-size} (remember that the stack on s390 grows downward).
15958
If the @var{stack-guard} option is omitted the smallest power of 2 larger than
15959
the frame size of the compiled function is chosen.
15960
These options are intended to be used to help debugging stack overflow problems.
15961
The additionally emitted code causes only little overhead and hence can also be
15962
used in production like systems without greater performance degradation.  The given
15963
values have to be exact powers of 2 and @var{stack-size} has to be greater than
15964
@var{stack-guard} without exceeding 64k.
15965
In order to be efficient the extra code makes the assumption that the stack starts
15966
at an address aligned to the value given by @var{stack-size}.
15967
The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
15968
@end table
15969
 
15970
@node Score Options
15971
@subsection Score Options
15972
@cindex Score Options
15973
 
15974
These options are defined for Score implementations:
15975
 
15976
@table @gcctabopt
15977
@item -meb
15978
@opindex meb
15979
Compile code for big endian mode.  This is the default.
15980
 
15981
@item -mel
15982
@opindex mel
15983
Compile code for little endian mode.
15984
 
15985
@item -mnhwloop
15986
@opindex mnhwloop
15987
Disable generate bcnz instruction.
15988
 
15989
@item -muls
15990
@opindex muls
15991
Enable generate unaligned load and store instruction.
15992
 
15993
@item -mmac
15994
@opindex mmac
15995
Enable the use of multiply-accumulate instructions. Disabled by default.
15996
 
15997
@item -mscore5
15998
@opindex mscore5
15999
Specify the SCORE5 as the target architecture.
16000
 
16001
@item -mscore5u
16002
@opindex mscore5u
16003
Specify the SCORE5U of the target architecture.
16004
 
16005
@item -mscore7
16006
@opindex mscore7
16007
Specify the SCORE7 as the target architecture. This is the default.
16008
 
16009
@item -mscore7d
16010
@opindex mscore7d
16011
Specify the SCORE7D as the target architecture.
16012
@end table
16013
 
16014
@node SH Options
16015
@subsection SH Options
16016
 
16017
These @samp{-m} options are defined for the SH implementations:
16018
 
16019
@table @gcctabopt
16020
@item -m1
16021
@opindex m1
16022
Generate code for the SH1.
16023
 
16024
@item -m2
16025
@opindex m2
16026
Generate code for the SH2.
16027
 
16028
@item -m2e
16029
Generate code for the SH2e.
16030
 
16031
@item -m2a-nofpu
16032
@opindex m2a-nofpu
16033
Generate code for the SH2a without FPU, or for a SH2a-FPU in such a way
16034
that the floating-point unit is not used.
16035
 
16036
@item -m2a-single-only
16037
@opindex m2a-single-only
16038
Generate code for the SH2a-FPU, in such a way that no double-precision
16039
floating point operations are used.
16040
 
16041
@item -m2a-single
16042
@opindex m2a-single
16043
Generate code for the SH2a-FPU assuming the floating-point unit is in
16044
single-precision mode by default.
16045
 
16046
@item -m2a
16047
@opindex m2a
16048
Generate code for the SH2a-FPU assuming the floating-point unit is in
16049
double-precision mode by default.
16050
 
16051
@item -m3
16052
@opindex m3
16053
Generate code for the SH3.
16054
 
16055
@item -m3e
16056
@opindex m3e
16057
Generate code for the SH3e.
16058
 
16059
@item -m4-nofpu
16060
@opindex m4-nofpu
16061
Generate code for the SH4 without a floating-point unit.
16062
 
16063
@item -m4-single-only
16064
@opindex m4-single-only
16065
Generate code for the SH4 with a floating-point unit that only
16066
supports single-precision arithmetic.
16067
 
16068
@item -m4-single
16069
@opindex m4-single
16070
Generate code for the SH4 assuming the floating-point unit is in
16071
single-precision mode by default.
16072
 
16073
@item -m4
16074
@opindex m4
16075
Generate code for the SH4.
16076
 
16077
@item -m4a-nofpu
16078
@opindex m4a-nofpu
16079
Generate code for the SH4al-dsp, or for a SH4a in such a way that the
16080
floating-point unit is not used.
16081
 
16082
@item -m4a-single-only
16083
@opindex m4a-single-only
16084
Generate code for the SH4a, in such a way that no double-precision
16085
floating point operations are used.
16086
 
16087
@item -m4a-single
16088
@opindex m4a-single
16089
Generate code for the SH4a assuming the floating-point unit is in
16090
single-precision mode by default.
16091
 
16092
@item -m4a
16093
@opindex m4a
16094
Generate code for the SH4a.
16095
 
16096
@item -m4al
16097
@opindex m4al
16098
Same as @option{-m4a-nofpu}, except that it implicitly passes
16099
@option{-dsp} to the assembler.  GCC doesn't generate any DSP
16100
instructions at the moment.
16101
 
16102
@item -mb
16103
@opindex mb
16104
Compile code for the processor in big endian mode.
16105
 
16106
@item -ml
16107
@opindex ml
16108
Compile code for the processor in little endian mode.
16109
 
16110
@item -mdalign
16111
@opindex mdalign
16112
Align doubles at 64-bit boundaries.  Note that this changes the calling
16113
conventions, and thus some functions from the standard C library will
16114
not work unless you recompile it first with @option{-mdalign}.
16115
 
16116
@item -mrelax
16117
@opindex mrelax
16118
Shorten some address references at link time, when possible; uses the
16119
linker option @option{-relax}.
16120
 
16121
@item -mbigtable
16122
@opindex mbigtable
16123
Use 32-bit offsets in @code{switch} tables.  The default is to use
16124
16-bit offsets.
16125
 
16126
@item -mbitops
16127
@opindex mbitops
16128
Enable the use of bit manipulation instructions on SH2A.
16129
 
16130
@item -mfmovd
16131
@opindex mfmovd
16132
Enable the use of the instruction @code{fmovd}.  Check @option{-mdalign} for
16133
alignment constraints.
16134
 
16135
@item -mhitachi
16136
@opindex mhitachi
16137
Comply with the calling conventions defined by Renesas.
16138
 
16139
@item -mrenesas
16140
@opindex mhitachi
16141
Comply with the calling conventions defined by Renesas.
16142
 
16143
@item -mno-renesas
16144
@opindex mhitachi
16145
Comply with the calling conventions defined for GCC before the Renesas
16146
conventions were available.  This option is the default for all
16147
targets of the SH toolchain except for @samp{sh-symbianelf}.
16148
 
16149
@item -mnomacsave
16150
@opindex mnomacsave
16151
Mark the @code{MAC} register as call-clobbered, even if
16152
@option{-mhitachi} is given.
16153
 
16154
@item -mieee
16155
@opindex mieee
16156
Increase IEEE-compliance of floating-point code.
16157
At the moment, this is equivalent to @option{-fno-finite-math-only}.
16158
When generating 16 bit SH opcodes, getting IEEE-conforming results for
16159
comparisons of NANs / infinities incurs extra overhead in every
16160
floating point comparison, therefore the default is set to
16161
@option{-ffinite-math-only}.
16162
 
16163
@item -minline-ic_invalidate
16164
@opindex minline-ic_invalidate
16165
Inline code to invalidate instruction cache entries after setting up
16166
nested function trampolines.
16167
This option has no effect if -musermode is in effect and the selected
16168
code generation option (e.g. -m4) does not allow the use of the icbi
16169
instruction.
16170
If the selected code generation option does not allow the use of the icbi
16171
instruction, and -musermode is not in effect, the inlined code will
16172
manipulate the instruction cache address array directly with an associative
16173
write.  This not only requires privileged mode, but it will also
16174
fail if the cache line had been mapped via the TLB and has become unmapped.
16175
 
16176
@item -misize
16177
@opindex misize
16178
Dump instruction size and location in the assembly code.
16179
 
16180
@item -mpadstruct
16181
@opindex mpadstruct
16182
This option is deprecated.  It pads structures to multiple of 4 bytes,
16183
which is incompatible with the SH ABI@.
16184
 
16185
@item -mspace
16186
@opindex mspace
16187
Optimize for space instead of speed.  Implied by @option{-Os}.
16188
 
16189
@item -mprefergot
16190
@opindex mprefergot
16191
When generating position-independent code, emit function calls using
16192
the Global Offset Table instead of the Procedure Linkage Table.
16193
 
16194
@item -musermode
16195
@opindex musermode
16196
Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
16197
if the inlined code would not work in user mode.
16198
This is the default when the target is @code{sh-*-linux*}.
16199
 
16200
@item -multcost=@var{number}
16201
@opindex multcost=@var{number}
16202
Set the cost to assume for a multiply insn.
16203
 
16204
@item -mdiv=@var{strategy}
16205
@opindex mdiv=@var{strategy}
16206
Set the division strategy to use for SHmedia code.  @var{strategy} must be
16207
one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
16208
inv:call2, inv:fp .
16209
"fp" performs the operation in floating point.  This has a very high latency,
16210
but needs only a few instructions, so it might be a good choice if
16211
your code has enough easily exploitable ILP to allow the compiler to
16212
schedule the floating point instructions together with other instructions.
16213
Division by zero causes a floating point exception.
16214
"inv" uses integer operations to calculate the inverse of the divisor,
16215
and then multiplies the dividend with the inverse.  This strategy allows
16216
cse and hoisting of the inverse calculation.  Division by zero calculates
16217
an unspecified result, but does not trap.
16218
"inv:minlat" is a variant of "inv" where if no cse / hoisting opportunities
16219
have been found, or if the entire operation has been hoisted to the same
16220
place, the last stages of the inverse calculation are intertwined with the
16221
final multiply to reduce the overall latency, at the expense of using a few
16222
more instructions, and thus offering fewer scheduling opportunities with
16223
other code.
16224
"call" calls a library function that usually implements the inv:minlat
16225
strategy.
16226
This gives high code density for m5-*media-nofpu compilations.
16227
"call2" uses a different entry point of the same library function, where it
16228
assumes that a pointer to a lookup table has already been set up, which
16229
exposes the pointer load to cse / code hoisting optimizations.
16230
"inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm for initial
16231
code generation, but if the code stays unoptimized, revert to the "call",
16232
"call2", or "fp" strategies, respectively.  Note that the
16233
potentially-trapping side effect of division by zero is carried by a
16234
separate instruction, so it is possible that all the integer instructions
16235
are hoisted out, but the marker for the side effect stays where it is.
16236
A recombination to fp operations or a call is not possible in that case.
16237
"inv20u" and "inv20l" are variants of the "inv:minlat" strategy.  In the case
16238
that the inverse calculation was nor separated from the multiply, they speed
16239
up division where the dividend fits into 20 bits (plus sign where applicable),
16240
by inserting a test to skip a number of operations in this case; this test
16241
slows down the case of larger dividends.  inv20u assumes the case of a such
16242
a small dividend to be unlikely, and inv20l assumes it to be likely.
16243
 
16244
@item -mdivsi3_libfunc=@var{name}
16245
@opindex mdivsi3_libfunc=@var{name}
16246
Set the name of the library function used for 32 bit signed division to
16247
@var{name}.  This only affect the name used in the call and inv:call
16248
division strategies, and the compiler will still expect the same
16249
sets of input/output/clobbered registers as if this option was not present.
16250
 
16251
@item -mfixed-range=@var{register-range}
16252
@opindex mfixed-range
16253
Generate code treating the given register range as fixed registers.
16254
A fixed register is one that the register allocator can not use.  This is
16255
useful when compiling kernel code.  A register range is specified as
16256
two registers separated by a dash.  Multiple register ranges can be
16257
specified separated by a comma.
16258
 
16259
@item -madjust-unroll
16260
@opindex madjust-unroll
16261
Throttle unrolling to avoid thrashing target registers.
16262
This option only has an effect if the gcc code base supports the
16263
TARGET_ADJUST_UNROLL_MAX target hook.
16264
 
16265
@item -mindexed-addressing
16266
@opindex mindexed-addressing
16267
Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
16268
This is only safe if the hardware and/or OS implement 32 bit wrap-around
16269
semantics for the indexed addressing mode.  The architecture allows the
16270
implementation of processors with 64 bit MMU, which the OS could use to
16271
get 32 bit addressing, but since no current hardware implementation supports
16272
this or any other way to make the indexed addressing mode safe to use in
16273
the 32 bit ABI, the default is -mno-indexed-addressing.
16274
 
16275
@item -mgettrcost=@var{number}
16276
@opindex mgettrcost=@var{number}
16277
Set the cost assumed for the gettr instruction to @var{number}.
16278
The default is 2 if @option{-mpt-fixed} is in effect, 100 otherwise.
16279
 
16280
@item -mpt-fixed
16281
@opindex mpt-fixed
16282
Assume pt* instructions won't trap.  This will generally generate better
16283
scheduled code, but is unsafe on current hardware.  The current architecture
16284
definition says that ptabs and ptrel trap when the target anded with 3 is 3.
16285
This has the unintentional effect of making it unsafe to schedule ptabs /
16286
ptrel before a branch, or hoist it out of a loop.  For example,
16287
__do_global_ctors, a part of libgcc that runs constructors at program
16288
startup, calls functions in a list which is delimited by @minus{}1.  With the
16289
-mpt-fixed option, the ptabs will be done before testing against @minus{}1.
16290
That means that all the constructors will be run a bit quicker, but when
16291
the loop comes to the end of the list, the program crashes because ptabs
16292
loads @minus{}1 into a target register.  Since this option is unsafe for any
16293
hardware implementing the current architecture specification, the default
16294
is -mno-pt-fixed.  Unless the user specifies a specific cost with
16295
@option{-mgettrcost}, -mno-pt-fixed also implies @option{-mgettrcost=100};
16296
this deters register allocation using target registers for storing
16297
ordinary integers.
16298
 
16299
@item -minvalid-symbols
16300
@opindex minvalid-symbols
16301
Assume symbols might be invalid.  Ordinary function symbols generated by
16302
the compiler will always be valid to load with movi/shori/ptabs or
16303
movi/shori/ptrel, but with assembler and/or linker tricks it is possible
16304
to generate symbols that will cause ptabs / ptrel to trap.
16305
This option is only meaningful when @option{-mno-pt-fixed} is in effect.
16306
It will then prevent cross-basic-block cse, hoisting and most scheduling
16307
of symbol loads.  The default is @option{-mno-invalid-symbols}.
16308
@end table
16309
 
16310
@node SPARC Options
16311
@subsection SPARC Options
16312
@cindex SPARC options
16313
 
16314
These @samp{-m} options are supported on the SPARC:
16315
 
16316
@table @gcctabopt
16317
@item -mno-app-regs
16318
@itemx -mapp-regs
16319
@opindex mno-app-regs
16320
@opindex mapp-regs
16321
Specify @option{-mapp-regs} to generate output using the global registers
16322
2 through 4, which the SPARC SVR4 ABI reserves for applications.  This
16323
is the default.
16324
 
16325
To be fully SVR4 ABI compliant at the cost of some performance loss,
16326
specify @option{-mno-app-regs}.  You should compile libraries and system
16327
software with this option.
16328
 
16329
@item -mfpu
16330
@itemx -mhard-float
16331
@opindex mfpu
16332
@opindex mhard-float
16333
Generate output containing floating point instructions.  This is the
16334
default.
16335
 
16336
@item -mno-fpu
16337
@itemx -msoft-float
16338
@opindex mno-fpu
16339
@opindex msoft-float
16340
Generate output containing library calls for floating point.
16341
@strong{Warning:} the requisite libraries are not available for all SPARC
16342
targets.  Normally the facilities of the machine's usual C compiler are
16343
used, but this cannot be done directly in cross-compilation.  You must make
16344
your own arrangements to provide suitable library functions for
16345
cross-compilation.  The embedded targets @samp{sparc-*-aout} and
16346
@samp{sparclite-*-*} do provide software floating point support.
16347
 
16348
@option{-msoft-float} changes the calling convention in the output file;
16349
therefore, it is only useful if you compile @emph{all} of a program with
16350
this option.  In particular, you need to compile @file{libgcc.a}, the
16351
library that comes with GCC, with @option{-msoft-float} in order for
16352
this to work.
16353
 
16354
@item -mhard-quad-float
16355
@opindex mhard-quad-float
16356
Generate output containing quad-word (long double) floating point
16357
instructions.
16358
 
16359
@item -msoft-quad-float
16360
@opindex msoft-quad-float
16361
Generate output containing library calls for quad-word (long double)
16362
floating point instructions.  The functions called are those specified
16363
in the SPARC ABI@.  This is the default.
16364
 
16365
As of this writing, there are no SPARC implementations that have hardware
16366
support for the quad-word floating point instructions.  They all invoke
16367
a trap handler for one of these instructions, and then the trap handler
16368
emulates the effect of the instruction.  Because of the trap handler overhead,
16369
this is much slower than calling the ABI library routines.  Thus the
16370
@option{-msoft-quad-float} option is the default.
16371
 
16372
@item -mno-unaligned-doubles
16373
@itemx -munaligned-doubles
16374
@opindex mno-unaligned-doubles
16375
@opindex munaligned-doubles
16376
Assume that doubles have 8 byte alignment.  This is the default.
16377
 
16378
With @option{-munaligned-doubles}, GCC assumes that doubles have 8 byte
16379
alignment only if they are contained in another type, or if they have an
16380
absolute address.  Otherwise, it assumes they have 4 byte alignment.
16381
Specifying this option avoids some rare compatibility problems with code
16382
generated by other compilers.  It is not the default because it results
16383
in a performance loss, especially for floating point code.
16384
 
16385
@item -mno-faster-structs
16386
@itemx -mfaster-structs
16387
@opindex mno-faster-structs
16388
@opindex mfaster-structs
16389
With @option{-mfaster-structs}, the compiler assumes that structures
16390
should have 8 byte alignment.  This enables the use of pairs of
16391
@code{ldd} and @code{std} instructions for copies in structure
16392
assignment, in place of twice as many @code{ld} and @code{st} pairs.
16393
However, the use of this changed alignment directly violates the SPARC
16394
ABI@.  Thus, it's intended only for use on targets where the developer
16395
acknowledges that their resulting code will not be directly in line with
16396
the rules of the ABI@.
16397
 
16398
@item -mimpure-text
16399
@opindex mimpure-text
16400
@option{-mimpure-text}, used in addition to @option{-shared}, tells
16401
the compiler to not pass @option{-z text} to the linker when linking a
16402
shared object.  Using this option, you can link position-dependent
16403
code into a shared object.
16404
 
16405
@option{-mimpure-text} suppresses the ``relocations remain against
16406
allocatable but non-writable sections'' linker error message.
16407
However, the necessary relocations will trigger copy-on-write, and the
16408
shared object is not actually shared across processes.  Instead of
16409
using @option{-mimpure-text}, you should compile all source code with
16410
@option{-fpic} or @option{-fPIC}.
16411
 
16412
This option is only available on SunOS and Solaris.
16413
 
16414
@item -mcpu=@var{cpu_type}
16415
@opindex mcpu
16416
Set the instruction set, register set, and instruction scheduling parameters
16417
for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
16418
@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite},
16419
@samp{f930}, @samp{f934}, @samp{hypersparc}, @samp{sparclite86x},
16420
@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
16421
@samp{ultrasparc3}, @samp{niagara} and @samp{niagara2}.
16422
 
16423
Default instruction scheduling parameters are used for values that select
16424
an architecture and not an implementation.  These are @samp{v7}, @samp{v8},
16425
@samp{sparclite}, @samp{sparclet}, @samp{v9}.
16426
 
16427
Here is a list of each supported architecture and their supported
16428
implementations.
16429
 
16430
@smallexample
16431
    v7:             cypress
16432
    v8:             supersparc, hypersparc
16433
    sparclite:      f930, f934, sparclite86x
16434
    sparclet:       tsc701
16435
    v9:             ultrasparc, ultrasparc3, niagara, niagara2
16436
@end smallexample
16437
 
16438
By default (unless configured otherwise), GCC generates code for the V7
16439
variant of the SPARC architecture.  With @option{-mcpu=cypress}, the compiler
16440
additionally optimizes it for the Cypress CY7C602 chip, as used in the
16441
SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
16442
SPARCStation 1, 2, IPX etc.
16443
 
16444
With @option{-mcpu=v8}, GCC generates code for the V8 variant of the SPARC
16445
architecture.  The only difference from V7 code is that the compiler emits
16446
the integer multiply and integer divide instructions which exist in SPARC-V8
16447
but not in SPARC-V7.  With @option{-mcpu=supersparc}, the compiler additionally
16448
optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
16449
2000 series.
16450
 
16451
With @option{-mcpu=sparclite}, GCC generates code for the SPARClite variant of
16452
the SPARC architecture.  This adds the integer multiply, integer divide step
16453
and scan (@code{ffs}) instructions which exist in SPARClite but not in SPARC-V7.
16454
With @option{-mcpu=f930}, the compiler additionally optimizes it for the
16455
Fujitsu MB86930 chip, which is the original SPARClite, with no FPU@.  With
16456
@option{-mcpu=f934}, the compiler additionally optimizes it for the Fujitsu
16457
MB86934 chip, which is the more recent SPARClite with FPU@.
16458
 
16459
With @option{-mcpu=sparclet}, GCC generates code for the SPARClet variant of
16460
the SPARC architecture.  This adds the integer multiply, multiply/accumulate,
16461
integer divide step and scan (@code{ffs}) instructions which exist in SPARClet
16462
but not in SPARC-V7.  With @option{-mcpu=tsc701}, the compiler additionally
16463
optimizes it for the TEMIC SPARClet chip.
16464
 
16465
With @option{-mcpu=v9}, GCC generates code for the V9 variant of the SPARC
16466
architecture.  This adds 64-bit integer and floating-point move instructions,
16467
3 additional floating-point condition code registers and conditional move
16468
instructions.  With @option{-mcpu=ultrasparc}, the compiler additionally
16469
optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
16470
@option{-mcpu=ultrasparc3}, the compiler additionally optimizes it for the
16471
Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
16472
@option{-mcpu=niagara}, the compiler additionally optimizes it for
16473
Sun UltraSPARC T1 chips.  With @option{-mcpu=niagara2}, the compiler
16474
additionally optimizes it for Sun UltraSPARC T2 chips.
16475
 
16476
@item -mtune=@var{cpu_type}
16477
@opindex mtune
16478
Set the instruction scheduling parameters for machine type
16479
@var{cpu_type}, but do not set the instruction set or register set that the
16480
option @option{-mcpu=@var{cpu_type}} would.
16481
 
16482
The same values for @option{-mcpu=@var{cpu_type}} can be used for
16483
@option{-mtune=@var{cpu_type}}, but the only useful values are those
16484
that select a particular cpu implementation.  Those are @samp{cypress},
16485
@samp{supersparc}, @samp{hypersparc}, @samp{f930}, @samp{f934},
16486
@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
16487
@samp{ultrasparc3}, @samp{niagara}, and @samp{niagara2}.
16488
 
16489
@item -mv8plus
16490
@itemx -mno-v8plus
16491
@opindex mv8plus
16492
@opindex mno-v8plus
16493
With @option{-mv8plus}, GCC generates code for the SPARC-V8+ ABI@.  The
16494
difference from the V8 ABI is that the global and out registers are
16495
considered 64-bit wide.  This is enabled by default on Solaris in 32-bit
16496
mode for all SPARC-V9 processors.
16497
 
16498
@item -mvis
16499
@itemx -mno-vis
16500
@opindex mvis
16501
@opindex mno-vis
16502
With @option{-mvis}, GCC generates code that takes advantage of the UltraSPARC
16503
Visual Instruction Set extensions.  The default is @option{-mno-vis}.
16504
@end table
16505
 
16506
These @samp{-m} options are supported in addition to the above
16507
on SPARC-V9 processors in 64-bit environments:
16508
 
16509
@table @gcctabopt
16510
@item -mlittle-endian
16511
@opindex mlittle-endian
16512
Generate code for a processor running in little-endian mode.  It is only
16513
available for a few configurations and most notably not on Solaris and Linux.
16514
 
16515
@item -m32
16516
@itemx -m64
16517
@opindex m32
16518
@opindex m64
16519
Generate code for a 32-bit or 64-bit environment.
16520
The 32-bit environment sets int, long and pointer to 32 bits.
16521
The 64-bit environment sets int to 32 bits and long and pointer
16522
to 64 bits.
16523
 
16524
@item -mcmodel=medlow
16525
@opindex mcmodel=medlow
16526
Generate code for the Medium/Low code model: 64-bit addresses, programs
16527
must be linked in the low 32 bits of memory.  Programs can be statically
16528
or dynamically linked.
16529
 
16530
@item -mcmodel=medmid
16531
@opindex mcmodel=medmid
16532
Generate code for the Medium/Middle code model: 64-bit addresses, programs
16533
must be linked in the low 44 bits of memory, the text and data segments must
16534
be less than 2GB in size and the data segment must be located within 2GB of
16535
the text segment.
16536
 
16537
@item -mcmodel=medany
16538
@opindex mcmodel=medany
16539
Generate code for the Medium/Anywhere code model: 64-bit addresses, programs
16540
may be linked anywhere in memory, the text and data segments must be less
16541
than 2GB in size and the data segment must be located within 2GB of the
16542
text segment.
16543
 
16544
@item -mcmodel=embmedany
16545
@opindex mcmodel=embmedany
16546
Generate code for the Medium/Anywhere code model for embedded systems:
16547
64-bit addresses, the text and data segments must be less than 2GB in
16548
size, both starting anywhere in memory (determined at link time).  The
16549
global register %g4 points to the base of the data segment.  Programs
16550
are statically linked and PIC is not supported.
16551
 
16552
@item -mstack-bias
16553
@itemx -mno-stack-bias
16554
@opindex mstack-bias
16555
@opindex mno-stack-bias
16556
With @option{-mstack-bias}, GCC assumes that the stack pointer, and
16557
frame pointer if present, are offset by @minus{}2047 which must be added back
16558
when making stack frame references.  This is the default in 64-bit mode.
16559
Otherwise, assume no such offset is present.
16560
@end table
16561
 
16562
These switches are supported in addition to the above on Solaris:
16563
 
16564
@table @gcctabopt
16565
@item -threads
16566
@opindex threads
16567
Add support for multithreading using the Solaris threads library.  This
16568
option sets flags for both the preprocessor and linker.  This option does
16569
not affect the thread safety of object code produced by the compiler or
16570
that of libraries supplied with it.
16571
 
16572
@item -pthreads
16573
@opindex pthreads
16574
Add support for multithreading using the POSIX threads library.  This
16575
option sets flags for both the preprocessor and linker.  This option does
16576
not affect the thread safety of object code produced  by the compiler or
16577
that of libraries supplied with it.
16578
 
16579
@item -pthread
16580
@opindex pthread
16581
This is a synonym for @option{-pthreads}.
16582
@end table
16583
 
16584
@node SPU Options
16585
@subsection SPU Options
16586
@cindex SPU options
16587
 
16588
These @samp{-m} options are supported on the SPU:
16589
 
16590
@table @gcctabopt
16591
@item -mwarn-reloc
16592
@itemx -merror-reloc
16593
@opindex mwarn-reloc
16594
@opindex merror-reloc
16595
 
16596
The loader for SPU does not handle dynamic relocations.  By default, GCC
16597
will give an error when it generates code that requires a dynamic
16598
relocation.  @option{-mno-error-reloc} disables the error,
16599
@option{-mwarn-reloc} will generate a warning instead.
16600
 
16601
@item -msafe-dma
16602
@itemx -munsafe-dma
16603
@opindex msafe-dma
16604
@opindex munsafe-dma
16605
 
16606
Instructions which initiate or test completion of DMA must not be
16607
reordered with respect to loads and stores of the memory which is being
16608
accessed.  Users typically address this problem using the volatile
16609
keyword, but that can lead to inefficient code in places where the
16610
memory is known to not change.  Rather than mark the memory as volatile
16611
we treat the DMA instructions as potentially effecting all memory.  With
16612
@option{-munsafe-dma} users must use the volatile keyword to protect
16613
memory accesses.
16614
 
16615
@item -mbranch-hints
16616
@opindex mbranch-hints
16617
 
16618
By default, GCC will generate a branch hint instruction to avoid
16619
pipeline stalls for always taken or probably taken branches.  A hint
16620
will not be generated closer than 8 instructions away from its branch.
16621
There is little reason to disable them, except for debugging purposes,
16622
or to make an object a little bit smaller.
16623
 
16624
@item -msmall-mem
16625
@itemx -mlarge-mem
16626
@opindex msmall-mem
16627
@opindex mlarge-mem
16628
 
16629
By default, GCC generates code assuming that addresses are never larger
16630
than 18 bits.  With @option{-mlarge-mem} code is generated that assumes
16631
a full 32 bit address.
16632
 
16633
@item -mstdmain
16634
@opindex mstdmain
16635
 
16636
By default, GCC links against startup code that assumes the SPU-style
16637
main function interface (which has an unconventional parameter list).
16638
With @option{-mstdmain}, GCC will link your program against startup
16639
code that assumes a C99-style interface to @code{main}, including a
16640
local copy of @code{argv} strings.
16641
 
16642
@item -mfixed-range=@var{register-range}
16643
@opindex mfixed-range
16644
Generate code treating the given register range as fixed registers.
16645
A fixed register is one that the register allocator can not use.  This is
16646
useful when compiling kernel code.  A register range is specified as
16647
two registers separated by a dash.  Multiple register ranges can be
16648
specified separated by a comma.
16649
 
16650
@item -mea32
16651
@itemx -mea64
16652
@opindex mea32
16653
@opindex mea64
16654
Compile code assuming that pointers to the PPU address space accessed
16655
via the @code{__ea} named address space qualifier are either 32 or 64
16656
bits wide.  The default is 32 bits.  As this is an ABI changing option,
16657
all object code in an executable must be compiled with the same setting.
16658
 
16659
@item -maddress-space-conversion
16660
@itemx -mno-address-space-conversion
16661
@opindex maddress-space-conversion
16662
@opindex mno-address-space-conversion
16663
Allow/disallow treating the @code{__ea} address space as superset
16664
of the generic address space.  This enables explicit type casts
16665
between @code{__ea} and generic pointer as well as implicit
16666
conversions of generic pointers to @code{__ea} pointers.  The
16667
default is to allow address space pointer conversions.
16668
 
16669
@item -mcache-size=@var{cache-size}
16670
@opindex mcache-size
16671
This option controls the version of libgcc that the compiler links to an
16672
executable and selects a software-managed cache for accessing variables
16673
in the @code{__ea} address space with a particular cache size.  Possible
16674
options for @var{cache-size} are @samp{8}, @samp{16}, @samp{32}, @samp{64}
16675
and @samp{128}.  The default cache size is 64KB.
16676
 
16677
@item -matomic-updates
16678
@itemx -mno-atomic-updates
16679
@opindex matomic-updates
16680
@opindex mno-atomic-updates
16681
This option controls the version of libgcc that the compiler links to an
16682
executable and selects whether atomic updates to the software-managed
16683
cache of PPU-side variables are used.  If you use atomic updates, changes
16684
to a PPU variable from SPU code using the @code{__ea} named address space
16685
qualifier will not interfere with changes to other PPU variables residing
16686
in the same cache line from PPU code.  If you do not use atomic updates,
16687
such interference may occur; however, writing back cache lines will be
16688
more efficient.  The default behavior is to use atomic updates.
16689
 
16690
@item -mdual-nops
16691
@itemx -mdual-nops=@var{n}
16692
@opindex mdual-nops
16693
By default, GCC will insert nops to increase dual issue when it expects
16694
it to increase performance.  @var{n} can be a value from 0 to 10.  A
16695
smaller @var{n} will insert fewer nops.  10 is the default, 0 is the
16696
same as @option{-mno-dual-nops}.  Disabled with @option{-Os}.
16697
 
16698
@item -mhint-max-nops=@var{n}
16699
@opindex mhint-max-nops
16700
Maximum number of nops to insert for a branch hint.  A branch hint must
16701
be at least 8 instructions away from the branch it is effecting.  GCC
16702
will insert up to @var{n} nops to enforce this, otherwise it will not
16703
generate the branch hint.
16704
 
16705
@item -mhint-max-distance=@var{n}
16706
@opindex mhint-max-distance
16707
The encoding of the branch hint instruction limits the hint to be within
16708
256 instructions of the branch it is effecting.  By default, GCC makes
16709
sure it is within 125.
16710
 
16711
@item -msafe-hints
16712
@opindex msafe-hints
16713
Work around a hardware bug which causes the SPU to stall indefinitely.
16714
By default, GCC will insert the @code{hbrp} instruction to make sure
16715
this stall won't happen.
16716
 
16717
@end table
16718
 
16719
@node System V Options
16720
@subsection Options for System V
16721
 
16722
These additional options are available on System V Release 4 for
16723
compatibility with other compilers on those systems:
16724
 
16725
@table @gcctabopt
16726
@item -G
16727
@opindex G
16728
Create a shared object.
16729
It is recommended that @option{-symbolic} or @option{-shared} be used instead.
16730
 
16731
@item -Qy
16732
@opindex Qy
16733
Identify the versions of each tool used by the compiler, in a
16734
@code{.ident} assembler directive in the output.
16735
 
16736
@item -Qn
16737
@opindex Qn
16738
Refrain from adding @code{.ident} directives to the output file (this is
16739
the default).
16740
 
16741
@item -YP,@var{dirs}
16742
@opindex YP
16743
Search the directories @var{dirs}, and no others, for libraries
16744
specified with @option{-l}.
16745
 
16746
@item -Ym,@var{dir}
16747
@opindex Ym
16748
Look in the directory @var{dir} to find the M4 preprocessor.
16749
The assembler uses this option.
16750
@c This is supposed to go with a -Yd for predefined M4 macro files, but
16751
@c the generic assembler that comes with Solaris takes just -Ym.
16752
@end table
16753
 
16754
@node V850 Options
16755
@subsection V850 Options
16756
@cindex V850 Options
16757
 
16758
These @samp{-m} options are defined for V850 implementations:
16759
 
16760
@table @gcctabopt
16761
@item -mlong-calls
16762
@itemx -mno-long-calls
16763
@opindex mlong-calls
16764
@opindex mno-long-calls
16765
Treat all calls as being far away (near).  If calls are assumed to be
16766
far away, the compiler will always load the functions address up into a
16767
register, and call indirect through the pointer.
16768
 
16769
@item -mno-ep
16770
@itemx -mep
16771
@opindex mno-ep
16772
@opindex mep
16773
Do not optimize (do optimize) basic blocks that use the same index
16774
pointer 4 or more times to copy pointer into the @code{ep} register, and
16775
use the shorter @code{sld} and @code{sst} instructions.  The @option{-mep}
16776
option is on by default if you optimize.
16777
 
16778
@item -mno-prolog-function
16779
@itemx -mprolog-function
16780
@opindex mno-prolog-function
16781
@opindex mprolog-function
16782
Do not use (do use) external functions to save and restore registers
16783
at the prologue and epilogue of a function.  The external functions
16784
are slower, but use less code space if more than one function saves
16785
the same number of registers.  The @option{-mprolog-function} option
16786
is on by default if you optimize.
16787
 
16788
@item -mspace
16789
@opindex mspace
16790
Try to make the code as small as possible.  At present, this just turns
16791
on the @option{-mep} and @option{-mprolog-function} options.
16792
 
16793
@item -mtda=@var{n}
16794
@opindex mtda
16795
Put static or global variables whose size is @var{n} bytes or less into
16796
the tiny data area that register @code{ep} points to.  The tiny data
16797
area can hold up to 256 bytes in total (128 bytes for byte references).
16798
 
16799
@item -msda=@var{n}
16800
@opindex msda
16801
Put static or global variables whose size is @var{n} bytes or less into
16802
the small data area that register @code{gp} points to.  The small data
16803
area can hold up to 64 kilobytes.
16804
 
16805
@item -mzda=@var{n}
16806
@opindex mzda
16807
Put static or global variables whose size is @var{n} bytes or less into
16808
the first 32 kilobytes of memory.
16809
 
16810
@item -mv850
16811
@opindex mv850
16812
Specify that the target processor is the V850.
16813
 
16814
@item -mbig-switch
16815
@opindex mbig-switch
16816
Generate code suitable for big switch tables.  Use this option only if
16817
the assembler/linker complain about out of range branches within a switch
16818
table.
16819
 
16820
@item -mapp-regs
16821
@opindex mapp-regs
16822
This option will cause r2 and r5 to be used in the code generated by
16823
the compiler.  This setting is the default.
16824
 
16825
@item -mno-app-regs
16826
@opindex mno-app-regs
16827
This option will cause r2 and r5 to be treated as fixed registers.
16828
 
16829
@item -mv850e1
16830
@opindex mv850e1
16831
Specify that the target processor is the V850E1.  The preprocessor
16832
constants @samp{__v850e1__} and @samp{__v850e__} will be defined if
16833
this option is used.
16834
 
16835
@item -mv850e
16836
@opindex mv850e
16837
Specify that the target processor is the V850E@.  The preprocessor
16838
constant @samp{__v850e__} will be defined if this option is used.
16839
 
16840
If neither @option{-mv850} nor @option{-mv850e} nor @option{-mv850e1}
16841
are defined then a default target processor will be chosen and the
16842
relevant @samp{__v850*__} preprocessor constant will be defined.
16843
 
16844
The preprocessor constants @samp{__v850} and @samp{__v851__} are always
16845
defined, regardless of which processor variant is the target.
16846
 
16847
@item -mdisable-callt
16848
@opindex mdisable-callt
16849
This option will suppress generation of the CALLT instruction for the
16850
v850e and v850e1 flavors of the v850 architecture.  The default is
16851
@option{-mno-disable-callt} which allows the CALLT instruction to be used.
16852
 
16853
@end table
16854
 
16855
@node VAX Options
16856
@subsection VAX Options
16857
@cindex VAX options
16858
 
16859
These @samp{-m} options are defined for the VAX:
16860
 
16861
@table @gcctabopt
16862
@item -munix
16863
@opindex munix
16864
Do not output certain jump instructions (@code{aobleq} and so on)
16865
that the Unix assembler for the VAX cannot handle across long
16866
ranges.
16867
 
16868
@item -mgnu
16869
@opindex mgnu
16870
Do output those jump instructions, on the assumption that you
16871
will assemble with the GNU assembler.
16872
 
16873
@item -mg
16874
@opindex mg
16875
Output code for g-format floating point numbers instead of d-format.
16876
@end table
16877
 
16878
@node VxWorks Options
16879
@subsection VxWorks Options
16880
@cindex VxWorks Options
16881
 
16882
The options in this section are defined for all VxWorks targets.
16883
Options specific to the target hardware are listed with the other
16884
options for that target.
16885
 
16886
@table @gcctabopt
16887
@item -mrtp
16888
@opindex mrtp
16889
GCC can generate code for both VxWorks kernels and real time processes
16890
(RTPs).  This option switches from the former to the latter.  It also
16891
defines the preprocessor macro @code{__RTP__}.
16892
 
16893
@item -non-static
16894
@opindex non-static
16895
Link an RTP executable against shared libraries rather than static
16896
libraries.  The options @option{-static} and @option{-shared} can
16897
also be used for RTPs (@pxref{Link Options}); @option{-static}
16898
is the default.
16899
 
16900
@item -Bstatic
16901
@itemx -Bdynamic
16902
@opindex Bstatic
16903
@opindex Bdynamic
16904
These options are passed down to the linker.  They are defined for
16905
compatibility with Diab.
16906
 
16907
@item -Xbind-lazy
16908
@opindex Xbind-lazy
16909
Enable lazy binding of function calls.  This option is equivalent to
16910
@option{-Wl,-z,now} and is defined for compatibility with Diab.
16911
 
16912
@item -Xbind-now
16913
@opindex Xbind-now
16914
Disable lazy binding of function calls.  This option is the default and
16915
is defined for compatibility with Diab.
16916
@end table
16917
 
16918
@node x86-64 Options
16919
@subsection x86-64 Options
16920
@cindex x86-64 options
16921
 
16922
These are listed under @xref{i386 and x86-64 Options}.
16923
 
16924
@node i386 and x86-64 Windows Options
16925
@subsection i386 and x86-64 Windows Options
16926
@cindex i386 and x86-64 Windows Options
16927
 
16928
These additional options are available for Windows targets:
16929
 
16930
@table @gcctabopt
16931
@item -mconsole
16932
@opindex mconsole
16933
This option is available for Cygwin and MinGW targets.  It
16934
specifies that a console application is to be generated, by
16935
instructing the linker to set the PE header subsystem type
16936
required for console applications.
16937
This is the default behavior for Cygwin and MinGW targets.
16938
 
16939
@item -mcygwin
16940
@opindex mcygwin
16941
This option is available for Cygwin targets.  It specifies that
16942
the Cygwin internal interface is to be used for predefined
16943
preprocessor macros, C runtime libraries and related linker
16944
paths and options.  For Cygwin targets this is the default behavior.
16945
This option is deprecated and will be removed in a future release.
16946
 
16947
@item -mno-cygwin
16948
@opindex mno-cygwin
16949
This option is available for Cygwin targets.  It specifies that
16950
the MinGW internal interface is to be used instead of Cygwin's, by
16951
setting MinGW-related predefined macros and linker paths and default
16952
library options.
16953
This option is deprecated and will be removed in a future release.
16954
 
16955
@item -mdll
16956
@opindex mdll
16957
This option is available for Cygwin and MinGW targets.  It
16958
specifies that a DLL - a dynamic link library - is to be
16959
generated, enabling the selection of the required runtime
16960
startup object and entry point.
16961
 
16962
@item -mnop-fun-dllimport
16963
@opindex mnop-fun-dllimport
16964
This option is available for Cygwin and MinGW targets.  It
16965
specifies that the dllimport attribute should be ignored.
16966
 
16967
@item -mthread
16968
@opindex mthread
16969
This option is available for MinGW targets. It specifies
16970
that MinGW-specific thread support is to be used.
16971
 
16972
@item -municode
16973
@opindex municode
16974
This option is available for mingw-w64 targets.  It specifies
16975
that the UNICODE macro is getting pre-defined and that the
16976
unicode capable runtime startup code is chosen.
16977
 
16978
@item -mwin32
16979
@opindex mwin32
16980
This option is available for Cygwin and MinGW targets.  It
16981
specifies that the typical Windows pre-defined macros are to
16982
be set in the pre-processor, but does not influence the choice
16983
of runtime library/startup code.
16984
 
16985
@item -mwindows
16986
@opindex mwindows
16987
This option is available for Cygwin and MinGW targets.  It
16988
specifies that a GUI application is to be generated by
16989
instructing the linker to set the PE header subsystem type
16990
appropriately.
16991
 
16992
@item -fno-set-stack-executable
16993
@opindex fno-set-stack-executable
16994
This option is available for MinGW targets. It specifies that
16995
the executable flag for stack used by nested functions isn't
16996
set. This is necessary for binaries running in kernel mode of
16997
Windows, as there the user32 API, which is used to set executable
16998
privileges, isn't available.
16999
 
17000
@item -mpe-aligned-commons
17001
@opindex mpe-aligned-commons
17002
This option is available for Cygwin and MinGW targets.  It
17003
specifies that the GNU extension to the PE file format that
17004
permits the correct alignment of COMMON variables should be
17005
used when generating code.  It will be enabled by default if
17006
GCC detects that the target assembler found during configuration
17007
supports the feature.
17008
@end table
17009
 
17010
See also under @ref{i386 and x86-64 Options} for standard options.
17011
 
17012
@node Xstormy16 Options
17013
@subsection Xstormy16 Options
17014
@cindex Xstormy16 Options
17015
 
17016
These options are defined for Xstormy16:
17017
 
17018
@table @gcctabopt
17019
@item -msim
17020
@opindex msim
17021
Choose startup files and linker script suitable for the simulator.
17022
@end table
17023
 
17024
@node Xtensa Options
17025
@subsection Xtensa Options
17026
@cindex Xtensa Options
17027
 
17028
These options are supported for Xtensa targets:
17029
 
17030
@table @gcctabopt
17031
@item -mconst16
17032
@itemx -mno-const16
17033
@opindex mconst16
17034
@opindex mno-const16
17035
Enable or disable use of @code{CONST16} instructions for loading
17036
constant values.  The @code{CONST16} instruction is currently not a
17037
standard option from Tensilica.  When enabled, @code{CONST16}
17038
instructions are always used in place of the standard @code{L32R}
17039
instructions.  The use of @code{CONST16} is enabled by default only if
17040
the @code{L32R} instruction is not available.
17041
 
17042
@item -mfused-madd
17043
@itemx -mno-fused-madd
17044
@opindex mfused-madd
17045
@opindex mno-fused-madd
17046
Enable or disable use of fused multiply/add and multiply/subtract
17047
instructions in the floating-point option.  This has no effect if the
17048
floating-point option is not also enabled.  Disabling fused multiply/add
17049
and multiply/subtract instructions forces the compiler to use separate
17050
instructions for the multiply and add/subtract operations.  This may be
17051
desirable in some cases where strict IEEE 754-compliant results are
17052
required: the fused multiply add/subtract instructions do not round the
17053
intermediate result, thereby producing results with @emph{more} bits of
17054
precision than specified by the IEEE standard.  Disabling fused multiply
17055
add/subtract instructions also ensures that the program output is not
17056
sensitive to the compiler's ability to combine multiply and add/subtract
17057
operations.
17058
 
17059
@item -mserialize-volatile
17060
@itemx -mno-serialize-volatile
17061
@opindex mserialize-volatile
17062
@opindex mno-serialize-volatile
17063
When this option is enabled, GCC inserts @code{MEMW} instructions before
17064
@code{volatile} memory references to guarantee sequential consistency.
17065
The default is @option{-mserialize-volatile}.  Use
17066
@option{-mno-serialize-volatile} to omit the @code{MEMW} instructions.
17067
 
17068
@item -mtext-section-literals
17069
@itemx -mno-text-section-literals
17070
@opindex mtext-section-literals
17071
@opindex mno-text-section-literals
17072
Control the treatment of literal pools.  The default is
17073
@option{-mno-text-section-literals}, which places literals in a separate
17074
section in the output file.  This allows the literal pool to be placed
17075
in a data RAM/ROM, and it also allows the linker to combine literal
17076
pools from separate object files to remove redundant literals and
17077
improve code size.  With @option{-mtext-section-literals}, the literals
17078
are interspersed in the text section in order to keep them as close as
17079
possible to their references.  This may be necessary for large assembly
17080
files.
17081
 
17082
@item -mtarget-align
17083
@itemx -mno-target-align
17084
@opindex mtarget-align
17085
@opindex mno-target-align
17086
When this option is enabled, GCC instructs the assembler to
17087
automatically align instructions to reduce branch penalties at the
17088
expense of some code density.  The assembler attempts to widen density
17089
instructions to align branch targets and the instructions following call
17090
instructions.  If there are not enough preceding safe density
17091
instructions to align a target, no widening will be performed.  The
17092
default is @option{-mtarget-align}.  These options do not affect the
17093
treatment of auto-aligned instructions like @code{LOOP}, which the
17094
assembler will always align, either by widening density instructions or
17095
by inserting no-op instructions.
17096
 
17097
@item -mlongcalls
17098
@itemx -mno-longcalls
17099
@opindex mlongcalls
17100
@opindex mno-longcalls
17101
When this option is enabled, GCC instructs the assembler to translate
17102
direct calls to indirect calls unless it can determine that the target
17103
of a direct call is in the range allowed by the call instruction.  This
17104
translation typically occurs for calls to functions in other source
17105
files.  Specifically, the assembler translates a direct @code{CALL}
17106
instruction into an @code{L32R} followed by a @code{CALLX} instruction.
17107
The default is @option{-mno-longcalls}.  This option should be used in
17108
programs where the call target can potentially be out of range.  This
17109
option is implemented in the assembler, not the compiler, so the
17110
assembly code generated by GCC will still show direct call
17111
instructions---look at the disassembled object code to see the actual
17112
instructions.  Note that the assembler will use an indirect call for
17113
every cross-file call, not just those that really will be out of range.
17114
@end table
17115
 
17116
@node zSeries Options
17117
@subsection zSeries Options
17118
@cindex zSeries options
17119
 
17120
These are listed under @xref{S/390 and zSeries Options}.
17121
 
17122
@node Code Gen Options
17123
@section Options for Code Generation Conventions
17124
@cindex code generation conventions
17125
@cindex options, code generation
17126
@cindex run-time options
17127
 
17128
These machine-independent options control the interface conventions
17129
used in code generation.
17130
 
17131
Most of them have both positive and negative forms; the negative form
17132
of @option{-ffoo} would be @option{-fno-foo}.  In the table below, only
17133
one of the forms is listed---the one which is not the default.  You
17134
can figure out the other form by either removing @samp{no-} or adding
17135
it.
17136
 
17137
@table @gcctabopt
17138
@item -fbounds-check
17139
@opindex fbounds-check
17140
For front-ends that support it, generate additional code to check that
17141
indices used to access arrays are within the declared range.  This is
17142
currently only supported by the Java and Fortran front-ends, where
17143
this option defaults to true and false respectively.
17144
 
17145
@item -ftrapv
17146
@opindex ftrapv
17147
This option generates traps for signed overflow on addition, subtraction,
17148
multiplication operations.
17149
 
17150
@item -fwrapv
17151
@opindex fwrapv
17152
This option instructs the compiler to assume that signed arithmetic
17153
overflow of addition, subtraction and multiplication wraps around
17154
using twos-complement representation.  This flag enables some optimizations
17155
and disables others.  This option is enabled by default for the Java
17156
front-end, as required by the Java language specification.
17157
 
17158
@item -fexceptions
17159
@opindex fexceptions
17160
Enable exception handling.  Generates extra code needed to propagate
17161
exceptions.  For some targets, this implies GCC will generate frame
17162
unwind information for all functions, which can produce significant data
17163
size overhead, although it does not affect execution.  If you do not
17164
specify this option, GCC will enable it by default for languages like
17165
C++ which normally require exception handling, and disable it for
17166
languages like C that do not normally require it.  However, you may need
17167
to enable this option when compiling C code that needs to interoperate
17168
properly with exception handlers written in C++.  You may also wish to
17169
disable this option if you are compiling older C++ programs that don't
17170
use exception handling.
17171
 
17172
@item -fnon-call-exceptions
17173
@opindex fnon-call-exceptions
17174
Generate code that allows trapping instructions to throw exceptions.
17175
Note that this requires platform-specific runtime support that does
17176
not exist everywhere.  Moreover, it only allows @emph{trapping}
17177
instructions to throw exceptions, i.e.@: memory references or floating
17178
point instructions.  It does not allow exceptions to be thrown from
17179
arbitrary signal handlers such as @code{SIGALRM}.
17180
 
17181
@item -funwind-tables
17182
@opindex funwind-tables
17183
Similar to @option{-fexceptions}, except that it will just generate any needed
17184
static data, but will not affect the generated code in any other way.
17185
You will normally not enable this option; instead, a language processor
17186
that needs this handling would enable it on your behalf.
17187
 
17188
@item -fasynchronous-unwind-tables
17189
@opindex fasynchronous-unwind-tables
17190
Generate unwind table in dwarf2 format, if supported by target machine.  The
17191
table is exact at each instruction boundary, so it can be used for stack
17192
unwinding from asynchronous events (such as debugger or garbage collector).
17193
 
17194
@item -fpcc-struct-return
17195
@opindex fpcc-struct-return
17196
Return ``short'' @code{struct} and @code{union} values in memory like
17197
longer ones, rather than in registers.  This convention is less
17198
efficient, but it has the advantage of allowing intercallability between
17199
GCC-compiled files and files compiled with other compilers, particularly
17200
the Portable C Compiler (pcc).
17201
 
17202
The precise convention for returning structures in memory depends
17203
on the target configuration macros.
17204
 
17205
Short structures and unions are those whose size and alignment match
17206
that of some integer type.
17207
 
17208
@strong{Warning:} code compiled with the @option{-fpcc-struct-return}
17209
switch is not binary compatible with code compiled with the
17210
@option{-freg-struct-return} switch.
17211
Use it to conform to a non-default application binary interface.
17212
 
17213
@item -freg-struct-return
17214
@opindex freg-struct-return
17215
Return @code{struct} and @code{union} values in registers when possible.
17216
This is more efficient for small structures than
17217
@option{-fpcc-struct-return}.
17218
 
17219
If you specify neither @option{-fpcc-struct-return} nor
17220
@option{-freg-struct-return}, GCC defaults to whichever convention is
17221
standard for the target.  If there is no standard convention, GCC
17222
defaults to @option{-fpcc-struct-return}, except on targets where GCC is
17223
the principal compiler.  In those cases, we can choose the standard, and
17224
we chose the more efficient register return alternative.
17225
 
17226
@strong{Warning:} code compiled with the @option{-freg-struct-return}
17227
switch is not binary compatible with code compiled with the
17228
@option{-fpcc-struct-return} switch.
17229
Use it to conform to a non-default application binary interface.
17230
 
17231
@item -fshort-enums
17232
@opindex fshort-enums
17233
Allocate to an @code{enum} type only as many bytes as it needs for the
17234
declared range of possible values.  Specifically, the @code{enum} type
17235
will be equivalent to the smallest integer type which has enough room.
17236
 
17237
@strong{Warning:} the @option{-fshort-enums} switch causes GCC to generate
17238
code that is not binary compatible with code generated without that switch.
17239
Use it to conform to a non-default application binary interface.
17240
 
17241
@item -fshort-double
17242
@opindex fshort-double
17243
Use the same size for @code{double} as for @code{float}.
17244
 
17245
@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
17246
code that is not binary compatible with code generated without that switch.
17247
Use it to conform to a non-default application binary interface.
17248
 
17249
@item -fshort-wchar
17250
@opindex fshort-wchar
17251
Override the underlying type for @samp{wchar_t} to be @samp{short
17252
unsigned int} instead of the default for the target.  This option is
17253
useful for building programs to run under WINE@.
17254
 
17255
@strong{Warning:} the @option{-fshort-wchar} switch causes GCC to generate
17256
code that is not binary compatible with code generated without that switch.
17257
Use it to conform to a non-default application binary interface.
17258
 
17259
@item -fno-common
17260
@opindex fno-common
17261
In C code, controls the placement of uninitialized global variables.
17262
Unix C compilers have traditionally permitted multiple definitions of
17263
such variables in different compilation units by placing the variables
17264
in a common block.
17265
This is the behavior specified by @option{-fcommon}, and is the default
17266
for GCC on most targets.
17267
On the other hand, this behavior is not required by ISO C, and on some
17268
targets may carry a speed or code size penalty on variable references.
17269
The @option{-fno-common} option specifies that the compiler should place
17270
uninitialized global variables in the data section of the object file,
17271
rather than generating them as common blocks.
17272
This has the effect that if the same variable is declared
17273
(without @code{extern}) in two different compilations,
17274
you will get a multiple-definition error when you link them.
17275
In this case, you must compile with @option{-fcommon} instead.
17276
Compiling with @option{-fno-common} is useful on targets for which
17277
it provides better performance, or if you wish to verify that the
17278
program will work on other systems which always treat uninitialized
17279
variable declarations this way.
17280
 
17281
@item -fno-ident
17282
@opindex fno-ident
17283
Ignore the @samp{#ident} directive.
17284
 
17285
@item -finhibit-size-directive
17286
@opindex finhibit-size-directive
17287
Don't output a @code{.size} assembler directive, or anything else that
17288
would cause trouble if the function is split in the middle, and the
17289
two halves are placed at locations far apart in memory.  This option is
17290
used when compiling @file{crtstuff.c}; you should not need to use it
17291
for anything else.
17292
 
17293
@item -fverbose-asm
17294
@opindex fverbose-asm
17295
Put extra commentary information in the generated assembly code to
17296
make it more readable.  This option is generally only of use to those
17297
who actually need to read the generated assembly code (perhaps while
17298
debugging the compiler itself).
17299
 
17300
@option{-fno-verbose-asm}, the default, causes the
17301
extra information to be omitted and is useful when comparing two assembler
17302
files.
17303
 
17304
@item -frecord-gcc-switches
17305
@opindex frecord-gcc-switches
17306
This switch causes the command line that was used to invoke the
17307
compiler to be recorded into the object file that is being created.
17308
This switch is only implemented on some targets and the exact format
17309
of the recording is target and binary file format dependent, but it
17310
usually takes the form of a section containing ASCII text.  This
17311
switch is related to the @option{-fverbose-asm} switch, but that
17312
switch only records information in the assembler output file as
17313
comments, so it never reaches the object file.
17314
 
17315
@item -fpic
17316
@opindex fpic
17317
@cindex global offset table
17318
@cindex PIC
17319
Generate position-independent code (PIC) suitable for use in a shared
17320
library, if supported for the target machine.  Such code accesses all
17321
constant addresses through a global offset table (GOT)@.  The dynamic
17322
loader resolves the GOT entries when the program starts (the dynamic
17323
loader is not part of GCC; it is part of the operating system).  If
17324
the GOT size for the linked executable exceeds a machine-specific
17325
maximum size, you get an error message from the linker indicating that
17326
@option{-fpic} does not work; in that case, recompile with @option{-fPIC}
17327
instead.  (These maximums are 8k on the SPARC and 32k
17328
on the m68k and RS/6000.  The 386 has no such limit.)
17329
 
17330
Position-independent code requires special support, and therefore works
17331
only on certain machines.  For the 386, GCC supports PIC for System V
17332
but not for the Sun 386i.  Code generated for the IBM RS/6000 is always
17333
position-independent.
17334
 
17335
When this flag is set, the macros @code{__pic__} and @code{__PIC__}
17336
are defined to 1.
17337
 
17338
@item -fPIC
17339
@opindex fPIC
17340
If supported for the target machine, emit position-independent code,
17341
suitable for dynamic linking and avoiding any limit on the size of the
17342
global offset table.  This option makes a difference on the m68k,
17343
PowerPC and SPARC@.
17344
 
17345
Position-independent code requires special support, and therefore works
17346
only on certain machines.
17347
 
17348
When this flag is set, the macros @code{__pic__} and @code{__PIC__}
17349
are defined to 2.
17350
 
17351
@item -fpie
17352
@itemx -fPIE
17353
@opindex fpie
17354
@opindex fPIE
17355
These options are similar to @option{-fpic} and @option{-fPIC}, but
17356
generated position independent code can be only linked into executables.
17357
Usually these options are used when @option{-pie} GCC option will be
17358
used during linking.
17359
 
17360
@option{-fpie} and @option{-fPIE} both define the macros
17361
@code{__pie__} and @code{__PIE__}.  The macros have the value 1
17362
for @option{-fpie} and 2 for @option{-fPIE}.
17363
 
17364
@item -fno-jump-tables
17365
@opindex fno-jump-tables
17366
Do not use jump tables for switch statements even where it would be
17367
more efficient than other code generation strategies.  This option is
17368
of use in conjunction with @option{-fpic} or @option{-fPIC} for
17369
building code which forms part of a dynamic linker and cannot
17370
reference the address of a jump table.  On some targets, jump tables
17371
do not require a GOT and this option is not needed.
17372
 
17373
@item -ffixed-@var{reg}
17374
@opindex ffixed
17375
Treat the register named @var{reg} as a fixed register; generated code
17376
should never refer to it (except perhaps as a stack pointer, frame
17377
pointer or in some other fixed role).
17378
 
17379
@var{reg} must be the name of a register.  The register names accepted
17380
are machine-specific and are defined in the @code{REGISTER_NAMES}
17381
macro in the machine description macro file.
17382
 
17383
This flag does not have a negative form, because it specifies a
17384
three-way choice.
17385
 
17386
@item -fcall-used-@var{reg}
17387
@opindex fcall-used
17388
Treat the register named @var{reg} as an allocable register that is
17389
clobbered by function calls.  It may be allocated for temporaries or
17390
variables that do not live across a call.  Functions compiled this way
17391
will not save and restore the register @var{reg}.
17392
 
17393
It is an error to used this flag with the frame pointer or stack pointer.
17394
Use of this flag for other registers that have fixed pervasive roles in
17395
the machine's execution model will produce disastrous results.
17396
 
17397
This flag does not have a negative form, because it specifies a
17398
three-way choice.
17399
 
17400
@item -fcall-saved-@var{reg}
17401
@opindex fcall-saved
17402
Treat the register named @var{reg} as an allocable register saved by
17403
functions.  It may be allocated even for temporaries or variables that
17404
live across a call.  Functions compiled this way will save and restore
17405
the register @var{reg} if they use it.
17406
 
17407
It is an error to used this flag with the frame pointer or stack pointer.
17408
Use of this flag for other registers that have fixed pervasive roles in
17409
the machine's execution model will produce disastrous results.
17410
 
17411
A different sort of disaster will result from the use of this flag for
17412
a register in which function values may be returned.
17413
 
17414
This flag does not have a negative form, because it specifies a
17415
three-way choice.
17416
 
17417
@item -fpack-struct[=@var{n}]
17418
@opindex fpack-struct
17419
Without a value specified, pack all structure members together without
17420
holes.  When a value is specified (which must be a small power of two), pack
17421
structure members according to this value, representing the maximum
17422
alignment (that is, objects with default alignment requirements larger than
17423
this will be output potentially unaligned at the next fitting location.
17424
 
17425
@strong{Warning:} the @option{-fpack-struct} switch causes GCC to generate
17426
code that is not binary compatible with code generated without that switch.
17427
Additionally, it makes the code suboptimal.
17428
Use it to conform to a non-default application binary interface.
17429
 
17430
@item -finstrument-functions
17431
@opindex finstrument-functions
17432
Generate instrumentation calls for entry and exit to functions.  Just
17433
after function entry and just before function exit, the following
17434
profiling functions will be called with the address of the current
17435
function and its call site.  (On some platforms,
17436
@code{__builtin_return_address} does not work beyond the current
17437
function, so the call site information may not be available to the
17438
profiling functions otherwise.)
17439
 
17440
@smallexample
17441
void __cyg_profile_func_enter (void *this_fn,
17442
                               void *call_site);
17443
void __cyg_profile_func_exit  (void *this_fn,
17444
                               void *call_site);
17445
@end smallexample
17446
 
17447
The first argument is the address of the start of the current function,
17448
which may be looked up exactly in the symbol table.
17449
 
17450
This instrumentation is also done for functions expanded inline in other
17451
functions.  The profiling calls will indicate where, conceptually, the
17452
inline function is entered and exited.  This means that addressable
17453
versions of such functions must be available.  If all your uses of a
17454
function are expanded inline, this may mean an additional expansion of
17455
code size.  If you use @samp{extern inline} in your C code, an
17456
addressable version of such functions must be provided.  (This is
17457
normally the case anyways, but if you get lucky and the optimizer always
17458
expands the functions inline, you might have gotten away without
17459
providing static copies.)
17460
 
17461
A function may be given the attribute @code{no_instrument_function}, in
17462
which case this instrumentation will not be done.  This can be used, for
17463
example, for the profiling functions listed above, high-priority
17464
interrupt routines, and any functions from which the profiling functions
17465
cannot safely be called (perhaps signal handlers, if the profiling
17466
routines generate output or allocate memory).
17467
 
17468
@item -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{}
17469
@opindex finstrument-functions-exclude-file-list
17470
 
17471
Set the list of functions that are excluded from instrumentation (see
17472
the description of @code{-finstrument-functions}).  If the file that
17473
contains a function definition matches with one of @var{file}, then
17474
that function is not instrumented.  The match is done on substrings:
17475
if the @var{file} parameter is a substring of the file name, it is
17476
considered to be a match.
17477
 
17478
For example,
17479
@code{-finstrument-functions-exclude-file-list=/bits/stl,include/sys}
17480
will exclude any inline function defined in files whose pathnames
17481
contain @code{/bits/stl} or @code{include/sys}.
17482
 
17483
If, for some reason, you want to include letter @code{','} in one of
17484
@var{sym}, write @code{'\,'}. For example,
17485
@code{-finstrument-functions-exclude-file-list='\,\,tmp'}
17486
(note the single quote surrounding the option).
17487
 
17488
@item -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{}
17489
@opindex finstrument-functions-exclude-function-list
17490
 
17491
This is similar to @code{-finstrument-functions-exclude-file-list},
17492
but this option sets the list of function names to be excluded from
17493
instrumentation.  The function name to be matched is its user-visible
17494
name, such as @code{vector<int> blah(const vector<int> &)}, not the
17495
internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}).  The
17496
match is done on substrings: if the @var{sym} parameter is a substring
17497
of the function name, it is considered to be a match.  For C99 and C++
17498
extended identifiers, the function name must be given in UTF-8, not
17499
using universal character names.
17500
 
17501
@item -fstack-check
17502
@opindex fstack-check
17503
Generate code to verify that you do not go beyond the boundary of the
17504
stack.  You should specify this flag if you are running in an
17505
environment with multiple threads, but only rarely need to specify it in
17506
a single-threaded environment since stack overflow is automatically
17507
detected on nearly all systems if there is only one stack.
17508
 
17509
Note that this switch does not actually cause checking to be done; the
17510
operating system or the language runtime must do that.  The switch causes
17511
generation of code to ensure that they see the stack being extended.
17512
 
17513
You can additionally specify a string parameter: @code{no} means no
17514
checking, @code{generic} means force the use of old-style checking,
17515
@code{specific} means use the best checking method and is equivalent
17516
to bare @option{-fstack-check}.
17517
 
17518
Old-style checking is a generic mechanism that requires no specific
17519
target support in the compiler but comes with the following drawbacks:
17520
 
17521
@enumerate
17522
@item
17523
Modified allocation strategy for large objects: they will always be
17524
allocated dynamically if their size exceeds a fixed threshold.
17525
 
17526
@item
17527
Fixed limit on the size of the static frame of functions: when it is
17528
topped by a particular function, stack checking is not reliable and
17529
a warning is issued by the compiler.
17530
 
17531
@item
17532
Inefficiency: because of both the modified allocation strategy and the
17533
generic implementation, the performances of the code are hampered.
17534
@end enumerate
17535
 
17536
Note that old-style stack checking is also the fallback method for
17537
@code{specific} if no target support has been added in the compiler.
17538
 
17539
@item -fstack-limit-register=@var{reg}
17540
@itemx -fstack-limit-symbol=@var{sym}
17541
@itemx -fno-stack-limit
17542
@opindex fstack-limit-register
17543
@opindex fstack-limit-symbol
17544
@opindex fno-stack-limit
17545
Generate code to ensure that the stack does not grow beyond a certain value,
17546
either the value of a register or the address of a symbol.  If the stack
17547
would grow beyond the value, a signal is raised.  For most targets,
17548
the signal is raised before the stack overruns the boundary, so
17549
it is possible to catch the signal without taking special precautions.
17550
 
17551
For instance, if the stack starts at absolute address @samp{0x80000000}
17552
and grows downwards, you can use the flags
17553
@option{-fstack-limit-symbol=__stack_limit} and
17554
@option{-Wl,--defsym,__stack_limit=0x7ffe0000} to enforce a stack limit
17555
of 128KB@.  Note that this may only work with the GNU linker.
17556
 
17557
@cindex aliasing of parameters
17558
@cindex parameters, aliased
17559
@item -fargument-alias
17560
@itemx -fargument-noalias
17561
@itemx -fargument-noalias-global
17562
@itemx -fargument-noalias-anything
17563
@opindex fargument-alias
17564
@opindex fargument-noalias
17565
@opindex fargument-noalias-global
17566
@opindex fargument-noalias-anything
17567
Specify the possible relationships among parameters and between
17568
parameters and global data.
17569
 
17570
@option{-fargument-alias} specifies that arguments (parameters) may
17571
alias each other and may alias global storage.@*
17572
@option{-fargument-noalias} specifies that arguments do not alias
17573
each other, but may alias global storage.@*
17574
@option{-fargument-noalias-global} specifies that arguments do not
17575
alias each other and do not alias global storage.
17576
@option{-fargument-noalias-anything} specifies that arguments do not
17577
alias any other storage.
17578
 
17579
Each language will automatically use whatever option is required by
17580
the language standard.  You should not need to use these options yourself.
17581
 
17582
@item -fleading-underscore
17583
@opindex fleading-underscore
17584
This option and its counterpart, @option{-fno-leading-underscore}, forcibly
17585
change the way C symbols are represented in the object file.  One use
17586
is to help link with legacy assembly code.
17587
 
17588
@strong{Warning:} the @option{-fleading-underscore} switch causes GCC to
17589
generate code that is not binary compatible with code generated without that
17590
switch.  Use it to conform to a non-default application binary interface.
17591
Not all targets provide complete support for this switch.
17592
 
17593
@item -ftls-model=@var{model}
17594
@opindex ftls-model
17595
Alter the thread-local storage model to be used (@pxref{Thread-Local}).
17596
The @var{model} argument should be one of @code{global-dynamic},
17597
@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
17598
 
17599
The default without @option{-fpic} is @code{initial-exec}; with
17600
@option{-fpic} the default is @code{global-dynamic}.
17601
 
17602
@item -fvisibility=@var{default|internal|hidden|protected}
17603
@opindex fvisibility
17604
Set the default ELF image symbol visibility to the specified option---all
17605
symbols will be marked with this unless overridden within the code.
17606
Using this feature can very substantially improve linking and
17607
load times of shared object libraries, produce more optimized
17608
code, provide near-perfect API export and prevent symbol clashes.
17609
It is @strong{strongly} recommended that you use this in any shared objects
17610
you distribute.
17611
 
17612
Despite the nomenclature, @code{default} always means public ie;
17613
available to be linked against from outside the shared object.
17614
@code{protected} and @code{internal} are pretty useless in real-world
17615
usage so the only other commonly used option will be @code{hidden}.
17616
The default if @option{-fvisibility} isn't specified is
17617
@code{default}, i.e., make every
17618
symbol public---this causes the same behavior as previous versions of
17619
GCC@.
17620
 
17621
A good explanation of the benefits offered by ensuring ELF
17622
symbols have the correct visibility is given by ``How To Write
17623
Shared Libraries'' by Ulrich Drepper (which can be found at
17624
@w{@uref{http://people.redhat.com/~drepper/}})---however a superior
17625
solution made possible by this option to marking things hidden when
17626
the default is public is to make the default hidden and mark things
17627
public.  This is the norm with DLL's on Windows and with @option{-fvisibility=hidden}
17628
and @code{__attribute__ ((visibility("default")))} instead of
17629
@code{__declspec(dllexport)} you get almost identical semantics with
17630
identical syntax.  This is a great boon to those working with
17631
cross-platform projects.
17632
 
17633
For those adding visibility support to existing code, you may find
17634
@samp{#pragma GCC visibility} of use.  This works by you enclosing
17635
the declarations you wish to set visibility for with (for example)
17636
@samp{#pragma GCC visibility push(hidden)} and
17637
@samp{#pragma GCC visibility pop}.
17638
Bear in mind that symbol visibility should be viewed @strong{as
17639
part of the API interface contract} and thus all new code should
17640
always specify visibility when it is not the default ie; declarations
17641
only for use within the local DSO should @strong{always} be marked explicitly
17642
as hidden as so to avoid PLT indirection overheads---making this
17643
abundantly clear also aids readability and self-documentation of the code.
17644
Note that due to ISO C++ specification requirements, operator new and
17645
operator delete must always be of default visibility.
17646
 
17647
Be aware that headers from outside your project, in particular system
17648
headers and headers from any other library you use, may not be
17649
expecting to be compiled with visibility other than the default.  You
17650
may need to explicitly say @samp{#pragma GCC visibility push(default)}
17651
before including any such headers.
17652
 
17653
@samp{extern} declarations are not affected by @samp{-fvisibility}, so
17654
a lot of code can be recompiled with @samp{-fvisibility=hidden} with
17655
no modifications.  However, this means that calls to @samp{extern}
17656
functions with no explicit visibility will use the PLT, so it is more
17657
effective to use @samp{__attribute ((visibility))} and/or
17658
@samp{#pragma GCC visibility} to tell the compiler which @samp{extern}
17659
declarations should be treated as hidden.
17660
 
17661
Note that @samp{-fvisibility} does affect C++ vague linkage
17662
entities. This means that, for instance, an exception class that will
17663
be thrown between DSOs must be explicitly marked with default
17664
visibility so that the @samp{type_info} nodes will be unified between
17665
the DSOs.
17666
 
17667
An overview of these techniques, their benefits and how to use them
17668
is at @w{@uref{http://gcc.gnu.org/wiki/Visibility}}.
17669
 
17670
@end table
17671
 
17672
@c man end
17673
 
17674
@node Environment Variables
17675
@section Environment Variables Affecting GCC
17676
@cindex environment variables
17677
 
17678
@c man begin ENVIRONMENT
17679
This section describes several environment variables that affect how GCC
17680
operates.  Some of them work by specifying directories or prefixes to use
17681
when searching for various kinds of files.  Some are used to specify other
17682
aspects of the compilation environment.
17683
 
17684
Note that you can also specify places to search using options such as
17685
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}).  These
17686
take precedence over places specified using environment variables, which
17687
in turn take precedence over those specified by the configuration of GCC@.
17688
@xref{Driver,, Controlling the Compilation Driver @file{gcc}, gccint,
17689
GNU Compiler Collection (GCC) Internals}.
17690
 
17691
@table @env
17692
@item LANG
17693
@itemx LC_CTYPE
17694
@c @itemx LC_COLLATE
17695
@itemx LC_MESSAGES
17696
@c @itemx LC_MONETARY
17697
@c @itemx LC_NUMERIC
17698
@c @itemx LC_TIME
17699
@itemx LC_ALL
17700
@findex LANG
17701
@findex LC_CTYPE
17702
@c @findex LC_COLLATE
17703
@findex LC_MESSAGES
17704
@c @findex LC_MONETARY
17705
@c @findex LC_NUMERIC
17706
@c @findex LC_TIME
17707
@findex LC_ALL
17708
@cindex locale
17709
These environment variables control the way that GCC uses
17710
localization information that allow GCC to work with different
17711
national conventions.  GCC inspects the locale categories
17712
@env{LC_CTYPE} and @env{LC_MESSAGES} if it has been configured to do
17713
so.  These locale categories can be set to any value supported by your
17714
installation.  A typical value is @samp{en_GB.UTF-8} for English in the United
17715
Kingdom encoded in UTF-8.
17716
 
17717
The @env{LC_CTYPE} environment variable specifies character
17718
classification.  GCC uses it to determine the character boundaries in
17719
a string; this is needed for some multibyte encodings that contain quote
17720
and escape characters that would otherwise be interpreted as a string
17721
end or escape.
17722
 
17723
The @env{LC_MESSAGES} environment variable specifies the language to
17724
use in diagnostic messages.
17725
 
17726
If the @env{LC_ALL} environment variable is set, it overrides the value
17727
of @env{LC_CTYPE} and @env{LC_MESSAGES}; otherwise, @env{LC_CTYPE}
17728
and @env{LC_MESSAGES} default to the value of the @env{LANG}
17729
environment variable.  If none of these variables are set, GCC
17730
defaults to traditional C English behavior.
17731
 
17732
@item TMPDIR
17733
@findex TMPDIR
17734
If @env{TMPDIR} is set, it specifies the directory to use for temporary
17735
files.  GCC uses temporary files to hold the output of one stage of
17736
compilation which is to be used as input to the next stage: for example,
17737
the output of the preprocessor, which is the input to the compiler
17738
proper.
17739
 
17740
@item GCC_EXEC_PREFIX
17741
@findex GCC_EXEC_PREFIX
17742
If @env{GCC_EXEC_PREFIX} is set, it specifies a prefix to use in the
17743
names of the subprograms executed by the compiler.  No slash is added
17744
when this prefix is combined with the name of a subprogram, but you can
17745
specify a prefix that ends with a slash if you wish.
17746
 
17747
If @env{GCC_EXEC_PREFIX} is not set, GCC will attempt to figure out
17748
an appropriate prefix to use based on the pathname it was invoked with.
17749
 
17750
If GCC cannot find the subprogram using the specified prefix, it
17751
tries looking in the usual places for the subprogram.
17752
 
17753
The default value of @env{GCC_EXEC_PREFIX} is
17754
@file{@var{prefix}/lib/gcc/} where @var{prefix} is the prefix to
17755
the installed compiler. In many cases @var{prefix} is the value
17756
of @code{prefix} when you ran the @file{configure} script.
17757
 
17758
Other prefixes specified with @option{-B} take precedence over this prefix.
17759
 
17760
This prefix is also used for finding files such as @file{crt0.o} that are
17761
used for linking.
17762
 
17763
In addition, the prefix is used in an unusual way in finding the
17764
directories to search for header files.  For each of the standard
17765
directories whose name normally begins with @samp{/usr/local/lib/gcc}
17766
(more precisely, with the value of @env{GCC_INCLUDE_DIR}), GCC tries
17767
replacing that beginning with the specified prefix to produce an
17768
alternate directory name.  Thus, with @option{-Bfoo/}, GCC will search
17769
@file{foo/bar} where it would normally search @file{/usr/local/lib/bar}.
17770
These alternate directories are searched first; the standard directories
17771
come next. If a standard directory begins with the configured
17772
@var{prefix} then the value of @var{prefix} is replaced by
17773
@env{GCC_EXEC_PREFIX} when looking for header files.
17774
 
17775
@item COMPILER_PATH
17776
@findex COMPILER_PATH
17777
The value of @env{COMPILER_PATH} is a colon-separated list of
17778
directories, much like @env{PATH}.  GCC tries the directories thus
17779
specified when searching for subprograms, if it can't find the
17780
subprograms using @env{GCC_EXEC_PREFIX}.
17781
 
17782
@item LIBRARY_PATH
17783
@findex LIBRARY_PATH
17784
The value of @env{LIBRARY_PATH} is a colon-separated list of
17785
directories, much like @env{PATH}.  When configured as a native compiler,
17786
GCC tries the directories thus specified when searching for special
17787
linker files, if it can't find them using @env{GCC_EXEC_PREFIX}.  Linking
17788
using GCC also uses these directories when searching for ordinary
17789
libraries for the @option{-l} option (but directories specified with
17790
@option{-L} come first).
17791
 
17792
@item LANG
17793
@findex LANG
17794
@cindex locale definition
17795
This variable is used to pass locale information to the compiler.  One way in
17796
which this information is used is to determine the character set to be used
17797
when character literals, string literals and comments are parsed in C and C++.
17798
When the compiler is configured to allow multibyte characters,
17799
the following values for @env{LANG} are recognized:
17800
 
17801
@table @samp
17802
@item C-JIS
17803
Recognize JIS characters.
17804
@item C-SJIS
17805
Recognize SJIS characters.
17806
@item C-EUCJP
17807
Recognize EUCJP characters.
17808
@end table
17809
 
17810
If @env{LANG} is not defined, or if it has some other value, then the
17811
compiler will use mblen and mbtowc as defined by the default locale to
17812
recognize and translate multibyte characters.
17813
@end table
17814
 
17815
@noindent
17816
Some additional environments variables affect the behavior of the
17817
preprocessor.
17818
 
17819
@include cppenv.texi
17820
 
17821
@c man end
17822
 
17823
@node Precompiled Headers
17824
@section Using Precompiled Headers
17825
@cindex precompiled headers
17826
@cindex speed of compilation
17827
 
17828
Often large projects have many header files that are included in every
17829
source file.  The time the compiler takes to process these header files
17830
over and over again can account for nearly all of the time required to
17831
build the project.  To make builds faster, GCC allows users to
17832
`precompile' a header file; then, if builds can use the precompiled
17833
header file they will be much faster.
17834
 
17835
To create a precompiled header file, simply compile it as you would any
17836
other file, if necessary using the @option{-x} option to make the driver
17837
treat it as a C or C++ header file.  You will probably want to use a
17838
tool like @command{make} to keep the precompiled header up-to-date when
17839
the headers it contains change.
17840
 
17841
A precompiled header file will be searched for when @code{#include} is
17842
seen in the compilation.  As it searches for the included file
17843
(@pxref{Search Path,,Search Path,cpp,The C Preprocessor}) the
17844
compiler looks for a precompiled header in each directory just before it
17845
looks for the include file in that directory.  The name searched for is
17846
the name specified in the @code{#include} with @samp{.gch} appended.  If
17847
the precompiled header file can't be used, it is ignored.
17848
 
17849
For instance, if you have @code{#include "all.h"}, and you have
17850
@file{all.h.gch} in the same directory as @file{all.h}, then the
17851
precompiled header file will be used if possible, and the original
17852
header will be used otherwise.
17853
 
17854
Alternatively, you might decide to put the precompiled header file in a
17855
directory and use @option{-I} to ensure that directory is searched
17856
before (or instead of) the directory containing the original header.
17857
Then, if you want to check that the precompiled header file is always
17858
used, you can put a file of the same name as the original header in this
17859
directory containing an @code{#error} command.
17860
 
17861
This also works with @option{-include}.  So yet another way to use
17862
precompiled headers, good for projects not designed with precompiled
17863
header files in mind, is to simply take most of the header files used by
17864
a project, include them from another header file, precompile that header
17865
file, and @option{-include} the precompiled header.  If the header files
17866
have guards against multiple inclusion, they will be skipped because
17867
they've already been included (in the precompiled header).
17868
 
17869
If you need to precompile the same header file for different
17870
languages, targets, or compiler options, you can instead make a
17871
@emph{directory} named like @file{all.h.gch}, and put each precompiled
17872
header in the directory, perhaps using @option{-o}.  It doesn't matter
17873
what you call the files in the directory, every precompiled header in
17874
the directory will be considered.  The first precompiled header
17875
encountered in the directory that is valid for this compilation will
17876
be used; they're searched in no particular order.
17877
 
17878
There are many other possibilities, limited only by your imagination,
17879
good sense, and the constraints of your build system.
17880
 
17881
A precompiled header file can be used only when these conditions apply:
17882
 
17883
@itemize
17884
@item
17885
Only one precompiled header can be used in a particular compilation.
17886
 
17887
@item
17888
A precompiled header can't be used once the first C token is seen.  You
17889
can have preprocessor directives before a precompiled header; you can
17890
even include a precompiled header from inside another header, so long as
17891
there are no C tokens before the @code{#include}.
17892
 
17893
@item
17894
The precompiled header file must be produced for the same language as
17895
the current compilation.  You can't use a C precompiled header for a C++
17896
compilation.
17897
 
17898
@item
17899
The precompiled header file must have been produced by the same compiler
17900
binary as the current compilation is using.
17901
 
17902
@item
17903
Any macros defined before the precompiled header is included must
17904
either be defined in the same way as when the precompiled header was
17905
generated, or must not affect the precompiled header, which usually
17906
means that they don't appear in the precompiled header at all.
17907
 
17908
The @option{-D} option is one way to define a macro before a
17909
precompiled header is included; using a @code{#define} can also do it.
17910
There are also some options that define macros implicitly, like
17911
@option{-O} and @option{-Wdeprecated}; the same rule applies to macros
17912
defined this way.
17913
 
17914
@item If debugging information is output when using the precompiled
17915
header, using @option{-g} or similar, the same kind of debugging information
17916
must have been output when building the precompiled header.  However,
17917
a precompiled header built using @option{-g} can be used in a compilation
17918
when no debugging information is being output.
17919
 
17920
@item The same @option{-m} options must generally be used when building
17921
and using the precompiled header.  @xref{Submodel Options},
17922
for any cases where this rule is relaxed.
17923
 
17924
@item Each of the following options must be the same when building and using
17925
the precompiled header:
17926
 
17927
@gccoptlist{-fexceptions}
17928
 
17929
@item
17930
Some other command-line options starting with @option{-f},
17931
@option{-p}, or @option{-O} must be defined in the same way as when
17932
the precompiled header was generated.  At present, it's not clear
17933
which options are safe to change and which are not; the safest choice
17934
is to use exactly the same options when generating and using the
17935
precompiled header.  The following are known to be safe:
17936
 
17937
@gccoptlist{-fmessage-length=  -fpreprocessed  -fsched-interblock @gol
17938
-fsched-spec  -fsched-spec-load  -fsched-spec-load-dangerous @gol
17939
-fsched-verbose=<number>  -fschedule-insns  -fvisibility= @gol
17940
-pedantic-errors}
17941
 
17942
@end itemize
17943
 
17944
For all of these except the last, the compiler will automatically
17945
ignore the precompiled header if the conditions aren't met.  If you
17946
find an option combination that doesn't work and doesn't cause the
17947
precompiled header to be ignored, please consider filing a bug report,
17948
see @ref{Bugs}.
17949
 
17950
If you do use differing options when generating and using the
17951
precompiled header, the actual behavior will be a mixture of the
17952
behavior for the options.  For instance, if you use @option{-g} to
17953
generate the precompiled header but not when using it, you may or may
17954
not get debugging information for routines in the precompiled header.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.