Merge branch 'vendor/GCC44' into gcc442
[dragonfly.git] / contrib / gcc-4.4 / gcc / doc / gcc.1
1 .\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.07)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
29 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
30 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
31 .\" nothing in troff, for use with C<>.
32 .tr \(*W-
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" Escape single quotes in literal strings from groff's Unicode transform.
52 .ie \n(.g .ds Aq \(aq
53 .el       .ds Aq '
54 .\"
55 .\" If the F register is turned on, we'll generate index entries on stderr for
56 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
57 .\" entries marked with X<> in POD.  Of course, you'll have to process the
58 .\" output yourself in some meaningful fashion.
59 .ie \nF \{\
60 .    de IX
61 .    tm Index:\\$1\t\\n%\t"\\$2"
62 ..
63 .    nr % 0
64 .    rr F
65 .\}
66 .el \{\
67 .    de IX
68 ..
69 .\}
70 .\"
71 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
72 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
73 .    \" fudge factors for nroff and troff
74 .if n \{\
75 .    ds #H 0
76 .    ds #V .8m
77 .    ds #F .3m
78 .    ds #[ \f1
79 .    ds #] \fP
80 .\}
81 .if t \{\
82 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
83 .    ds #V .6m
84 .    ds #F 0
85 .    ds #[ \&
86 .    ds #] \&
87 .\}
88 .    \" simple accents for nroff and troff
89 .if n \{\
90 .    ds ' \&
91 .    ds ` \&
92 .    ds ^ \&
93 .    ds , \&
94 .    ds ~ ~
95 .    ds /
96 .\}
97 .if t \{\
98 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
99 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
100 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
101 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
102 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
103 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
104 .\}
105 .    \" troff and (daisy-wheel) nroff accents
106 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
107 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
108 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
109 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
110 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
111 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
112 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
113 .ds ae a\h'-(\w'a'u*4/10)'e
114 .ds Ae A\h'-(\w'A'u*4/10)'E
115 .    \" corrections for vroff
116 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
117 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
118 .    \" for low resolution devices (crt and lpr)
119 .if \n(.H>23 .if \n(.V>19 \
120 \{\
121 .    ds : e
122 .    ds 8 ss
123 .    ds o a
124 .    ds d- d\h'-1'\(ga
125 .    ds D- D\h'-1'\(hy
126 .    ds th \o'bp'
127 .    ds Th \o'LP'
128 .    ds ae ae
129 .    ds Ae AE
130 .\}
131 .rm #[ #] #H #V #F C
132 .\" ========================================================================
133 .\"
134 .IX Title "GCC 1"
135 .TH GCC 1 "2009-10-15" "gcc-4.4.2" "GNU"
136 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
137 .\" way too many mistakes in technical documents.
138 .if n .ad l
139 .nh
140 .SH "NAME"
141 gcc \- GNU project C and C++ compiler
142 .SH "SYNOPSIS"
143 .IX Header "SYNOPSIS"
144 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
145     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
146     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
147     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
148     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
149     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
150     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
151 .PP
152 Only the most useful options are listed here; see below for the
153 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
154 .SH "DESCRIPTION"
155 .IX Header "DESCRIPTION"
156 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
157 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
158 process at an intermediate stage.  For example, the \fB\-c\fR option
159 says not to run the linker.  Then the output consists of object files
160 output by the assembler.
161 .PP
162 Other options are passed on to one stage of processing.  Some options
163 control the preprocessor and others the compiler itself.  Yet other
164 options control the assembler and linker; most of these are not
165 documented here, since you rarely need to use any of them.
166 .PP
167 Most of the command line options that you can use with \s-1GCC\s0 are useful
168 for C programs; when an option is only useful with another language
169 (usually \*(C+), the explanation says so explicitly.  If the description
170 for a particular option does not mention a source language, you can use
171 that option with all supported languages.
172 .PP
173 The \fBgcc\fR program accepts options and file names as operands.  Many
174 options have multi-letter names; therefore multiple single-letter options
175 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
176 .PP
177 You can mix options and other arguments.  For the most part, the order
178 you use doesn't matter.  Order does matter when you use several
179 options of the same kind; for example, if you specify \fB\-L\fR more
180 than once, the directories are searched in the order specified.  Also,
181 the placement of the \fB\-l\fR option is significant.
182 .PP
183 Many options have long names starting with \fB\-f\fR or with
184 \&\fB\-W\fR\-\-\-for example,
185 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
186 these have both positive and negative forms; the negative form of
187 \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR.  This manual documents
188 only one of these two forms, whichever one is not the default.
189 .SH "OPTIONS"
190 .IX Header "OPTIONS"
191 .Sh "Option Summary"
192 .IX Subsection "Option Summary"
193 Here is a summary of all the options, grouped by type.  Explanations are
194 in the following sections.
195 .IP "\fIOverall Options\fR" 4
196 .IX Item "Overall Options"
197 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-combine  \-pipe  \-pass\-exit\-codes  
198 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
199 \&\-\-version \-wrapper@\fR\fIfile\fR
200 .IP "\fIC Language Options\fR" 4
201 .IX Item "C Language Options"
202 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
203 \&\-aux\-info\fR \fIfilename\fR 
204 \&\fB\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
205 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-extensions 
206 \&\-trigraphs  \-no\-integrated\-cpp  \-traditional  \-traditional\-cpp 
207 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
208 \&\-fsigned\-bitfields  \-fsigned\-char 
209 \&\-funsigned\-bitfields  \-funsigned\-char\fR
210 .IP "\fI\*(C+ Language Options\fR" 4
211 .IX Item " Language Options"
212 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
213 \&\-fconserve\-space  \-ffriend\-injection 
214 \&\-fno\-elide\-constructors 
215 \&\-fno\-enforce\-eh\-specs 
216 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
217 \&\-fno\-implicit\-templates 
218 \&\-fno\-implicit\-inline\-templates 
219 \&\-fno\-implement\-inlines  \-fms\-extensions 
220 \&\-fno\-nonansi\-builtins  \-fno\-operator\-names 
221 \&\-fno\-optional\-diags  \-fpermissive 
222 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth\-\fR\fIn\fR 
223 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
224 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
225 \&\-fvisibility\-ms\-compat 
226 \&\-Wabi  \-Wctor\-dtor\-privacy 
227 \&\-Wnon\-virtual\-dtor  \-Wreorder 
228 \&\-Weffc++  \-Wstrict\-null\-sentinel 
229 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
230 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
231 \&\-Wsign\-promo\fR
232 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
233 .IX Item "Objective-C and Objective- Language Options"
234 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
235 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
236 \&\-fno\-nil\-receivers 
237 \&\-fobjc\-call\-cxx\-cdtors 
238 \&\-fobjc\-direct\-dispatch 
239 \&\-fobjc\-exceptions 
240 \&\-fobjc\-gc 
241 \&\-freplace\-objc\-classes 
242 \&\-fzero\-link 
243 \&\-gen\-decls 
244 \&\-Wassign\-intercept 
245 \&\-Wno\-protocol  \-Wselector 
246 \&\-Wstrict\-selector\-match 
247 \&\-Wundeclared\-selector\fR
248 .IP "\fILanguage Independent Options\fR" 4
249 .IX Item "Language Independent Options"
250 \&\fB\-fmessage\-length=\fR\fIn\fR  
251 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
252 \&\fB\-fdiagnostics\-show\-option\fR
253 .IP "\fIWarning Options\fR" 4
254 .IX Item "Warning Options"
255 \&\fB\-fsyntax\-only  \-pedantic  \-pedantic\-errors 
256 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
257 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
258 \&\-Wc++\-compat \-Wc++0x\-compat \-Wcast\-align  \-Wcast\-qual  
259 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
260 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-deprecated  
261 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
262 \&\-Wno\-div\-by\-zero \-Wempty\-body  \-Wenum\-compare \-Wno\-endif\-labels 
263 \&\-Werror  \-Werror=* 
264 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
265 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
266 \&\-Wformat\-security  \-Wformat\-y2k 
267 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wignored\-qualifiers 
268 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
269 \&\-Winit\-self  \-Winline 
270 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
271 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
272 \&\-Wlogical\-op \-Wlong\-long 
273 \&\-Wmain  \-Wmissing\-braces  \-Wmissing\-field\-initializers 
274 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
275 \&\-Wmissing\-noreturn  \-Wno\-mudflap 
276 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
277 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
278 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
279 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
280 \&\-Wredundant\-decls 
281 \&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow 
282 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
283 \&\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
284 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
285 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
286 \&\-Wsystem\-headers  \-Wtrigraphs  \-Wtype\-limits  \-Wundef  \-Wuninitialized 
287 \&\-Wunknown\-pragmas  \-Wno\-pragmas \-Wunreachable\-code 
288 \&\-Wunused  \-Wunused\-function  \-Wunused\-label  \-Wunused\-parameter 
289 \&\-Wunused\-value  \-Wunused\-variable 
290 \&\-Wvariadic\-macros \-Wvla 
291 \&\-Wvolatile\-register\-var  \-Wwrite\-strings\fR
292 .IP "\fIC and Objective-C-only Warning Options\fR" 4
293 .IX Item "C and Objective-C-only Warning Options"
294 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
295 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
296 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
297 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
298 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
299 .IP "\fIDebugging Options\fR" 4
300 .IX Item "Debugging Options"
301 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
302 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
303 \&\fB\-fdump\-noaddr \-fdump\-unnumbered 
304 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
305 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
306 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
307 \&\-fdump\-statistics 
308 \&\-fdump\-tree\-all 
309 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
310 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
311 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
312 \&\-fdump\-tree\-ch 
313 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
314 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
315 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
316 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
317 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
318 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
319 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
320 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
321 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
322 \&\-fdump\-tree\-sink 
323 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
324 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
325 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
326 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
327 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
328 \&\fB\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
329 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
330 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
331 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
332 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
333 \&\-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
334 \&\-g  \-g\fR\fIlevel\fR  \fB\-gcoff \-gdwarf\-2 
335 \&\-ggdb  \-gstabs  \-gstabs+  \-gvms  \-gxcoff  \-gxcoff+ 
336 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
337 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
338 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
339 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
340 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
341 \&\-print\-multi\-directory  \-print\-multi\-lib 
342 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
343 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
344 \&\-save\-temps  \-time\fR
345 .IP "\fIOptimization Options\fR" 4
346 .IX Item "Optimization Options"
347 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
348 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
349 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
350 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
351 \&\-fcheck\-data\-deps \-fconserve\-stack \-fcprop\-registers \-fcrossjumping 
352 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \-fcx\-limited\-range 
353 \&\-fdata\-sections \-fdce \-fdce 
354 \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks \-fdse \-fdse 
355 \&\-fearly\-inlining \-fexpensive\-optimizations \-ffast\-math 
356 \&\-ffinite\-math\-only \-ffloat\-store \-fforward\-propagate 
357 \&\-ffunction\-sections \-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm 
358 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
359 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
360 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg \-fipa\-pta  
361 \&\-fipa\-pure\-const \-fipa\-reference \-fipa\-struct\-reorg 
362 \&\-fipa\-type\-escape \-fira\-algorithm=\fR\fIalgorithm\fR 
363 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-coalesce \-fno\-ira\-share\-save\-slots 
364 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
365 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
366 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine 
367 \&\-fmerge\-all\-constants \-fmerge\-constants \-fmodulo\-sched 
368 \&\-fmodulo\-sched\-allow\-regmoves \-fmove\-loop\-invariants \-fmudflap 
369 \&\-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg \-fno\-default\-inline 
370 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
371 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
372 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
373 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
374 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
375 \&\-fpeel\-loops \-fpredictive\-commoning \-fprefetch\-loop\-arrays 
376 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
377 \&\-fprofile\-generate=\fR\fIpath\fR 
378 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
379 \&\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
380 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
381 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
382 \&\-frounding\-math \-frtl\-abstract\-sequences \-fsched2\-use\-superblocks 
383 \&\-fsched2\-use\-traces \-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
384 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
385 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \-fsee 
386 \&\-fselective\-scheduling \-fselective\-scheduling2 
387 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
388 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
389 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
390 \&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
391 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
392 \&\-ftree\-copyrename \-ftree\-dce 
393 \&\-ftree\-dominator\-opts \-ftree\-dse \-ftree\-fre \-ftree\-loop\-im 
394 \&\-ftree\-loop\-distribution 
395 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
396 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-reassoc 
397 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion 
398 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
399 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
400 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
401 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
402 \&\-fwhole\-program 
403 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
404 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
405 .IP "\fIPreprocessor Options\fR" 4
406 .IX Item "Preprocessor Options"
407 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
408 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
409 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
410 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
411 \&\-idirafter\fR \fIdir\fR 
412 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
413 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
414 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
415 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
416 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
417 \&\-P  \-fworking\-directory  \-remap 
418 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR 
419 \&\fB\-Xpreprocessor\fR \fIoption\fR
420 .IP "\fIAssembler Option\fR" 4
421 .IX Item "Assembler Option"
422 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
423 .IP "\fILinker Options\fR" 4
424 .IX Item "Linker Options"
425 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
426 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
427 \&\-s  \-static  \-static\-libgcc  \-shared  \-shared\-libgcc  \-symbolic 
428 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
429 \&\fB\-u\fR \fIsymbol\fR
430 .IP "\fIDirectory Options\fR" 4
431 .IX Item "Directory Options"
432 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-iquote\fR\fIdir\fR  \fB\-L\fR\fIdir\fR
433 \&\fB\-specs=\fR\fIfile\fR  \fB\-I\- \-\-sysroot=\fR\fIdir\fR
434 .IP "\fITarget Options\fR" 4
435 .IX Item "Target Options"
436 \&\fB\-V\fR \fIversion\fR  \fB\-b\fR \fImachine\fR
437 .IP "\fIMachine Dependent Options\fR" 4
438 .IX Item "Machine Dependent Options"
439 \&\fI\s-1ARC\s0 Options\fR
440 \&\fB\-EB  \-EL 
441 \&\-mmangle\-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext-section\fR 
442 \&\fB\-mdata=\fR\fIdata-section\fR  \fB\-mrodata=\fR\fIreadonly-data-section\fR
443 .Sp
444 \&\fI\s-1ARM\s0 Options\fR
445 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
446 \&\-mabi=\fR\fIname\fR 
447 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
448 \&\-mapcs\-float  \-mno\-apcs\-float 
449 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
450 \&\-msched\-prolog  \-mno\-sched\-prolog 
451 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
452 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-msoft\-float  \-mhard\-float  \-mfpe 
453 \&\-mthumb\-interwork  \-mno\-thumb\-interwork 
454 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
455 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
456 \&\fB\-mabort\-on\-noreturn 
457 \&\-mlong\-calls  \-mno\-long\-calls 
458 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
459 \&\-mpic\-register=\fR\fIreg\fR 
460 \&\fB\-mnop\-fun\-dllimport 
461 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
462 \&\-mpoke\-function\-name 
463 \&\-mthumb  \-marm 
464 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
465 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
466 \&\-mtp=\fR\fIname\fR 
467 \&\fB\-mword\-relocations 
468 \&\-mfix\-cortex\-m3\-ldrd\fR
469 .Sp
470 \&\fI\s-1AVR\s0 Options\fR
471 \&\fB\-mmcu=\fR\fImcu\fR  \fB\-msize  \-mno\-interrupts 
472 \&\-mcall\-prologues  \-mno\-tablejump  \-mtiny\-stack  \-mint8\fR
473 .Sp
474 \&\fIBlackfin Options\fR
475 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
476 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
477 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
478 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
479 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
480 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
481 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
482 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
483 \&\-micplb\fR
484 .Sp
485 \&\fI\s-1CRIS\s0 Options\fR
486 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
487 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
488 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
489 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
490 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
491 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
492 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
493 .Sp
494 \&\fI\s-1CRX\s0 Options\fR
495 \&\fB\-mmac \-mpush\-args\fR
496 .Sp
497 \&\fIDarwin Options\fR
498 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
499 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
500 \&\-client_name  \-compatibility_version  \-current_version 
501 \&\-dead_strip 
502 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
503 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
504 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
505 \&\-force_flat_namespace  \-headerpad_max_install_names 
506 \&\-iframework 
507 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
508 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
509 \&\-noall_load   \-no_dead_strip_inits_and_terms 
510 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
511 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
512 \&\-private_bundle  \-read_only_relocs  \-sectalign 
513 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
514 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
515 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
516 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
517 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
518 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
519 \&\-twolevel_namespace  \-umbrella  \-undefined 
520 \&\-unexported_symbols_list  \-weak_reference_mismatches 
521 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
522 \&\fB\-mkernel \-mone\-byte\-bool\fR
523 .Sp
524 \&\fI\s-1DEC\s0 Alpha Options\fR
525 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
526 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
527 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
528 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
529 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
530 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
531 \&\-mfloat\-vax  \-mfloat\-ieee 
532 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
533 \&\-msmall\-text  \-mlarge\-text 
534 \&\-mmemory\-latency=\fR\fItime\fR
535 .Sp
536 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
537 \&\fB\-mvms\-return\-codes\fR
538 .Sp
539 \&\fI\s-1FR30\s0 Options\fR
540 \&\fB\-msmall\-model \-mno\-lsim\fR
541 .Sp
542 \&\fI\s-1FRV\s0 Options\fR
543 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
544 \&\-mhard\-float  \-msoft\-float 
545 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
546 \&\-mdouble  \-mno\-double 
547 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
548 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
549 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
550 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
551 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
552 \&\-moptimize\-membar \-mno\-optimize\-membar 
553 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
554 \&\-mvliw\-branch  \-mno\-vliw\-branch 
555 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
556 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
557 \&\-mTLS \-mtls 
558 \&\-mcpu=\fR\fIcpu\fR
559 .Sp
560 \&\fIGNU/Linux Options\fR
561 \&\fB\-muclibc\fR
562 .Sp
563 \&\fIH8/300 Options\fR
564 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
565 .Sp
566 \&\fI\s-1HPPA\s0 Options\fR
567 \&\fB\-march=\fR\fIarchitecture-type\fR 
568 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
569 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
570 \&\-mfixed\-range=\fR\fIregister-range\fR 
571 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
572 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
573 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
574 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
575 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
576 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
577 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
578 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
579 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
580 .Sp
581 \&\fIi386 and x86\-64 Options\fR
582 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
583 \&\fB\-mfpmath=\fR\fIunit\fR 
584 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
585 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
586 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
587 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR
588 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR
589 \&\fB\-mcld \-mcx16 \-msahf \-mrecip 
590 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
591 \&\-maes \-mpclmul 
592 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-msse5 
593 \&\-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
594 \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR 
595 \&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
596 \&\-m96bit\-long\-double  \-mregparm=\fR\fInum\fR  \fB\-msseregparm 
597 \&\-mveclibabi=\fR\fItype\fR \fB\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
598 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
599 \&\-mcmodel=\fR\fIcode-model\fR 
600 \&\fB\-m32  \-m64 \-mlarge\-data\-threshold=\fR\fInum\fR 
601 \&\fB\-mfused\-madd \-mno\-fused\-madd \-msse2avx\fR
602 .Sp
603 \&\fI\s-1IA\-64\s0 Options\fR
604 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
605 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-mno\-sdata 
606 \&\-mconstant\-gp  \-mauto\-pic  \-minline\-float\-divide\-min\-latency 
607 \&\-minline\-float\-divide\-max\-throughput 
608 \&\-minline\-int\-divide\-min\-latency 
609 \&\-minline\-int\-divide\-max\-throughput  
610 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
611 \&\-mno\-dwarf2\-asm \-mearly\-stop\-bits 
612 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
613 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-mt \-pthread \-milp32 \-mlp64 
614 \&\-mno\-sched\-br\-data\-spec \-msched\-ar\-data\-spec \-mno\-sched\-control\-spec 
615 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
616 \&\-msched\-ldc \-mno\-sched\-control\-ldc \-mno\-sched\-spec\-verbose 
617 \&\-mno\-sched\-prefer\-non\-data\-spec\-insns 
618 \&\-mno\-sched\-prefer\-non\-control\-spec\-insns 
619 \&\-mno\-sched\-count\-spec\-in\-critical\-path\fR
620 .Sp
621 \&\fIM32R/D Options\fR
622 \&\fB\-m32r2 \-m32rx \-m32r 
623 \&\-mdebug 
624 \&\-malign\-loops \-mno\-align\-loops 
625 \&\-missue\-rate=\fR\fInumber\fR 
626 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
627 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
628 \&\fB\-msdata=\fR\fIsdata-type\fR 
629 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
630 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
631 \&\fB\-G\fR \fInum\fR
632 .Sp
633 \&\fIM32C Options\fR
634 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
635 .Sp
636 \&\fIM680x0 Options\fR
637 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
638 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
639 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
640 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
641 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
642 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
643 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
644 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
645 \&\-mxgot \-mno\-xgot\fR
646 .Sp
647 \&\fIM68hc1x Options\fR
648 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12   \-m68hcs12 
649 \&\-mauto\-incdec  \-minmax  \-mlong\-calls  \-mshort 
650 \&\-msoft\-reg\-count=\fR\fIcount\fR
651 .Sp
652 \&\fIMCore Options\fR
653 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
654 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
655 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
656 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
657 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
658 .Sp
659 \&\fI\s-1MIPS\s0 Options\fR
660 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
661 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
662 \&\-mips64  \-mips64r2 
663 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
664 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
665 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
666 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
667 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
668 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
669 \&\-mfpu=\fR\fIfpu-type\fR 
670 \&\fB\-msmartmips  \-mno\-smartmips 
671 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
672 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
673 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
674 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
675 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
676 \&\-membedded\-data  \-mno\-embedded\-data 
677 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
678 \&\-mcode\-readable=\fR\fIsetting\fR 
679 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
680 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
681 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
682 \&\-mdivide\-traps  \-mdivide\-breaks 
683 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
684 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
685 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
686 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
687 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
688 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
689 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
690 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
691 \&\-mvr4130\-align \-mno\-vr4130\-align\fR
692 .Sp
693 \&\fI\s-1MMIX\s0 Options\fR
694 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
695 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
696 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
697 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
698 .Sp
699 \&\fI\s-1MN10300\s0 Options\fR
700 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
701 \&\-mam33  \-mno\-am33 
702 \&\-mam33\-2  \-mno\-am33\-2 
703 \&\-mreturn\-pointer\-on\-d0 
704 \&\-mno\-crt0  \-mrelax\fR
705 .Sp
706 \&\fI\s-1PDP\-11\s0 Options\fR
707 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
708 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
709 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
710 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
711 \&\-mbranch\-expensive  \-mbranch\-cheap 
712 \&\-msplit  \-mno\-split  \-munix\-asm  \-mdec\-asm\fR
713 .Sp
714 \&\fIpicoChip Options\fR
715 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR
716 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
717 .Sp
718 \&\fIPowerPC Options\fR
719 See \s-1RS/6000\s0 and PowerPC Options.
720 .Sp
721 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
722 \&\fB\-mcpu=\fR\fIcpu-type\fR 
723 \&\fB\-mtune=\fR\fIcpu-type\fR 
724 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
725 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
726 \&\-maltivec  \-mno\-altivec 
727 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
728 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
729 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mfprnd  \-mno\-fprnd 
730 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
731 \&\-mnew\-mnemonics  \-mold\-mnemonics 
732 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
733 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
734 \&\-malign\-power  \-malign\-natural 
735 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
736 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
737 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
738 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
739 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
740 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
741 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
742 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
743 \&\-mdynamic\-no\-pic  \-maltivec  \-mswdiv 
744 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
745 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
746 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
747 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
748 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
749 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
750 \&\-misel \-mno\-isel 
751 \&\-misel=yes  \-misel=no 
752 \&\-mspe \-mno\-spe 
753 \&\-mspe=yes  \-mspe=no 
754 \&\-mpaired 
755 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
756 \&\-mvrsave \-mno\-vrsave 
757 \&\-mmulhw \-mno\-mulhw 
758 \&\-mdlmzb \-mno\-dlmzb 
759 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
760 \&\-mprototype  \-mno\-prototype 
761 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
762 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread\fR
763 .Sp
764 \&\fIS/390 and zSeries Options\fR
765 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
766 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
767 \&\-mlong\-double\-64 \-mlong\-double\-128 
768 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
769 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
770 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
771 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
772 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
773 .Sp
774 \&\fIScore Options\fR
775 \&\fB\-meb \-mel 
776 \&\-mnhwloop 
777 \&\-muls 
778 \&\-mmac 
779 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
780 .Sp
781 \&\fI\s-1SH\s0 Options\fR
782 \&\fB\-m1  \-m2  \-m2e  \-m3  \-m3e 
783 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
784 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
785 \&\-m5\-64media  \-m5\-64media\-nofpu 
786 \&\-m5\-32media  \-m5\-32media\-nofpu 
787 \&\-m5\-compact  \-m5\-compact\-nofpu 
788 \&\-mb  \-ml  \-mdalign  \-mrelax 
789 \&\-mbigtable  \-mfmovd  \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
790 \&\-mieee  \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct  \-mspace 
791 \&\-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
792 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
793 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
794 \&\-minvalid\-symbols\fR
795 .Sp
796 \&\fI\s-1SPARC\s0 Options\fR
797 \&\fB\-mcpu=\fR\fIcpu-type\fR 
798 \&\fB\-mtune=\fR\fIcpu-type\fR 
799 \&\fB\-mcmodel=\fR\fIcode-model\fR 
800 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
801 \&\-mfaster\-structs  \-mno\-faster\-structs 
802 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
803 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
804 \&\-mimpure\-text  \-mno\-impure\-text  \-mlittle\-endian 
805 \&\-mstack\-bias  \-mno\-stack\-bias 
806 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
807 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis
808 \&\-threads \-pthreads \-pthread\fR
809 .Sp
810 \&\fI\s-1SPU\s0 Options\fR
811 \&\fB\-mwarn\-reloc \-merror\-reloc 
812 \&\-msafe\-dma \-munsafe\-dma 
813 \&\-mbranch\-hints 
814 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
815 \&\-mfixed\-range=\fR\fIregister-range\fR
816 .Sp
817 \&\fISystem V Options\fR
818 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
819 .Sp
820 \&\fIV850 Options\fR
821 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
822 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
823 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
824 \&\fB\-mapp\-regs  \-mno\-app\-regs 
825 \&\-mdisable\-callt  \-mno\-disable\-callt 
826 \&\-mv850e1 
827 \&\-mv850e 
828 \&\-mv850  \-mbig\-switch\fR
829 .Sp
830 \&\fI\s-1VAX\s0 Options\fR
831 \&\fB\-mg  \-mgnu  \-munix\fR
832 .Sp
833 \&\fIVxWorks Options\fR
834 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
835 \&\-Xbind\-lazy  \-Xbind\-now\fR
836 .Sp
837 \&\fIx86\-64 Options\fR
838 See i386 and x86\-64 Options.
839 .Sp
840 \&\fIi386 and x86\-64 Windows Options\fR
841 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll
842 \&\-mnop\-fun\-dllimport \-mthread \-mwin32 \-mwindows\fR
843 .Sp
844 \&\fIXstormy16 Options\fR
845 \&\fB\-msim\fR
846 .Sp
847 \&\fIXtensa Options\fR
848 \&\fB\-mconst16 \-mno\-const16 
849 \&\-mfused\-madd  \-mno\-fused\-madd 
850 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
851 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
852 \&\-mtarget\-align  \-mno\-target\-align 
853 \&\-mlongcalls  \-mno\-longcalls\fR
854 .Sp
855 \&\fIzSeries Options\fR
856 See S/390 and zSeries Options.
857 .IP "\fICode Generation Options\fR" 4
858 .IX Item "Code Generation Options"
859 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
860 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
861 \&\-fnon\-call\-exceptions  \-funwind\-tables 
862 \&\-fasynchronous\-unwind\-tables 
863 \&\-finhibit\-size\-directive  \-finstrument\-functions 
864 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
865 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
866 \&\-fno\-common  \-fno\-ident 
867 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
868 \&\-fno\-jump\-tables 
869 \&\-frecord\-gcc\-switches 
870 \&\-freg\-struct\-return  \-fshort\-enums 
871 \&\-fshort\-double  \-fshort\-wchar 
872 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
873 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
874 \&\fB\-fno\-stack\-limit  \-fargument\-alias  \-fargument\-noalias 
875 \&\-fargument\-noalias\-global  \-fargument\-noalias\-anything 
876 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
877 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
878 \&\-fvisibility\fR
879 .Sh "Options Controlling the Kind of Output"
880 .IX Subsection "Options Controlling the Kind of Output"
881 Compilation can involve up to four stages: preprocessing, compilation
882 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
883 preprocessing and compiling several files either into several
884 assembler input files, or into one assembler input file; then each
885 assembler input file produces an object file, and linking combines all
886 the object files (those newly compiled, and those specified as input)
887 into an executable file.
888 .PP
889 For any given input file, the file name suffix determines what kind of
890 compilation is done:
891 .IP "\fIfile\fR\fB.c\fR" 4
892 .IX Item "file.c"
893 C source code which must be preprocessed.
894 .IP "\fIfile\fR\fB.i\fR" 4
895 .IX Item "file.i"
896 C source code which should not be preprocessed.
897 .IP "\fIfile\fR\fB.ii\fR" 4
898 .IX Item "file.ii"
899 \&\*(C+ source code which should not be preprocessed.
900 .IP "\fIfile\fR\fB.m\fR" 4
901 .IX Item "file.m"
902 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
903 library to make an Objective-C program work.
904 .IP "\fIfile\fR\fB.mi\fR" 4
905 .IX Item "file.mi"
906 Objective-C source code which should not be preprocessed.
907 .IP "\fIfile\fR\fB.mm\fR" 4
908 .IX Item "file.mm"
909 .PD 0
910 .IP "\fIfile\fR\fB.M\fR" 4
911 .IX Item "file.M"
912 .PD
913 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
914 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
915 to a literal capital M.
916 .IP "\fIfile\fR\fB.mii\fR" 4
917 .IX Item "file.mii"
918 Objective\-\*(C+ source code which should not be preprocessed.
919 .IP "\fIfile\fR\fB.h\fR" 4
920 .IX Item "file.h"
921 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
922 precompiled header.
923 .IP "\fIfile\fR\fB.cc\fR" 4
924 .IX Item "file.cc"
925 .PD 0
926 .IP "\fIfile\fR\fB.cp\fR" 4
927 .IX Item "file.cp"
928 .IP "\fIfile\fR\fB.cxx\fR" 4
929 .IX Item "file.cxx"
930 .IP "\fIfile\fR\fB.cpp\fR" 4
931 .IX Item "file.cpp"
932 .IP "\fIfile\fR\fB.CPP\fR" 4
933 .IX Item "file.CPP"
934 .IP "\fIfile\fR\fB.c++\fR" 4
935 .IX Item "file.c++"
936 .IP "\fIfile\fR\fB.C\fR" 4
937 .IX Item "file.C"
938 .PD
939 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
940 the last two letters must both be literally \fBx\fR.  Likewise,
941 \&\fB.C\fR refers to a literal capital C.
942 .IP "\fIfile\fR\fB.mm\fR" 4
943 .IX Item "file.mm"
944 .PD 0
945 .IP "\fIfile\fR\fB.M\fR" 4
946 .IX Item "file.M"
947 .PD
948 Objective\-\*(C+ source code which must be preprocessed.
949 .IP "\fIfile\fR\fB.mii\fR" 4
950 .IX Item "file.mii"
951 Objective\-\*(C+ source code which should not be preprocessed.
952 .IP "\fIfile\fR\fB.hh\fR" 4
953 .IX Item "file.hh"
954 .PD 0
955 .IP "\fIfile\fR\fB.H\fR" 4
956 .IX Item "file.H"
957 .IP "\fIfile\fR\fB.hp\fR" 4
958 .IX Item "file.hp"
959 .IP "\fIfile\fR\fB.hxx\fR" 4
960 .IX Item "file.hxx"
961 .IP "\fIfile\fR\fB.hpp\fR" 4
962 .IX Item "file.hpp"
963 .IP "\fIfile\fR\fB.HPP\fR" 4
964 .IX Item "file.HPP"
965 .IP "\fIfile\fR\fB.h++\fR" 4
966 .IX Item "file.h++"
967 .IP "\fIfile\fR\fB.tcc\fR" 4
968 .IX Item "file.tcc"
969 .PD
970 \&\*(C+ header file to be turned into a precompiled header.
971 .IP "\fIfile\fR\fB.f\fR" 4
972 .IX Item "file.f"
973 .PD 0
974 .IP "\fIfile\fR\fB.for\fR" 4
975 .IX Item "file.for"
976 .IP "\fIfile\fR\fB.ftn\fR" 4
977 .IX Item "file.ftn"
978 .PD
979 Fixed form Fortran source code which should not be preprocessed.
980 .IP "\fIfile\fR\fB.F\fR" 4
981 .IX Item "file.F"
982 .PD 0
983 .IP "\fIfile\fR\fB.FOR\fR" 4
984 .IX Item "file.FOR"
985 .IP "\fIfile\fR\fB.fpp\fR" 4
986 .IX Item "file.fpp"
987 .IP "\fIfile\fR\fB.FPP\fR" 4
988 .IX Item "file.FPP"
989 .IP "\fIfile\fR\fB.FTN\fR" 4
990 .IX Item "file.FTN"
991 .PD
992 Fixed form Fortran source code which must be preprocessed (with the traditional
993 preprocessor).
994 .IP "\fIfile\fR\fB.f90\fR" 4
995 .IX Item "file.f90"
996 .PD 0
997 .IP "\fIfile\fR\fB.f95\fR" 4
998 .IX Item "file.f95"
999 .IP "\fIfile\fR\fB.f03\fR" 4
1000 .IX Item "file.f03"
1001 .IP "\fIfile\fR\fB.f08\fR" 4
1002 .IX Item "file.f08"
1003 .PD
1004 Free form Fortran source code which should not be preprocessed.
1005 .IP "\fIfile\fR\fB.F90\fR" 4
1006 .IX Item "file.F90"
1007 .PD 0
1008 .IP "\fIfile\fR\fB.F95\fR" 4
1009 .IX Item "file.F95"
1010 .IP "\fIfile\fR\fB.F03\fR" 4
1011 .IX Item "file.F03"
1012 .IP "\fIfile\fR\fB.F08\fR" 4
1013 .IX Item "file.F08"
1014 .PD
1015 Free form Fortran source code which must be preprocessed (with the
1016 traditional preprocessor).
1017 .IP "\fIfile\fR\fB.ads\fR" 4
1018 .IX Item "file.ads"
1019 Ada source code file which contains a library unit declaration (a
1020 declaration of a package, subprogram, or generic, or a generic
1021 instantiation), or a library unit renaming declaration (a package,
1022 generic, or subprogram renaming declaration).  Such files are also
1023 called \fIspecs\fR.
1024 .IP "\fIfile\fR\fB.adb\fR" 4
1025 .IX Item "file.adb"
1026 Ada source code file containing a library unit body (a subprogram or
1027 package body).  Such files are also called \fIbodies\fR.
1028 .IP "\fIfile\fR\fB.s\fR" 4
1029 .IX Item "file.s"
1030 Assembler code.
1031 .IP "\fIfile\fR\fB.S\fR" 4
1032 .IX Item "file.S"
1033 .PD 0
1034 .IP "\fIfile\fR\fB.sx\fR" 4
1035 .IX Item "file.sx"
1036 .PD
1037 Assembler code which must be preprocessed.
1038 .IP "\fIother\fR" 4
1039 .IX Item "other"
1040 An object file to be fed straight into linking.
1041 Any file name with no recognized suffix is treated this way.
1042 .PP
1043 You can specify the input language explicitly with the \fB\-x\fR option:
1044 .IP "\fB\-x\fR \fIlanguage\fR" 4
1045 .IX Item "-x language"
1046 Specify explicitly the \fIlanguage\fR for the following input files
1047 (rather than letting the compiler choose a default based on the file
1048 name suffix).  This option applies to all following input files until
1049 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1050 .Sp
1051 .Vb 8
1052 \&        c  c\-header  c\-cpp\-output
1053 \&        c++  c++\-header  c++\-cpp\-output
1054 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1055 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1056 \&        assembler  assembler\-with\-cpp
1057 \&        ada
1058 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1059 \&        java
1060 .Ve
1061 .IP "\fB\-x none\fR" 4
1062 .IX Item "-x none"
1063 Turn off any specification of a language, so that subsequent files are
1064 handled according to their file name suffixes (as they are if \fB\-x\fR
1065 has not been used at all).
1066 .IP "\fB\-pass\-exit\-codes\fR" 4
1067 .IX Item "-pass-exit-codes"
1068 Normally the \fBgcc\fR program will exit with the code of 1 if any
1069 phase of the compiler returns a non-success return code.  If you specify
1070 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1071 numerically highest error produced by any phase that returned an error
1072 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1073 compiler error is encountered.
1074 .PP
1075 If you only want some of the stages of compilation, you can use
1076 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1077 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1078 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1079 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1080 .IP "\fB\-c\fR" 4
1081 .IX Item "-c"
1082 Compile or assemble the source files, but do not link.  The linking
1083 stage simply is not done.  The ultimate output is in the form of an
1084 object file for each source file.
1085 .Sp
1086 By default, the object file name for a source file is made by replacing
1087 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1088 .Sp
1089 Unrecognized input files, not requiring compilation or assembly, are
1090 ignored.
1091 .IP "\fB\-S\fR" 4
1092 .IX Item "-S"
1093 Stop after the stage of compilation proper; do not assemble.  The output
1094 is in the form of an assembler code file for each non-assembler input
1095 file specified.
1096 .Sp
1097 By default, the assembler file name for a source file is made by
1098 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1099 .Sp
1100 Input files that don't require compilation are ignored.
1101 .IP "\fB\-E\fR" 4
1102 .IX Item "-E"
1103 Stop after the preprocessing stage; do not run the compiler proper.  The
1104 output is in the form of preprocessed source code, which is sent to the
1105 standard output.
1106 .Sp
1107 Input files which don't require preprocessing are ignored.
1108 .IP "\fB\-o\fR \fIfile\fR" 4
1109 .IX Item "-o file"
1110 Place output in file \fIfile\fR.  This applies regardless to whatever
1111 sort of output is being produced, whether it be an executable file,
1112 an object file, an assembler file or preprocessed C code.
1113 .Sp
1114 If \fB\-o\fR is not specified, the default is to put an executable
1115 file in \fIa.out\fR, the object file for
1116 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1117 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1118 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1119 standard output.
1120 .IP "\fB\-v\fR" 4
1121 .IX Item "-v"
1122 Print (on standard error output) the commands executed to run the stages
1123 of compilation.  Also print the version number of the compiler driver
1124 program and of the preprocessor and the compiler proper.
1125 .IP "\fB\-###\fR" 4
1126 .IX Item "-###"
1127 Like \fB\-v\fR except the commands are not executed and all command
1128 arguments are quoted.  This is useful for shell scripts to capture the
1129 driver-generated command lines.
1130 .IP "\fB\-pipe\fR" 4
1131 .IX Item "-pipe"
1132 Use pipes rather than temporary files for communication between the
1133 various stages of compilation.  This fails to work on some systems where
1134 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1135 no trouble.
1136 .IP "\fB\-combine\fR" 4
1137 .IX Item "-combine"
1138 If you are compiling multiple source files, this option tells the driver
1139 to pass all the source files to the compiler at once (for those
1140 languages for which the compiler can handle this).  This will allow
1141 intermodule analysis (\s-1IMA\s0) to be performed by the compiler.  Currently the only
1142 language for which this is supported is C.  If you pass source files for
1143 multiple languages to the driver, using this option, the driver will invoke
1144 the compiler(s) that support \s-1IMA\s0 once each, passing each compiler all the
1145 source files appropriate for it.  For those languages that do not support
1146 \&\s-1IMA\s0 this option will be ignored, and the compiler will be invoked once for
1147 each source file in that language.  If you use this option in conjunction
1148 with \fB\-save\-temps\fR, the compiler will generate multiple
1149 pre-processed files
1150 (one for each source file), but only one (combined) \fI.o\fR or
1151 \&\fI.s\fR file.
1152 .IP "\fB\-\-help\fR" 4
1153 .IX Item "--help"
1154 Print (on the standard output) a description of the command line options
1155 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1156 then \fB\-\-help\fR will also be passed on to the various processes
1157 invoked by \fBgcc\fR, so that they can display the command line options
1158 they accept.  If the \fB\-Wextra\fR option has also been specified
1159 (prior to the \fB\-\-help\fR option), then command line options which
1160 have no documentation associated with them will also be displayed.
1161 .IP "\fB\-\-target\-help\fR" 4
1162 .IX Item "--target-help"
1163 Print (on the standard output) a description of target-specific command
1164 line options for each tool.  For some targets extra target-specific
1165 information may also be printed.
1166 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1167 .IX Item "--help={class|[^]qualifier}[,...]"
1168 Print (on the standard output) a description of the command line
1169 options understood by the compiler that fit into all specified classes
1170 and qualifiers.  These are the supported classes:
1171 .RS 4
1172 .IP "\fBoptimizers\fR" 4
1173 .IX Item "optimizers"
1174 This will display all of the optimization options supported by the
1175 compiler.
1176 .IP "\fBwarnings\fR" 4
1177 .IX Item "warnings"
1178 This will display all of the options controlling warning messages
1179 produced by the compiler.
1180 .IP "\fBtarget\fR" 4
1181 .IX Item "target"
1182 This will display target-specific options.  Unlike the
1183 \&\fB\-\-target\-help\fR option however, target-specific options of the
1184 linker and assembler will not be displayed.  This is because those
1185 tools do not currently support the extended \fB\-\-help=\fR syntax.
1186 .IP "\fBparams\fR" 4
1187 .IX Item "params"
1188 This will display the values recognized by the \fB\-\-param\fR
1189 option.
1190 .IP "\fIlanguage\fR" 4
1191 .IX Item "language"
1192 This will display the options supported for \fIlanguage\fR, where 
1193 \&\fIlanguage\fR is the name of one of the languages supported in this 
1194 version of \s-1GCC\s0.
1195 .IP "\fBcommon\fR" 4
1196 .IX Item "common"
1197 This will display the options that are common to all languages.
1198 .RE
1199 .RS 4
1200 .Sp
1201 These are the supported qualifiers:
1202 .IP "\fBundocumented\fR" 4
1203 .IX Item "undocumented"
1204 Display only those options which are undocumented.
1205 .IP "\fBjoined\fR" 4
1206 .IX Item "joined"
1207 Display options which take an argument that appears after an equal
1208 sign in the same continuous piece of text, such as:
1209 \&\fB\-\-help=target\fR.
1210 .IP "\fBseparate\fR" 4
1211 .IX Item "separate"
1212 Display options which take an argument that appears as a separate word
1213 following the original option, such as: \fB\-o output-file\fR.
1214 .RE
1215 .RS 4
1216 .Sp
1217 Thus for example to display all the undocumented target-specific
1218 switches supported by the compiler the following can be used:
1219 .Sp
1220 .Vb 1
1221 \&        \-\-help=target,undocumented
1222 .Ve
1223 .Sp
1224 The sense of a qualifier can be inverted by prefixing it with the
1225 \&\fB^\fR character, so for example to display all binary warning
1226 options (i.e., ones that are either on or off and that do not take an
1227 argument), which have a description the following can be used:
1228 .Sp
1229 .Vb 1
1230 \&        \-\-help=warnings,^joined,^undocumented
1231 .Ve
1232 .Sp
1233 The argument to \fB\-\-help=\fR should not consist solely of inverted
1234 qualifiers.
1235 .Sp
1236 Combining several classes is possible, although this usually
1237 restricts the output by so much that there is nothing to display.  One
1238 case where it does work however is when one of the classes is
1239 \&\fItarget\fR.  So for example to display all the target-specific
1240 optimization options the following can be used:
1241 .Sp
1242 .Vb 1
1243 \&        \-\-help=target,optimizers
1244 .Ve
1245 .Sp
1246 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1247 successive use will display its requested class of options, skipping
1248 those that have already been displayed.
1249 .Sp
1250 If the \fB\-Q\fR option appears on the command line before the
1251 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1252 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1253 options, an indication is given as to whether the option is enabled,
1254 disabled or set to a specific value (assuming that the compiler
1255 knows this at the point where the \fB\-\-help=\fR option is used).
1256 .Sp
1257 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1258 .Sp
1259 .Vb 5
1260 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1261 \&          The following options are target specific:
1262 \&          \-mabi=                                2
1263 \&          \-mabort\-on\-noreturn                   [disabled]
1264 \&          \-mapcs                                [disabled]
1265 .Ve
1266 .Sp
1267 The output is sensitive to the effects of previous command line
1268 options, so for example it is possible to find out which optimizations
1269 are enabled at \fB\-O2\fR by using:
1270 .Sp
1271 .Vb 1
1272 \&        \-Q \-O2 \-\-help=optimizers
1273 .Ve
1274 .Sp
1275 Alternatively you can discover which binary optimizations are enabled
1276 by \fB\-O3\fR by using:
1277 .Sp
1278 .Vb 3
1279 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1280 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1281 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1282 .Ve
1283 .RE
1284 .IP "\fB\-\-version\fR" 4
1285 .IX Item "--version"
1286 Display the version number and copyrights of the invoked \s-1GCC\s0.
1287 .IP "\fB\-wrapper\fR" 4
1288 .IX Item "-wrapper"
1289 Invoke all subcommands under a wrapper program. It takes a single
1290 comma separated list as an argument, which will be used to invoke
1291 the wrapper:
1292 .Sp
1293 .Vb 1
1294 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1295 .Ve
1296 .Sp
1297 This will invoke all subprograms of gcc under \*(L"gdb \-\-args\*(R",
1298 thus cc1 invocation will be \*(L"gdb \-\-args cc1 ...\*(R".
1299 .IP "\fB@\fR\fIfile\fR" 4
1300 .IX Item "@file"
1301 Read command-line options from \fIfile\fR.  The options read are
1302 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1303 does not exist, or cannot be read, then the option will be treated
1304 literally, and not removed.
1305 .Sp
1306 Options in \fIfile\fR are separated by whitespace.  A whitespace
1307 character may be included in an option by surrounding the entire
1308 option in either single or double quotes.  Any character (including a
1309 backslash) may be included by prefixing the character to be included
1310 with a backslash.  The \fIfile\fR may itself contain additional
1311 @\fIfile\fR options; any such options will be processed recursively.
1312 .Sh "Compiling \*(C+ Programs"
1313 .IX Subsection "Compiling  Programs"
1314 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1315 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1316 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1317 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1318 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1319 files with these names and compiles them as \*(C+ programs even if you
1320 call the compiler the same way as for compiling C programs (usually
1321 with the name \fBgcc\fR).
1322 .PP
1323 However, the use of \fBgcc\fR does not add the \*(C+ library.
1324 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1325 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1326 files unless \fB\-x\fR is used, and automatically specifies linking
1327 against the \*(C+ library.  This program is also useful when
1328 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1329 compilations.  On many systems, \fBg++\fR is also installed with
1330 the name \fBc++\fR.
1331 .PP
1332 When you compile \*(C+ programs, you may specify many of the same
1333 command-line options that you use for compiling programs in any
1334 language; or command-line options meaningful for C and related
1335 languages; or options that are meaningful only for \*(C+ programs.
1336 .Sh "Options Controlling C Dialect"
1337 .IX Subsection "Options Controlling C Dialect"
1338 The following options control the dialect of C (or languages derived
1339 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1340 accepts:
1341 .IP "\fB\-ansi\fR" 4
1342 .IX Item "-ansi"
1343 In C mode, this is equivalent to \fB\-std=c89\fR. In \*(C+ mode, it is
1344 equivalent to \fB\-std=c++98\fR.
1345 .Sp
1346 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1347 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1348 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1349 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1350 type of system you are using.  It also enables the undesirable and
1351 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1352 it disables recognition of \*(C+ style \fB//\fR comments as well as
1353 the \f(CW\*(C`inline\*(C'\fR keyword.
1354 .Sp
1355 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1356 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1357 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1358 course, but it is useful to put them in header files that might be included
1359 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1360 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1361 without \fB\-ansi\fR.
1362 .Sp
1363 The \fB\-ansi\fR option does not cause non-ISO programs to be
1364 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1365 addition to \fB\-ansi\fR.
1366 .Sp
1367 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1368 option is used.  Some header files may notice this macro and refrain
1369 from declaring certain functions or defining certain macros that the
1370 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1371 programs that might use these names for other things.
1372 .Sp
1373 Functions that would normally be built in but do not have semantics
1374 defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
1375 functions when \fB\-ansi\fR is used.
1376 .IP "\fB\-std=\fR" 4
1377 .IX Item "-std="
1378 Determine the language standard.   This option
1379 is currently only supported when compiling C or \*(C+.
1380 .Sp
1381 The compiler can accept several base standards, such as \fBc89\fR or
1382 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1383 \&\fBgnu89\fR or \fBgnu++98\fR.  By specifying a base standard, the
1384 compiler will accept all programs following that standard and those
1385 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1386 \&\fB\-std=c89\fR turns off certain features of \s-1GCC\s0 that are
1387 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1388 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1389 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1390 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1391 standard, all features the compiler support are enabled, even when
1392 those features change the meaning of the base standard and some
1393 strict-conforming programs may be rejected.  The particular standard
1394 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1395 extensions given that version of the standard. For example
1396 \&\fB\-std=gnu89 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1397 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1398 .Sp
1399 A value for this option must be provided; possible values are
1400 .RS 4
1401 .IP "\fBc89\fR" 4
1402 .IX Item "c89"
1403 .PD 0
1404 .IP "\fBiso9899:1990\fR" 4
1405 .IX Item "iso9899:1990"
1406 .PD
1407 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1408 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1409 .IP "\fBiso9899:199409\fR" 4
1410 .IX Item "iso9899:199409"
1411 \&\s-1ISO\s0 C90 as modified in amendment 1.
1412 .IP "\fBc99\fR" 4
1413 .IX Item "c99"
1414 .PD 0
1415 .IP "\fBc9x\fR" 4
1416 .IX Item "c9x"
1417 .IP "\fBiso9899:1999\fR" 4
1418 .IX Item "iso9899:1999"
1419 .IP "\fBiso9899:199x\fR" 4
1420 .IX Item "iso9899:199x"
1421 .PD
1422 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1423 <\fBhttp://gcc.gnu.org/gcc\-4.4/c99status.html\fR> for more information.  The
1424 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1425 .IP "\fBgnu89\fR" 4
1426 .IX Item "gnu89"
1427 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1428 is the default for C code.
1429 .IP "\fBgnu99\fR" 4
1430 .IX Item "gnu99"
1431 .PD 0
1432 .IP "\fBgnu9x\fR" 4
1433 .IX Item "gnu9x"
1434 .PD
1435 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1436 this will become the default.  The name \fBgnu9x\fR is deprecated.
1437 .IP "\fBc++98\fR" 4
1438 .IX Item "c++98"
1439 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1440 \&\*(C+ code.
1441 .IP "\fBgnu++98\fR" 4
1442 .IX Item "gnu++98"
1443 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1444 \&\*(C+ code.
1445 .IP "\fBc++0x\fR" 4
1446 .IX Item "c++0x"
1447 The working draft of the upcoming \s-1ISO\s0 \*(C+0x standard. This option
1448 enables experimental features that are likely to be included in
1449 \&\*(C+0x. The working draft is constantly changing, and any feature that is
1450 enabled by this flag may be removed from future versions of \s-1GCC\s0 if it is
1451 not part of the \*(C+0x standard.
1452 .IP "\fBgnu++0x\fR" 4
1453 .IX Item "gnu++0x"
1454 \&\s-1GNU\s0 dialect of \fB\-std=c++0x\fR. This option enables
1455 experimental features that may be removed in future versions of \s-1GCC\s0.
1456 .RE
1457 .RS 4
1458 .RE
1459 .IP "\fB\-fgnu89\-inline\fR" 4
1460 .IX Item "-fgnu89-inline"
1461 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1462 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1463   This option
1464 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1465 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1466 C99 mode.  Using this option is roughly equivalent to adding the
1467 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1468 .Sp
1469 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1470 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1471 specifies the default behavior).  This option was first supported in
1472 \&\s-1GCC\s0 4.3.  This option is not supported in C89 or gnu89 mode.
1473 .Sp
1474 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1475 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1476 in effect for \f(CW\*(C`inline\*(C'\fR functions.
1477 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1478 .IX Item "-aux-info filename"
1479 Output to the given filename prototyped declarations for all functions
1480 declared and/or defined in a translation unit, including those in header
1481 files.  This option is silently ignored in any language other than C.
1482 .Sp
1483 Besides declarations, the file indicates, in comments, the origin of
1484 each declaration (source file and line), whether the declaration was
1485 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1486 \&\fBO\fR for old, respectively, in the first character after the line
1487 number and the colon), and whether it came from a declaration or a
1488 definition (\fBC\fR or \fBF\fR, respectively, in the following
1489 character).  In the case of function definitions, a K&R\-style list of
1490 arguments followed by their declarations is also provided, inside
1491 comments, after the declaration.
1492 .IP "\fB\-fno\-asm\fR" 4
1493 .IX Item "-fno-asm"
1494 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1495 keyword, so that code can use these words as identifiers.  You can use
1496 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1497 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1498 .Sp
1499 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1500 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1501 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1502 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1503 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1504 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1505 .IP "\fB\-fno\-builtin\fR" 4
1506 .IX Item "-fno-builtin"
1507 .PD 0
1508 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1509 .IX Item "-fno-builtin-function"
1510 .PD
1511 Don't recognize built-in functions that do not begin with
1512 \&\fB_\|_builtin_\fR as prefix.
1513 .Sp
1514 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1515 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1516 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1517 may become inline copy loops.  The resulting code is often both smaller
1518 and faster, but since the function calls no longer appear as such, you
1519 cannot set a breakpoint on those calls, nor can you change the behavior
1520 of the functions by linking with a different library.  In addition,
1521 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1522 information about that function to warn about problems with calls to
1523 that function, or to generate more efficient code, even if the
1524 resulting code still contains calls to that function.  For example,
1525 warnings are given with \fB\-Wformat\fR for bad calls to
1526 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1527 known not to modify global memory.
1528 .Sp
1529 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1530 only the built-in function \fIfunction\fR is
1531 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1532 function is named that is not built-in in this version of \s-1GCC\s0, this
1533 option is ignored.  There is no corresponding
1534 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1535 built-in functions selectively when using \fB\-fno\-builtin\fR or
1536 \&\fB\-ffreestanding\fR, you may define macros such as:
1537 .Sp
1538 .Vb 2
1539 \&        #define abs(n)          _\|_builtin_abs ((n))
1540 \&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
1541 .Ve
1542 .IP "\fB\-fhosted\fR" 4
1543 .IX Item "-fhosted"
1544 Assert that compilation takes place in a hosted environment.  This implies
1545 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1546 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1547 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1548 This is equivalent to \fB\-fno\-freestanding\fR.
1549 .IP "\fB\-ffreestanding\fR" 4
1550 .IX Item "-ffreestanding"
1551 Assert that compilation takes place in a freestanding environment.  This
1552 implies \fB\-fno\-builtin\fR.  A freestanding environment
1553 is one in which the standard library may not exist, and program startup may
1554 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1555 This is equivalent to \fB\-fno\-hosted\fR.
1556 .IP "\fB\-fopenmp\fR" 4
1557 .IX Item "-fopenmp"
1558 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1559 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1560 compiler generates parallel code according to the OpenMP Application
1561 Program Interface v2.5 <\fBhttp://www.openmp.org/\fR>.  This option
1562 implies \fB\-pthread\fR, and thus is only supported on targets that
1563 have support for \fB\-pthread\fR.
1564 .IP "\fB\-fms\-extensions\fR" 4
1565 .IX Item "-fms-extensions"
1566 Accept some non-standard constructs used in Microsoft header files.
1567 .Sp
1568 Some cases of unnamed fields in structures and unions are only
1569 accepted with this option.
1570 .IP "\fB\-trigraphs\fR" 4
1571 .IX Item "-trigraphs"
1572 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1573 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1574 .IP "\fB\-no\-integrated\-cpp\fR" 4
1575 .IX Item "-no-integrated-cpp"
1576 Performs a compilation in two passes: preprocessing and compiling.  This
1577 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1578 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1579 an additional preprocessing step after normal preprocessing but before
1580 compiling.  The default is to use the integrated cpp (internal cpp)
1581 .Sp
1582 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1583 \&\*(L"cc1obj\*(R" are merged.
1584 .IP "\fB\-traditional\fR" 4
1585 .IX Item "-traditional"
1586 .PD 0
1587 .IP "\fB\-traditional\-cpp\fR" 4
1588 .IX Item "-traditional-cpp"
1589 .PD
1590 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1591 C compiler.  They are now only supported with the \fB\-E\fR switch.
1592 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1593 \&\s-1CPP\s0 manual for details.
1594 .IP "\fB\-fcond\-mismatch\fR" 4
1595 .IX Item "-fcond-mismatch"
1596 Allow conditional expressions with mismatched types in the second and
1597 third arguments.  The value of such an expression is void.  This option
1598 is not supported for \*(C+.
1599 .IP "\fB\-flax\-vector\-conversions\fR" 4
1600 .IX Item "-flax-vector-conversions"
1601 Allow implicit conversions between vectors with differing numbers of
1602 elements and/or incompatible element types.  This option should not be
1603 used for new code.
1604 .IP "\fB\-funsigned\-char\fR" 4
1605 .IX Item "-funsigned-char"
1606 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1607 .Sp
1608 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1609 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1610 \&\f(CW\*(C`signed char\*(C'\fR by default.
1611 .Sp
1612 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1613 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1614 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1615 expect it to be signed, or expect it to be unsigned, depending on the
1616 machines they were written for.  This option, and its inverse, let you
1617 make such a program work with the opposite default.
1618 .Sp
1619 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1620 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1621 is always just like one of those two.
1622 .IP "\fB\-fsigned\-char\fR" 4
1623 .IX Item "-fsigned-char"
1624 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1625 .Sp
1626 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1627 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1628 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1629 .IP "\fB\-fsigned\-bitfields\fR" 4
1630 .IX Item "-fsigned-bitfields"
1631 .PD 0
1632 .IP "\fB\-funsigned\-bitfields\fR" 4
1633 .IX Item "-funsigned-bitfields"
1634 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1635 .IX Item "-fno-signed-bitfields"
1636 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1637 .IX Item "-fno-unsigned-bitfields"
1638 .PD
1639 These options control whether a bit-field is signed or unsigned, when the
1640 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1641 default, such a bit-field is signed, because this is consistent: the
1642 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1643 .Sh "Options Controlling \*(C+ Dialect"
1644 .IX Subsection "Options Controlling  Dialect"
1645 This section describes the command-line options that are only meaningful
1646 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1647 regardless of what language your program is in.  For example, you
1648 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1649 .PP
1650 .Vb 1
1651 \&        g++ \-g \-frepo \-O \-c firstClass.C
1652 .Ve
1653 .PP
1654 In this example, only \fB\-frepo\fR is an option meant
1655 only for \*(C+ programs; you can use the other options with any
1656 language supported by \s-1GCC\s0.
1657 .PP
1658 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1659 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1660 .IX Item "-fabi-version=n"
1661 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1662 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1663 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1664 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1665 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1666 are fixed.
1667 .Sp
1668 The default is version 2.
1669 .IP "\fB\-fno\-access\-control\fR" 4
1670 .IX Item "-fno-access-control"
1671 Turn off all access checking.  This switch is mainly useful for working
1672 around bugs in the access control code.
1673 .IP "\fB\-fcheck\-new\fR" 4
1674 .IX Item "-fcheck-new"
1675 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1676 before attempting to modify the storage allocated.  This check is
1677 normally unnecessary because the \*(C+ standard specifies that
1678 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1679 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1680 return value even without this option.  In all other cases, when
1681 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1682 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1683 \&\fBnew (nothrow)\fR.
1684 .IP "\fB\-fconserve\-space\fR" 4
1685 .IX Item "-fconserve-space"
1686 Put uninitialized or runtime-initialized global variables into the
1687 common segment, as C does.  This saves space in the executable at the
1688 cost of not diagnosing duplicate definitions.  If you compile with this
1689 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1690 completed, you may have an object that is being destroyed twice because
1691 two definitions were merged.
1692 .Sp
1693 This option is no longer useful on most targets, now that support has
1694 been added for putting variables into \s-1BSS\s0 without making them common.
1695 .IP "\fB\-fno\-deduce\-init\-list\fR" 4
1696 .IX Item "-fno-deduce-init-list"
1697 Disable deduction of a template type parameter as
1698 std::initializer_list from a brace-enclosed initializer list, i.e.
1699 .Sp
1700 .Vb 4
1701 \&        template <class T> auto forward(T t) \-> decltype (realfn (t))
1702 \&        {
1703 \&          return realfn (t);
1704 \&        }
1705 \&        
1706 \&        void f()
1707 \&        {
1708 \&          forward({1,2}); // call forward<std::initializer_list<int>>
1709 \&        }
1710 .Ve
1711 .Sp
1712 This option is present because this deduction is an extension to the
1713 current specification in the \*(C+0x working draft, and there was
1714 some concern about potential overload resolution problems.
1715 .IP "\fB\-ffriend\-injection\fR" 4
1716 .IX Item "-ffriend-injection"
1717 Inject friend functions into the enclosing namespace, so that they are
1718 visible outside the scope of the class in which they are declared.
1719 Friend functions were documented to work this way in the old Annotated
1720 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1721 that way.  However, in \s-1ISO\s0 \*(C+ a friend function which is not declared
1722 in an enclosing scope can only be found using argument dependent
1723 lookup.  This option causes friends to be injected as they were in
1724 earlier releases.
1725 .Sp
1726 This option is for compatibility, and may be removed in a future
1727 release of G++.
1728 .IP "\fB\-fno\-elide\-constructors\fR" 4
1729 .IX Item "-fno-elide-constructors"
1730 The \*(C+ standard allows an implementation to omit creating a temporary
1731 which is only used to initialize another object of the same type.
1732 Specifying this option disables that optimization, and forces G++ to
1733 call the copy constructor in all cases.
1734 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1735 .IX Item "-fno-enforce-eh-specs"
1736 Don't generate code to check for violation of exception specifications
1737 at runtime.  This option violates the \*(C+ standard, but may be useful
1738 for reducing code size in production builds, much like defining
1739 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1740 exceptions in violation of the exception specifications; the compiler
1741 will still optimize based on the specifications, so throwing an
1742 unexpected exception will result in undefined behavior.
1743 .IP "\fB\-ffor\-scope\fR" 4
1744 .IX Item "-ffor-scope"
1745 .PD 0
1746 .IP "\fB\-fno\-for\-scope\fR" 4
1747 .IX Item "-fno-for-scope"
1748 .PD
1749 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1750 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1751 as specified by the \*(C+ standard.
1752 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1753 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1754 as was the case in old versions of G++, and other (traditional)
1755 implementations of \*(C+.
1756 .Sp
1757 The default if neither flag is given to follow the standard,
1758 but to allow and give a warning for old-style code that would
1759 otherwise be invalid, or have different behavior.
1760 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1761 .IX Item "-fno-gnu-keywords"
1762 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1763 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1764 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1765 .IP "\fB\-fno\-implicit\-templates\fR" 4
1766 .IX Item "-fno-implicit-templates"
1767 Never emit code for non-inline templates which are instantiated
1768 implicitly (i.e. by use); only emit code for explicit instantiations.
1769 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
1770 .IX Item "-fno-implicit-inline-templates"
1771 Don't emit code for implicit instantiations of inline templates, either.
1772 The default is to handle inlines differently so that compiles with and
1773 without optimization will need the same set of explicit instantiations.
1774 .IP "\fB\-fno\-implement\-inlines\fR" 4
1775 .IX Item "-fno-implement-inlines"
1776 To save space, do not emit out-of-line copies of inline functions
1777 controlled by \fB#pragma implementation\fR.  This will cause linker
1778 errors if these functions are not inlined everywhere they are called.
1779 .IP "\fB\-fms\-extensions\fR" 4
1780 .IX Item "-fms-extensions"
1781 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1782 int and getting a pointer to member function via non-standard syntax.
1783 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
1784 .IX Item "-fno-nonansi-builtins"
1785 Disable built-in declarations of functions that are not mandated by
1786 \&\s-1ANSI/ISO\s0 C.  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
1787 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
1788 .IP "\fB\-fno\-operator\-names\fR" 4
1789 .IX Item "-fno-operator-names"
1790 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1791 \&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
1792 synonyms as keywords.
1793 .IP "\fB\-fno\-optional\-diags\fR" 4
1794 .IX Item "-fno-optional-diags"
1795 Disable diagnostics that the standard says a compiler does not need to
1796 issue.  Currently, the only such diagnostic issued by G++ is the one for
1797 a name having multiple meanings within a class.
1798 .IP "\fB\-fpermissive\fR" 4
1799 .IX Item "-fpermissive"
1800 Downgrade some diagnostics about nonconformant code from errors to
1801 warnings.  Thus, using \fB\-fpermissive\fR will allow some
1802 nonconforming code to compile.
1803 .IP "\fB\-frepo\fR" 4
1804 .IX Item "-frepo"
1805 Enable automatic template instantiation at link time.  This option also
1806 implies \fB\-fno\-implicit\-templates\fR.
1807 .IP "\fB\-fno\-rtti\fR" 4
1808 .IX Item "-fno-rtti"
1809 Disable generation of information about every class with virtual
1810 functions for use by the \*(C+ runtime type identification features
1811 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1812 of the language, you can save some space by using this flag.  Note that
1813 exception handling uses the same information, but it will generate it as
1814 needed. The \fBdynamic_cast\fR operator can still be used for casts that
1815 do not require runtime type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
1816 unambiguous base classes.
1817 .IP "\fB\-fstats\fR" 4
1818 .IX Item "-fstats"
1819 Emit statistics about front-end processing at the end of the compilation.
1820 This information is generally only useful to the G++ development team.
1821 .IP "\fB\-ftemplate\-depth\-\fR\fIn\fR" 4
1822 .IX Item "-ftemplate-depth-n"
1823 Set the maximum instantiation depth for template classes to \fIn\fR.
1824 A limit on the template instantiation depth is needed to detect
1825 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
1826 conforming programs must not rely on a maximum depth greater than 17.
1827 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
1828 .IX Item "-fno-threadsafe-statics"
1829 Do not emit the extra code to use the routines specified in the \*(C+
1830 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
1831 option to reduce code size slightly in code that doesn't need to be
1832 thread-safe.
1833 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
1834 .IX Item "-fuse-cxa-atexit"
1835 Register destructors for objects with static storage duration with the
1836 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1837 This option is required for fully standards-compliant handling of static
1838 destructors, but will only work if your C library supports
1839 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1840 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
1841 .IX Item "-fno-use-cxa-get-exception-ptr"
1842 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
1843 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
1844 if the runtime routine is not available.
1845 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
1846 .IX Item "-fvisibility-inlines-hidden"
1847 This switch declares that the user does not attempt to compare
1848 pointers to inline methods where the addresses of the two functions
1849 were taken in different shared objects.
1850 .Sp
1851 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
1852 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
1853 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
1854 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
1855 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
1856 dynamic export table when the library makes heavy use of templates.
1857 .Sp
1858 The behavior of this switch is not quite the same as marking the
1859 methods as hidden directly, because it does not affect static variables
1860 local to the function or cause the compiler to deduce that
1861 the function is defined in only one shared object.
1862 .Sp
1863 You may mark a method as having a visibility explicitly to negate the
1864 effect of the switch for that method.  For example, if you do want to
1865 compare pointers to a particular inline method, you might mark it as
1866 having default visibility.  Marking the enclosing class with explicit
1867 visibility will have no effect.
1868 .Sp
1869 Explicitly instantiated inline methods are unaffected by this option
1870 as their linkage might otherwise cross a shared library boundary.
1871 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
1872 .IX Item "-fvisibility-ms-compat"
1873 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
1874 linkage model compatible with that of Microsoft Visual Studio.
1875 .Sp
1876 The flag makes these changes to \s-1GCC\s0's linkage model:
1877 .RS 4
1878 .IP "1." 4
1879 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
1880 \&\fB\-fvisibility=hidden\fR.
1881 .IP "2." 4
1882 Types, but not their members, are not hidden by default.
1883 .IP "3." 4
1884 The One Definition Rule is relaxed for types without explicit
1885 visibility specifications which are defined in more than one different
1886 shared object: those declarations are permitted if they would have
1887 been permitted when this option was not used.
1888 .RE
1889 .RS 4
1890 .Sp
1891 In new code it is better to use \fB\-fvisibility=hidden\fR and
1892 export those classes which are intended to be externally visible.
1893 Unfortunately it is possible for code to rely, perhaps accidentally,
1894 on the Visual Studio behavior.
1895 .Sp
1896 Among the consequences of these changes are that static data members
1897 of the same type with the same name but defined in different shared
1898 objects will be different, so changing one will not change the other;
1899 and that pointers to function members defined in different shared
1900 objects may not compare equal.  When this flag is given, it is a
1901 violation of the \s-1ODR\s0 to define types with the same name differently.
1902 .RE
1903 .IP "\fB\-fno\-weak\fR" 4
1904 .IX Item "-fno-weak"
1905 Do not use weak symbol support, even if it is provided by the linker.
1906 By default, G++ will use weak symbols if they are available.  This
1907 option exists only for testing, and should not be used by end-users;
1908 it will result in inferior code and has no benefits.  This option may
1909 be removed in a future release of G++.
1910 .IP "\fB\-nostdinc++\fR" 4
1911 .IX Item "-nostdinc++"
1912 Do not search for header files in the standard directories specific to
1913 \&\*(C+, but do still search the other standard directories.  (This option
1914 is used when building the \*(C+ library.)
1915 .PP
1916 In addition, these optimization, warning, and code generation options
1917 have meanings only for \*(C+ programs:
1918 .IP "\fB\-fno\-default\-inline\fR" 4
1919 .IX Item "-fno-default-inline"
1920 Do not assume \fBinline\fR for functions defined inside a class scope.
1921   Note that these
1922 functions will have linkage like inline functions; they just won't be
1923 inlined by default.
1924 .IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
1925 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
1926 Warn when G++ generates code that is probably not compatible with the
1927 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
1928 all such cases, there are probably some cases that are not warned about,
1929 even though G++ is generating incompatible code.  There may also be
1930 cases where warnings are emitted even though the code that is generated
1931 will be compatible.
1932 .Sp
1933 You should rewrite your code to avoid these warnings if you are
1934 concerned about the fact that code generated by G++ may not be binary
1935 compatible with code generated by other compilers.
1936 .Sp
1937 The known incompatibilities at this point include:
1938 .RS 4
1939 .IP "\(bu" 4
1940 Incorrect handling of tail-padding for bit-fields.  G++ may attempt to
1941 pack data into the same byte as a base class.  For example:
1942 .Sp
1943 .Vb 2
1944 \&        struct A { virtual void f(); int f1 : 1; };
1945 \&        struct B : public A { int f2 : 1; };
1946 .Ve
1947 .Sp
1948 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
1949 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
1950 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
1951 byte size on your platform; that will cause G++ and other compilers to
1952 layout \f(CW\*(C`B\*(C'\fR identically.
1953 .IP "\(bu" 4
1954 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1955 tail padding when laying out virtual bases.  For example:
1956 .Sp
1957 .Vb 3
1958 \&        struct A { virtual void f(); char c1; };
1959 \&        struct B { B(); char c2; };
1960 \&        struct C : public A, public virtual B {};
1961 .Ve
1962 .Sp
1963 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
1964 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
1965 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
1966 alignment (ignoring virtual base classes); that will cause G++ and other
1967 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
1968 .IP "\(bu" 4
1969 Incorrect handling of bit-fields with declared widths greater than that
1970 of their underlying types, when the bit-fields appear in a union.  For
1971 example:
1972 .Sp
1973 .Vb 1
1974 \&        union U { int i : 4096; };
1975 .Ve
1976 .Sp
1977 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
1978 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
1979 .IP "\(bu" 4
1980 Empty classes can be placed at incorrect offsets.  For example:
1981 .Sp
1982 .Vb 1
1983 \&        struct A {};
1984 \&        
1985 \&        struct B {
1986 \&          A a;
1987 \&          virtual void f ();
1988 \&        };
1989 \&        
1990 \&        struct C : public B, public A {};
1991 .Ve
1992 .Sp
1993 G++ will place the \f(CW\*(C`A\*(C'\fR base class of \f(CW\*(C`C\*(C'\fR at a nonzero offset;
1994 it should be placed at offset zero.  G++ mistakenly believes that the
1995 \&\f(CW\*(C`A\*(C'\fR data member of \f(CW\*(C`B\*(C'\fR is already at offset zero.
1996 .IP "\(bu" 4
1997 Names of template functions whose types involve \f(CW\*(C`typename\*(C'\fR or
1998 template template parameters can be mangled incorrectly.
1999 .Sp
2000 .Vb 2
2001 \&        template <typename Q>
2002 \&        void f(typename Q::X) {}
2003 \&        
2004 \&        template <template <typename> class Q>
2005 \&        void f(typename Q<int>::X) {}
2006 .Ve
2007 .Sp
2008 Instantiations of these templates may be mangled incorrectly.
2009 .RE
2010 .RS 4
2011 .Sp
2012 It also warns psABI related changes.  The known psABI changes at this
2013 point include:
2014 .IP "\(bu" 4
2015 For SYSV/x86\-64, when passing union with long double, it is changed to
2016 pass in memory as specified in psABI.  For example:
2017 .Sp
2018 .Vb 4
2019 \&        union U {
2020 \&          long double ld;
2021 \&          int i;
2022 \&        };
2023 .Ve
2024 .Sp
2025 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2026 .RE
2027 .RS 4
2028 .RE
2029 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2030 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2031 Warn when a class seems unusable because all the constructors or
2032 destructors in that class are private, and it has neither friends nor
2033 public static member functions.
2034 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2035 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2036 Warn when a class has virtual functions and accessible non-virtual
2037 destructor, in which case it would be possible but unsafe to delete
2038 an instance of a derived class through a pointer to the base class.
2039 This warning is also enabled if \-Weffc++ is specified.
2040 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2041 .IX Item "-Wreorder ( and Objective- only)"
2042 Warn when the order of member initializers given in the code does not
2043 match the order in which they must be executed.  For instance:
2044 .Sp
2045 .Vb 5
2046 \&        struct A {
2047 \&          int i;
2048 \&          int j;
2049 \&          A(): j (0), i (1) { }
2050 \&        };
2051 .Ve
2052 .Sp
2053 The compiler will rearrange the member initializers for \fBi\fR
2054 and \fBj\fR to match the declaration order of the members, emitting
2055 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2056 .PP
2057 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2058 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2059 .IX Item "-Weffc++ ( and Objective- only)"
2060 Warn about violations of the following style guidelines from Scott Meyers'
2061 \&\fIEffective \*(C+\fR book:
2062 .RS 4
2063 .IP "\(bu" 4
2064 Item 11:  Define a copy constructor and an assignment operator for classes
2065 with dynamically allocated memory.
2066 .IP "\(bu" 4
2067 Item 12:  Prefer initialization to assignment in constructors.
2068 .IP "\(bu" 4
2069 Item 14:  Make destructors virtual in base classes.
2070 .IP "\(bu" 4
2071 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2072 .IP "\(bu" 4
2073 Item 23:  Don't try to return a reference when you must return an object.
2074 .RE
2075 .RS 4
2076 .Sp
2077 Also warn about violations of the following style guidelines from
2078 Scott Meyers' \fIMore Effective \*(C+\fR book:
2079 .IP "\(bu" 4
2080 Item 6:  Distinguish between prefix and postfix forms of increment and
2081 decrement operators.
2082 .IP "\(bu" 4
2083 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2084 .RE
2085 .RS 4
2086 .Sp
2087 When selecting this option, be aware that the standard library
2088 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2089 to filter out those warnings.
2090 .RE
2091 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2092 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2093 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2094 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2095 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2096 it is guaranteed to be of the same size as a pointer.  But this use is
2097 not portable across different compilers.
2098 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2099 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2100 Disable warnings when non-templatized friend functions are declared
2101 within a template.  Since the advent of explicit template specification
2102 support in G++, if the name of the friend is an unqualified-id (i.e.,
2103 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2104 friend declare or define an ordinary, nontemplate function.  (Section
2105 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2106 could be interpreted as a particular specialization of a templatized
2107 function.  Because this non-conforming behavior is no longer the default
2108 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2109 check existing code for potential trouble spots and is on by default.
2110 This new compiler behavior can be turned off with
2111 \&\fB\-Wno\-non\-template\-friend\fR which keeps the conformant compiler code
2112 but disables the helpful warning.
2113 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2114 .IX Item "-Wold-style-cast ( and Objective- only)"
2115 Warn if an old-style (C\-style) cast to a non-void type is used within
2116 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2117 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2118 less vulnerable to unintended effects and much easier to search for.
2119 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2120 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2121 Warn when a function declaration hides virtual functions from a
2122 base class.  For example, in:
2123 .Sp
2124 .Vb 3
2125 \&        struct A {
2126 \&          virtual void f();
2127 \&        };
2128 \&        
2129 \&        struct B: public A {
2130 \&          void f(int);
2131 \&        };
2132 .Ve
2133 .Sp
2134 the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
2135 like:
2136 .Sp
2137 .Vb 2
2138 \&        B* b;
2139 \&        b\->f();
2140 .Ve
2141 .Sp
2142 will fail to compile.
2143 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2144 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2145 Disable the diagnostic for converting a bound pointer to member function
2146 to a plain pointer.
2147 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2148 .IX Item "-Wsign-promo ( and Objective- only)"
2149 Warn when overload resolution chooses a promotion from unsigned or
2150 enumerated type to a signed type, over a conversion to an unsigned type of
2151 the same size.  Previous versions of G++ would try to preserve
2152 unsignedness, but the standard mandates the current behavior.
2153 .Sp
2154 .Vb 4
2155 \&        struct A {
2156 \&          operator int ();
2157 \&          A& operator = (int);
2158 \&        };
2159 \&        
2160 \&        main ()
2161 \&        {
2162 \&          A a,b;
2163 \&          a = b;
2164 \&        }
2165 .Ve
2166 .Sp
2167 In this example, G++ will synthesize a default \fBA& operator =
2168 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2169 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2170 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2171 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2172 languages themselves.  See
2173 .PP
2174 This section describes the command-line options that are only meaningful
2175 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2176 the language-independent \s-1GNU\s0 compiler options.
2177 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2178 .PP
2179 .Vb 1
2180 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2181 .Ve
2182 .PP
2183 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2184 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2185 any language supported by \s-1GCC\s0.
2186 .PP
2187 Note that since Objective-C is an extension of the C language, Objective-C
2188 compilations may also use options specific to the C front-end (e.g.,
2189 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2190 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2191 .PP
2192 Here is a list of options that are \fIonly\fR for compiling Objective-C
2193 and Objective\-\*(C+ programs:
2194 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2195 .IX Item "-fconstant-string-class=class-name"
2196 Use \fIclass-name\fR as the name of the class to instantiate for each
2197 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2198 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2199 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2200 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2201 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2202 to be laid out as constant CoreFoundation strings.
2203 .IP "\fB\-fgnu\-runtime\fR" 4
2204 .IX Item "-fgnu-runtime"
2205 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2206 runtime.  This is the default for most types of systems.
2207 .IP "\fB\-fnext\-runtime\fR" 4
2208 .IX Item "-fnext-runtime"
2209 Generate output compatible with the NeXT runtime.  This is the default
2210 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2211 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2212 used.
2213 .IP "\fB\-fno\-nil\-receivers\fR" 4
2214 .IX Item "-fno-nil-receivers"
2215 Assume that all Objective-C message dispatches (e.g.,
2216 \&\f(CW\*(C`[receiver message:arg]\*(C'\fR) in this translation unit ensure that the receiver
2217 is not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the runtime
2218 to be used.  Currently, this option is only available in conjunction with
2219 the NeXT runtime on Mac \s-1OS\s0 X 10.3 and later.
2220 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2221 .IX Item "-fobjc-call-cxx-cdtors"
2222 For each Objective-C class, check if any of its instance variables is a
2223 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2224 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method that will run
2225 non-trivial default constructors on any such instance variables, in order,
2226 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2227 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2228 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method that will run
2229 all such default destructors, in reverse order.
2230 .Sp
2231 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and/or \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods
2232 thusly generated will only operate on instance variables declared in the
2233 current Objective-C class, and not those inherited from superclasses.  It
2234 is the responsibility of the Objective-C runtime to invoke all such methods
2235 in an object's inheritance hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods
2236 will be invoked by the runtime immediately after a new object
2237 instance is allocated; the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will
2238 be invoked immediately before the runtime deallocates an object instance.
2239 .Sp
2240 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2241 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2242 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2243 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2244 .IX Item "-fobjc-direct-dispatch"
2245 Allow fast jumps to the message dispatcher.  On Darwin this is
2246 accomplished via the comm page.
2247 .IP "\fB\-fobjc\-exceptions\fR" 4
2248 .IX Item "-fobjc-exceptions"
2249 Enable syntactic support for structured exception handling in Objective-C,
2250 similar to what is offered by \*(C+ and Java.  This option is
2251 unavailable in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.2 and
2252 earlier.
2253 .Sp
2254 .Vb 10
2255 \&          @try {
2256 \&            ...
2257 \&               @throw expr;
2258 \&            ...
2259 \&          }
2260 \&          @catch (AnObjCClass *exc) {
2261 \&            ...
2262 \&              @throw expr;
2263 \&            ...
2264 \&              @throw;
2265 \&            ...
2266 \&          }
2267 \&          @catch (AnotherClass *exc) {
2268 \&            ...
2269 \&          }
2270 \&          @catch (id allOthers) {
2271 \&            ...
2272 \&          }
2273 \&          @finally {
2274 \&            ...
2275 \&              @throw expr;
2276 \&            ...
2277 \&          }
2278 .Ve
2279 .Sp
2280 The \f(CW@throw\fR statement may appear anywhere in an Objective-C or
2281 Objective\-\*(C+ program; when used inside of a \f(CW@catch\fR block, the
2282 \&\f(CW@throw\fR may appear without an argument (as shown above), in which case
2283 the object caught by the \f(CW@catch\fR will be rethrown.
2284 .Sp
2285 Note that only (pointers to) Objective-C objects may be thrown and
2286 caught using this scheme.  When an object is thrown, it will be caught
2287 by the nearest \f(CW@catch\fR clause capable of handling objects of that type,
2288 analogously to how \f(CW\*(C`catch\*(C'\fR blocks work in \*(C+ and Java.  A
2289 \&\f(CW\*(C`@catch(id ...)\*(C'\fR clause (as shown above) may also be provided to catch
2290 any and all Objective-C exceptions not caught by previous \f(CW@catch\fR
2291 clauses (if any).
2292 .Sp
2293 The \f(CW@finally\fR clause, if present, will be executed upon exit from the
2294 immediately preceding \f(CW\*(C`@try ... @catch\*(C'\fR section.  This will happen
2295 regardless of whether any exceptions are thrown, caught or rethrown
2296 inside the \f(CW\*(C`@try ... @catch\*(C'\fR section, analogously to the behavior
2297 of the \f(CW\*(C`finally\*(C'\fR clause in Java.
2298 .Sp
2299 There are several caveats to using the new exception mechanism:
2300 .RS 4
2301 .IP "\(bu" 4
2302 Although currently designed to be binary compatible with \f(CW\*(C`NS_HANDLER\*(C'\fR\-style
2303 idioms provided by the \f(CW\*(C`NSException\*(C'\fR class, the new
2304 exceptions can only be used on Mac \s-1OS\s0 X 10.3 (Panther) and later
2305 systems, due to additional functionality needed in the (NeXT) Objective-C
2306 runtime.
2307 .IP "\(bu" 4
2308 As mentioned above, the new exceptions do not support handling
2309 types other than Objective-C objects.   Furthermore, when used from
2310 Objective\-\*(C+, the Objective-C exception model does not interoperate with \*(C+
2311 exceptions at this time.  This means you cannot \f(CW@throw\fR an exception
2312 from Objective-C and \f(CW\*(C`catch\*(C'\fR it in \*(C+, or vice versa
2313 (i.e., \f(CW\*(C`throw ... @catch\*(C'\fR).
2314 .RE
2315 .RS 4
2316 .Sp
2317 The \fB\-fobjc\-exceptions\fR switch also enables the use of synchronization
2318 blocks for thread-safe execution:
2319 .Sp
2320 .Vb 3
2321 \&          @synchronized (ObjCClass *guard) {
2322 \&            ...
2323 \&          }
2324 .Ve
2325 .Sp
2326 Upon entering the \f(CW@synchronized\fR block, a thread of execution shall
2327 first check whether a lock has been placed on the corresponding \f(CW\*(C`guard\*(C'\fR
2328 object by another thread.  If it has, the current thread shall wait until
2329 the other thread relinquishes its lock.  Once \f(CW\*(C`guard\*(C'\fR becomes available,
2330 the current thread will place its own lock on it, execute the code contained in
2331 the \f(CW@synchronized\fR block, and finally relinquish the lock (thereby
2332 making \f(CW\*(C`guard\*(C'\fR available to other threads).
2333 .Sp
2334 Unlike Java, Objective-C does not allow for entire methods to be marked
2335 \&\f(CW@synchronized\fR.  Note that throwing exceptions out of
2336 \&\f(CW@synchronized\fR blocks is allowed, and will cause the guarding object
2337 to be unlocked properly.
2338 .RE
2339 .IP "\fB\-fobjc\-gc\fR" 4
2340 .IX Item "-fobjc-gc"
2341 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+ programs.
2342 .IP "\fB\-freplace\-objc\-classes\fR" 4
2343 .IX Item "-freplace-objc-classes"
2344 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2345 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2346 run time instead.  This is used in conjunction with the Fix-and-Continue
2347 debugging mode, where the object file in question may be recompiled and
2348 dynamically reloaded in the course of program execution, without the need
2349 to restart the program itself.  Currently, Fix-and-Continue functionality
2350 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2351 and later.
2352 .IP "\fB\-fzero\-link\fR" 4
2353 .IX Item "-fzero-link"
2354 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2355 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2356 compile time) with static class references that get initialized at load time,
2357 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2358 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2359 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2360 for individual class implementations to be modified during program execution.
2361 .IP "\fB\-gen\-decls\fR" 4
2362 .IX Item "-gen-decls"
2363 Dump interface declarations for all classes seen in the source file to a
2364 file named \fI\fIsourcename\fI.decl\fR.
2365 .IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
2366 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2367 Warn whenever an Objective-C assignment is being intercepted by the
2368 garbage collector.
2369 .IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
2370 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2371 If a class is declared to implement a protocol, a warning is issued for
2372 every method in the protocol that is not implemented by the class.  The
2373 default behavior is to issue a warning for every method not explicitly
2374 implemented in the class, even if a method implementation is inherited
2375 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2376 methods inherited from the superclass are considered to be implemented,
2377 and no warning is issued for them.
2378 .IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
2379 .IX Item "-Wselector (Objective-C and Objective- only)"
2380 Warn if multiple methods of different types for the same selector are
2381 found during compilation.  The check is performed on the list of methods
2382 in the final stage of compilation.  Additionally, a check is performed
2383 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2384 expression, and a corresponding method for that selector has been found
2385 during compilation.  Because these checks scan the method table only at
2386 the end of compilation, these warnings are not produced if the final
2387 stage of compilation is not reached, for example because an error is
2388 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2389 being used.
2390 .IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
2391 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2392 Warn if multiple methods with differing argument and/or return types are
2393 found for a given selector when attempting to send a message using this
2394 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2395 is off (which is the default behavior), the compiler will omit such warnings
2396 if any differences found are confined to types which share the same size
2397 and alignment.
2398 .IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
2399 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2400 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2401 undeclared selector is found.  A selector is considered undeclared if no
2402 method with that name has been declared before the
2403 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2404 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2405 an \f(CW@implementation\fR section.  This option always performs its
2406 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2407 while \fB\-Wselector\fR only performs its checks in the final stage of
2408 compilation.  This also enforces the coding style convention
2409 that methods and selectors must be declared before being used.
2410 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2411 .IX Item "-print-objc-runtime-info"
2412 Generate C header describing the largest structure that is passed by
2413 value, if any.
2414 .Sh "Options to Control Diagnostic Messages Formatting"
2415 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2416 Traditionally, diagnostic messages have been formatted irrespective of
2417 the output device's aspect (e.g. its width, ...).  The options described
2418 below can be used to control the diagnostic messages formatting
2419 algorithm, e.g. how many characters per line, how often source location
2420 information should be reported.  Right now, only the \*(C+ front end can
2421 honor these options.  However it is expected, in the near future, that
2422 the remaining front ends would be able to digest them correctly.
2423 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2424 .IX Item "-fmessage-length=n"
2425 Try to format error messages so that they fit on lines of about \fIn\fR
2426 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2427 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2428 line-wrapping will be done; each error message will appear on a single
2429 line.
2430 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2431 .IX Item "-fdiagnostics-show-location=once"
2432 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2433 reporter to emit \fIonce\fR source location information; that is, in
2434 case the message is too long to fit on a single physical line and has to
2435 be wrapped, the source location won't be emitted (as prefix) again,
2436 over and over, in subsequent continuation lines.  This is the default
2437 behavior.
2438 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2439 .IX Item "-fdiagnostics-show-location=every-line"
2440 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2441 messages reporter to emit the same source location information (as
2442 prefix) for physical lines that result from the process of breaking
2443 a message which is too long to fit on a single line.
2444 .IP "\fB\-fdiagnostics\-show\-option\fR" 4
2445 .IX Item "-fdiagnostics-show-option"
2446 This option instructs the diagnostic machinery to add text to each
2447 diagnostic emitted, which indicates which command line option directly
2448 controls that diagnostic, when such an option is known to the
2449 diagnostic machinery.
2450 .IP "\fB\-Wcoverage\-mismatch\fR" 4
2451 .IX Item "-Wcoverage-mismatch"
2452 Warn if feedback profiles do not match when using the
2453 \&\fB\-fprofile\-use\fR option.
2454 If a source file was changed between \fB\-fprofile\-gen\fR and
2455 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2456 to match the source file and \s-1GCC\s0 can not use the profile feedback
2457 information.  By default, \s-1GCC\s0 emits an error message in this case.
2458 The option \fB\-Wcoverage\-mismatch\fR emits a warning instead of an
2459 error.  \s-1GCC\s0 does not use appropriate feedback profiles, so using this
2460 option can result in poorly optimized code.  This option is useful
2461 only in the case of very minor changes such as bug fixes to an
2462 existing code-base.
2463 .Sh "Options to Request or Suppress Warnings"
2464 .IX Subsection "Options to Request or Suppress Warnings"
2465 Warnings are diagnostic messages that report constructions which
2466 are not inherently erroneous but which are risky or suggest there
2467 may have been an error.
2468 .PP
2469 The following language-independent options do not enable specific
2470 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2471 .IP "\fB\-fsyntax\-only\fR" 4
2472 .IX Item "-fsyntax-only"
2473 Check the code for syntax errors, but don't do anything beyond that.
2474 .IP "\fB\-w\fR" 4
2475 .IX Item "-w"
2476 Inhibit all warning messages.
2477 .IP "\fB\-Werror\fR" 4
2478 .IX Item "-Werror"
2479 Make all warnings into errors.
2480 .IP "\fB\-Werror=\fR" 4
2481 .IX Item "-Werror="
2482 Make the specified warning into an error.  The specifier for a warning
2483 is appended, for example \fB\-Werror=switch\fR turns the warnings
2484 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2485 negative form, to be used to negate \fB\-Werror\fR for specific
2486 warnings, for example \fB\-Wno\-error=switch\fR makes
2487 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2488 is in effect.  You can use the \fB\-fdiagnostics\-show\-option\fR
2489 option to have each controllable warning amended with the option which
2490 controls it, to determine what to use with this option.
2491 .Sp
2492 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2493 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2494 imply anything.
2495 .IP "\fB\-Wfatal\-errors\fR" 4
2496 .IX Item "-Wfatal-errors"
2497 This option causes the compiler to abort compilation on the first error
2498 occurred rather than trying to keep going and printing further error
2499 messages.
2500 .PP
2501 You can request many specific warnings with options beginning
2502 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2503 implicit declarations.  Each of these specific warning options also
2504 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2505 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2506 two forms, whichever is not the default.  For further,
2507 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2508 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2509 .IP "\fB\-pedantic\fR" 4
2510 .IX Item "-pedantic"
2511 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2512 reject all programs that use forbidden extensions, and some other
2513 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2514 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2515 .Sp
2516 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2517 this option (though a rare few will require \fB\-ansi\fR or a
2518 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2519 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2520 features are supported as well.  With this option, they are rejected.
2521 .Sp
2522 \&\fB\-pedantic\fR does not cause warning messages for use of the
2523 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2524 warnings are also disabled in the expression that follows
2525 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2526 these escape routes; application programs should avoid them.
2527 .Sp
2528 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2529 C conformance.  They soon find that it does not do quite what they want:
2530 it finds some non-ISO practices, but not all\-\-\-only those for which
2531 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2532 diagnostics have been added.
2533 .Sp
2534 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2535 some instances, but would require considerable additional work and would
2536 be quite different from \fB\-pedantic\fR.  We don't have plans to
2537 support such a feature in the near future.
2538 .Sp
2539 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2540 extended dialect of C, such as \fBgnu89\fR or \fBgnu99\fR, there is a
2541 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2542 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2543 where they are required by the base standard.  (It would not make sense
2544 for such warnings to be given only for features not in the specified \s-1GNU\s0
2545 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2546 features the compiler supports with the given option, and there would be
2547 nothing to warn about.)
2548 .IP "\fB\-pedantic\-errors\fR" 4
2549 .IX Item "-pedantic-errors"
2550 Like \fB\-pedantic\fR, except that errors are produced rather than
2551 warnings.
2552 .IP "\fB\-Wall\fR" 4
2553 .IX Item "-Wall"
2554 This enables all the warnings about constructions that some users
2555 consider questionable, and that are easy to avoid (or modify to
2556 prevent the warning), even in conjunction with macros.  This also
2557 enables some language-specific warnings described in \fB\*(C+ Dialect
2558 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2559 .Sp
2560 \&\fB\-Wall\fR turns on the following warning flags:
2561 .Sp
2562 \&\fB\-Waddress   
2563 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2564 \&\fB\-Wc++0x\-compat  
2565 \&\-Wchar\-subscripts  
2566 \&\-Wimplicit\-int  
2567 \&\-Wimplicit\-function\-declaration  
2568 \&\-Wcomment  
2569 \&\-Wformat   
2570 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2571 \&\fB\-Wmissing\-braces  
2572 \&\-Wnonnull  
2573 \&\-Wparentheses  
2574 \&\-Wpointer\-sign  
2575 \&\-Wreorder   
2576 \&\-Wreturn\-type  
2577 \&\-Wsequence\-point  
2578 \&\-Wsign\-compare\fR (only in \*(C+)  
2579 \&\fB\-Wstrict\-aliasing  
2580 \&\-Wstrict\-overflow=1  
2581 \&\-Wswitch  
2582 \&\-Wtrigraphs  
2583 \&\-Wuninitialized  
2584 \&\-Wunknown\-pragmas  
2585 \&\-Wunused\-function  
2586 \&\-Wunused\-label     
2587 \&\-Wunused\-value     
2588 \&\-Wunused\-variable  
2589 \&\-Wvolatile\-register\-var\fR
2590 .Sp
2591 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2592 them warn about constructions that users generally do not consider
2593 questionable, but which occasionally you might wish to check for;
2594 others warn about constructions that are necessary or hard to avoid in
2595 some cases, and there is no simple way to modify the code to suppress
2596 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2597 them must be enabled individually.
2598 .IP "\fB\-Wextra\fR" 4
2599 .IX Item "-Wextra"
2600 This enables some extra warning flags that are not enabled by
2601 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2602 name is still supported, but the newer name is more descriptive.)
2603 .Sp
2604 \&\fB\-Wclobbered  
2605 \&\-Wempty\-body  
2606 \&\-Wignored\-qualifiers 
2607 \&\-Wmissing\-field\-initializers  
2608 \&\-Wmissing\-parameter\-type\fR (C only)  
2609 \&\fB\-Wold\-style\-declaration\fR (C only)  
2610 \&\fB\-Woverride\-init  
2611 \&\-Wsign\-compare  
2612 \&\-Wtype\-limits  
2613 \&\-Wuninitialized  
2614 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB \fR
2615 .Sp
2616 The option \fB\-Wextra\fR also prints warning messages for the
2617 following cases:
2618 .RS 4
2619 .IP "\(bu" 4
2620 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2621 \&\fB>\fR, or \fB>=\fR.
2622 .IP "\(bu" 4
2623 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2624 conditional expression.
2625 .IP "\(bu" 4
2626 (\*(C+ only) Ambiguous virtual bases.
2627 .IP "\(bu" 4
2628 (\*(C+ only) Subscripting an array which has been declared \fBregister\fR.
2629 .IP "\(bu" 4
2630 (\*(C+ only) Taking the address of a variable which has been declared
2631 \&\fBregister\fR.
2632 .IP "\(bu" 4
2633 (\*(C+ only) A base class is not initialized in a derived class' copy
2634 constructor.
2635 .RE
2636 .RS 4
2637 .RE
2638 .IP "\fB\-Wchar\-subscripts\fR" 4
2639 .IX Item "-Wchar-subscripts"
2640 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2641 of error, as programmers often forget that this type is signed on some
2642 machines.
2643 This warning is enabled by \fB\-Wall\fR.
2644 .IP "\fB\-Wcomment\fR" 4
2645 .IX Item "-Wcomment"
2646 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2647 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2648 This warning is enabled by \fB\-Wall\fR.
2649 .IP "\fB\-Wformat\fR" 4
2650 .IX Item "-Wformat"
2651 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2652 the arguments supplied have types appropriate to the format string
2653 specified, and that the conversions specified in the format string make
2654 sense.  This includes standard functions, and others specified by format
2655 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2656 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2657 not in the C standard) families (or other target-specific families).
2658 Which functions are checked without format attributes having been
2659 specified depends on the standard version selected, and such checks of
2660 functions without the attribute specified are disabled by
2661 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2662 .Sp
2663 The formats are checked against the format features supported by \s-1GNU\s0
2664 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2665 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2666 extensions.  Other library implementations may not support all these
2667 features; \s-1GCC\s0 does not support warning about features that go beyond a
2668 particular library's limitations.  However, if \fB\-pedantic\fR is used
2669 with \fB\-Wformat\fR, warnings will be given about format features not
2670 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2671 since those are not in any version of the C standard).
2672 .Sp
2673 Since \fB\-Wformat\fR also checks for null format arguments for
2674 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2675 .Sp
2676 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2677 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2678 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2679 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2680 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2681 .IP "\fB\-Wformat\-y2k\fR" 4
2682 .IX Item "-Wformat-y2k"
2683 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
2684 formats which may yield only a two-digit year.
2685 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
2686 .IX Item "-Wno-format-contains-nul"
2687 If \fB\-Wformat\fR is specified, do not warn about format strings that
2688 contain \s-1NUL\s0 bytes.
2689 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
2690 .IX Item "-Wno-format-extra-args"
2691 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
2692 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
2693 that such arguments are ignored.
2694 .Sp
2695 Where the unused arguments lie between used arguments that are
2696 specified with \fB$\fR operand number specifications, normally
2697 warnings are still given, since the implementation could not know what
2698 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
2699 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
2700 warning if the unused arguments are all pointers, since the Single
2701 Unix Specification says that such unused arguments are allowed.
2702 .IP "\fB\-Wno\-format\-zero\-length\fR (C and Objective-C only)" 4
2703 .IX Item "-Wno-format-zero-length (C and Objective-C only)"
2704 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
2705 The C standard specifies that zero-length formats are allowed.
2706 .IP "\fB\-Wformat\-nonliteral\fR" 4
2707 .IX Item "-Wformat-nonliteral"
2708 If \fB\-Wformat\fR is specified, also warn if the format string is not a
2709 string literal and so cannot be checked, unless the format function
2710 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
2711 .IP "\fB\-Wformat\-security\fR" 4
2712 .IX Item "-Wformat-security"
2713 If \fB\-Wformat\fR is specified, also warn about uses of format
2714 functions that represent possible security problems.  At present, this
2715 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
2716 format string is not a string literal and there are no format arguments,
2717 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
2718 string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
2719 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
2720 in future warnings may be added to \fB\-Wformat\-security\fR that are not
2721 included in \fB\-Wformat\-nonliteral\fR.)
2722 .IP "\fB\-Wformat=2\fR" 4
2723 .IX Item "-Wformat=2"
2724 Enable \fB\-Wformat\fR plus format checks not included in
2725 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
2726 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
2727 .IP "\fB\-Wnonnull\fR (C and Objective-C only)" 4
2728 .IX Item "-Wnonnull (C and Objective-C only)"
2729 Warn about passing a null pointer for arguments marked as
2730 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
2731 .Sp
2732 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
2733 can be disabled with the \fB\-Wno\-nonnull\fR option.
2734 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2735 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
2736 Warn about uninitialized variables which are initialized with themselves.
2737 Note this option can only be used with the \fB\-Wuninitialized\fR option.
2738 .Sp
2739 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
2740 following snippet only when \fB\-Winit\-self\fR has been specified:
2741 .Sp
2742 .Vb 5
2743 \&        int f()
2744 \&        {
2745 \&          int i = i;
2746 \&          return i;
2747 \&        }
2748 .Ve
2749 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
2750 .IX Item "-Wimplicit-int (C and Objective-C only)"
2751 Warn when a declaration does not specify a type.
2752 This warning is enabled by \fB\-Wall\fR.
2753 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
2754 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
2755 Give a warning whenever a function is used before being declared. In
2756 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
2757 enabled by default and it is made into an error by
2758 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
2759 \&\fB\-Wall\fR.
2760 .IP "\fB\-Wimplicit\fR" 4
2761 .IX Item "-Wimplicit"
2762 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
2763 This warning is enabled by \fB\-Wall\fR.
2764 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
2765 .IX Item "-Wignored-qualifiers (C and  only)"
2766 Warn if the return type of a function has a type qualifier
2767 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
2768 since the value returned by a function is not an lvalue.
2769 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
2770 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
2771 definitions, so such return types always receive a warning
2772 even without this option.
2773 .Sp
2774 This warning is also enabled by \fB\-Wextra\fR.
2775 .IP "\fB\-Wmain\fR" 4
2776 .IX Item "-Wmain"
2777 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
2778 a function with external linkage, returning int, taking either zero
2779 arguments, two, or three arguments of appropriate types.  This warning
2780 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
2781 or \fB\-pedantic\fR.
2782 .IP "\fB\-Wmissing\-braces\fR" 4
2783 .IX Item "-Wmissing-braces"
2784 Warn if an aggregate or union initializer is not fully bracketed.  In
2785 the following example, the initializer for \fBa\fR is not fully
2786 bracketed, but that for \fBb\fR is fully bracketed.
2787 .Sp
2788 .Vb 2
2789 \&        int a[2][2] = { 0, 1, 2, 3 };
2790 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
2791 .Ve
2792 .Sp
2793 This warning is enabled by \fB\-Wall\fR.
2794 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2795 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
2796 Warn if a user-supplied include directory does not exist.
2797 .IP "\fB\-Wparentheses\fR" 4
2798 .IX Item "-Wparentheses"
2799 Warn if parentheses are omitted in certain contexts, such
2800 as when there is an assignment in a context where a truth value
2801 is expected, or when operators are nested whose precedence people
2802 often get confused about.
2803 .Sp
2804 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
2805 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
2806 interpretation from that of ordinary mathematical notation.
2807 .Sp
2808 Also warn about constructions where there may be confusion to which
2809 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
2810 such a case:
2811 .Sp
2812 .Vb 7
2813 \&        {
2814 \&          if (a)
2815 \&            if (b)
2816 \&              foo ();
2817 \&          else
2818 \&            bar ();
2819 \&        }
2820 .Ve
2821 .Sp
2822 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
2823 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
2824 often not what the programmer expected, as illustrated in the above
2825 example by indentation the programmer chose.  When there is the
2826 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
2827 is specified.  To eliminate the warning, add explicit braces around
2828 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
2829 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
2830 look like this:
2831 .Sp
2832 .Vb 9
2833 \&        {
2834 \&          if (a)
2835 \&            {
2836 \&              if (b)
2837 \&                foo ();
2838 \&              else
2839 \&                bar ();
2840 \&            }
2841 \&        }
2842 .Ve
2843 .Sp
2844 This warning is enabled by \fB\-Wall\fR.
2845 .IP "\fB\-Wsequence\-point\fR" 4
2846 .IX Item "-Wsequence-point"
2847 Warn about code that may have undefined semantics because of violations
2848 of sequence point rules in the C and \*(C+ standards.
2849 .Sp
2850 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
2851 program are evaluated in terms of \fIsequence points\fR, which represent
2852 a partial ordering between the execution of parts of the program: those
2853 executed before the sequence point, and those executed after it.  These
2854 occur after the evaluation of a full expression (one which is not part
2855 of a larger expression), after the evaluation of the first operand of a
2856 \&\f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, \f(CW\*(C`? :\*(C'\fR or \f(CW\*(C`,\*(C'\fR (comma) operator, before a
2857 function is called (but after the evaluation of its arguments and the
2858 expression denoting the called function), and in certain other places.
2859 Other than as expressed by the sequence point rules, the order of
2860 evaluation of subexpressions of an expression is not specified.  All
2861 these rules describe only a partial order rather than a total order,
2862 since, for example, if two functions are called within one expression
2863 with no sequence point between them, the order in which the functions
2864 are called is not specified.  However, the standards committee have
2865 ruled that function calls do not overlap.
2866 .Sp
2867 It is not specified when between sequence points modifications to the
2868 values of objects take effect.  Programs whose behavior depends on this
2869 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
2870 the previous and next sequence point an object shall have its stored
2871 value modified at most once by the evaluation of an expression.
2872 Furthermore, the prior value shall be read only to determine the value
2873 to be stored.\*(R".  If a program breaks these rules, the results on any
2874 particular implementation are entirely unpredictable.
2875 .Sp
2876 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
2877 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
2878 diagnosed by this option, and it may give an occasional false positive
2879 result, but in general it has been found fairly effective at detecting
2880 this sort of problem in programs.
2881 .Sp
2882 The standard is worded confusingly, therefore there is some debate
2883 over the precise meaning of the sequence point rules in subtle cases.
2884 Links to discussions of the problem, including proposed formal
2885 definitions, may be found on the \s-1GCC\s0 readings page, at
2886 <\fBhttp://gcc.gnu.org/readings.html\fR>.
2887 .Sp
2888 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
2889 .IP "\fB\-Wreturn\-type\fR" 4
2890 .IX Item "-Wreturn-type"
2891 Warn whenever a function is defined with a return-type that defaults
2892 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
2893 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
2894 (falling off the end of the function body is considered returning
2895 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with a
2896 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
2897 .Sp
2898 For \*(C+, a function without return type always produces a diagnostic
2899 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
2900 exceptions are \fBmain\fR and functions defined in system headers.
2901 .Sp
2902 This warning is enabled by \fB\-Wall\fR.
2903 .IP "\fB\-Wswitch\fR" 4
2904 .IX Item "-Wswitch"
2905 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2906 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2907 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
2908 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2909 provoke warnings when this option is used.
2910 This warning is enabled by \fB\-Wall\fR.
2911 .IP "\fB\-Wswitch\-default\fR" 4
2912 .IX Item "-Wswitch-default"
2913 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
2914 case.
2915 .IP "\fB\-Wswitch\-enum\fR" 4
2916 .IX Item "-Wswitch-enum"
2917 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2918 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2919 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2920 provoke warnings when this option is used.
2921 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
2922 .IX Item "-Wsync-nand (C and  only)"
2923 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
2924 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
2925 .IP "\fB\-Wtrigraphs\fR" 4
2926 .IX Item "-Wtrigraphs"
2927 Warn if any trigraphs are encountered that might change the meaning of
2928 the program (trigraphs within comments are not warned about).
2929 This warning is enabled by \fB\-Wall\fR.
2930 .IP "\fB\-Wunused\-function\fR" 4
2931 .IX Item "-Wunused-function"
2932 Warn whenever a static function is declared but not defined or a
2933 non-inline static function is unused.
2934 This warning is enabled by \fB\-Wall\fR.
2935 .IP "\fB\-Wunused\-label\fR" 4
2936 .IX Item "-Wunused-label"
2937 Warn whenever a label is declared but not used.
2938 This warning is enabled by \fB\-Wall\fR.
2939 .Sp
2940 To suppress this warning use the \fBunused\fR attribute.
2941 .IP "\fB\-Wunused\-parameter\fR" 4
2942 .IX Item "-Wunused-parameter"
2943 Warn whenever a function parameter is unused aside from its declaration.
2944 .Sp
2945 To suppress this warning use the \fBunused\fR attribute.
2946 .IP "\fB\-Wunused\-variable\fR" 4
2947 .IX Item "-Wunused-variable"
2948 Warn whenever a local variable or non-constant static variable is unused
2949 aside from its declaration.
2950 This warning is enabled by \fB\-Wall\fR.
2951 .Sp
2952 To suppress this warning use the \fBunused\fR attribute.
2953 .IP "\fB\-Wunused\-value\fR" 4
2954 .IX Item "-Wunused-value"
2955 Warn whenever a statement computes a result that is explicitly not
2956 used. To suppress this warning cast the unused expression to
2957 \&\fBvoid\fR. This includes an expression-statement or the left-hand
2958 side of a comma expression that contains no side effects. For example,
2959 an expression such as \fBx[i,j]\fR will cause a warning, while
2960 \&\fBx[(void)i,j]\fR will not.
2961 .Sp
2962 This warning is enabled by \fB\-Wall\fR.
2963 .IP "\fB\-Wunused\fR" 4
2964 .IX Item "-Wunused"
2965 All the above \fB\-Wunused\fR options combined.
2966 .Sp
2967 In order to get a warning about an unused function parameter, you must
2968 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
2969 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
2970 .IP "\fB\-Wuninitialized\fR" 4
2971 .IX Item "-Wuninitialized"
2972 Warn if an automatic variable is used without first being initialized
2973 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
2974 warn if a non-static reference or non-static \fBconst\fR member
2975 appears in a class without constructors.
2976 .Sp
2977 If you want to warn about code which uses the uninitialized value of the
2978 variable in its own initializer, use the \fB\-Winit\-self\fR option.
2979 .Sp
2980 These warnings occur for individual uninitialized or clobbered
2981 elements of structure, union or array variables as well as for
2982 variables which are uninitialized or clobbered as a whole.  They do
2983 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
2984 these warnings depend on optimization, the exact variables or elements
2985 for which there are warnings will depend on the precise optimization
2986 options and version of \s-1GCC\s0 used.
2987 .Sp
2988 Note that there may be no warning about a variable that is used only
2989 to compute a value that itself is never used, because such
2990 computations may be deleted by data flow analysis before the warnings
2991 are printed.
2992 .Sp
2993 These warnings are made optional because \s-1GCC\s0 is not smart
2994 enough to see all the reasons why the code might be correct
2995 despite appearing to have an error.  Here is one example of how
2996 this can happen:
2997 .Sp
2998 .Vb 12
2999 \&        {
3000 \&          int x;
3001 \&          switch (y)
3002 \&            {
3003 \&            case 1: x = 1;
3004 \&              break;
3005 \&            case 2: x = 4;
3006 \&              break;
3007 \&            case 3: x = 5;
3008 \&            }
3009 \&          foo (x);
3010 \&        }
3011 .Ve
3012 .Sp
3013 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3014 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
3015 another common case:
3016 .Sp
3017 .Vb 6
3018 \&        {
3019 \&          int save_y;
3020 \&          if (change_y) save_y = y, y = new_y;
3021 \&          ...
3022 \&          if (change_y) y = save_y;
3023 \&        }
3024 .Ve
3025 .Sp
3026 This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
3027 .Sp
3028 This option also warns when a non-volatile automatic variable might be
3029 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3030 only in optimizing compilation.
3031 .Sp
3032 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3033 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3034 call it at any point in the code.  As a result, you may get a warning
3035 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3036 in fact be called at the place which would cause a problem.
3037 .Sp
3038 Some spurious warnings can be avoided if you declare all the functions
3039 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
3040 .Sp
3041 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3042 .IP "\fB\-Wunknown\-pragmas\fR" 4
3043 .IX Item "-Wunknown-pragmas"
3044 Warn when a #pragma directive is encountered which is not understood by
3045 \&\s-1GCC\s0.  If this command line option is used, warnings will even be issued
3046 for unknown pragmas in system header files.  This is not the case if
3047 the warnings were only enabled by the \fB\-Wall\fR command line option.
3048 .IP "\fB\-Wno\-pragmas\fR" 4
3049 .IX Item "-Wno-pragmas"
3050 Do not warn about misuses of pragmas, such as incorrect parameters,
3051 invalid syntax, or conflicts between pragmas.  See also
3052 \&\fB\-Wunknown\-pragmas\fR.
3053 .IP "\fB\-Wstrict\-aliasing\fR" 4
3054 .IX Item "-Wstrict-aliasing"
3055 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3056 It warns about code which might break the strict aliasing rules that the
3057 compiler is using for optimization.  The warning does not catch all
3058 cases, but does attempt to catch the more common pitfalls.  It is
3059 included in \fB\-Wall\fR.
3060 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3061 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3062 .IX Item "-Wstrict-aliasing=n"
3063 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3064 It warns about code which might break the strict aliasing rules that the
3065 compiler is using for optimization.
3066 Higher levels correspond to higher accuracy (fewer false positives).
3067 Higher levels also correspond to more effort, similar to the way \-O works.
3068 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3069 with n=3.
3070 .Sp
3071 Level 1: Most aggressive, quick, least accurate.
3072 Possibly useful when higher levels
3073 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few 
3074 false negatives.  However, it has many false positives.
3075 Warns for all pointer conversions between possibly incompatible types, 
3076 even if never dereferenced.  Runs in the frontend only.
3077 .Sp
3078 Level 2: Aggressive, quick, not too precise.
3079 May still have many false positives (not as many as level 1 though),
3080 and few false negatives (but possibly more than level 1).
3081 Unlike level 1, it only warns when an address is taken.  Warns about
3082 incomplete types.  Runs in the frontend only.
3083 .Sp
3084 Level 3 (default for \fB\-Wstrict\-aliasing\fR): 
3085 Should have very few false positives and few false 
3086 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3087 Takes care of the common punn+dereference pattern in the frontend:
3088 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3089 If optimization is enabled, it also runs in the backend, where it deals 
3090 with multiple statement cases using flow-sensitive points-to information.
3091 Only warns when the converted pointer is dereferenced.
3092 Does not warn about incomplete types.
3093 .IP "\fB\-Wstrict\-overflow\fR" 4
3094 .IX Item "-Wstrict-overflow"
3095 .PD 0
3096 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3097 .IX Item "-Wstrict-overflow=n"
3098 .PD
3099 This option is only active when \fB\-fstrict\-overflow\fR is active.
3100 It warns about cases where the compiler optimizes based on the
3101 assumption that signed overflow does not occur.  Note that it does not
3102 warn about all cases where the code might overflow: it only warns
3103 about cases where the compiler implements some optimization.  Thus
3104 this warning depends on the optimization level.
3105 .Sp
3106 An optimization which assumes that signed overflow does not occur is
3107 perfectly safe if the values of the variables involved are such that
3108 overflow never does, in fact, occur.  Therefore this warning can
3109 easily give a false positive: a warning about code which is not
3110 actually a problem.  To help focus on important issues, several
3111 warning levels are defined.  No warnings are issued for the use of
3112 undefined signed overflow when estimating how many iterations a loop
3113 will require, in particular when determining whether a loop will be
3114 executed at all.
3115 .RS 4
3116 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3117 .IX Item "-Wstrict-overflow=1"
3118 Warn about cases which are both questionable and easy to avoid.  For
3119 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3120 compiler will simplify this to \f(CW1\fR.  This level of
3121 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3122 are not, and must be explicitly requested.
3123 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3124 .IX Item "-Wstrict-overflow=2"
3125 Also warn about other cases where a comparison is simplified to a
3126 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3127 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3128 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3129 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3130 \&\fB\-Wstrict\-overflow=2\fR.
3131 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3132 .IX Item "-Wstrict-overflow=3"
3133 Also warn about other cases where a comparison is simplified.  For
3134 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3135 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3136 .IX Item "-Wstrict-overflow=4"
3137 Also warn about other simplifications not covered by the above cases.
3138 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3139 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3140 .IX Item "-Wstrict-overflow=5"
3141 Also warn about cases where the compiler reduces the magnitude of a
3142 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3143 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3144 highest warning level because this simplification applies to many
3145 comparisons, so this warning level will give a very large number of
3146 false positives.
3147 .RE
3148 .RS 4
3149 .RE
3150 .IP "\fB\-Warray\-bounds\fR" 4
3151 .IX Item "-Warray-bounds"
3152 This option is only active when \fB\-ftree\-vrp\fR is active
3153 (default for \-O2 and above). It warns about subscripts to arrays
3154 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3155 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3156 .IX Item "-Wno-div-by-zero"
3157 Do not warn about compile-time integer division by zero.  Floating point
3158 division by zero is not warned about, as it can be a legitimate way of
3159 obtaining infinities and NaNs.
3160 .IP "\fB\-Wsystem\-headers\fR" 4
3161 .IX Item "-Wsystem-headers"
3162 Print warning messages for constructs found in system header files.
3163 Warnings from system headers are normally suppressed, on the assumption
3164 that they usually do not indicate real problems and would only make the
3165 compiler output harder to read.  Using this command line option tells
3166 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3167 code.  However, note that using \fB\-Wall\fR in conjunction with this
3168 option will \fInot\fR warn about unknown pragmas in system
3169 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3170 .IP "\fB\-Wfloat\-equal\fR" 4
3171 .IX Item "-Wfloat-equal"
3172 Warn if floating point values are used in equality comparisons.
3173 .Sp
3174 The idea behind this is that sometimes it is convenient (for the
3175 programmer) to consider floating-point values as approximations to
3176 infinitely precise real numbers.  If you are doing this, then you need
3177 to compute (by analyzing the code, or in some other way) the maximum or
3178 likely maximum error that the computation introduces, and allow for it
3179 when performing comparisons (and when producing output, but that's a
3180 different problem).  In particular, instead of testing for equality, you
3181 would check to see whether the two values have ranges that overlap; and
3182 this is done with the relational operators, so equality comparisons are
3183 probably mistaken.
3184 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3185 .IX Item "-Wtraditional (C and Objective-C only)"
3186 Warn about certain constructs that behave differently in traditional and
3187 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3188 equivalent, and/or problematic constructs which should be avoided.
3189 .RS 4
3190 .IP "\(bu" 4
3191 Macro parameters that appear within string literals in the macro body.
3192 In traditional C macro replacement takes place within string literals,
3193 but does not in \s-1ISO\s0 C.
3194 .IP "\(bu" 4
3195 In traditional C, some preprocessor directives did not exist.
3196 Traditional preprocessors would only consider a line to be a directive
3197 if the \fB#\fR appeared in column 1 on the line.  Therefore
3198 \&\fB\-Wtraditional\fR warns about directives that traditional C
3199 understands but would ignore because the \fB#\fR does not appear as the
3200 first character on the line.  It also suggests you hide directives like
3201 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3202 traditional implementations would not recognize \fB#elif\fR, so it
3203 suggests avoiding it altogether.
3204 .IP "\(bu" 4
3205 A function-like macro that appears without arguments.
3206 .IP "\(bu" 4
3207 The unary plus operator.
3208 .IP "\(bu" 4
3209 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating point
3210 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3211 constants.)  Note, these suffixes appear in macros defined in the system
3212 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3213 Use of these macros in user code might normally lead to spurious
3214 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3215 avoid warning in these cases.
3216 .IP "\(bu" 4
3217 A function declared external in one block and then used after the end of
3218 the block.
3219 .IP "\(bu" 4
3220 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3221 .IP "\(bu" 4
3222 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3223 This construct is not accepted by some traditional C compilers.
3224 .IP "\(bu" 4
3225 The \s-1ISO\s0 type of an integer constant has a different width or
3226 signedness from its traditional type.  This warning is only issued if
3227 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3228 typically represent bit patterns, are not warned about.
3229 .IP "\(bu" 4
3230 Usage of \s-1ISO\s0 string concatenation is detected.
3231 .IP "\(bu" 4
3232 Initialization of automatic aggregates.
3233 .IP "\(bu" 4
3234 Identifier conflicts with labels.  Traditional C lacks a separate
3235 namespace for labels.
3236 .IP "\(bu" 4
3237 Initialization of unions.  If the initializer is zero, the warning is
3238 omitted.  This is done under the assumption that the zero initializer in
3239 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3240 initializer warnings and relies on default initialization to zero in the
3241 traditional C case.
3242 .IP "\(bu" 4
3243 Conversions by prototypes between fixed/floating point values and vice
3244 versa.  The absence of these prototypes when compiling with traditional
3245 C would cause serious problems.  This is a subset of the possible
3246 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3247 .IP "\(bu" 4
3248 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3249 \&\fInot\fR issued for prototype declarations or variadic functions
3250 because these \s-1ISO\s0 C features will appear in your code when using
3251 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3252 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3253 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3254 traditional C compatibility.
3255 .RE
3256 .RS 4
3257 .RE
3258 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3259 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3260 Warn if a prototype causes a type conversion that is different from what
3261 would happen to the same argument in the absence of a prototype.  This
3262 includes conversions of fixed point to floating and vice versa, and
3263 conversions changing the width or signedness of a fixed point argument
3264 except when the same as the default promotion.
3265 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3266 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3267 Warn when a declaration is found after a statement in a block.  This
3268 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3269 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3270 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.
3271 .IP "\fB\-Wundef\fR" 4
3272 .IX Item "-Wundef"
3273 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3274 .IP "\fB\-Wno\-endif\-labels\fR" 4
3275 .IX Item "-Wno-endif-labels"
3276 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3277 .IP "\fB\-Wshadow\fR" 4
3278 .IX Item "-Wshadow"
3279 Warn whenever a local variable shadows another local variable, parameter or
3280 global variable or whenever a built-in function is shadowed.
3281 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3282 .IX Item "-Wlarger-than=len"
3283 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3284 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3285 .IX Item "-Wframe-larger-than=len"
3286 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3287 The computation done to determine the stack frame size is approximate
3288 and not conservative.
3289 The actual requirements may be somewhat greater than \fIlen\fR
3290 even if you do not get a warning.  In addition, any space allocated
3291 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3292 is not included by the compiler when determining
3293 whether or not to issue a warning.
3294 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3295 .IX Item "-Wunsafe-loop-optimizations"
3296 Warn if the loop cannot be optimized because the compiler could not
3297 assume anything on the bounds of the loop indices.  With
3298 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3299 such assumptions.
3300 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3301 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3302 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3303 width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets
3304 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3305 and \fB\-pedantic\fR without gnu-extensions.
3306 .IP "\fB\-Wpointer\-arith\fR" 4
3307 .IX Item "-Wpointer-arith"
3308 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3309 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3310 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3311 to functions.  In \*(C+, warn also when an arithmetic operation involves
3312 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3313 .IP "\fB\-Wtype\-limits\fR" 4
3314 .IX Item "-Wtype-limits"
3315 Warn if a comparison is always true or always false due to the limited
3316 range of the data type, but do not warn for constant expressions.  For
3317 example, warn if an unsigned variable is compared against zero with
3318 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3319 \&\fB\-Wextra\fR.
3320 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3321 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3322 Warn whenever a function call is cast to a non-matching type.
3323 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3324 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3325 .IX Item "-Wc++-compat (C and Objective-C only)"
3326 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3327 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3328 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3329 .IP "\fB\-Wc++0x\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3330 .IX Item "-Wc++0x-compat ( and Objective- only)"
3331 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998 and
3332 \&\s-1ISO\s0 \*(C+ 200x, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that will become keywords
3333 in \s-1ISO\s0 \*(C+ 200x.  This warning is enabled by \fB\-Wall\fR.
3334 .IP "\fB\-Wcast\-qual\fR" 4
3335 .IX Item "-Wcast-qual"
3336 Warn whenever a pointer is cast so as to remove a type qualifier from
3337 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3338 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3339 .IP "\fB\-Wcast\-align\fR" 4
3340 .IX Item "-Wcast-align"
3341 Warn whenever a pointer is cast such that the required alignment of the
3342 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3343 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3344 two\- or four-byte boundaries.
3345 .IP "\fB\-Wwrite\-strings\fR" 4
3346 .IX Item "-Wwrite-strings"
3347 When compiling C, give string constants the type \f(CW\*(C`const
3348 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3349 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3350 warnings will help you find at compile time code that can try to write
3351 into a string constant, but only if you have been very careful about
3352 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3353 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3354 these warnings.
3355 .Sp
3356 When compiling \*(C+, warn about the deprecated conversion from string
3357 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3358 programs.
3359 .IP "\fB\-Wclobbered\fR" 4
3360 .IX Item "-Wclobbered"
3361 Warn for variables that might be changed by \fBlongjmp\fR or
3362 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3363 .IP "\fB\-Wconversion\fR" 4
3364 .IX Item "-Wconversion"
3365 Warn for implicit conversions that may alter a value. This includes
3366 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3367 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3368 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3369 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3370 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3371 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3372 conversions between signed and unsigned integers can be disabled by
3373 using \fB\-Wno\-sign\-conversion\fR.
3374 .Sp
3375 For \*(C+, also warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3376 types; confusing overload resolution for user-defined conversions; and
3377 conversions that will never use a type conversion operator:
3378 conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a reference
3379 to them. Warnings about conversions between signed and unsigned
3380 integers are disabled by default in \*(C+ unless
3381 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3382 .IP "\fB\-Wempty\-body\fR" 4
3383 .IX Item "-Wempty-body"
3384 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3385 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3386 .IP "\fB\-Wenum\-compare\fR (\*(C+ and Objective\-\*(C+ only)" 4
3387 .IX Item "-Wenum-compare ( and Objective- only)"
3388 Warn about a comparison between values of different enum types. This
3389 warning is enabled by default.
3390 .IP "\fB\-Wsign\-compare\fR" 4
3391 .IX Item "-Wsign-compare"
3392 Warn when a comparison between signed and unsigned values could produce
3393 an incorrect result when the signed value is converted to unsigned.
3394 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3395 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3396 .IP "\fB\-Wsign\-conversion\fR" 4
3397 .IX Item "-Wsign-conversion"
3398 Warn for implicit conversions that may change the sign of an integer
3399 value, like assigning a signed integer expression to an unsigned
3400 integer variable. An explicit cast silences the warning. In C, this
3401 option is enabled also by \fB\-Wconversion\fR.
3402 .IP "\fB\-Waddress\fR" 4
3403 .IX Item "-Waddress"
3404 Warn about suspicious uses of memory addresses. These include using
3405 the address of a function in a conditional expression, such as
3406 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3407 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3408 uses typically indicate a programmer error: the address of a function
3409 always evaluates to true, so their use in a conditional usually
3410 indicate that the programmer forgot the parentheses in a function
3411 call; and comparisons against string literals result in unspecified
3412 behavior and are not portable in C, so they usually indicate that the
3413 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3414 \&\fB\-Wall\fR.
3415 .IP "\fB\-Wlogical\-op\fR" 4
3416 .IX Item "-Wlogical-op"
3417 Warn about suspicious uses of logical operators in expressions.
3418 This includes using logical operators in contexts where a
3419 bit-wise operator is likely to be expected.
3420 .IP "\fB\-Waggregate\-return\fR" 4
3421 .IX Item "-Waggregate-return"
3422 Warn if any functions that return structures or unions are defined or
3423 called.  (In languages where you can return an array, this also elicits
3424 a warning.)
3425 .IP "\fB\-Wno\-attributes\fR" 4
3426 .IX Item "-Wno-attributes"
3427 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3428 unrecognized attributes, function attributes applied to variables,
3429 etc.  This will not stop errors for incorrect use of supported
3430 attributes.
3431 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3432 .IX Item "-Wno-builtin-macro-redefined"
3433 Do not warn if certain built-in macros are redefined.  This suppresses
3434 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3435 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3436 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3437 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3438 Warn if a function is declared or defined without specifying the
3439 argument types.  (An old-style function definition is permitted without
3440 a warning if preceded by a declaration which specifies the argument
3441 types.)
3442 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3443 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3444 Warn for obsolescent usages, according to the C Standard, in a
3445 declaration. For example, warn if storage-class specifiers like
3446 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3447 is also enabled by \fB\-Wextra\fR.
3448 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3449 .IX Item "-Wold-style-definition (C and Objective-C only)"
3450 Warn if an old-style function definition is used.  A warning is given
3451 even if there is a previous prototype.
3452 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3453 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3454 A function parameter is declared without a type specifier in K&R\-style
3455 functions:
3456 .Sp
3457 .Vb 1
3458 \&        void foo(bar) { }
3459 .Ve
3460 .Sp
3461 This warning is also enabled by \fB\-Wextra\fR.
3462 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3463 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3464 Warn if a global function is defined without a previous prototype
3465 declaration.  This warning is issued even if the definition itself
3466 provides a prototype.  The aim is to detect global functions that fail
3467 to be declared in header files.
3468 .IP "\fB\-Wmissing\-declarations\fR" 4
3469 .IX Item "-Wmissing-declarations"
3470 Warn if a global function is defined without a previous declaration.
3471 Do so even if the definition itself provides a prototype.
3472 Use this option to detect global functions that are not declared in
3473 header files.  In \*(C+, no warnings are issued for function templates,
3474 or for inline functions, or for functions in anonymous namespaces.
3475 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3476 .IX Item "-Wmissing-field-initializers"
3477 Warn if a structure's initializer has some fields missing.  For
3478 example, the following code would cause such a warning, because
3479 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3480 .Sp
3481 .Vb 2
3482 \&        struct s { int f, g, h; };
3483 \&        struct s x = { 3, 4 };
3484 .Ve
3485 .Sp
3486 This option does not warn about designated initializers, so the following
3487 modification would not trigger a warning:
3488 .Sp
3489 .Vb 2
3490 \&        struct s { int f, g, h; };
3491 \&        struct s x = { .f = 3, .g = 4 };
3492 .Ve
3493 .Sp
3494 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3495 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3496 .IP "\fB\-Wmissing\-noreturn\fR" 4
3497 .IX Item "-Wmissing-noreturn"
3498 Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
3499 Note these are only possible candidates, not absolute ones.  Care should
3500 be taken to manually verify functions actually do not ever return before
3501 adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
3502 bugs could be introduced.  You will not get a warning for \f(CW\*(C`main\*(C'\fR in
3503 hosted C environments.
3504 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3505 .IX Item "-Wmissing-format-attribute"
3506 Warn about function pointers which might be candidates for \f(CW\*(C`format\*(C'\fR
3507 attributes.  Note these are only possible candidates, not absolute ones.
3508 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3509 are used in assignment, initialization, parameter passing or return
3510 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3511 resulting type.  I.e. the left-hand side of the assignment or
3512 initialization, the type of the parameter variable, or the return type
3513 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3514 attribute to avoid the warning.
3515 .Sp
3516 \&\s-1GCC\s0 will also warn about function definitions which might be
3517 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3518 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3519 might be appropriate for any function that calls a function like
3520 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3521 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3522 appropriate may not be detected.
3523 .IP "\fB\-Wno\-multichar\fR" 4
3524 .IX Item "-Wno-multichar"
3525 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3526 Usually they indicate a typo in the user's code, as they have
3527 implementation-defined values, and should not be used in portable code.
3528 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3529 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3530 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3531 different sequences of characters.  However, sometimes when characters
3532 outside the basic \s-1ASCII\s0 character set are used, you can have two
3533 different character sequences that look the same.  To avoid confusion,
3534 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3535 when applied ensure that two sequences that look the same are turned into
3536 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers which
3537 have not been normalized; this option controls that warning.
3538 .Sp
3539 There are four levels of warning that \s-1GCC\s0 supports.  The default is
3540 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier which is
3541 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3542 recommended form for most uses.
3543 .Sp
3544 Unfortunately, there are some characters which \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ allow
3545 in identifiers that when turned into \s-1NFC\s0 aren't allowable as
3546 identifiers.  That is, there's no way to use these symbols in portable
3547 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3548 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3549 It is hoped that future versions of the standards involved will correct
3550 this, which is why this option is not the default.
3551 .Sp
3552 You can switch the warning off for all characters by writing
3553 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
3554 were using some other normalization scheme (like \*(L"D\*(R"), because
3555 otherwise you can easily create bugs that are literally impossible to see.
3556 .Sp
3557 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
3558 in some fonts or display methodologies, especially once formatting has
3559 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
3560 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR which has been
3561 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
3562 normalization scheme to convert all these into a standard form as
3563 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
3564 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
3565 about every identifier that contains the letter O because it might be
3566 confused with the digit 0, and so is not the default, but may be
3567 useful as a local coding convention if the programming environment is
3568 unable to be fixed to display these characters distinctly.
3569 .IP "\fB\-Wno\-deprecated\fR" 4
3570 .IX Item "-Wno-deprecated"
3571 Do not warn about usage of deprecated features.
3572 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
3573 .IX Item "-Wno-deprecated-declarations"
3574 Do not warn about uses of functions,
3575 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
3576 attribute.
3577 .IP "\fB\-Wno\-overflow\fR" 4
3578 .IX Item "-Wno-overflow"
3579 Do not warn about compile-time overflow in constant expressions.
3580 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
3581 .IX Item "-Woverride-init (C and Objective-C only)"
3582 Warn if an initialized field without side effects is overridden when
3583 using designated initializers.
3584 .Sp
3585 This warning is included in \fB\-Wextra\fR.  To get other
3586 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
3587 \&\-Wno\-override\-init\fR.
3588 .IP "\fB\-Wpacked\fR" 4
3589 .IX Item "-Wpacked"
3590 Warn if a structure is given the packed attribute, but the packed
3591 attribute has no effect on the layout or size of the structure.
3592 Such structures may be mis-aligned for little benefit.  For
3593 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
3594 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
3595 have the packed attribute:
3596 .Sp
3597 .Vb 8
3598 \&        struct foo {
3599 \&          int x;
3600 \&          char a, b, c, d;
3601 \&        } _\|_attribute_\|_((packed));
3602 \&        struct bar {
3603 \&          char z;
3604 \&          struct foo f;
3605 \&        };
3606 .Ve
3607 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
3608 .IX Item "-Wpacked-bitfield-compat"
3609 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
3610 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
3611 the change can lead to differences in the structure layout.  \s-1GCC\s0
3612 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
3613 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
3614 and \f(CW\*(C`b\*(C'\fR in this structure:
3615 .Sp
3616 .Vb 5
3617 \&        struct foo
3618 \&        {
3619 \&          char a:4;
3620 \&          char b:8;
3621 \&        } _\|_attribute_\|_ ((packed));
3622 .Ve
3623 .Sp
3624 This warning is enabled by default.  Use
3625 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
3626 .IP "\fB\-Wpadded\fR" 4
3627 .IX Item "-Wpadded"
3628 Warn if padding is included in a structure, either to align an element
3629 of the structure or to align the whole structure.  Sometimes when this
3630 happens it is possible to rearrange the fields of the structure to
3631 reduce the padding and so make the structure smaller.
3632 .IP "\fB\-Wredundant\-decls\fR" 4
3633 .IX Item "-Wredundant-decls"
3634 Warn if anything is declared more than once in the same scope, even in
3635 cases where multiple declaration is valid and changes nothing.
3636 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
3637 .IX Item "-Wnested-externs (C and Objective-C only)"
3638 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
3639 .IP "\fB\-Wunreachable\-code\fR" 4
3640 .IX Item "-Wunreachable-code"
3641 Warn if the compiler detects that code will never be executed.
3642 .Sp
3643 This option is intended to warn when the compiler detects that at
3644 least a whole line of source code will never be executed, because
3645 some condition is never satisfied or because it is after a
3646 procedure that never returns.
3647 .Sp
3648 It is possible for this option to produce a warning even though there
3649 are circumstances under which part of the affected line can be executed,
3650 so care should be taken when removing apparently-unreachable code.
3651 .Sp
3652 For instance, when a function is inlined, a warning may mean that the
3653 line is unreachable in only one inlined copy of the function.
3654 .Sp
3655 This option is not made part of \fB\-Wall\fR because in a debugging
3656 version of a program there is often substantial code which checks
3657 correct functioning of the program and is, hopefully, unreachable
3658 because the program does work.  Another common use of unreachable
3659 code is to provide behavior which is selectable at compile-time.
3660 .IP "\fB\-Winline\fR" 4
3661 .IX Item "-Winline"
3662 Warn if a function can not be inlined and it was declared as inline.
3663 Even with this option, the compiler will not warn about failures to
3664 inline functions declared in system headers.
3665 .Sp
3666 The compiler uses a variety of heuristics to determine whether or not
3667 to inline a function.  For example, the compiler takes into account
3668 the size of the function being inlined and the amount of inlining
3669 that has already been done in the current function.  Therefore,
3670 seemingly insignificant changes in the source program can cause the
3671 warnings produced by \fB\-Winline\fR to appear or disappear.
3672 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
3673 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
3674 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
3675 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
3676 to a non-POD type is undefined.  In existing \*(C+ implementations,
3677 however, \fBoffsetof\fR typically gives meaningful results even when
3678 applied to certain kinds of non-POD types. (Such as a simple
3679 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
3680 constructor.)  This flag is for users who are aware that they are
3681 writing nonportable code and who have deliberately chosen to ignore the
3682 warning about it.
3683 .Sp
3684 The restrictions on \fBoffsetof\fR may be relaxed in a future version
3685 of the \*(C+ standard.
3686 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR (C and Objective-C only)" 4
3687 .IX Item "-Wno-int-to-pointer-cast (C and Objective-C only)"
3688 Suppress warnings from casts to pointer type of an integer of a
3689 different size.
3690 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
3691 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
3692 Suppress warnings from casts from a pointer to an integer type of a
3693 different size.
3694 .IP "\fB\-Winvalid\-pch\fR" 4
3695 .IX Item "-Winvalid-pch"
3696 Warn if a precompiled header is found in
3697 the search path but can't be used.
3698 .IP "\fB\-Wlong\-long\fR" 4
3699 .IX Item "-Wlong-long"
3700 Warn if \fBlong long\fR type is used.  This is default.  To inhibit
3701 the warning messages, use \fB\-Wno\-long\-long\fR.  Flags
3702 \&\fB\-Wlong\-long\fR and \fB\-Wno\-long\-long\fR are taken into account
3703 only when \fB\-pedantic\fR flag is used.
3704 .IP "\fB\-Wvariadic\-macros\fR" 4
3705 .IX Item "-Wvariadic-macros"
3706 Warn if variadic macros are used in pedantic \s-1ISO\s0 C90 mode, or the \s-1GNU\s0
3707 alternate syntax when in pedantic \s-1ISO\s0 C99 mode.  This is default.
3708 To inhibit the warning messages, use \fB\-Wno\-variadic\-macros\fR.
3709 .IP "\fB\-Wvla\fR" 4
3710 .IX Item "-Wvla"
3711 Warn if variable length array is used in the code.
3712 \&\fB\-Wno\-vla\fR will prevent the \fB\-pedantic\fR warning of
3713 the variable length array.
3714 .IP "\fB\-Wvolatile\-register\-var\fR" 4
3715 .IX Item "-Wvolatile-register-var"
3716 Warn if a register variable is declared volatile.  The volatile
3717 modifier does not inhibit all optimizations that may eliminate reads
3718 and/or writes to register variables.  This warning is enabled by
3719 \&\fB\-Wall\fR.
3720 .IP "\fB\-Wdisabled\-optimization\fR" 4
3721 .IX Item "-Wdisabled-optimization"
3722 Warn if a requested optimization pass is disabled.  This warning does
3723 not generally indicate that there is anything wrong with your code; it
3724 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
3725 effectively.  Often, the problem is that your code is too big or too
3726 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
3727 itself is likely to take inordinate amounts of time.
3728 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
3729 .IX Item "-Wpointer-sign (C and Objective-C only)"
3730 Warn for pointer argument passing or assignment with different signedness.
3731 This option is only supported for C and Objective-C.  It is implied by
3732 \&\fB\-Wall\fR and by \fB\-pedantic\fR, which can be disabled with
3733 \&\fB\-Wno\-pointer\-sign\fR.
3734 .IP "\fB\-Wstack\-protector\fR" 4
3735 .IX Item "-Wstack-protector"
3736 This option is only active when \fB\-fstack\-protector\fR is active.  It
3737 warns about functions that will not be protected against stack smashing.
3738 .IP "\fB\-Wno\-mudflap\fR" 4
3739 .IX Item "-Wno-mudflap"
3740 Suppress warnings about constructs that cannot be instrumented by
3741 \&\fB\-fmudflap\fR.
3742 .IP "\fB\-Woverlength\-strings\fR" 4
3743 .IX Item "-Woverlength-strings"
3744 Warn about string constants which are longer than the \*(L"minimum
3745 maximum\*(R" length specified in the C standard.  Modern compilers
3746 generally allow string constants which are much longer than the
3747 standard's minimum limit, but very portable programs should avoid
3748 using longer strings.
3749 .Sp
3750 The limit applies \fIafter\fR string constant concatenation, and does
3751 not count the trailing \s-1NUL\s0.  In C89, the limit was 509 characters; in
3752 C99, it was raised to 4095.  \*(C+98 does not specify a normative
3753 minimum maximum, so we do not diagnose overlength strings in \*(C+.
3754 .Sp
3755 This option is implied by \fB\-pedantic\fR, and can be disabled with
3756 \&\fB\-Wno\-overlength\-strings\fR.
3757 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
3758 .IX Subsection "Options for Debugging Your Program or GCC"
3759 \&\s-1GCC\s0 has various special options that are used for debugging
3760 either your program or \s-1GCC:\s0
3761 .IP "\fB\-g\fR" 4
3762 .IX Item "-g"
3763 Produce debugging information in the operating system's native format
3764 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
3765 information.
3766 .Sp
3767 On most systems that use stabs format, \fB\-g\fR enables use of extra
3768 debugging information that only \s-1GDB\s0 can use; this extra information
3769 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
3770 crash or
3771 refuse to read the program.  If you want to control for certain whether
3772 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
3773 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
3774 .Sp
3775 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
3776 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
3777 produce surprising results: some variables you declared may not exist
3778 at all; flow of control may briefly move where you did not expect it;
3779 some statements may not be executed because they compute constant
3780 results or their values were already at hand; some statements may
3781 execute in different places because they were moved out of loops.
3782 .Sp
3783 Nevertheless it proves possible to debug optimized output.  This makes
3784 it reasonable to use the optimizer for programs that might have bugs.
3785 .Sp
3786 The following options are useful when \s-1GCC\s0 is generated with the
3787 capability for more than one debugging format.
3788 .IP "\fB\-ggdb\fR" 4
3789 .IX Item "-ggdb"
3790 Produce debugging information for use by \s-1GDB\s0.  This means to use the
3791 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
3792 if neither of those are supported), including \s-1GDB\s0 extensions if at all
3793 possible.
3794 .IP "\fB\-gstabs\fR" 4
3795 .IX Item "-gstabs"
3796 Produce debugging information in stabs format (if that is supported),
3797 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
3798 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
3799 produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
3800 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
3801 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
3802 .IX Item "-feliminate-unused-debug-symbols"
3803 Produce debugging information in stabs format (if that is supported),
3804 for only symbols that are actually used.
3805 .IP "\fB\-femit\-class\-debug\-always\fR" 4
3806 .IX Item "-femit-class-debug-always"
3807 Instead of emitting debugging information for a \*(C+ class in only one
3808 object file, emit it in all object files using the class.  This option
3809 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
3810 normally emits debugging information for classes because using this
3811 option will increase the size of debugging information by as much as a
3812 factor of two.
3813 .IP "\fB\-gstabs+\fR" 4
3814 .IX Item "-gstabs+"
3815 Produce debugging information in stabs format (if that is supported),
3816 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3817 use of these extensions is likely to make other debuggers crash or
3818 refuse to read the program.
3819 .IP "\fB\-gcoff\fR" 4
3820 .IX Item "-gcoff"
3821 Produce debugging information in \s-1COFF\s0 format (if that is supported).
3822 This is the format used by \s-1SDB\s0 on most System V systems prior to
3823 System V Release 4.
3824 .IP "\fB\-gxcoff\fR" 4
3825 .IX Item "-gxcoff"
3826 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
3827 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
3828 .IP "\fB\-gxcoff+\fR" 4
3829 .IX Item "-gxcoff+"
3830 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
3831 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3832 use of these extensions is likely to make other debuggers crash or
3833 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
3834 assembler (\s-1GAS\s0) to fail with an error.
3835 .IP "\fB\-gdwarf\-2\fR" 4
3836 .IX Item "-gdwarf-2"
3837 Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
3838 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.  With this
3839 option, \s-1GCC\s0 uses features of \s-1DWARF\s0 version 3 when they are useful;
3840 version 3 is upward compatible with version 2, but may still cause
3841 problems for older debuggers.
3842 .IP "\fB\-gvms\fR" 4
3843 .IX Item "-gvms"
3844 Produce debugging information in \s-1VMS\s0 debug format (if that is
3845 supported).  This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
3846 .IP "\fB\-g\fR\fIlevel\fR" 4
3847 .IX Item "-glevel"
3848 .PD 0
3849 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
3850 .IX Item "-ggdblevel"
3851 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
3852 .IX Item "-gstabslevel"
3853 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
3854 .IX Item "-gcofflevel"
3855 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
3856 .IX Item "-gxcofflevel"
3857 .IP "\fB\-gvms\fR\fIlevel\fR" 4
3858 .IX Item "-gvmslevel"
3859 .PD
3860 Request debugging information and also use \fIlevel\fR to specify how
3861 much information.  The default level is 2.
3862 .Sp
3863 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
3864 \&\fB\-g\fR.
3865 .Sp
3866 Level 1 produces minimal information, enough for making backtraces in
3867 parts of the program that you don't plan to debug.  This includes
3868 descriptions of functions and external variables, but no information
3869 about local variables and no line numbers.
3870 .Sp
3871 Level 3 includes extra information, such as all the macro definitions
3872 present in the program.  Some debuggers support macro expansion when
3873 you use \fB\-g3\fR.
3874 .Sp
3875 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
3876 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
3877 debug information in version 1 of the \s-1DWARF\s0 format (which is very
3878 different from version 2), and it would have been too confusing.  That
3879 debug format is long obsolete, but the option cannot be changed now.
3880 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
3881 debug level for \s-1DWARF2\s0.
3882 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
3883 .IX Item "-feliminate-dwarf2-dups"
3884 Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
3885 information about each symbol.  This option only makes sense when
3886 generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
3887 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
3888 .IX Item "-femit-struct-debug-baseonly"
3889 Emit debug information for struct-like types
3890 only when the base name of the compilation source file
3891 matches the base name of file in which the struct was defined.
3892 .Sp
3893 This option substantially reduces the size of debugging information,
3894 but at significant potential loss in type information to the debugger.
3895 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
3896 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3897 .Sp
3898 This option works only with \s-1DWARF\s0 2.
3899 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
3900 .IX Item "-femit-struct-debug-reduced"
3901 Emit debug information for struct-like types
3902 only when the base name of the compilation source file
3903 matches the base name of file in which the type was defined,
3904 unless the struct is a template or defined in a system header.
3905 .Sp
3906 This option significantly reduces the size of debugging information,
3907 with some potential loss in type information to the debugger.
3908 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
3909 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3910 .Sp
3911 This option works only with \s-1DWARF\s0 2.
3912 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
3913 .IX Item "-femit-struct-debug-detailed[=spec-list]"
3914 Specify the struct-like types
3915 for which the compiler will generate debug information.
3916 The intent is to reduce duplicate struct debug information
3917 between different object files within the same program.
3918 .Sp
3919 This option is a detailed version of
3920 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
3921 which will serve for most needs.
3922 .Sp
3923 A specification has the syntax
3924 [\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
3925 .Sp
3926 The optional first word limits the specification to
3927 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
3928 A struct type is used directly when it is the type of a variable, member.
3929 Indirect uses arise through pointers to structs.
3930 That is, when use of an incomplete struct would be legal, the use is indirect.
3931 An example is
3932 \&\fBstruct one direct; struct two * indirect;\fR.
3933 .Sp
3934 The optional second word limits the specification to
3935 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
3936 Generic structs are a bit complicated to explain.
3937 For \*(C+, these are non-explicit specializations of template classes,
3938 or non-template classes within the above.
3939 Other programming languages have generics,
3940 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
3941 .Sp
3942 The third word specifies the source files for those
3943 structs for which the compiler will emit debug information.
3944 The values \fBnone\fR and \fBany\fR have the normal meaning.
3945 The value \fBbase\fR means that
3946 the base of name of the file in which the type declaration appears
3947 must match the base of the name of the main compilation file.
3948 In practice, this means that
3949 types declared in \fIfoo.c\fR and \fIfoo.h\fR will have debug information,
3950 but types declared in other header will not.
3951 The value \fBsys\fR means those types satisfying \fBbase\fR
3952 or declared in system or compiler headers.
3953 .Sp
3954 You may need to experiment to determine the best settings for your application.
3955 .Sp
3956 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
3957 .Sp
3958 This option works only with \s-1DWARF\s0 2.
3959 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
3960 .IX Item "-fno-merge-debug-strings"
3961 Direct the linker to not merge together strings in the debugging
3962 information which are identical in different object files.  Merging is
3963 not supported by all assemblers or linkers.  Merging decreases the size
3964 of the debug information in the output file at the cost of increasing
3965 link processing time.  Merging is enabled by default.
3966 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
3967 .IX Item "-fdebug-prefix-map=old=new"
3968 When compiling files in directory \fI\fIold\fI\fR, record debugging
3969 information describing them as in \fI\fInew\fI\fR instead.
3970 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
3971 .IX Item "-fno-dwarf2-cfi-asm"
3972 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
3973 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
3974 .IP "\fB\-p\fR" 4
3975 .IX Item "-p"
3976 Generate extra code to write profile information suitable for the
3977 analysis program \fBprof\fR.  You must use this option when compiling
3978 the source files you want data about, and you must also use it when
3979 linking.
3980 .IP "\fB\-pg\fR" 4
3981 .IX Item "-pg"
3982 Generate extra code to write profile information suitable for the
3983 analysis program \fBgprof\fR.  You must use this option when compiling
3984 the source files you want data about, and you must also use it when
3985 linking.
3986 .IP "\fB\-Q\fR" 4
3987 .IX Item "-Q"
3988 Makes the compiler print out each function name as it is compiled, and
3989 print some statistics about each pass when it finishes.
3990 .IP "\fB\-ftime\-report\fR" 4
3991 .IX Item "-ftime-report"
3992 Makes the compiler print some statistics about the time consumed by each
3993 pass when it finishes.
3994 .IP "\fB\-fmem\-report\fR" 4
3995 .IX Item "-fmem-report"
3996 Makes the compiler print some statistics about permanent memory
3997 allocation when it finishes.
3998 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
3999 .IX Item "-fpre-ipa-mem-report"
4000 .PD 0
4001 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
4002 .IX Item "-fpost-ipa-mem-report"
4003 .PD
4004 Makes the compiler print some statistics about permanent memory
4005 allocation before or after interprocedural optimization.
4006 .IP "\fB\-fprofile\-arcs\fR" 4
4007 .IX Item "-fprofile-arcs"
4008 Add code so that program flow \fIarcs\fR are instrumented.  During
4009 execution the program records how many times each branch and call is
4010 executed and how many times it is taken or returns.  When the compiled
4011 program exits it saves this data to a file called
4012 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
4013 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
4014 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
4015 \&\fIauxname\fR is generated from the name of the output file, if
4016 explicitly specified and it is not the final executable, otherwise it is
4017 the basename of the source file.  In both cases any suffix is removed
4018 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
4019 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
4020 .IP "\fB\-\-coverage\fR" 4
4021 .IX Item "--coverage"
4022 This option is used to compile and link code instrumented for coverage
4023 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
4024 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
4025 linking).  See the documentation for those options for more details.
4026 .RS 4
4027 .IP "\(bu" 4
4028 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
4029 and code generation options.  For test coverage analysis, use the
4030 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
4031 every source file in a program.
4032 .IP "\(bu" 4
4033 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
4034 (the latter implies the former).
4035 .IP "\(bu" 4
4036 Run the program on a representative workload to generate the arc profile
4037 information.  This may be repeated any number of times.  You can run
4038 concurrent instances of your program, and provided that the file system
4039 supports locking, the data files will be correctly updated.  Also
4040 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
4041 will not happen).
4042 .IP "\(bu" 4
4043 For profile-directed optimizations, compile the source files again with
4044 the same optimization and code generation options plus
4045 \&\fB\-fbranch\-probabilities\fR.
4046 .IP "\(bu" 4
4047 For test coverage analysis, use \fBgcov\fR to produce human readable
4048 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
4049 \&\fBgcov\fR documentation for further information.
4050 .RE
4051 .RS 4
4052 .Sp
4053 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
4054 creates a program flow graph, then finds a spanning tree for the graph.
4055 Only arcs that are not on the spanning tree have to be instrumented: the
4056 compiler adds code to count the number of times that these arcs are
4057 executed.  When an arc is the only exit or only entrance to a block, the
4058 instrumentation code can be added to the block; otherwise, a new basic
4059 block must be created to hold the instrumentation code.
4060 .RE
4061 .IP "\fB\-ftest\-coverage\fR" 4
4062 .IX Item "-ftest-coverage"
4063 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
4064 show program coverage.  Each source file's note file is called
4065 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
4066 above for a description of \fIauxname\fR and instructions on how to
4067 generate test coverage data.  Coverage data will match the source files
4068 more closely, if you do not optimize.
4069 .IP "\fB\-fdbg\-cnt\-list\fR" 4
4070 .IX Item "-fdbg-cnt-list"
4071 Print the name and the counter upperbound for all debug counters.
4072 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
4073 .IX Item "-fdbg-cnt=counter-value-list"
4074 Set the internal debug counter upperbound. \fIcounter-value-list\fR 
4075 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
4076 which sets the upperbound of each debug counter \fIname\fR to \fIvalue\fR.
4077 All debug counters have the initial upperbound of \fI\s-1UINT_MAX\s0\fR,
4078 thus \fIdbg_cnt()\fR returns true always unless the upperbound is set by this option.
4079 e.g. With \-fdbg\-cnt=dce:10,tail_call:0
4080 dbg_cnt(dce) will return true only for first 10 invocations
4081 and dbg_cnt(tail_call) will return false always.
4082 .IP "\fB\-d\fR\fIletters\fR" 4
4083 .IX Item "-dletters"
4084 .PD 0
4085 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
4086 .IX Item "-fdump-rtl-pass"
4087 .PD
4088 Says to make debugging dumps during compilation at times specified by
4089 \&\fIletters\fR.    This is used for debugging the RTL-based passes of the
4090 compiler.  The file names for most of the dumps are made by appending a
4091 pass number and a word to the \fIdumpname\fR.  \fIdumpname\fR is generated
4092 from the name of the output file, if explicitly specified and it is not
4093 an executable, otherwise it is the basename of the source file. These
4094 switches may have different effects when \fB\-E\fR is used for
4095 preprocessing.
4096 .Sp
4097 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
4098 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
4099 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
4100 .RS 4
4101 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
4102 .IX Item "-fdump-rtl-alignments"
4103 Dump after branch alignments have been computed.
4104 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
4105 .IX Item "-fdump-rtl-asmcons"
4106 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4107 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
4108 .IX Item "-fdump-rtl-auto_inc_dec"
4109 Dump after auto-inc-dec discovery.  This pass is only run on
4110 architectures that have auto inc or auto dec instructions.
4111 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
4112 .IX Item "-fdump-rtl-barriers"
4113 Dump after cleaning up the barrier instructions.
4114 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
4115 .IX Item "-fdump-rtl-bbpart"
4116 Dump after partitioning hot and cold basic blocks.
4117 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
4118 .IX Item "-fdump-rtl-bbro"
4119 Dump after block reordering.
4120 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
4121 .IX Item "-fdump-rtl-btl1"
4122 .PD 0
4123 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
4124 .IX Item "-fdump-rtl-btl2"
4125 .PD
4126 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
4127 after the two branch
4128 target load optimization passes.
4129 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
4130 .IX Item "-fdump-rtl-bypass"
4131 Dump after jump bypassing and control flow optimizations.
4132 .IP "\fB\-fdump\-rtl\-combine\fR" 4
4133 .IX Item "-fdump-rtl-combine"
4134 Dump after the \s-1RTL\s0 instruction combination pass.
4135 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
4136 .IX Item "-fdump-rtl-compgotos"
4137 Dump after duplicating the computed gotos.
4138 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
4139 .IX Item "-fdump-rtl-ce1"
4140 .PD 0
4141 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
4142 .IX Item "-fdump-rtl-ce2"
4143 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
4144 .IX Item "-fdump-rtl-ce3"
4145 .PD
4146 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
4147 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
4148 if conversion passes.
4149 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
4150 .IX Item "-fdump-rtl-cprop_hardreg"
4151 Dump after hard register copy propagation.
4152 .IP "\fB\-fdump\-rtl\-csa\fR" 4
4153 .IX Item "-fdump-rtl-csa"
4154 Dump after combining stack adjustments.
4155 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
4156 .IX Item "-fdump-rtl-cse1"
4157 .PD 0
4158 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
4159 .IX Item "-fdump-rtl-cse2"
4160 .PD
4161 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
4162 the two common sub-expression elimination passes.
4163 .IP "\fB\-fdump\-rtl\-dce\fR" 4
4164 .IX Item "-fdump-rtl-dce"
4165 Dump after the standalone dead code elimination passes.
4166 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
4167 .IX Item "-fdump-rtl-dbr"
4168 Dump after delayed branch scheduling.
4169 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
4170 .IX Item "-fdump-rtl-dce1"
4171 .PD 0
4172 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
4173 .IX Item "-fdump-rtl-dce2"
4174 .PD
4175 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
4176 the two dead store elimination passes.
4177 .IP "\fB\-fdump\-rtl\-eh\fR" 4
4178 .IX Item "-fdump-rtl-eh"
4179 Dump after finalization of \s-1EH\s0 handling code.
4180 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
4181 .IX Item "-fdump-rtl-eh_ranges"
4182 Dump after conversion of \s-1EH\s0 handling range regions.
4183 .IP "\fB\-fdump\-rtl\-expand\fR" 4
4184 .IX Item "-fdump-rtl-expand"
4185 Dump after \s-1RTL\s0 generation.
4186 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
4187 .IX Item "-fdump-rtl-fwprop1"
4188 .PD 0
4189 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
4190 .IX Item "-fdump-rtl-fwprop2"
4191 .PD
4192 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
4193 dumping after the two forward propagation passes.
4194 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
4195 .IX Item "-fdump-rtl-gcse1"
4196 .PD 0
4197 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
4198 .IX Item "-fdump-rtl-gcse2"
4199 .PD
4200 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
4201 after global common subexpression elimination.
4202 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
4203 .IX Item "-fdump-rtl-init-regs"
4204 Dump after the initialization of the registers.
4205 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
4206 .IX Item "-fdump-rtl-initvals"
4207 Dump after the computation of the initial value sets.
4208 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
4209 .IX Item "-fdump-rtl-into_cfglayout"
4210 Dump after converting to cfglayout mode.
4211 .IP "\fB\-fdump\-rtl\-ira\fR" 4
4212 .IX Item "-fdump-rtl-ira"
4213 Dump after iterated register allocation.
4214 .IP "\fB\-fdump\-rtl\-jump\fR" 4
4215 .IX Item "-fdump-rtl-jump"
4216 Dump after the second jump optimization.
4217 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
4218 .IX Item "-fdump-rtl-loop2"
4219 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
4220 loop optimization passes.
4221 .IP "\fB\-fdump\-rtl\-mach\fR" 4
4222 .IX Item "-fdump-rtl-mach"
4223 Dump after performing the machine dependent reorganization pass, if that
4224 pass exists.
4225 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
4226 .IX Item "-fdump-rtl-mode_sw"
4227 Dump after removing redundant mode switches.
4228 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
4229 .IX Item "-fdump-rtl-rnreg"
4230 Dump after register renumbering.
4231 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
4232 .IX Item "-fdump-rtl-outof_cfglayout"
4233 Dump after converting from cfglayout mode.
4234 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
4235 .IX Item "-fdump-rtl-peephole2"
4236 Dump after the peephole pass.
4237 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
4238 .IX Item "-fdump-rtl-postreload"
4239 Dump after post-reload optimizations.
4240 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
4241 .IX Item "-fdump-rtl-pro_and_epilogue"
4242 Dump after generating the function pro and epilogues.
4243 .IP "\fB\-fdump\-rtl\-regmove\fR" 4
4244 .IX Item "-fdump-rtl-regmove"
4245 Dump after the register move pass.
4246 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
4247 .IX Item "-fdump-rtl-sched1"
4248 .PD 0
4249 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
4250 .IX Item "-fdump-rtl-sched2"
4251 .PD
4252 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
4253 after the basic block scheduling passes.
4254 .IP "\fB\-fdump\-rtl\-see\fR" 4
4255 .IX Item "-fdump-rtl-see"
4256 Dump after sign extension elimination.
4257 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
4258 .IX Item "-fdump-rtl-seqabstr"
4259 Dump after common sequence discovery.
4260 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
4261 .IX Item "-fdump-rtl-shorten"
4262 Dump after shortening branches.
4263 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
4264 .IX Item "-fdump-rtl-sibling"
4265 Dump after sibling call optimizations.
4266 .IP "\fB\-fdump\-rtl\-split1\fR" 4
4267 .IX Item "-fdump-rtl-split1"
4268 .PD 0
4269 .IP "\fB\-fdump\-rtl\-split2\fR" 4
4270 .IX Item "-fdump-rtl-split2"
4271 .IP "\fB\-fdump\-rtl\-split3\fR" 4
4272 .IX Item "-fdump-rtl-split3"
4273 .IP "\fB\-fdump\-rtl\-split4\fR" 4
4274 .IX Item "-fdump-rtl-split4"
4275 .IP "\fB\-fdump\-rtl\-split5\fR" 4
4276 .IX Item "-fdump-rtl-split5"
4277 .PD
4278 \&\fB\-fdump\-rtl\-split1\fR, \fB\-fdump\-rtl\-split2\fR,
4279 \&\fB\-fdump\-rtl\-split3\fR, \fB\-fdump\-rtl\-split4\fR and
4280 \&\fB\-fdump\-rtl\-split5\fR enable dumping after five rounds of
4281 instruction splitting.
4282 .IP "\fB\-fdump\-rtl\-sms\fR" 4
4283 .IX Item "-fdump-rtl-sms"
4284 Dump after modulo scheduling.  This pass is only run on some
4285 architectures.
4286 .IP "\fB\-fdump\-rtl\-stack\fR" 4
4287 .IX Item "-fdump-rtl-stack"
4288 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
4289 x87's stack-like registers.  This pass is only run on x86 variants.
4290 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
4291 .IX Item "-fdump-rtl-subreg1"
4292 .PD 0
4293 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
4294 .IX Item "-fdump-rtl-subreg2"
4295 .PD
4296 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
4297 the two subreg expansion passes.
4298 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
4299 .IX Item "-fdump-rtl-unshare"
4300 Dump after all rtl has been unshared.
4301 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
4302 .IX Item "-fdump-rtl-vartrack"
4303 Dump after variable tracking.
4304 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
4305 .IX Item "-fdump-rtl-vregs"
4306 Dump after converting virtual registers to hard registers.
4307 .IP "\fB\-fdump\-rtl\-web\fR" 4
4308 .IX Item "-fdump-rtl-web"
4309 Dump after live range splitting.
4310 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
4311 .IX Item "-fdump-rtl-regclass"
4312 .PD 0
4313 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
4314 .IX Item "-fdump-rtl-subregs_of_mode_init"
4315 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
4316 .IX Item "-fdump-rtl-subregs_of_mode_finish"
4317 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
4318 .IX Item "-fdump-rtl-dfinit"
4319 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
4320 .IX Item "-fdump-rtl-dfinish"
4321 .PD
4322 These dumps are defined but always produce empty files.
4323 .IP "\fB\-fdump\-rtl\-all\fR" 4
4324 .IX Item "-fdump-rtl-all"
4325 Produce all the dumps listed above.
4326 .IP "\fB\-dA\fR" 4
4327 .IX Item "-dA"
4328 Annotate the assembler output with miscellaneous debugging information.
4329 .IP "\fB\-dD\fR" 4
4330 .IX Item "-dD"
4331 Dump all macro definitions, at the end of preprocessing, in addition to
4332 normal output.
4333 .IP "\fB\-dH\fR" 4
4334 .IX Item "-dH"
4335 Produce a core dump whenever an error occurs.
4336 .IP "\fB\-dm\fR" 4
4337 .IX Item "-dm"
4338 Print statistics on memory usage, at the end of the run, to
4339 standard error.
4340 .IP "\fB\-dp\fR" 4
4341 .IX Item "-dp"
4342 Annotate the assembler output with a comment indicating which
4343 pattern and alternative was used.  The length of each instruction is
4344 also printed.
4345 .IP "\fB\-dP\fR" 4
4346 .IX Item "-dP"
4347 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
4348 Also turns on \fB\-dp\fR annotation.
4349 .IP "\fB\-dv\fR" 4
4350 .IX Item "-dv"
4351 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
4352 dump a representation of the control flow graph suitable for viewing with \s-1VCG\s0
4353 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
4354 .IP "\fB\-dx\fR" 4
4355 .IX Item "-dx"
4356 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
4357 with \fB\-fdump\-rtl\-expand\fR.
4358 .IP "\fB\-dy\fR" 4
4359 .IX Item "-dy"
4360 Dump debugging information during parsing, to standard error.
4361 .RE
4362 .RS 4
4363 .RE
4364 .IP "\fB\-fdump\-noaddr\fR" 4
4365 .IX Item "-fdump-noaddr"
4366 When doing debugging dumps, suppress address output.  This makes it more
4367 feasible to use diff on debugging dumps for compiler invocations with
4368 different compiler binaries and/or different
4369 text / bss / data / heap / stack / dso start locations.
4370 .IP "\fB\-fdump\-unnumbered\fR" 4
4371 .IX Item "-fdump-unnumbered"
4372 When doing debugging dumps, suppress instruction numbers and address output.
4373 This makes it more feasible to use diff on debugging dumps for compiler
4374 invocations with different options, in particular with and without
4375 \&\fB\-g\fR.
4376 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
4377 .IX Item "-fdump-translation-unit ( only)"
4378 .PD 0
4379 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4380 .IX Item "-fdump-translation-unit-options ( only)"
4381 .PD
4382 Dump a representation of the tree structure for the entire translation
4383 unit to a file.  The file name is made by appending \fI.tu\fR to the
4384 source file name.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
4385 controls the details of the dump as described for the
4386 \&\fB\-fdump\-tree\fR options.
4387 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
4388 .IX Item "-fdump-class-hierarchy ( only)"
4389 .PD 0
4390 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4391 .IX Item "-fdump-class-hierarchy-options ( only)"
4392 .PD
4393 Dump a representation of each class's hierarchy and virtual function
4394 table layout to a file.  The file name is made by appending \fI.class\fR
4395 to the source file name.  If the \fB\-\fR\fIoptions\fR form is used,
4396 \&\fIoptions\fR controls the details of the dump as described for the
4397 \&\fB\-fdump\-tree\fR options.
4398 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
4399 .IX Item "-fdump-ipa-switch"
4400 Control the dumping at various stages of inter-procedural analysis
4401 language tree to a file.  The file name is generated by appending a switch
4402 specific suffix to the source file name.  The following dumps are possible:
4403 .RS 4
4404 .IP "\fBall\fR" 4
4405 .IX Item "all"
4406 Enables all inter-procedural analysis dumps.
4407 .IP "\fBcgraph\fR" 4
4408 .IX Item "cgraph"
4409 Dumps information about call-graph optimization, unused function removal,
4410 and inlining decisions.
4411 .IP "\fBinline\fR" 4
4412 .IX Item "inline"
4413 Dump after function inlining.
4414 .RE
4415 .RS 4
4416 .RE
4417 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
4418 .IX Item "-fdump-statistics-option"
4419 Enable and control dumping of pass statistics in a separate file.  The
4420 file name is generated by appending a suffix ending in \fB.statistics\fR
4421 to the source file name.  If the \fB\-\fR\fIoption\fR form is used,
4422 \&\fB\-stats\fR will cause counters to be summed over the whole compilation unit
4423 while \fB\-details\fR will dump every event as the passes generate them.
4424 The default with no option is to sum counters for each function compiled.
4425 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
4426 .IX Item "-fdump-tree-switch"
4427 .PD 0
4428 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
4429 .IX Item "-fdump-tree-switch-options"
4430 .PD
4431 Control the dumping at various stages of processing the intermediate
4432 language tree to a file.  The file name is generated by appending a switch
4433 specific suffix to the source file name.  If the \fB\-\fR\fIoptions\fR
4434 form is used, \fIoptions\fR is a list of \fB\-\fR separated options that
4435 control the details of the dump.  Not all options are applicable to all
4436 dumps, those which are not meaningful will be ignored.  The following
4437 options are available
4438 .RS 4
4439 .IP "\fBaddress\fR" 4
4440 .IX Item "address"
4441 Print the address of each node.  Usually this is not meaningful as it
4442 changes according to the environment and source file.  Its primary use
4443 is for tying up a dump file with a debug environment.
4444 .IP "\fBslim\fR" 4
4445 .IX Item "slim"
4446 Inhibit dumping of members of a scope or body of a function merely
4447 because that scope has been reached.  Only dump such items when they
4448 are directly reachable by some other path.  When dumping pretty-printed
4449 trees, this option inhibits dumping the bodies of control structures.
4450 .IP "\fBraw\fR" 4
4451 .IX Item "raw"
4452 Print a raw representation of the tree.  By default, trees are
4453 pretty-printed into a C\-like representation.
4454 .IP "\fBdetails\fR" 4
4455 .IX Item "details"
4456 Enable more detailed dumps (not honored by every dump option).
4457 .IP "\fBstats\fR" 4
4458 .IX Item "stats"
4459 Enable dumping various statistics about the pass (not honored by every dump
4460 option).
4461 .IP "\fBblocks\fR" 4
4462 .IX Item "blocks"
4463 Enable showing basic block boundaries (disabled in raw dumps).
4464 .IP "\fBvops\fR" 4
4465 .IX Item "vops"
4466 Enable showing virtual operands for every statement.
4467 .IP "\fBlineno\fR" 4
4468 .IX Item "lineno"
4469 Enable showing line numbers for statements.
4470 .IP "\fBuid\fR" 4
4471 .IX Item "uid"
4472 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
4473 .IP "\fBverbose\fR" 4
4474 .IX Item "verbose"
4475 Enable showing the tree dump for each statement.
4476 .IP "\fBall\fR" 4
4477 .IX Item "all"
4478 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
4479 and \fBlineno\fR.
4480 .RE
4481 .RS 4
4482 .Sp
4483 The following tree dumps are possible:
4484 .IP "\fBoriginal\fR" 4
4485 .IX Item "original"
4486 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
4487 .IP "\fBoptimized\fR" 4
4488 .IX Item "optimized"
4489 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
4490 .IP "\fBgimple\fR" 4
4491 .IX Item "gimple"
4492 Dump each function before and after the gimplification pass to a file.  The
4493 file name is made by appending \fI.gimple\fR to the source file name.
4494 .IP "\fBcfg\fR" 4
4495 .IX Item "cfg"
4496 Dump the control flow graph of each function to a file.  The file name is
4497 made by appending \fI.cfg\fR to the source file name.
4498 .IP "\fBvcg\fR" 4
4499 .IX Item "vcg"
4500 Dump the control flow graph of each function to a file in \s-1VCG\s0 format.  The
4501 file name is made by appending \fI.vcg\fR to the source file name.  Note
4502 that if the file contains more than one function, the generated file cannot
4503 be used directly by \s-1VCG\s0.  You will need to cut and paste each function's
4504 graph into its own separate file first.
4505 .IP "\fBch\fR" 4
4506 .IX Item "ch"
4507 Dump each function after copying loop headers.  The file name is made by
4508 appending \fI.ch\fR to the source file name.
4509 .IP "\fBssa\fR" 4
4510 .IX Item "ssa"
4511 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
4512 \&\fI.ssa\fR to the source file name.
4513 .IP "\fBalias\fR" 4
4514 .IX Item "alias"
4515 Dump aliasing information for each function.  The file name is made by
4516 appending \fI.alias\fR to the source file name.
4517 .IP "\fBccp\fR" 4
4518 .IX Item "ccp"
4519 Dump each function after \s-1CCP\s0.  The file name is made by appending
4520 \&\fI.ccp\fR to the source file name.
4521 .IP "\fBstoreccp\fR" 4
4522 .IX Item "storeccp"
4523 Dump each function after STORE-CCP.  The file name is made by appending
4524 \&\fI.storeccp\fR to the source file name.
4525 .IP "\fBpre\fR" 4
4526 .IX Item "pre"
4527 Dump trees after partial redundancy elimination.  The file name is made
4528 by appending \fI.pre\fR to the source file name.
4529 .IP "\fBfre\fR" 4
4530 .IX Item "fre"
4531 Dump trees after full redundancy elimination.  The file name is made
4532 by appending \fI.fre\fR to the source file name.
4533 .IP "\fBcopyprop\fR" 4
4534 .IX Item "copyprop"
4535 Dump trees after copy propagation.  The file name is made
4536 by appending \fI.copyprop\fR to the source file name.
4537 .IP "\fBstore_copyprop\fR" 4
4538 .IX Item "store_copyprop"
4539 Dump trees after store copy-propagation.  The file name is made
4540 by appending \fI.store_copyprop\fR to the source file name.
4541 .IP "\fBdce\fR" 4
4542 .IX Item "dce"
4543 Dump each function after dead code elimination.  The file name is made by
4544 appending \fI.dce\fR to the source file name.
4545 .IP "\fBmudflap\fR" 4
4546 .IX Item "mudflap"
4547 Dump each function after adding mudflap instrumentation.  The file name is
4548 made by appending \fI.mudflap\fR to the source file name.
4549 .IP "\fBsra\fR" 4
4550 .IX Item "sra"
4551 Dump each function after performing scalar replacement of aggregates.  The
4552 file name is made by appending \fI.sra\fR to the source file name.
4553 .IP "\fBsink\fR" 4
4554 .IX Item "sink"
4555 Dump each function after performing code sinking.  The file name is made
4556 by appending \fI.sink\fR to the source file name.
4557 .IP "\fBdom\fR" 4
4558 .IX Item "dom"
4559 Dump each function after applying dominator tree optimizations.  The file
4560 name is made by appending \fI.dom\fR to the source file name.
4561 .IP "\fBdse\fR" 4
4562 .IX Item "dse"
4563 Dump each function after applying dead store elimination.  The file
4564 name is made by appending \fI.dse\fR to the source file name.
4565 .IP "\fBphiopt\fR" 4
4566 .IX Item "phiopt"
4567 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
4568 name is made by appending \fI.phiopt\fR to the source file name.
4569 .IP "\fBforwprop\fR" 4
4570 .IX Item "forwprop"
4571 Dump each function after forward propagating single use variables.  The file
4572 name is made by appending \fI.forwprop\fR to the source file name.
4573 .IP "\fBcopyrename\fR" 4
4574 .IX Item "copyrename"
4575 Dump each function after applying the copy rename optimization.  The file
4576 name is made by appending \fI.copyrename\fR to the source file name.
4577 .IP "\fBnrv\fR" 4
4578 .IX Item "nrv"
4579 Dump each function after applying the named return value optimization on
4580 generic trees.  The file name is made by appending \fI.nrv\fR to the source
4581 file name.
4582 .IP "\fBvect\fR" 4
4583 .IX Item "vect"
4584 Dump each function after applying vectorization of loops.  The file name is
4585 made by appending \fI.vect\fR to the source file name.
4586 .IP "\fBvrp\fR" 4
4587 .IX Item "vrp"
4588 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
4589 is made by appending \fI.vrp\fR to the source file name.
4590 .IP "\fBall\fR" 4
4591 .IX Item "all"
4592 Enable all the available tree dumps with the flags provided in this option.
4593 .RE
4594 .RS 4
4595 .RE
4596 .IP "\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR" 4
4597 .IX Item "-ftree-vectorizer-verbose=n"
4598 This option controls the amount of debugging output the vectorizer prints.
4599 This information is written to standard error, unless
4600 \&\fB\-fdump\-tree\-all\fR or \fB\-fdump\-tree\-vect\fR is specified,
4601 in which case it is output to the usual dump listing file, \fI.vect\fR.
4602 For \fIn\fR=0 no diagnostic information is reported.
4603 If \fIn\fR=1 the vectorizer reports each loop that got vectorized,
4604 and the total number of loops that got vectorized.
4605 If \fIn\fR=2 the vectorizer also reports non-vectorized loops that passed
4606 the first analysis phase (vect_analyze_loop_form) \- i.e. countable,
4607 inner-most, single-bb, single\-entry/exit loops.  This is the same verbosity
4608 level that \fB\-fdump\-tree\-vect\-stats\fR uses.
4609 Higher verbosity levels mean either more information dumped for each
4610 reported loop, or same amount of information reported for more loops:
4611 If \fIn\fR=3, alignment related information is added to the reports.
4612 If \fIn\fR=4, data-references related information (e.g. memory dependences,
4613 memory access-patterns) is added to the reports.
4614 If \fIn\fR=5, the vectorizer reports also non-vectorized inner-most loops
4615 that did not pass the first analysis phase (i.e., may not be countable, or
4616 may have complicated control-flow).
4617 If \fIn\fR=6, the vectorizer reports also non-vectorized nested loops.
4618 For \fIn\fR=7, all the information the vectorizer generates during its
4619 analysis and transformation is reported.  This is the same verbosity level
4620 that \fB\-fdump\-tree\-vect\-details\fR uses.
4621 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
4622 .IX Item "-frandom-seed=string"
4623 This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
4624 random numbers.  It is used to generate certain symbol names
4625 that have to be different in every compiled file.  It is also used to
4626 place unique stamps in coverage data files and the object files that
4627 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
4628 reproducibly identical object files.
4629 .Sp
4630 The \fIstring\fR should be different for every file you compile.
4631 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
4632 .IX Item "-fsched-verbose=n"
4633 On targets that use instruction scheduling, this option controls the
4634 amount of debugging output the scheduler prints.  This information is
4635 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
4636 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
4637 to the usual dump listing file, \fI.sched\fR or \fI.sched2\fR
4638 respectively.  However for \fIn\fR greater than nine, the output is
4639 always printed to standard error.
4640 .Sp
4641 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
4642 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
4643 For \fIn\fR greater than one, it also output basic block probabilities,
4644 detailed ready list information and unit/insn info.  For \fIn\fR greater
4645 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
4646 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
4647 dependence info.
4648 .IP "\fB\-save\-temps\fR" 4
4649 .IX Item "-save-temps"
4650 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
4651 in the current directory and name them based on the source file.  Thus,
4652 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
4653 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
4654 preprocessed \fIfoo.i\fR output file even though the compiler now
4655 normally uses an integrated preprocessor.
4656 .Sp
4657 When used in combination with the \fB\-x\fR command line option,
4658 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
4659 input source file with the same extension as an intermediate file.
4660 The corresponding intermediate file may be obtained by renaming the
4661 source file before using \fB\-save\-temps\fR.
4662 .IP "\fB\-time\fR" 4
4663 .IX Item "-time"
4664 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
4665 sequence.  For C source files, this is the compiler proper and assembler
4666 (plus the linker if linking is done).  The output looks like this:
4667 .Sp
4668 .Vb 2
4669 \&        # cc1 0.12 0.01
4670 \&        # as 0.00 0.01
4671 .Ve
4672 .Sp
4673 The first number on each line is the \*(L"user time\*(R", that is time spent
4674 executing the program itself.  The second number is \*(L"system time\*(R",
4675 time spent executing operating system routines on behalf of the program.
4676 Both numbers are in seconds.
4677 .IP "\fB\-fvar\-tracking\fR" 4
4678 .IX Item "-fvar-tracking"
4679 Run variable tracking pass.  It computes where variables are stored at each
4680 position in code.  Better debugging information is then generated
4681 (if the debugging information format supports this information).
4682 .Sp
4683 It is enabled by default when compiling with optimization (\fB\-Os\fR,
4684 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
4685 the debug info format supports it.
4686 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
4687 .IX Item "-print-file-name=library"
4688 Print the full absolute name of the library file \fIlibrary\fR that
4689 would be used when linking\-\-\-and don't do anything else.  With this
4690 option, \s-1GCC\s0 does not compile or link anything; it just prints the
4691 file name.
4692 .IP "\fB\-print\-multi\-directory\fR" 4
4693 .IX Item "-print-multi-directory"
4694 Print the directory name corresponding to the multilib selected by any
4695 other switches present in the command line.  This directory is supposed
4696 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
4697 .IP "\fB\-print\-multi\-lib\fR" 4
4698 .IX Item "-print-multi-lib"
4699 Print the mapping from multilib directory names to compiler switches
4700 that enable them.  The directory name is separated from the switches by
4701 \&\fB;\fR, and each switch starts with an \fB@} instead of the
4702 \&\f(CB@samp\fB{\-\fR, without spaces between multiple switches.  This is supposed to
4703 ease shell-processing.
4704 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
4705 .IX Item "-print-prog-name=program"
4706 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
4707 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
4708 .IX Item "-print-libgcc-file-name"
4709 Same as \fB\-print\-file\-name=libgcc.a\fR.
4710 .Sp
4711 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
4712 but you do want to link with \fIlibgcc.a\fR.  You can do
4713 .Sp
4714 .Vb 1
4715 \&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
4716 .Ve
4717 .IP "\fB\-print\-search\-dirs\fR" 4
4718 .IX Item "-print-search-dirs"
4719 Print the name of the configured installation directory and a list of
4720 program and library directories \fBgcc\fR will search\-\-\-and don't do anything else.
4721 .Sp
4722 This is useful when \fBgcc\fR prints the error message
4723 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
4724 To resolve this you either need to put \fIcpp0\fR and the other compiler
4725 components where \fBgcc\fR expects to find them, or you can set the environment
4726 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
4727 Don't forget the trailing \fB/\fR.
4728 .IP "\fB\-print\-sysroot\fR" 4
4729 .IX Item "-print-sysroot"
4730 Print the target sysroot directory that will be used during
4731 compilation.  This is the target sysroot specified either at configure
4732 time or using the \fB\-\-sysroot\fR option, possibly with an extra
4733 suffix that depends on compilation options.  If no target sysroot is
4734 specified, the option prints nothing.
4735 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
4736 .IX Item "-print-sysroot-headers-suffix"
4737 Print the suffix added to the target sysroot when searching for
4738 headers, or give an error if the compiler is not configured with such
4739 a suffix\-\-\-and don't do anything else.
4740 .IP "\fB\-dumpmachine\fR" 4
4741 .IX Item "-dumpmachine"
4742 Print the compiler's target machine (for example,
4743 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
4744 .IP "\fB\-dumpversion\fR" 4
4745 .IX Item "-dumpversion"
4746 Print the compiler version (for example, \fB3.0\fR)\-\-\-and don't do
4747 anything else.
4748 .IP "\fB\-dumpspecs\fR" 4
4749 .IX Item "-dumpspecs"
4750 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
4751 is used when \s-1GCC\s0 itself is being built.)
4752 .IP "\fB\-feliminate\-unused\-debug\-types\fR" 4
4753 .IX Item "-feliminate-unused-debug-types"
4754 Normally, when producing \s-1DWARF2\s0 output, \s-1GCC\s0 will emit debugging
4755 information for all types declared in a compilation
4756 unit, regardless of whether or not they are actually used
4757 in that compilation unit.  Sometimes this is useful, such as
4758 if, in the debugger, you want to cast a value to a type that is
4759 not actually used in your program (but is declared).  More often,
4760 however, this results in a significant amount of wasted space.
4761 With this option, \s-1GCC\s0 will avoid producing debug symbol output
4762 for types that are nowhere used in the source file being compiled.
4763 .Sh "Options That Control Optimization"
4764 .IX Subsection "Options That Control Optimization"
4765 These options control various sorts of optimizations.
4766 .PP
4767 Without any optimization option, the compiler's goal is to reduce the
4768 cost of compilation and to make debugging produce the expected
4769 results.  Statements are independent: if you stop the program with a
4770 breakpoint between statements, you can then assign a new value to any
4771 variable or change the program counter to any other statement in the
4772 function and get exactly the results you would expect from the source
4773 code.
4774 .PP
4775 Turning on optimization flags makes the compiler attempt to improve
4776 the performance and/or code size at the expense of compilation time
4777 and possibly the ability to debug the program.
4778 .PP
4779 The compiler performs optimization based on the knowledge it has of the
4780 program.  Compiling multiple files at once to a single output file mode allows
4781 the compiler to use information gained from all of the files when compiling
4782 each of them.
4783 .PP
4784 Not all optimizations are controlled directly by a flag.  Only
4785 optimizations that have a flag are listed.
4786 .IP "\fB\-O\fR" 4
4787 .IX Item "-O"
4788 .PD 0
4789 .IP "\fB\-O1\fR" 4
4790 .IX Item "-O1"
4791 .PD
4792 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4793 more memory for a large function.
4794 .Sp
4795 With \fB\-O\fR, the compiler tries to reduce code size and execution
4796 time, without performing any optimizations that take a great deal of
4797 compilation time.
4798 .Sp
4799 \&\fB\-O\fR turns on the following optimization flags:
4800 .Sp
4801 \&\fB\-fauto\-inc\-dec 
4802 \&\-fcprop\-registers 
4803 \&\-fdce 
4804 \&\-fdefer\-pop 
4805 \&\-fdelayed\-branch 
4806 \&\-fdse 
4807 \&\-fguess\-branch\-probability 
4808 \&\-fif\-conversion2 
4809 \&\-fif\-conversion 
4810 \&\-finline\-small\-functions 
4811 \&\-fipa\-pure\-const 
4812 \&\-fipa\-reference 
4813 \&\-fmerge\-constants
4814 \&\-fsplit\-wide\-types 
4815 \&\-ftree\-builtin\-call\-dce 
4816 \&\-ftree\-ccp 
4817 \&\-ftree\-ch 
4818 \&\-ftree\-copyrename 
4819 \&\-ftree\-dce 
4820 \&\-ftree\-dominator\-opts 
4821 \&\-ftree\-dse 
4822 \&\-ftree\-fre 
4823 \&\-ftree\-sra 
4824 \&\-ftree\-ter 
4825 \&\-funit\-at\-a\-time\fR
4826 .Sp
4827 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
4828 where doing so does not interfere with debugging.
4829 .IP "\fB\-O2\fR" 4
4830 .IX Item "-O2"
4831 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
4832 that do not involve a space-speed tradeoff.
4833 As compared to \fB\-O\fR, this option increases both compilation time
4834 and the performance of the generated code.
4835 .Sp
4836 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
4837 also turns on the following optimization flags:
4838 \&\fB\-fthread\-jumps 
4839 \&\-falign\-functions  \-falign\-jumps 
4840 \&\-falign\-loops  \-falign\-labels 
4841 \&\-fcaller\-saves 
4842 \&\-fcrossjumping 
4843 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
4844 \&\-fdelete\-null\-pointer\-checks 
4845 \&\-fexpensive\-optimizations 
4846 \&\-fgcse  \-fgcse\-lm  
4847 \&\-findirect\-inlining 
4848 \&\-foptimize\-sibling\-calls 
4849 \&\-fpeephole2 
4850 \&\-fregmove 
4851 \&\-freorder\-blocks  \-freorder\-functions 
4852 \&\-frerun\-cse\-after\-loop  
4853 \&\-fsched\-interblock  \-fsched\-spec 
4854 \&\-fschedule\-insns  \-fschedule\-insns2 
4855 \&\-fstrict\-aliasing \-fstrict\-overflow 
4856 \&\-ftree\-switch\-conversion 
4857 \&\-ftree\-pre 
4858 \&\-ftree\-vrp\fR
4859 .Sp
4860 Please note the warning under \fB\-fgcse\fR about
4861 invoking \fB\-O2\fR on programs that use computed gotos.
4862 .IP "\fB\-O3\fR" 4
4863 .IX Item "-O3"
4864 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
4865 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
4866 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
4867 \&\fB\-fgcse\-after\-reload\fR and \fB\-ftree\-vectorize\fR options.
4868 .IP "\fB\-O0\fR" 4
4869 .IX Item "-O0"
4870 Reduce compilation time and make debugging produce the expected
4871 results.  This is the default.
4872 .IP "\fB\-Os\fR" 4
4873 .IX Item "-Os"
4874 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
4875 do not typically increase code size.  It also performs further
4876 optimizations designed to reduce code size.
4877 .Sp
4878 \&\fB\-Os\fR disables the following optimization flags:
4879 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
4880 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
4881 \&\-fprefetch\-loop\-arrays  \-ftree\-vect\-loop\-version\fR
4882 .Sp
4883 If you use multiple \fB\-O\fR options, with or without level numbers,
4884 the last such option is the one that is effective.
4885 .PP
4886 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
4887 flags.  Most flags have both positive and negative forms; the negative
4888 form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table
4889 below, only one of the forms is listed\-\-\-the one you typically will
4890 use.  You can figure out the other form by either removing \fBno\-\fR
4891 or adding it.
4892 .PP
4893 The following options control specific optimizations.  They are either
4894 activated by \fB\-O\fR options or are related to ones that are.  You
4895 can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
4896 optimizations to be performed is desired.
4897 .IP "\fB\-fno\-default\-inline\fR" 4
4898 .IX Item "-fno-default-inline"
4899 Do not make member functions inline by default merely because they are
4900 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
4901 \&\fB\-O\fR, member functions defined inside class scope are compiled
4902 inline by default; i.e., you don't need to add \fBinline\fR in front of
4903 the member function name.
4904 .IP "\fB\-fno\-defer\-pop\fR" 4
4905 .IX Item "-fno-defer-pop"
4906 Always pop the arguments to each function call as soon as that function
4907 returns.  For machines which must pop arguments after a function call,
4908 the compiler normally lets arguments accumulate on the stack for several
4909 function calls and pops them all at once.
4910 .Sp
4911 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4912 .IP "\fB\-fforward\-propagate\fR" 4
4913 .IX Item "-fforward-propagate"
4914 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
4915 instructions and checks if the result can be simplified.  If loop unrolling
4916 is active, two passes are performed and the second is scheduled after
4917 loop unrolling.
4918 .Sp
4919 This option is enabled by default at optimization levels \fB\-O2\fR,
4920 \&\fB\-O3\fR, \fB\-Os\fR.
4921 .IP "\fB\-fomit\-frame\-pointer\fR" 4
4922 .IX Item "-fomit-frame-pointer"
4923 Don't keep the frame pointer in a register for functions that
4924 don't need one.  This avoids the instructions to save, set up and
4925 restore frame pointers; it also makes an extra register available
4926 in many functions.  \fBIt also makes debugging impossible on
4927 some machines.\fR
4928 .Sp
4929 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
4930 the standard calling sequence automatically handles the frame pointer
4931 and nothing is saved by pretending it doesn't exist.  The
4932 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
4933 whether a target machine supports this flag.
4934 .Sp
4935 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4936 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
4937 .IX Item "-foptimize-sibling-calls"
4938 Optimize sibling and tail recursive calls.
4939 .Sp
4940 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4941 .IP "\fB\-fno\-inline\fR" 4
4942 .IX Item "-fno-inline"
4943 Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword.  Normally this option
4944 is used to keep the compiler from expanding any functions inline.
4945 Note that if you are not optimizing, no functions can be expanded inline.
4946 .IP "\fB\-finline\-small\-functions\fR" 4
4947 .IX Item "-finline-small-functions"
4948 Integrate functions into their callers when their body is smaller than expected
4949 function call code (so overall size of program gets smaller).  The compiler
4950 heuristically decides which functions are simple enough to be worth integrating
4951 in this way.
4952 .Sp
4953 Enabled at level \fB\-O2\fR.
4954 .IP "\fB\-findirect\-inlining\fR" 4
4955 .IX Item "-findirect-inlining"
4956 Inline also indirect calls that are discovered to be known at compile
4957 time thanks to previous inlining.  This option has any effect only
4958 when inlining itself is turned on by the \fB\-finline\-functions\fR
4959 or \fB\-finline\-small\-functions\fR options.
4960 .Sp
4961 Enabled at level \fB\-O2\fR.
4962 .IP "\fB\-finline\-functions\fR" 4
4963 .IX Item "-finline-functions"
4964 Integrate all simple functions into their callers.  The compiler
4965 heuristically decides which functions are simple enough to be worth
4966 integrating in this way.
4967 .Sp
4968 If all calls to a given function are integrated, and the function is
4969 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
4970 assembler code in its own right.
4971 .Sp
4972 Enabled at level \fB\-O3\fR.
4973 .IP "\fB\-finline\-functions\-called\-once\fR" 4
4974 .IX Item "-finline-functions-called-once"
4975 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
4976 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
4977 function is integrated, then the function is not output as assembler code
4978 in its own right.
4979 .Sp
4980 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
4981 .IP "\fB\-fearly\-inlining\fR" 4
4982 .IX Item "-fearly-inlining"
4983 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
4984 smaller than the function call overhead early before doing
4985 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
4986 makes profiling significantly cheaper and usually inlining faster on programs
4987 having large chains of nested wrapper functions.
4988 .Sp
4989 Enabled by default.
4990 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
4991 .IX Item "-finline-limit=n"
4992 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
4993 allows coarse control of this limit.  \fIn\fR is the size of functions that
4994 can be inlined in number of pseudo instructions.
4995 .Sp
4996 Inlining is actually controlled by a number of parameters, which may be
4997 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
4998 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
4999 as follows:
5000 .RS 4
5001 .IP "\fBmax-inline-insns-single\fR" 4
5002 .IX Item "max-inline-insns-single"
5003 is set to \fIn\fR/2.
5004 .IP "\fBmax-inline-insns-auto\fR" 4
5005 .IX Item "max-inline-insns-auto"
5006 is set to \fIn\fR/2.
5007 .RE
5008 .RS 4
5009 .Sp
5010 See below for a documentation of the individual
5011 parameters controlling inlining and for the defaults of these parameters.
5012 .Sp
5013 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
5014 in default behavior.
5015 .Sp
5016 \&\fINote:\fR pseudo instruction represents, in this particular context, an
5017 abstract measurement of function's size.  In no way does it represent a count
5018 of assembly instructions and as such its exact meaning might change from one
5019 release to an another.
5020 .RE
5021 .IP "\fB\-fkeep\-inline\-functions\fR" 4
5022 .IX Item "-fkeep-inline-functions"
5023 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
5024 into the object file, even if the function has been inlined into all
5025 of its callers.  This switch does not affect functions using the
5026 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C89.  In \*(C+, emit any and all
5027 inline functions into the object file.
5028 .IP "\fB\-fkeep\-static\-consts\fR" 4
5029 .IX Item "-fkeep-static-consts"
5030 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
5031 on, even if the variables aren't referenced.
5032 .Sp
5033 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
5034 check if the variable was referenced, regardless of whether or not
5035 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
5036 .IP "\fB\-fmerge\-constants\fR" 4
5037 .IX Item "-fmerge-constants"
5038 Attempt to merge identical constants (string constants and floating point
5039 constants) across compilation units.
5040 .Sp
5041 This option is the default for optimized compilation if the assembler and
5042 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
5043 behavior.
5044 .Sp
5045 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5046 .IP "\fB\-fmerge\-all\-constants\fR" 4
5047 .IX Item "-fmerge-all-constants"
5048 Attempt to merge identical constants and identical variables.
5049 .Sp
5050 This option implies \fB\-fmerge\-constants\fR.  In addition to
5051 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
5052 arrays or initialized constant variables with integral or floating point
5053 types.  Languages like C or \*(C+ require each variable, including multiple
5054 instances of the same variable in recursive calls, to have distinct locations,
5055 so using this option will result in non-conforming
5056 behavior.
5057 .IP "\fB\-fmodulo\-sched\fR" 4
5058 .IX Item "-fmodulo-sched"
5059 Perform swing modulo scheduling immediately before the first scheduling
5060 pass.  This pass looks at innermost loops and reorders their
5061 instructions by overlapping different iterations.
5062 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
5063 .IX Item "-fmodulo-sched-allow-regmoves"
5064 Perform more aggressive \s-1SMS\s0 based modulo scheduling with register moves
5065 allowed.  By setting this flag certain anti-dependences edges will be
5066 deleted which will trigger the generation of reg-moves based on the
5067 life-range analysis.  This option is effective only with
5068 \&\fB\-fmodulo\-sched\fR enabled.
5069 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
5070 .IX Item "-fno-branch-count-reg"
5071 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
5072 but instead generate a sequence of instructions that decrement a
5073 register, compare it against zero, then branch based upon the result.
5074 This option is only meaningful on architectures that support such
5075 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
5076 .Sp
5077 The default is \fB\-fbranch\-count\-reg\fR.
5078 .IP "\fB\-fno\-function\-cse\fR" 4
5079 .IX Item "-fno-function-cse"
5080 Do not put function addresses in registers; make each instruction that
5081 calls a constant function contain the function's address explicitly.
5082 .Sp
5083 This option results in less efficient code, but some strange hacks
5084 that alter the assembler output may be confused by the optimizations
5085 performed when this option is not used.
5086 .Sp
5087 The default is \fB\-ffunction\-cse\fR
5088 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
5089 .IX Item "-fno-zero-initialized-in-bss"
5090 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
5091 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
5092 code.
5093 .Sp
5094 This option turns off this behavior because some programs explicitly
5095 rely on variables going to the data section.  E.g., so that the
5096 resulting executable can find the beginning of that section and/or make
5097 assumptions based on that.
5098 .Sp
5099 The default is \fB\-fzero\-initialized\-in\-bss\fR.
5100 .IP "\fB\-fmudflap \-fmudflapth \-fmudflapir\fR" 4
5101 .IX Item "-fmudflap -fmudflapth -fmudflapir"
5102 For front-ends that support it (C and \*(C+), instrument all risky
5103 pointer/array dereferencing operations, some standard library
5104 string/heap functions, and some other associated constructs with
5105 range/validity tests.  Modules so instrumented should be immune to
5106 buffer overflows, invalid heap use, and some other classes of C/\*(C+
5107 programming errors.  The instrumentation relies on a separate runtime
5108 library (\fIlibmudflap\fR), which will be linked into a program if
5109 \&\fB\-fmudflap\fR is given at link time.  Run-time behavior of the
5110 instrumented program is controlled by the \fB\s-1MUDFLAP_OPTIONS\s0\fR
5111 environment variable.  See \f(CW\*(C`env MUDFLAP_OPTIONS=\-help a.out\*(C'\fR
5112 for its options.
5113 .Sp
5114 Use \fB\-fmudflapth\fR instead of \fB\-fmudflap\fR to compile and to
5115 link if your program is multi-threaded.  Use \fB\-fmudflapir\fR, in
5116 addition to \fB\-fmudflap\fR or \fB\-fmudflapth\fR, if
5117 instrumentation should ignore pointer reads.  This produces less
5118 instrumentation (and therefore faster execution) and still provides
5119 some protection against outright memory corrupting writes, but allows
5120 erroneously read data to propagate within a program.
5121 .IP "\fB\-fthread\-jumps\fR" 4
5122 .IX Item "-fthread-jumps"
5123 Perform optimizations where we check to see if a jump branches to a
5124 location where another comparison subsumed by the first is found.  If
5125 so, the first branch is redirected to either the destination of the
5126 second branch or a point immediately following it, depending on whether
5127 the condition is known to be true or false.
5128 .Sp
5129 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5130 .IP "\fB\-fsplit\-wide\-types\fR" 4
5131 .IX Item "-fsplit-wide-types"
5132 When using a type that occupies multiple registers, such as \f(CW\*(C`long
5133 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
5134 independently.  This normally generates better code for those types,
5135 but may make debugging more difficult.
5136 .Sp
5137 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
5138 \&\fB\-Os\fR.
5139 .IP "\fB\-fcse\-follow\-jumps\fR" 4
5140 .IX Item "-fcse-follow-jumps"
5141 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
5142 when the target of the jump is not reached by any other path.  For
5143 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
5144 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
5145 tested is false.
5146 .Sp
5147 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5148 .IP "\fB\-fcse\-skip\-blocks\fR" 4
5149 .IX Item "-fcse-skip-blocks"
5150 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
5151 follow jumps which conditionally skip over blocks.  When \s-1CSE\s0
5152 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
5153 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
5154 body of the \f(CW\*(C`if\*(C'\fR.
5155 .Sp
5156 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5157 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
5158 .IX Item "-frerun-cse-after-loop"
5159 Re-run common subexpression elimination after loop optimizations has been
5160 performed.
5161 .Sp
5162 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5163 .IP "\fB\-fgcse\fR" 4
5164 .IX Item "-fgcse"
5165 Perform a global common subexpression elimination pass.
5166 This pass also performs global constant and copy propagation.
5167 .Sp
5168 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
5169 extension, you may get better runtime performance if you disable
5170 the global common subexpression elimination pass by adding
5171 \&\fB\-fno\-gcse\fR to the command line.
5172 .Sp
5173 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5174 .IP "\fB\-fgcse\-lm\fR" 4
5175 .IX Item "-fgcse-lm"
5176 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination will
5177 attempt to move loads which are only killed by stores into themselves.  This
5178 allows a loop containing a load/store sequence to be changed to a load outside
5179 the loop, and a copy/store within the loop.
5180 .Sp
5181 Enabled by default when gcse is enabled.
5182 .IP "\fB\-fgcse\-sm\fR" 4
5183 .IX Item "-fgcse-sm"
5184 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
5185 global common subexpression elimination.  This pass will attempt to move
5186 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
5187 loops containing a load/store sequence can be changed to a load before
5188 the loop and a store after the loop.
5189 .Sp
5190 Not enabled at any optimization level.
5191 .IP "\fB\-fgcse\-las\fR" 4
5192 .IX Item "-fgcse-las"
5193 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
5194 elimination pass eliminates redundant loads that come after stores to the
5195 same memory location (both partial and full redundancies).
5196 .Sp
5197 Not enabled at any optimization level.
5198 .IP "\fB\-fgcse\-after\-reload\fR" 4
5199 .IX Item "-fgcse-after-reload"
5200 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
5201 pass is performed after reload.  The purpose of this pass is to cleanup
5202 redundant spilling.
5203 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
5204 .IX Item "-funsafe-loop-optimizations"
5205 If given, the loop optimizer will assume that loop indices do not
5206 overflow, and that the loops with nontrivial exit condition are not
5207 infinite.  This enables a wider range of loop optimizations even if
5208 the loop optimizer itself cannot prove that these assumptions are valid.
5209 Using \fB\-Wunsafe\-loop\-optimizations\fR, the compiler will warn you
5210 if it finds this kind of loop.
5211 .IP "\fB\-fcrossjumping\fR" 4
5212 .IX Item "-fcrossjumping"
5213 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
5214 resulting code may or may not perform better than without cross-jumping.
5215 .Sp
5216 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5217 .IP "\fB\-fauto\-inc\-dec\fR" 4
5218 .IX Item "-fauto-inc-dec"
5219 Combine increments or decrements of addresses with memory accesses.
5220 This pass is always skipped on architectures that do not have
5221 instructions to support this.  Enabled by default at \fB\-O\fR and
5222 higher on architectures that support this.
5223 .IP "\fB\-fdce\fR" 4
5224 .IX Item "-fdce"
5225 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
5226 Enabled by default at \fB\-O\fR and higher.
5227 .IP "\fB\-fdse\fR" 4
5228 .IX Item "-fdse"
5229 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
5230 Enabled by default at \fB\-O\fR and higher.
5231 .IP "\fB\-fif\-conversion\fR" 4
5232 .IX Item "-fif-conversion"
5233 Attempt to transform conditional jumps into branch-less equivalents.  This
5234 include use of conditional moves, min, max, set flags and abs instructions, and
5235 some tricks doable by standard arithmetics.  The use of conditional execution
5236 on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
5237 .Sp
5238 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5239 .IP "\fB\-fif\-conversion2\fR" 4
5240 .IX Item "-fif-conversion2"
5241 Use conditional execution (where available) to transform conditional jumps into
5242 branch-less equivalents.
5243 .Sp
5244 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5245 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
5246 .IX Item "-fdelete-null-pointer-checks"
5247 Use global dataflow analysis to identify and eliminate useless checks
5248 for null pointers.  The compiler assumes that dereferencing a null
5249 pointer would have halted the program.  If a pointer is checked after
5250 it has already been dereferenced, it cannot be null.
5251 .Sp
5252 In some environments, this assumption is not true, and programs can
5253 safely dereference null pointers.  Use
5254 \&\fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
5255 for programs which depend on that behavior.
5256 .Sp
5257 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5258 .IP "\fB\-fexpensive\-optimizations\fR" 4
5259 .IX Item "-fexpensive-optimizations"
5260 Perform a number of minor optimizations that are relatively expensive.
5261 .Sp
5262 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5263 .IP "\fB\-foptimize\-register\-move\fR" 4
5264 .IX Item "-foptimize-register-move"
5265 .PD 0
5266 .IP "\fB\-fregmove\fR" 4
5267 .IX Item "-fregmove"
5268 .PD
5269 Attempt to reassign register numbers in move instructions and as
5270 operands of other simple instructions in order to maximize the amount of
5271 register tying.  This is especially helpful on machines with two-operand
5272 instructions.
5273 .Sp
5274 Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
5275 optimization.
5276 .Sp
5277 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5278 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
5279 .IX Item "-fira-algorithm=algorithm"
5280 Use specified coloring algorithm for the integrated register
5281 allocator.  The \fIalgorithm\fR argument should be \f(CW\*(C`priority\*(C'\fR or
5282 \&\f(CW\*(C`CB\*(C'\fR.  The first algorithm specifies Chow's priority coloring,
5283 the second one specifies Chaitin-Briggs coloring.  The second
5284 algorithm can be unimplemented for some architectures.  If it is
5285 implemented, it is the default because Chaitin-Briggs coloring as a
5286 rule generates a better code.
5287 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
5288 .IX Item "-fira-region=region"
5289 Use specified regions for the integrated register allocator.  The
5290 \&\fIregion\fR argument should be one of \f(CW\*(C`all\*(C'\fR, \f(CW\*(C`mixed\*(C'\fR, or
5291 \&\f(CW\*(C`one\*(C'\fR.  The first value means using all loops as register
5292 allocation regions, the second value which is the default means using
5293 all loops except for loops with small register pressure as the
5294 regions, and third one means using all function as a single region.
5295 The first value can give best result for machines with small size and
5296 irregular register set, the third one results in faster and generates
5297 decent code and the smallest size code, and the default value usually
5298 give the best results in most cases and for most architectures.
5299 .IP "\fB\-fira\-coalesce\fR" 4
5300 .IX Item "-fira-coalesce"
5301 Do optimistic register coalescing.  This option might be profitable for
5302 architectures with big regular register files.
5303 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
5304 .IX Item "-fno-ira-share-save-slots"
5305 Switch off sharing stack slots used for saving call used hard
5306 registers living through a call.  Each hard register will get a
5307 separate stack slot and as a result function stack frame will be
5308 bigger.
5309 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
5310 .IX Item "-fno-ira-share-spill-slots"
5311 Switch off sharing stack slots allocated for pseudo-registers.  Each
5312 pseudo-register which did not get a hard register will get a separate
5313 stack slot and as a result function stack frame will be bigger.
5314 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
5315 .IX Item "-fira-verbose=n"
5316 Set up how verbose dump file for the integrated register allocator
5317 will be.  Default value is 5.  If the value is greater or equal to 10,
5318 the dump file will be stderr as if the value were \fIn\fR minus 10.
5319 .IP "\fB\-fdelayed\-branch\fR" 4
5320 .IX Item "-fdelayed-branch"
5321 If supported for the target machine, attempt to reorder instructions
5322 to exploit instruction slots available after delayed branch
5323 instructions.
5324 .Sp
5325 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5326 .IP "\fB\-fschedule\-insns\fR" 4
5327 .IX Item "-fschedule-insns"
5328 If supported for the target machine, attempt to reorder instructions to
5329 eliminate execution stalls due to required data being unavailable.  This
5330 helps machines that have slow floating point or memory load instructions
5331 by allowing other instructions to be issued until the result of the load
5332 or floating point instruction is required.
5333 .Sp
5334 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5335 .IP "\fB\-fschedule\-insns2\fR" 4
5336 .IX Item "-fschedule-insns2"
5337 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
5338 instruction scheduling after register allocation has been done.  This is
5339 especially useful on machines with a relatively small number of
5340 registers and where memory load instructions take more than one cycle.
5341 .Sp
5342 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5343 .IP "\fB\-fno\-sched\-interblock\fR" 4
5344 .IX Item "-fno-sched-interblock"
5345 Don't schedule instructions across basic blocks.  This is normally
5346 enabled by default when scheduling before register allocation, i.e.
5347 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5348 .IP "\fB\-fno\-sched\-spec\fR" 4
5349 .IX Item "-fno-sched-spec"
5350 Don't allow speculative motion of non-load instructions.  This is normally
5351 enabled by default when scheduling before register allocation, i.e.
5352 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5353 .IP "\fB\-fsched\-spec\-load\fR" 4
5354 .IX Item "-fsched-spec-load"
5355 Allow speculative motion of some load instructions.  This only makes
5356 sense when scheduling before register allocation, i.e. with
5357 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5358 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
5359 .IX Item "-fsched-spec-load-dangerous"
5360 Allow speculative motion of more load instructions.  This only makes
5361 sense when scheduling before register allocation, i.e. with
5362 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5363 .IP "\fB\-fsched\-stalled\-insns\fR" 4
5364 .IX Item "-fsched-stalled-insns"
5365 .PD 0
5366 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
5367 .IX Item "-fsched-stalled-insns=n"
5368 .PD
5369 Define how many insns (if any) can be moved prematurely from the queue
5370 of stalled insns into the ready list, during the second scheduling pass.
5371 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns will be moved
5372 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
5373 on how many queued insns can be moved prematurely.
5374 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
5375 \&\fB\-fsched\-stalled\-insns=1\fR.
5376 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
5377 .IX Item "-fsched-stalled-insns-dep"
5378 .PD 0
5379 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
5380 .IX Item "-fsched-stalled-insns-dep=n"
5381 .PD
5382 Define how many insn groups (cycles) will be examined for a dependency
5383 on a stalled insn that is candidate for premature removal from the queue
5384 of stalled insns.  This has an effect only during the second scheduling pass,
5385 and only if \fB\-fsched\-stalled\-insns\fR is used.
5386 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
5387 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
5388 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
5389 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
5390 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
5391 .IX Item "-fsched2-use-superblocks"
5392 When scheduling after register allocation, do use superblock scheduling
5393 algorithm.  Superblock scheduling allows motion across basic block boundaries
5394 resulting on faster schedules.  This option is experimental, as not all machine
5395 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
5396 results from the algorithm.
5397 .Sp
5398 This only makes sense when scheduling after register allocation, i.e. with
5399 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5400 .IP "\fB\-fsched2\-use\-traces\fR" 4
5401 .IX Item "-fsched2-use-traces"
5402 Use \fB\-fsched2\-use\-superblocks\fR algorithm when scheduling after register
5403 allocation and additionally perform code duplication in order to increase the
5404 size of superblocks using tracer pass.  See \fB\-ftracer\fR for details on
5405 trace formation.
5406 .Sp
5407 This mode should produce faster but significantly longer programs.  Also
5408 without \fB\-fbranch\-probabilities\fR the traces constructed may not
5409 match the reality and hurt the performance.  This only makes
5410 sense when scheduling after register allocation, i.e. with
5411 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5412 .IP "\fB\-fsee\fR" 4
5413 .IX Item "-fsee"
5414 Eliminate redundant sign extension instructions and move the non-redundant
5415 ones to optimal placement using lazy code motion (\s-1LCM\s0).
5416 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
5417 .IX Item "-freschedule-modulo-scheduled-loops"
5418 The modulo scheduling comes before the traditional scheduling, if a loop
5419 was modulo scheduled we may want to prevent the later scheduling passes
5420 from changing its schedule, we use this option to control that.
5421 .IP "\fB\-fselective\-scheduling\fR" 4
5422 .IX Item "-fselective-scheduling"
5423 Schedule instructions using selective scheduling algorithm.  Selective
5424 scheduling runs instead of the first scheduler pass.
5425 .IP "\fB\-fselective\-scheduling2\fR" 4
5426 .IX Item "-fselective-scheduling2"
5427 Schedule instructions using selective scheduling algorithm.  Selective
5428 scheduling runs instead of the second scheduler pass.
5429 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
5430 .IX Item "-fsel-sched-pipelining"
5431 Enable software pipelining of innermost loops during selective scheduling.  
5432 This option has no effect until one of \fB\-fselective\-scheduling\fR or 
5433 \&\fB\-fselective\-scheduling2\fR is turned on.
5434 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
5435 .IX Item "-fsel-sched-pipelining-outer-loops"
5436 When pipelining loops during selective scheduling, also pipeline outer loops.
5437 This option has no effect until \fB\-fsel\-sched\-pipelining\fR is turned on.
5438 .IP "\fB\-fcaller\-saves\fR" 4
5439 .IX Item "-fcaller-saves"
5440 Enable values to be allocated in registers that will be clobbered by
5441 function calls, by emitting extra instructions to save and restore the
5442 registers around such calls.  Such allocation is done only when it
5443 seems to result in better code than would otherwise be produced.
5444 .Sp
5445 This option is always enabled by default on certain machines, usually
5446 those which have no call-preserved registers to use instead.
5447 .Sp
5448 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5449 .IP "\fB\-fconserve\-stack\fR" 4
5450 .IX Item "-fconserve-stack"
5451 Attempt to minimize stack usage.  The compiler will attempt to use less
5452 stack space, even if that makes the program slower.  This option
5453 implies setting the \fBlarge-stack-frame\fR parameter to 100
5454 and the \fBlarge-stack-frame-growth\fR parameter to 400.
5455 .IP "\fB\-ftree\-reassoc\fR" 4
5456 .IX Item "-ftree-reassoc"
5457 Perform reassociation on trees.  This flag is enabled by default
5458 at \fB\-O\fR and higher.
5459 .IP "\fB\-ftree\-pre\fR" 4
5460 .IX Item "-ftree-pre"
5461 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
5462 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
5463 .IP "\fB\-ftree\-fre\fR" 4
5464 .IX Item "-ftree-fre"
5465 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
5466 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
5467 that are computed on all paths leading to the redundant computation.
5468 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
5469 This flag is enabled by default at \fB\-O\fR and higher.
5470 .IP "\fB\-ftree\-copy\-prop\fR" 4
5471 .IX Item "-ftree-copy-prop"
5472 Perform copy propagation on trees.  This pass eliminates unnecessary
5473 copy operations.  This flag is enabled by default at \fB\-O\fR and
5474 higher.
5475 .IP "\fB\-fipa\-pure\-const\fR" 4
5476 .IX Item "-fipa-pure-const"
5477 Discover which functions are pure or constant.
5478 Enabled by default at \fB\-O\fR and higher.
5479 .IP "\fB\-fipa\-reference\fR" 4
5480 .IX Item "-fipa-reference"
5481 Discover which static variables do not escape cannot escape the
5482 compilation unit.
5483 Enabled by default at \fB\-O\fR and higher.
5484 .IP "\fB\-fipa\-struct\-reorg\fR" 4
5485 .IX Item "-fipa-struct-reorg"
5486 Perform structure reorganization optimization, that change C\-like structures 
5487 layout in order to better utilize spatial locality.  This transformation is 
5488 affective for programs containing arrays of structures.  Available in two 
5489 compilation modes: profile-based (enabled with \fB\-fprofile\-generate\fR)
5490 or static (which uses built-in heuristics).  Require \fB\-fipa\-type\-escape\fR
5491 to provide the safety of this transformation.  It works only in whole program
5492 mode, so it requires \fB\-fwhole\-program\fR and \fB\-combine\fR to be
5493 enabled.  Structures considered \fBcold\fR by this transformation are not
5494 affected (see \fB\-\-param struct\-reorg\-cold\-struct\-ratio=\fR\fIvalue\fR).
5495 .Sp
5496 With this flag, the program debug info reflects a new structure layout.
5497 .IP "\fB\-fipa\-pta\fR" 4
5498 .IX Item "-fipa-pta"
5499 Perform interprocedural pointer analysis.  This option is experimental
5500 and does not affect generated code.
5501 .IP "\fB\-fipa\-cp\fR" 4
5502 .IX Item "-fipa-cp"
5503 Perform interprocedural constant propagation.
5504 This optimization analyzes the program to determine when values passed
5505 to functions are constants and then optimizes accordingly.  
5506 This optimization can substantially increase performance
5507 if the application has constants passed to functions.
5508 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
5509 .IP "\fB\-fipa\-cp\-clone\fR" 4
5510 .IX Item "-fipa-cp-clone"
5511 Perform function cloning to make interprocedural constant propagation stronger.
5512 When enabled, interprocedural constant propagation will perform function cloning
5513 when externally visible function can be called with constant arguments.
5514 Because this optimization can create multiple copies of functions,
5515 it may significantly increase code size
5516 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
5517 This flag is enabled by default at \fB\-O3\fR.
5518 .IP "\fB\-fipa\-matrix\-reorg\fR" 4
5519 .IX Item "-fipa-matrix-reorg"
5520 Perform matrix flattening and transposing.
5521 Matrix flattening tries to replace a m\-dimensional matrix 
5522 with its equivalent n\-dimensional matrix, where n < m.
5523 This reduces the level of indirection needed for accessing the elements
5524 of the matrix. The second optimization is matrix transposing that
5525 attempts to change the order of the matrix's dimensions in order to
5526 improve cache locality.
5527 Both optimizations need the \fB\-fwhole\-program\fR flag. 
5528 Transposing is enabled only if profiling information is available.
5529 .IP "\fB\-ftree\-sink\fR" 4
5530 .IX Item "-ftree-sink"
5531 Perform forward store motion  on trees.  This flag is
5532 enabled by default at \fB\-O\fR and higher.
5533 .IP "\fB\-ftree\-ccp\fR" 4
5534 .IX Item "-ftree-ccp"
5535 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
5536 pass only operates on local scalar variables and is enabled by default
5537 at \fB\-O\fR and higher.
5538 .IP "\fB\-ftree\-switch\-conversion\fR" 4
5539 .IX Item "-ftree-switch-conversion"
5540 Perform conversion of simple initializations in a switch to
5541 initializations from a scalar array.  This flag is enabled by default
5542 at \fB\-O2\fR and higher.
5543 .IP "\fB\-ftree\-dce\fR" 4
5544 .IX Item "-ftree-dce"
5545 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
5546 default at \fB\-O\fR and higher.
5547 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
5548 .IX Item "-ftree-builtin-call-dce"
5549 Perform conditional dead code elimination (\s-1DCE\s0) for calls to builtin functions 
5550 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is 
5551 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also 
5552 specified.
5553 .IP "\fB\-ftree\-dominator\-opts\fR" 4
5554 .IX Item "-ftree-dominator-opts"
5555 Perform a variety of simple scalar cleanups (constant/copy
5556 propagation, redundancy elimination, range propagation and expression
5557 simplification) based on a dominator tree traversal.  This also
5558 performs jump threading (to reduce jumps to jumps). This flag is
5559 enabled by default at \fB\-O\fR and higher.
5560 .IP "\fB\-ftree\-dse\fR" 4
5561 .IX Item "-ftree-dse"
5562 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
5563 a memory location which will later be overwritten by another store without
5564 any intervening loads.  In this case the earlier store can be deleted.  This
5565 flag is enabled by default at \fB\-O\fR and higher.
5566 .IP "\fB\-ftree\-ch\fR" 4
5567 .IX Item "-ftree-ch"
5568 Perform loop header copying on trees.  This is beneficial since it increases
5569 effectiveness of code motion optimizations.  It also saves one jump.  This flag
5570 is enabled by default at \fB\-O\fR and higher.  It is not enabled
5571 for \fB\-Os\fR, since it usually increases code size.
5572 .IP "\fB\-ftree\-loop\-optimize\fR" 4
5573 .IX Item "-ftree-loop-optimize"
5574 Perform loop optimizations on trees.  This flag is enabled by default
5575 at \fB\-O\fR and higher.
5576 .IP "\fB\-ftree\-loop\-linear\fR" 4
5577 .IX Item "-ftree-loop-linear"
5578 Perform linear loop transformations on tree.  This flag can improve cache
5579 performance and allow further loop optimizations to take place.
5580 .IP "\fB\-floop\-interchange\fR" 4
5581 .IX Item "-floop-interchange"
5582 Perform loop interchange transformations on loops.  Interchanging two
5583 nested loops switches the inner and outer loops.  For example, given a
5584 loop like:
5585 .Sp
5586 .Vb 5
5587 \&        DO J = 1, M
5588 \&          DO I = 1, N
5589 \&            A(J, I) = A(J, I) * C
5590 \&          ENDDO
5591 \&        ENDDO
5592 .Ve
5593 .Sp
5594 loop interchange will transform the loop as if the user had written:
5595 .Sp
5596 .Vb 5
5597 \&        DO I = 1, N
5598 \&          DO J = 1, M
5599 \&            A(J, I) = A(J, I) * C
5600 \&          ENDDO
5601 \&        ENDDO
5602 .Ve
5603 .Sp
5604 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
5605 because in Fortran, the elements of an array are stored in memory
5606 contiguously by column, and the original loop iterates over rows,
5607 potentially creating at each access a cache miss.  This optimization
5608 applies to all the languages supported by \s-1GCC\s0 and is not limited to
5609 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
5610 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
5611 Graphite loop transformation infrastructure.
5612 .IP "\fB\-floop\-strip\-mine\fR" 4
5613 .IX Item "-floop-strip-mine"
5614 Perform loop strip mining transformations on loops.  Strip mining
5615 splits a loop into two nested loops.  The outer loop has strides 
5616 equal to the strip size and the inner loop has strides of the 
5617 original loop within a strip.  For example, given a loop like:
5618 .Sp
5619 .Vb 3
5620 \&        DO I = 1, N
5621 \&          A(I) = A(I) + C
5622 \&        ENDDO
5623 .Ve
5624 .Sp
5625 loop strip mining will transform the loop as if the user had written:
5626 .Sp
5627 .Vb 5
5628 \&        DO II = 1, N, 4
5629 \&          DO I = II, min (II + 3, N)
5630 \&            A(I) = A(I) + C
5631 \&          ENDDO
5632 \&        ENDDO
5633 .Ve
5634 .Sp
5635 This optimization applies to all the languages supported by \s-1GCC\s0 and is
5636 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
5637 be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
5638 enable the Graphite loop transformation infrastructure.
5639 .IP "\fB\-floop\-block\fR" 4
5640 .IX Item "-floop-block"
5641 Perform loop blocking transformations on loops.  Blocking strip mines
5642 each loop in the loop nest such that the memory accesses of the
5643 element loops fit inside caches.  For example, given a loop like:
5644 .Sp
5645 .Vb 5
5646 \&        DO I = 1, N
5647 \&          DO J = 1, M
5648 \&            A(J, I) = B(I) + C(J)
5649 \&          ENDDO
5650 \&        ENDDO
5651 .Ve
5652 .Sp
5653 loop blocking will transform the loop as if the user had written:
5654 .Sp
5655 .Vb 9
5656 \&        DO II = 1, N, 64
5657 \&          DO JJ = 1, M, 64
5658 \&            DO I = II, min (II + 63, N)
5659 \&              DO J = JJ, min (JJ + 63, M)
5660 \&                A(J, I) = B(I) + C(J)
5661 \&              ENDDO
5662 \&            ENDDO
5663 \&          ENDDO
5664 \&        ENDDO
5665 .Ve
5666 .Sp
5667 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
5668 because the innermost loop will iterate over a smaller amount of data
5669 that can be kept in the caches.  This optimization applies to all the
5670 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
5671 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-ppl\fR
5672 and \fB\-\-with\-cloog\fR to enable the Graphite loop transformation
5673 infrastructure.
5674 .IP "\fB\-fcheck\-data\-deps\fR" 4
5675 .IX Item "-fcheck-data-deps"
5676 Compare the results of several data dependence analyzers.  This option
5677 is used for debugging the data dependence analyzers.
5678 .IP "\fB\-ftree\-loop\-distribution\fR" 4
5679 .IX Item "-ftree-loop-distribution"
5680 Perform loop distribution.  This flag can improve cache performance on
5681 big loop bodies and allow further loop optimizations, like
5682 parallelization or vectorization, to take place.  For example, the loop
5683 .Sp
5684 .Vb 4
5685 \&        DO I = 1, N
5686 \&          A(I) = B(I) + C
5687 \&          D(I) = E(I) * F
5688 \&        ENDDO
5689 .Ve
5690 .Sp
5691 is transformed to
5692 .Sp
5693 .Vb 6
5694 \&        DO I = 1, N
5695 \&           A(I) = B(I) + C
5696 \&        ENDDO
5697 \&        DO I = 1, N
5698 \&           D(I) = E(I) * F
5699 \&        ENDDO
5700 .Ve
5701 .IP "\fB\-ftree\-loop\-im\fR" 4
5702 .IX Item "-ftree-loop-im"
5703 Perform loop invariant motion on trees.  This pass moves only invariants that
5704 would be hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
5705 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
5706 operands of conditions that are invariant out of the loop, so that we can use
5707 just trivial invariantness analysis in loop unswitching.  The pass also includes
5708 store motion.
5709 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
5710 .IX Item "-ftree-loop-ivcanon"
5711 Create a canonical counter for number of iterations in the loop for that
5712 determining number of iterations requires complicated analysis.  Later
5713 optimizations then may determine the number easily.  Useful especially
5714 in connection with unrolling.
5715 .IP "\fB\-fivopts\fR" 4
5716 .IX Item "-fivopts"
5717 Perform induction variable optimizations (strength reduction, induction
5718 variable merging and induction variable elimination) on trees.
5719 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
5720 .IX Item "-ftree-parallelize-loops=n"
5721 Parallelize loops, i.e., split their iteration space to run in n threads.
5722 This is only possible for loops whose iterations are independent
5723 and can be arbitrarily reordered.  The optimization is only
5724 profitable on multiprocessor machines, for loops that are CPU-intensive,
5725 rather than constrained e.g. by memory bandwidth.  This option
5726 implies \fB\-pthread\fR, and thus is only supported on targets
5727 that have support for \fB\-pthread\fR.
5728 .IP "\fB\-ftree\-sra\fR" 4
5729 .IX Item "-ftree-sra"
5730 Perform scalar replacement of aggregates.  This pass replaces structure
5731 references with scalars to prevent committing structures to memory too
5732 early.  This flag is enabled by default at \fB\-O\fR and higher.
5733 .IP "\fB\-ftree\-copyrename\fR" 4
5734 .IX Item "-ftree-copyrename"
5735 Perform copy renaming on trees.  This pass attempts to rename compiler
5736 temporaries to other variables at copy locations, usually resulting in
5737 variable names which more closely resemble the original variables.  This flag
5738 is enabled by default at \fB\-O\fR and higher.
5739 .IP "\fB\-ftree\-ter\fR" 4
5740 .IX Item "-ftree-ter"
5741 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
5742 use/single def temporaries are replaced at their use location with their
5743 defining expression.  This results in non-GIMPLE code, but gives the expanders
5744 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
5745 enabled by default at \fB\-O\fR and higher.
5746 .IP "\fB\-ftree\-vectorize\fR" 4
5747 .IX Item "-ftree-vectorize"
5748 Perform loop vectorization on trees. This flag is enabled by default at
5749 \&\fB\-O3\fR.
5750 .IP "\fB\-ftree\-vect\-loop\-version\fR" 4
5751 .IX Item "-ftree-vect-loop-version"
5752 Perform loop versioning when doing loop vectorization on trees.  When a loop
5753 appears to be vectorizable except that data alignment or data dependence cannot
5754 be determined at compile time then vectorized and non-vectorized versions of
5755 the loop are generated along with runtime checks for alignment or dependence
5756 to control which version is executed.  This option is enabled by default
5757 except at level \fB\-Os\fR where it is disabled.
5758 .IP "\fB\-fvect\-cost\-model\fR" 4
5759 .IX Item "-fvect-cost-model"
5760 Enable cost model for vectorization.
5761 .IP "\fB\-ftree\-vrp\fR" 4
5762 .IX Item "-ftree-vrp"
5763 Perform Value Range Propagation on trees.  This is similar to the
5764 constant propagation pass, but instead of values, ranges of values are
5765 propagated.  This allows the optimizers to remove unnecessary range
5766 checks like array bound checks and null pointer checks.  This is
5767 enabled by default at \fB\-O2\fR and higher.  Null pointer check
5768 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
5769 enabled.
5770 .IP "\fB\-ftracer\fR" 4
5771 .IX Item "-ftracer"
5772 Perform tail duplication to enlarge superblock size.  This transformation
5773 simplifies the control flow of the function allowing other optimizations to do
5774 better job.
5775 .IP "\fB\-funroll\-loops\fR" 4
5776 .IX Item "-funroll-loops"
5777 Unroll loops whose number of iterations can be determined at compile
5778 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
5779 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
5780 and may or may not make it run faster.
5781 .IP "\fB\-funroll\-all\-loops\fR" 4
5782 .IX Item "-funroll-all-loops"
5783 Unroll all loops, even if their number of iterations is uncertain when
5784 the loop is entered.  This usually makes programs run more slowly.
5785 \&\fB\-funroll\-all\-loops\fR implies the same options as
5786 \&\fB\-funroll\-loops\fR,
5787 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
5788 .IX Item "-fsplit-ivs-in-unroller"
5789 Enables expressing of values of induction variables in later iterations
5790 of the unrolled loop using the value in the first iteration.  This breaks
5791 long dependency chains, thus improving efficiency of the scheduling passes.
5792 .Sp
5793 Combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
5794 same effect.  However in cases the loop body is more complicated than
5795 a single basic block, this is not reliable.  It also does not work at all
5796 on some of the architectures due to restrictions in the \s-1CSE\s0 pass.
5797 .Sp
5798 This optimization is enabled by default.
5799 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
5800 .IX Item "-fvariable-expansion-in-unroller"
5801 With this option, the compiler will create multiple copies of some
5802 local variables when unrolling a loop which can result in superior code.
5803 .IP "\fB\-fpredictive\-commoning\fR" 4
5804 .IX Item "-fpredictive-commoning"
5805 Perform predictive commoning optimization, i.e., reusing computations
5806 (especially memory loads and stores) performed in previous
5807 iterations of loops.
5808 .Sp
5809 This option is enabled at level \fB\-O3\fR.
5810 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
5811 .IX Item "-fprefetch-loop-arrays"
5812 If supported by the target machine, generate instructions to prefetch
5813 memory to improve the performance of loops that access large arrays.
5814 .Sp
5815 This option may generate better or worse code; results are highly
5816 dependent on the structure of loops within the source code.
5817 .Sp
5818 Disabled at level \fB\-Os\fR.
5819 .IP "\fB\-fno\-peephole\fR" 4
5820 .IX Item "-fno-peephole"
5821 .PD 0
5822 .IP "\fB\-fno\-peephole2\fR" 4
5823 .IX Item "-fno-peephole2"
5824 .PD
5825 Disable any machine-specific peephole optimizations.  The difference
5826 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
5827 are implemented in the compiler; some targets use one, some use the
5828 other, a few use both.
5829 .Sp
5830 \&\fB\-fpeephole\fR is enabled by default.
5831 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5832 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
5833 .IX Item "-fno-guess-branch-probability"
5834 Do not guess branch probabilities using heuristics.
5835 .Sp
5836 \&\s-1GCC\s0 will use heuristics to guess branch probabilities if they are
5837 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
5838 heuristics are based on the control flow graph.  If some branch probabilities
5839 are specified by \fB_\|_builtin_expect\fR, then the heuristics will be
5840 used to guess branch probabilities for the rest of the control flow graph,
5841 taking the \fB_\|_builtin_expect\fR info into account.  The interactions
5842 between the heuristics and \fB_\|_builtin_expect\fR can be complex, and in
5843 some cases, it may be useful to disable the heuristics so that the effects
5844 of \fB_\|_builtin_expect\fR are easier to understand.
5845 .Sp
5846 The default is \fB\-fguess\-branch\-probability\fR at levels
5847 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5848 .IP "\fB\-freorder\-blocks\fR" 4
5849 .IX Item "-freorder-blocks"
5850 Reorder basic blocks in the compiled function in order to reduce number of
5851 taken branches and improve code locality.
5852 .Sp
5853 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
5854 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
5855 .IX Item "-freorder-blocks-and-partition"
5856 In addition to reordering basic blocks in the compiled function, in order
5857 to reduce number of taken branches, partitions hot and cold basic blocks
5858 into separate sections of the assembly and .o files, to improve
5859 paging and cache locality performance.
5860 .Sp
5861 This optimization is automatically turned off in the presence of
5862 exception handling, for linkonce sections, for functions with a user-defined
5863 section attribute and on any architecture that does not support named
5864 sections.
5865 .IP "\fB\-freorder\-functions\fR" 4
5866 .IX Item "-freorder-functions"
5867 Reorder functions in the object file in order to
5868 improve code locality.  This is implemented by using special
5869 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
5870 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
5871 the linker so object file format must support named sections and linker must
5872 place them in a reasonable way.
5873 .Sp
5874 Also profile feedback must be available in to make this option effective.  See
5875 \&\fB\-fprofile\-arcs\fR for details.
5876 .Sp
5877 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5878 .IP "\fB\-fstrict\-aliasing\fR" 4
5879 .IX Item "-fstrict-aliasing"
5880 Allow the compiler to assume the strictest aliasing rules applicable to
5881 the language being compiled.  For C (and \*(C+), this activates
5882 optimizations based on the type of expressions.  In particular, an
5883 object of one type is assumed never to reside at the same address as an
5884 object of a different type, unless the types are almost the same.  For
5885 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
5886 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
5887 type.
5888 .Sp
5889 Pay special attention to code like this:
5890 .Sp
5891 .Vb 4
5892 \&        union a_union {
5893 \&          int i;
5894 \&          double d;
5895 \&        };
5896 \&        
5897 \&        int f() {
5898 \&          union a_union t;
5899 \&          t.d = 3.0;
5900 \&          return t.i;
5901 \&        }
5902 .Ve
5903 .Sp
5904 The practice of reading from a different union member than the one most
5905 recently written to (called \*(L"type-punning\*(R") is common.  Even with
5906 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
5907 is accessed through the union type.  So, the code above will work as
5908 expected.    However, this code might not:
5909 .Sp
5910 .Vb 7
5911 \&        int f() {
5912 \&          union a_union t;
5913 \&          int* ip;
5914 \&          t.d = 3.0;
5915 \&          ip = &t.i;
5916 \&          return *ip;
5917 \&        }
5918 .Ve
5919 .Sp
5920 Similarly, access by taking the address, casting the resulting pointer
5921 and dereferencing the result has undefined behavior, even if the cast
5922 uses a union type, e.g.:
5923 .Sp
5924 .Vb 4
5925 \&        int f() {
5926 \&          double d = 3.0;
5927 \&          return ((union a_union *) &d)\->i;
5928 \&        }
5929 .Ve
5930 .Sp
5931 The \fB\-fstrict\-aliasing\fR option is enabled at levels
5932 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5933 .IP "\fB\-fstrict\-overflow\fR" 4
5934 .IX Item "-fstrict-overflow"
5935 Allow the compiler to assume strict signed overflow rules, depending
5936 on the language being compiled.  For C (and \*(C+) this means that
5937 overflow when doing arithmetic with signed numbers is undefined, which
5938 means that the compiler may assume that it will not happen.  This
5939 permits various optimizations.  For example, the compiler will assume
5940 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR will always be true for
5941 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
5942 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
5943 using twos complement arithmetic.  When this option is in effect any
5944 attempt to determine whether an operation on signed numbers will
5945 overflow must be written carefully to not actually involve overflow.
5946 .Sp
5947 This option also allows the compiler to assume strict pointer
5948 semantics: given a pointer to an object, if adding an offset to that
5949 pointer does not produce a pointer to the same object, the addition is
5950 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
5951 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
5952 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
5953 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
5954 twos complement arithmetic.
5955 .Sp
5956 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
5957 that integer signed overflow is fully defined: it wraps.  When
5958 \&\fB\-fwrapv\fR is used, there is no difference between
5959 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
5960 integers.  With \fB\-fwrapv\fR certain types of overflow are
5961 permitted.  For example, if the compiler gets an overflow when doing
5962 arithmetic on constants, the overflowed value can still be used with
5963 \&\fB\-fwrapv\fR, but not otherwise.
5964 .Sp
5965 The \fB\-fstrict\-overflow\fR option is enabled at levels
5966 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5967 .IP "\fB\-falign\-functions\fR" 4
5968 .IX Item "-falign-functions"
5969 .PD 0
5970 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
5971 .IX Item "-falign-functions=n"
5972 .PD
5973 Align the start of functions to the next power-of-two greater than
5974 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
5975 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
5976 boundary, but \fB\-falign\-functions=24\fR would align to the next
5977 32\-byte boundary only if this can be done by skipping 23 bytes or less.
5978 .Sp
5979 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
5980 equivalent and mean that functions will not be aligned.
5981 .Sp
5982 Some assemblers only support this flag when \fIn\fR is a power of two;
5983 in that case, it is rounded up.
5984 .Sp
5985 If \fIn\fR is not specified or is zero, use a machine-dependent default.
5986 .Sp
5987 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
5988 .IP "\fB\-falign\-labels\fR" 4
5989 .IX Item "-falign-labels"
5990 .PD 0
5991 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
5992 .IX Item "-falign-labels=n"
5993 .PD
5994 Align all branch targets to a power-of-two boundary, skipping up to
5995 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
5996 make code slower, because it must insert dummy operations for when the
5997 branch target is reached in the usual flow of the code.
5998 .Sp
5999 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
6000 equivalent and mean that labels will not be aligned.
6001 .Sp
6002 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
6003 are greater than this value, then their values are used instead.
6004 .Sp
6005 If \fIn\fR is not specified or is zero, use a machine-dependent default
6006 which is very likely to be \fB1\fR, meaning no alignment.
6007 .Sp
6008 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6009 .IP "\fB\-falign\-loops\fR" 4
6010 .IX Item "-falign-loops"
6011 .PD 0
6012 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
6013 .IX Item "-falign-loops=n"
6014 .PD
6015 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
6016 like \fB\-falign\-functions\fR.  The hope is that the loop will be
6017 executed many times, which will make up for any execution of the dummy
6018 operations.
6019 .Sp
6020 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
6021 equivalent and mean that loops will not be aligned.
6022 .Sp
6023 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6024 .Sp
6025 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6026 .IP "\fB\-falign\-jumps\fR" 4
6027 .IX Item "-falign-jumps"
6028 .PD 0
6029 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
6030 .IX Item "-falign-jumps=n"
6031 .PD
6032 Align branch targets to a power-of-two boundary, for branch targets
6033 where the targets can only be reached by jumping, skipping up to \fIn\fR
6034 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
6035 need be executed.
6036 .Sp
6037 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
6038 equivalent and mean that loops will not be aligned.
6039 .Sp
6040 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6041 .Sp
6042 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6043 .IP "\fB\-funit\-at\-a\-time\fR" 4
6044 .IX Item "-funit-at-a-time"
6045 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
6046 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
6047 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
6048 .Sp
6049 Enabled by default.
6050 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
6051 .IX Item "-fno-toplevel-reorder"
6052 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
6053 statements.  Output them in the same order that they appear in the
6054 input file.  When this option is used, unreferenced static variables
6055 will not be removed.  This option is intended to support existing code
6056 which relies on a particular ordering.  For new code, it is better to
6057 use attributes.
6058 .Sp
6059 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also imply
6060 \&\fB\-fno\-section\-anchors\fR that is otherwise enabled at \fB\-O0\fR on some
6061 targets.
6062 .IP "\fB\-fweb\fR" 4
6063 .IX Item "-fweb"
6064 Constructs webs as commonly used for register allocation purposes and assign
6065 each web individual pseudo register.  This allows the register allocation pass
6066 to operate on pseudos directly, but also strengthens several other optimization
6067 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
6068 however, make debugging impossible, since variables will no longer stay in a
6069 \&\*(L"home register\*(R".
6070 .Sp
6071 Enabled by default with \fB\-funroll\-loops\fR.
6072 .IP "\fB\-fwhole\-program\fR" 4
6073 .IX Item "-fwhole-program"
6074 Assume that the current compilation unit represents whole program being
6075 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
6076 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
6077 and in a affect gets more aggressively optimized by interprocedural optimizers.
6078 While this option is equivalent to proper use of \f(CW\*(C`static\*(C'\fR keyword for
6079 programs consisting of single file, in combination with option
6080 \&\fB\-\-combine\fR this flag can be used to compile most of smaller scale C
6081 programs since the functions and variables become local for the whole combined
6082 compilation unit, not for the single source file itself.
6083 .Sp
6084 This option is not supported for Fortran programs.
6085 .IP "\fB\-fcprop\-registers\fR" 4
6086 .IX Item "-fcprop-registers"
6087 After register allocation and post-register allocation instruction splitting,
6088 we perform a copy-propagation pass to try to reduce scheduling dependencies
6089 and occasionally eliminate the copy.
6090 .Sp
6091 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6092 .IP "\fB\-fprofile\-correction\fR" 4
6093 .IX Item "-fprofile-correction"
6094 Profiles collected using an instrumented binary for multi-threaded programs may
6095 be inconsistent due to missed counter updates. When this option is specified,
6096 \&\s-1GCC\s0 will use heuristics to correct or smooth out such inconsistencies. By
6097 default, \s-1GCC\s0 will emit an error message when an inconsistent profile is detected.
6098 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
6099 .IX Item "-fprofile-dir=path"
6100 Set the directory to search the profile data files in to \fIpath\fR.
6101 This option affects only the profile data generated by
6102 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
6103 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR 
6104 and its related options.
6105 By default, \s-1GCC\s0 will use the current directory as \fIpath\fR
6106 thus the profile data file will appear in the same directory as the object file.
6107 .IP "\fB\-fprofile\-generate\fR" 4
6108 .IX Item "-fprofile-generate"
6109 .PD 0
6110 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
6111 .IX Item "-fprofile-generate=path"
6112 .PD
6113 Enable options usually used for instrumenting application to produce
6114 profile useful for later recompilation with profile feedback based
6115 optimization.  You must use \fB\-fprofile\-generate\fR both when
6116 compiling and when linking your program.
6117 .Sp
6118 The following options are enabled: \f(CW\*(C`\-fprofile\-arcs\*(C'\fR, \f(CW\*(C`\-fprofile\-values\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR.
6119 .Sp
6120 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6121 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6122 .IP "\fB\-fprofile\-use\fR" 4
6123 .IX Item "-fprofile-use"
6124 .PD 0
6125 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
6126 .IX Item "-fprofile-use=path"
6127 .PD
6128 Enable profile feedback directed optimizations, and optimizations
6129 generally profitable only with profile feedback available.
6130 .Sp
6131 The following options are enabled: \f(CW\*(C`\-fbranch\-probabilities\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR,
6132 \&\f(CW\*(C`\-funroll\-loops\*(C'\fR, \f(CW\*(C`\-fpeel\-loops\*(C'\fR, \f(CW\*(C`\-ftracer\*(C'\fR
6133 .Sp
6134 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
6135 match the source code.  This error can be turned into a warning by using
6136 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
6137 code.
6138 .Sp
6139 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6140 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6141 .PP
6142 The following options control compiler behavior regarding floating
6143 point arithmetic.  These options trade off between speed and
6144 correctness.  All must be specifically enabled.
6145 .IP "\fB\-ffloat\-store\fR" 4
6146 .IX Item "-ffloat-store"
6147 Do not store floating point variables in registers, and inhibit other
6148 options that might change whether a floating point value is taken from a
6149 register or memory.
6150 .Sp
6151 This option prevents undesirable excess precision on machines such as
6152 the 68000 where the floating registers (of the 68881) keep more
6153 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
6154 x86 architecture.  For most programs, the excess precision does only
6155 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
6156 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
6157 them to store all pertinent intermediate computations into variables.
6158 .IP "\fB\-ffast\-math\fR" 4
6159 .IX Item "-ffast-math"
6160 Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
6161 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
6162 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
6163 .Sp
6164 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
6165 .Sp
6166 This option is not turned on by any \fB\-O\fR option since
6167 it can result in incorrect output for programs which depend on
6168 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6169 math functions. It may, however, yield faster code for programs
6170 that do not require the guarantees of these specifications.
6171 .IP "\fB\-fno\-math\-errno\fR" 4
6172 .IX Item "-fno-math-errno"
6173 Do not set \s-1ERRNO\s0 after calling math functions that are executed
6174 with a single instruction, e.g., sqrt.  A program that relies on
6175 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
6176 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
6177 .Sp
6178 This option is not turned on by any \fB\-O\fR option since
6179 it can result in incorrect output for programs which depend on
6180 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6181 math functions. It may, however, yield faster code for programs
6182 that do not require the guarantees of these specifications.
6183 .Sp
6184 The default is \fB\-fmath\-errno\fR.
6185 .Sp
6186 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
6187 therefore no reason for the compiler to consider the possibility that
6188 it might, and \fB\-fno\-math\-errno\fR is the default.
6189 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
6190 .IX Item "-funsafe-math-optimizations"
6191 Allow optimizations for floating-point arithmetic that (a) assume
6192 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
6193 \&\s-1ANSI\s0 standards.  When used at link-time, it may include libraries
6194 or startup files that change the default \s-1FPU\s0 control word or other
6195 similar optimizations.
6196 .Sp
6197 This option is not turned on by any \fB\-O\fR option since
6198 it can result in incorrect output for programs which depend on
6199 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6200 math functions. It may, however, yield faster code for programs
6201 that do not require the guarantees of these specifications.
6202 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
6203 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
6204 .Sp
6205 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
6206 .IP "\fB\-fassociative\-math\fR" 4
6207 .IX Item "-fassociative-math"
6208 Allow re-association of operands in series of floating-point operations.
6209 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
6210 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
6211 well as ignore NaNs and inhibit or create underflow or overflow (and
6212 thus cannot be used on a code which relies on rounding behavior like
6213 \&\f(CW\*(C`(x + 2**52) \- 2**52)\*(C'\fR.  May also reorder floating-point comparisons
6214 and thus may not be used when ordered comparisons are required.
6215 This option requires that both \fB\-fno\-signed\-zeros\fR and
6216 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
6217 much sense with \fB\-frounding\-math\fR.
6218 .Sp
6219 The default is \fB\-fno\-associative\-math\fR.
6220 .IP "\fB\-freciprocal\-math\fR" 4
6221 .IX Item "-freciprocal-math"
6222 Allow the reciprocal of a value to be used instead of dividing by
6223 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
6224 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR which is useful if \f(CW\*(C`(1/y)\*(C'\fR
6225 is subject to common subexpression elimination.  Note that this loses
6226 precision and increases the number of flops operating on the value.
6227 .Sp
6228 The default is \fB\-fno\-reciprocal\-math\fR.
6229 .IP "\fB\-ffinite\-math\-only\fR" 4
6230 .IX Item "-ffinite-math-only"
6231 Allow optimizations for floating-point arithmetic that assume
6232 that arguments and results are not NaNs or +\-Infs.
6233 .Sp
6234 This option is not turned on by any \fB\-O\fR option since
6235 it can result in incorrect output for programs which depend on
6236 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6237 math functions. It may, however, yield faster code for programs
6238 that do not require the guarantees of these specifications.
6239 .Sp
6240 The default is \fB\-fno\-finite\-math\-only\fR.
6241 .IP "\fB\-fno\-signed\-zeros\fR" 4
6242 .IX Item "-fno-signed-zeros"
6243 Allow optimizations for floating point arithmetic that ignore the
6244 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
6245 distinct +0.0 and \-0.0 values, which then prohibits simplification
6246 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
6247 This option implies that the sign of a zero result isn't significant.
6248 .Sp
6249 The default is \fB\-fsigned\-zeros\fR.
6250 .IP "\fB\-fno\-trapping\-math\fR" 4
6251 .IX Item "-fno-trapping-math"
6252 Compile code assuming that floating-point operations cannot generate
6253 user-visible traps.  These traps include division by zero, overflow,
6254 underflow, inexact result and invalid operation.  This option requires
6255 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
6256 allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
6257 .Sp
6258 This option should never be turned on by any \fB\-O\fR option since
6259 it can result in incorrect output for programs which depend on
6260 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6261 math functions.
6262 .Sp
6263 The default is \fB\-ftrapping\-math\fR.
6264 .IP "\fB\-frounding\-math\fR" 4
6265 .IX Item "-frounding-math"
6266 Disable transformations and optimizations that assume default floating
6267 point rounding behavior.  This is round-to-zero for all floating point
6268 to integer conversions, and round-to-nearest for all other arithmetic
6269 truncations.  This option should be specified for programs that change
6270 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
6271 non-default rounding mode.  This option disables constant folding of
6272 floating point expressions at compile-time (which may be affected by
6273 rounding mode) and arithmetic transformations that are unsafe in the
6274 presence of sign-dependent rounding modes.
6275 .Sp
6276 The default is \fB\-fno\-rounding\-math\fR.
6277 .Sp
6278 This option is experimental and does not currently guarantee to
6279 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
6280 Future versions of \s-1GCC\s0 may provide finer control of this setting
6281 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command line option
6282 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
6283 .IP "\fB\-frtl\-abstract\-sequences\fR" 4
6284 .IX Item "-frtl-abstract-sequences"
6285 It is a size optimization method. This option is to find identical
6286 sequences of code, which can be turned into pseudo-procedures  and
6287 then  replace  all  occurrences with  calls to  the  newly created
6288 subroutine. It is kind of an opposite of \fB\-finline\-functions\fR.
6289 This optimization runs at \s-1RTL\s0 level.
6290 .IP "\fB\-fsignaling\-nans\fR" 4
6291 .IX Item "-fsignaling-nans"
6292 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
6293 traps during floating-point operations.  Setting this option disables
6294 optimizations that may change the number of exceptions visible with
6295 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
6296 .Sp
6297 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
6298 be defined.
6299 .Sp
6300 The default is \fB\-fno\-signaling\-nans\fR.
6301 .Sp
6302 This option is experimental and does not currently guarantee to
6303 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
6304 .IP "\fB\-fsingle\-precision\-constant\fR" 4
6305 .IX Item "-fsingle-precision-constant"
6306 Treat floating point constant as single precision constant instead of
6307 implicitly converting it to double precision constant.
6308 .IP "\fB\-fcx\-limited\-range\fR" 4
6309 .IX Item "-fcx-limited-range"
6310 When enabled, this option states that a range reduction step is not
6311 needed when performing complex division.  Also, there is no checking
6312 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6313 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
6314 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
6315 \&\fB\-ffast\-math\fR.
6316 .Sp
6317 This option controls the default setting of the \s-1ISO\s0 C99
6318 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
6319 all languages.
6320 .IP "\fB\-fcx\-fortran\-rules\fR" 4
6321 .IX Item "-fcx-fortran-rules"
6322 Complex multiplication and division follow Fortran rules.  Range
6323 reduction is done as part of complex division, but there is no checking
6324 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6325 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
6326 .Sp
6327 The default is \fB\-fno\-cx\-fortran\-rules\fR.
6328 .PP
6329 The following options control optimizations that may improve
6330 performance, but are not enabled by any \fB\-O\fR options.  This
6331 section includes experimental options that may produce broken code.
6332 .IP "\fB\-fbranch\-probabilities\fR" 4
6333 .IX Item "-fbranch-probabilities"
6334 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
6335 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
6336 the number of times each branch was taken.  When the program
6337 compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
6338 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
6339 file.  The information in this data file is very dependent on the
6340 structure of the generated code, so you must use the same source code
6341 and the same optimization options for both compilations.
6342 .Sp
6343 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
6344 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
6345 These can be used to improve optimization.  Currently, they are only
6346 used in one place: in \fIreorg.c\fR, instead of guessing which path a
6347 branch is mostly to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
6348 exactly determine which path is taken more often.
6349 .IP "\fB\-fprofile\-values\fR" 4
6350 .IX Item "-fprofile-values"
6351 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
6352 data about values of expressions in the program is gathered.
6353 .Sp
6354 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6355 from profiling values of expressions and adds \fB\s-1REG_VALUE_PROFILE\s0\fR
6356 notes to instructions for their later usage in optimizations.
6357 .Sp
6358 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
6359 .IP "\fB\-fvpt\fR" 4
6360 .IX Item "-fvpt"
6361 If combined with \fB\-fprofile\-arcs\fR, it instructs the compiler to add
6362 a code to gather information about values of expressions.
6363 .Sp
6364 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6365 and actually performs the optimizations based on them.
6366 Currently the optimizations include specialization of division operation
6367 using the knowledge about the value of the denominator.
6368 .IP "\fB\-frename\-registers\fR" 4
6369 .IX Item "-frename-registers"
6370 Attempt to avoid false dependencies in scheduled code by making use
6371 of registers left over after register allocation.  This optimization
6372 will most benefit processors with lots of registers.  Depending on the
6373 debug information format adopted by the target, however, it can
6374 make debugging impossible, since variables will no longer stay in
6375 a \*(L"home register\*(R".
6376 .Sp
6377 Enabled by default with \fB\-funroll\-loops\fR.
6378 .IP "\fB\-ftracer\fR" 4
6379 .IX Item "-ftracer"
6380 Perform tail duplication to enlarge superblock size.  This transformation
6381 simplifies the control flow of the function allowing other optimizations to do
6382 better job.
6383 .Sp
6384 Enabled with \fB\-fprofile\-use\fR.
6385 .IP "\fB\-funroll\-loops\fR" 4
6386 .IX Item "-funroll-loops"
6387 Unroll loops whose number of iterations can be determined at compile time or
6388 upon entry to the loop.  \fB\-funroll\-loops\fR implies
6389 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
6390 It also turns on complete loop peeling (i.e. complete removal of loops with
6391 small constant number of iterations).  This option makes code larger, and may
6392 or may not make it run faster.
6393 .Sp
6394 Enabled with \fB\-fprofile\-use\fR.
6395 .IP "\fB\-funroll\-all\-loops\fR" 4
6396 .IX Item "-funroll-all-loops"
6397 Unroll all loops, even if their number of iterations is uncertain when
6398 the loop is entered.  This usually makes programs run more slowly.
6399 \&\fB\-funroll\-all\-loops\fR implies the same options as
6400 \&\fB\-funroll\-loops\fR.
6401 .IP "\fB\-fpeel\-loops\fR" 4
6402 .IX Item "-fpeel-loops"
6403 Peels the loops for that there is enough information that they do not
6404 roll much (from profile feedback).  It also turns on complete loop peeling
6405 (i.e. complete removal of loops with small constant number of iterations).
6406 .Sp
6407 Enabled with \fB\-fprofile\-use\fR.
6408 .IP "\fB\-fmove\-loop\-invariants\fR" 4
6409 .IX Item "-fmove-loop-invariants"
6410 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
6411 at level \fB\-O1\fR
6412 .IP "\fB\-funswitch\-loops\fR" 4
6413 .IX Item "-funswitch-loops"
6414 Move branches with loop invariant conditions out of the loop, with duplicates
6415 of the loop on both branches (modified according to result of the condition).
6416 .IP "\fB\-ffunction\-sections\fR" 4
6417 .IX Item "-ffunction-sections"
6418 .PD 0
6419 .IP "\fB\-fdata\-sections\fR" 4
6420 .IX Item "-fdata-sections"
6421 .PD
6422 Place each function or data item into its own section in the output
6423 file if the target supports arbitrary sections.  The name of the
6424 function or the name of the data item determines the section's name
6425 in the output file.
6426 .Sp
6427 Use these options on systems where the linker can perform optimizations
6428 to improve locality of reference in the instruction space.  Most systems
6429 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
6430 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
6431 the future.
6432 .Sp
6433 Only use these options when there are significant benefits from doing
6434 so.  When you specify these options, the assembler and linker will
6435 create larger object and executable files and will also be slower.
6436 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
6437 specify this option and you may have problems with debugging if
6438 you specify both this option and \fB\-g\fR.
6439 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
6440 .IX Item "-fbranch-target-load-optimize"
6441 Perform branch target register load optimization before prologue / epilogue
6442 threading.
6443 The use of target registers can typically be exposed only during reload,
6444 thus hoisting loads out of loops and doing inter-block scheduling needs
6445 a separate optimization pass.
6446 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
6447 .IX Item "-fbranch-target-load-optimize2"
6448 Perform branch target register load optimization after prologue / epilogue
6449 threading.
6450 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
6451 .IX Item "-fbtr-bb-exclusive"
6452 When performing branch target register load optimization, don't reuse
6453 branch target registers in within any basic block.
6454 .IP "\fB\-fstack\-protector\fR" 4
6455 .IX Item "-fstack-protector"
6456 Emit extra code to check for buffer overflows, such as stack smashing
6457 attacks.  This is done by adding a guard variable to functions with
6458 vulnerable objects.  This includes functions that call alloca, and
6459 functions with buffers larger than 8 bytes.  The guards are initialized
6460 when a function is entered and then checked when the function exits.
6461 If a guard check fails, an error message is printed and the program exits.
6462 .IP "\fB\-fstack\-protector\-all\fR" 4
6463 .IX Item "-fstack-protector-all"
6464 Like \fB\-fstack\-protector\fR except that all functions are protected.
6465 .IP "\fB\-fsection\-anchors\fR" 4
6466 .IX Item "-fsection-anchors"
6467 Try to reduce the number of symbolic address calculations by using
6468 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
6469 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
6470 targets.
6471 .Sp
6472 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
6473 .Sp
6474 .Vb 2
6475 \&        static int a, b, c;
6476 \&        int foo (void) { return a + b + c; }
6477 .Ve
6478 .Sp
6479 would usually calculate the addresses of all three variables, but if you
6480 compile it with \fB\-fsection\-anchors\fR, it will access the variables
6481 from a common anchor point instead.  The effect is similar to the
6482 following pseudocode (which isn't valid C):
6483 .Sp
6484 .Vb 5
6485 \&        int foo (void)
6486 \&        {
6487 \&          register int *xr = &x;
6488 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
6489 \&        }
6490 .Ve
6491 .Sp
6492 Not all targets support this option.
6493 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
6494 .IX Item "--param name=value"
6495 In some places, \s-1GCC\s0 uses various constants to control the amount of
6496 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
6497 that contain more that a certain number of instructions.  You can
6498 control some of these constants on the command-line using the
6499 \&\fB\-\-param\fR option.
6500 .Sp
6501 The names of specific parameters, and the meaning of the values, are
6502 tied to the internals of the compiler, and are subject to change
6503 without notice in future releases.
6504 .Sp
6505 In each case, the \fIvalue\fR is an integer.  The allowable choices for
6506 \&\fIname\fR are given in the following table:
6507 .RS 4
6508 .IP "\fBsra-max-structure-size\fR" 4
6509 .IX Item "sra-max-structure-size"
6510 The maximum structure size, in bytes, at which the scalar replacement
6511 of aggregates (\s-1SRA\s0) optimization will perform block copies.  The
6512 default value, 0, implies that \s-1GCC\s0 will select the most appropriate
6513 size itself.
6514 .IP "\fBsra-field-structure-ratio\fR" 4
6515 .IX Item "sra-field-structure-ratio"
6516 The threshold ratio (as a percentage) between instantiated fields and
6517 the complete structure size.  We say that if the ratio of the number
6518 of bytes in instantiated fields to the number of bytes in the complete
6519 structure exceeds this parameter, then block copies are not used.  The
6520 default is 75.
6521 .IP "\fBstruct-reorg-cold-struct-ratio\fR" 4
6522 .IX Item "struct-reorg-cold-struct-ratio"
6523 The threshold ratio (as a percentage) between a structure frequency
6524 and the frequency of the hottest structure in the program.  This parameter
6525 is used by struct-reorg optimization enabled by \fB\-fipa\-struct\-reorg\fR.
6526 We say that if the ratio of a structure frequency, calculated by profiling, 
6527 to the hottest structure frequency in the program is less than this 
6528 parameter, then structure reorganization is not applied to this structure.
6529 The default is 10.
6530 .IP "\fBpredictable-branch-cost-outcome\fR" 4
6531 .IX Item "predictable-branch-cost-outcome"
6532 When branch is predicted to be taken with probability lower than this threshold
6533 (in percent), then it is considered well predictable. The default is 10.
6534 .IP "\fBmax-crossjump-edges\fR" 4
6535 .IX Item "max-crossjump-edges"
6536 The maximum number of incoming edges to consider for crossjumping.
6537 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
6538 the number of edges incoming to each block.  Increasing values mean
6539 more aggressive optimization, making the compile time increase with
6540 probably small improvement in executable size.
6541 .IP "\fBmin-crossjump-insns\fR" 4
6542 .IX Item "min-crossjump-insns"
6543 The minimum number of instructions which must be matched at the end
6544 of two blocks before crossjumping will be performed on them.  This
6545 value is ignored in the case where all instructions in the block being
6546 crossjumped from are matched.  The default value is 5.
6547 .IP "\fBmax-grow-copy-bb-insns\fR" 4
6548 .IX Item "max-grow-copy-bb-insns"
6549 The maximum code size expansion factor when copying basic blocks
6550 instead of jumping.  The expansion is relative to a jump instruction.
6551 The default value is 8.
6552 .IP "\fBmax-goto-duplication-insns\fR" 4
6553 .IX Item "max-goto-duplication-insns"
6554 The maximum number of instructions to duplicate to a block that jumps
6555 to a computed goto.  To avoid O(N^2) behavior in a number of
6556 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
6557 and unfactors them as late as possible.  Only computed jumps at the
6558 end of a basic blocks with no more than max-goto-duplication-insns are
6559 unfactored.  The default value is 8.
6560 .IP "\fBmax-delay-slot-insn-search\fR" 4
6561 .IX Item "max-delay-slot-insn-search"
6562 The maximum number of instructions to consider when looking for an
6563 instruction to fill a delay slot.  If more than this arbitrary number of
6564 instructions is searched, the time savings from filling the delay slot
6565 will be minimal so stop searching.  Increasing values mean more
6566 aggressive optimization, making the compile time increase with probably
6567 small improvement in executable run time.
6568 .IP "\fBmax-delay-slot-live-search\fR" 4
6569 .IX Item "max-delay-slot-live-search"
6570 When trying to fill delay slots, the maximum number of instructions to
6571 consider when searching for a block with valid live register
6572 information.  Increasing this arbitrarily chosen value means more
6573 aggressive optimization, increasing the compile time.  This parameter
6574 should be removed when the delay slot code is rewritten to maintain the
6575 control-flow graph.
6576 .IP "\fBmax-gcse-memory\fR" 4
6577 .IX Item "max-gcse-memory"
6578 The approximate maximum amount of memory that will be allocated in
6579 order to perform the global common subexpression elimination
6580 optimization.  If more memory than specified is required, the
6581 optimization will not be done.
6582 .IP "\fBmax-gcse-passes\fR" 4
6583 .IX Item "max-gcse-passes"
6584 The maximum number of passes of \s-1GCSE\s0 to run.  The default is 1.
6585 .IP "\fBmax-pending-list-length\fR" 4
6586 .IX Item "max-pending-list-length"
6587 The maximum number of pending dependencies scheduling will allow
6588 before flushing the current state and starting over.  Large functions
6589 with few branches or calls can create excessively large lists which
6590 needlessly consume memory and resources.
6591 .IP "\fBmax-inline-insns-single\fR" 4
6592 .IX Item "max-inline-insns-single"
6593 Several parameters control the tree inliner used in gcc.
6594 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
6595 internal representation) in a single function that the tree inliner
6596 will consider for inlining.  This only affects functions declared
6597 inline and methods implemented in a class declaration (\*(C+).
6598 The default value is 450.
6599 .IP "\fBmax-inline-insns-auto\fR" 4
6600 .IX Item "max-inline-insns-auto"
6601 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
6602 a lot of functions that would otherwise not be considered for inlining
6603 by the compiler will be investigated.  To those functions, a different
6604 (more restrictive) limit compared to functions declared inline can
6605 be applied.
6606 The default value is 90.
6607 .IP "\fBlarge-function-insns\fR" 4
6608 .IX Item "large-function-insns"
6609 The limit specifying really large functions.  For functions larger than this
6610 limit after inlining, inlining is constrained by
6611 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
6612 to avoid extreme compilation time caused by non-linear algorithms used by the
6613 backend.
6614 The default value is 2700.
6615 .IP "\fBlarge-function-growth\fR" 4
6616 .IX Item "large-function-growth"
6617 Specifies maximal growth of large function caused by inlining in percents.
6618 The default value is 100 which limits large function growth to 2.0 times
6619 the original size.
6620 .IP "\fBlarge-unit-insns\fR" 4
6621 .IX Item "large-unit-insns"
6622 The limit specifying large translation unit.  Growth caused by inlining of
6623 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
6624 For small units this might be too tight (consider unit consisting of function A
6625 that is inline and B that just calls A three time.  If B is small relative to
6626 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
6627 large units consisting of small inlineable functions however the overall unit
6628 growth limit is needed to avoid exponential explosion of code size.  Thus for
6629 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
6630 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000
6631 .IP "\fBinline-unit-growth\fR" 4
6632 .IX Item "inline-unit-growth"
6633 Specifies maximal overall growth of the compilation unit caused by inlining.
6634 The default value is 30 which limits unit growth to 1.3 times the original
6635 size.
6636 .IP "\fBipcp-unit-growth\fR" 4
6637 .IX Item "ipcp-unit-growth"
6638 Specifies maximal overall growth of the compilation unit caused by
6639 interprocedural constant propagation.  The default value is 10 which limits
6640 unit growth to 1.1 times the original size.
6641 .IP "\fBlarge-stack-frame\fR" 4
6642 .IX Item "large-stack-frame"
6643 The limit specifying large stack frames.  While inlining the algorithm is trying
6644 to not grow past this limit too much.  Default value is 256 bytes.
6645 .IP "\fBlarge-stack-frame-growth\fR" 4
6646 .IX Item "large-stack-frame-growth"
6647 Specifies maximal growth of large stack frames caused by inlining in percents.
6648 The default value is 1000 which limits large stack frame growth to 11 times
6649 the original size.
6650 .IP "\fBmax-inline-insns-recursive\fR" 4
6651 .IX Item "max-inline-insns-recursive"
6652 .PD 0
6653 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
6654 .IX Item "max-inline-insns-recursive-auto"
6655 .PD
6656 Specifies maximum number of instructions out-of-line copy of self recursive inline
6657 function can grow into by performing recursive inlining.
6658 .Sp
6659 For functions declared inline \fB\-\-param max-inline-insns-recursive\fR is
6660 taken into account.  For function not declared inline, recursive inlining
6661 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6662 enabled and \fB\-\-param max-inline-insns-recursive-auto\fR is used.  The
6663 default value is 450.
6664 .IP "\fBmax-inline-recursive-depth\fR" 4
6665 .IX Item "max-inline-recursive-depth"
6666 .PD 0
6667 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
6668 .IX Item "max-inline-recursive-depth-auto"
6669 .PD
6670 Specifies maximum recursion depth used by the recursive inlining.
6671 .Sp
6672 For functions declared inline \fB\-\-param max-inline-recursive-depth\fR is
6673 taken into account.  For function not declared inline, recursive inlining
6674 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6675 enabled and \fB\-\-param max-inline-recursive-depth-auto\fR is used.  The
6676 default value is 8.
6677 .IP "\fBmin-inline-recursive-probability\fR" 4
6678 .IX Item "min-inline-recursive-probability"
6679 Recursive inlining is profitable only for function having deep recursion
6680 in average and can hurt for function having little recursion depth by
6681 increasing the prologue size or complexity of function body to other
6682 optimizers.
6683 .Sp
6684 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
6685 recursion depth can be guessed from probability that function will recurse via
6686 given call expression.  This parameter limits inlining only to call expression
6687 whose probability exceeds given threshold (in percents).  The default value is
6688 10.
6689 .IP "\fBinline-call-cost\fR" 4
6690 .IX Item "inline-call-cost"
6691 Specify cost of call instruction relative to simple arithmetics operations
6692 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
6693 functions and at the same time increases size of leaf function that is believed to
6694 reduce function size by being inlined.  In effect it increases amount of
6695 inlining for code having large abstraction penalty (many functions that just
6696 pass the arguments to other functions) and decrease inlining for code with low
6697 abstraction penalty.  The default value is 12.
6698 .IP "\fBmin-vect-loop-bound\fR" 4
6699 .IX Item "min-vect-loop-bound"
6700 The minimum number of iterations under which a loop will not get vectorized
6701 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
6702 vectorization needs to be greater than the value specified by this option
6703 to allow vectorization.  The default value is 0.
6704 .IP "\fBmax-unrolled-insns\fR" 4
6705 .IX Item "max-unrolled-insns"
6706 The maximum number of instructions that a loop should have if that loop
6707 is unrolled, and if the loop is unrolled, it determines how many times
6708 the loop code is unrolled.
6709 .IP "\fBmax-average-unrolled-insns\fR" 4
6710 .IX Item "max-average-unrolled-insns"
6711 The maximum number of instructions biased by probabilities of their execution
6712 that a loop should have if that loop is unrolled, and if the loop is unrolled,
6713 it determines how many times the loop code is unrolled.
6714 .IP "\fBmax-unroll-times\fR" 4
6715 .IX Item "max-unroll-times"
6716 The maximum number of unrollings of a single loop.
6717 .IP "\fBmax-peeled-insns\fR" 4
6718 .IX Item "max-peeled-insns"
6719 The maximum number of instructions that a loop should have if that loop
6720 is peeled, and if the loop is peeled, it determines how many times
6721 the loop code is peeled.
6722 .IP "\fBmax-peel-times\fR" 4
6723 .IX Item "max-peel-times"
6724 The maximum number of peelings of a single loop.
6725 .IP "\fBmax-completely-peeled-insns\fR" 4
6726 .IX Item "max-completely-peeled-insns"
6727 The maximum number of insns of a completely peeled loop.
6728 .IP "\fBmax-completely-peel-times\fR" 4
6729 .IX Item "max-completely-peel-times"
6730 The maximum number of iterations of a loop to be suitable for complete peeling.
6731 .IP "\fBmax-unswitch-insns\fR" 4
6732 .IX Item "max-unswitch-insns"
6733 The maximum number of insns of an unswitched loop.
6734 .IP "\fBmax-unswitch-level\fR" 4
6735 .IX Item "max-unswitch-level"
6736 The maximum number of branches unswitched in a single loop.
6737 .IP "\fBlim-expensive\fR" 4
6738 .IX Item "lim-expensive"
6739 The minimum cost of an expensive expression in the loop invariant motion.
6740 .IP "\fBiv-consider-all-candidates-bound\fR" 4
6741 .IX Item "iv-consider-all-candidates-bound"
6742 Bound on number of candidates for induction variables below that
6743 all candidates are considered for each use in induction variable
6744 optimizations.  Only the most relevant candidates are considered
6745 if there are more candidates, to avoid quadratic time complexity.
6746 .IP "\fBiv-max-considered-uses\fR" 4
6747 .IX Item "iv-max-considered-uses"
6748 The induction variable optimizations give up on loops that contain more
6749 induction variable uses.
6750 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
6751 .IX Item "iv-always-prune-cand-set-bound"
6752 If number of candidates in the set is smaller than this value,
6753 we always try to remove unnecessary ivs from the set during its
6754 optimization when a new iv is added to the set.
6755 .IP "\fBscev-max-expr-size\fR" 4
6756 .IX Item "scev-max-expr-size"
6757 Bound on size of expressions used in the scalar evolutions analyzer.
6758 Large expressions slow the analyzer.
6759 .IP "\fBomega-max-vars\fR" 4
6760 .IX Item "omega-max-vars"
6761 The maximum number of variables in an Omega constraint system.
6762 The default value is 128.
6763 .IP "\fBomega-max-geqs\fR" 4
6764 .IX Item "omega-max-geqs"
6765 The maximum number of inequalities in an Omega constraint system.
6766 The default value is 256.
6767 .IP "\fBomega-max-eqs\fR" 4
6768 .IX Item "omega-max-eqs"
6769 The maximum number of equalities in an Omega constraint system.
6770 The default value is 128.
6771 .IP "\fBomega-max-wild-cards\fR" 4
6772 .IX Item "omega-max-wild-cards"
6773 The maximum number of wildcard variables that the Omega solver will
6774 be able to insert.  The default value is 18.
6775 .IP "\fBomega-hash-table-size\fR" 4
6776 .IX Item "omega-hash-table-size"
6777 The size of the hash table in the Omega solver.  The default value is
6778 550.
6779 .IP "\fBomega-max-keys\fR" 4
6780 .IX Item "omega-max-keys"
6781 The maximal number of keys used by the Omega solver.  The default
6782 value is 500.
6783 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
6784 .IX Item "omega-eliminate-redundant-constraints"
6785 When set to 1, use expensive methods to eliminate all redundant
6786 constraints.  The default value is 0.
6787 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
6788 .IX Item "vect-max-version-for-alignment-checks"
6789 The maximum number of runtime checks that can be performed when
6790 doing loop versioning for alignment in the vectorizer.  See option
6791 ftree-vect-loop-version for more information.
6792 .IP "\fBvect-max-version-for-alias-checks\fR" 4
6793 .IX Item "vect-max-version-for-alias-checks"
6794 The maximum number of runtime checks that can be performed when
6795 doing loop versioning for alias in the vectorizer.  See option
6796 ftree-vect-loop-version for more information.
6797 .IP "\fBmax-iterations-to-track\fR" 4
6798 .IX Item "max-iterations-to-track"
6799 The maximum number of iterations of a loop the brute force algorithm
6800 for analysis of # of iterations of the loop tries to evaluate.
6801 .IP "\fBhot-bb-count-fraction\fR" 4
6802 .IX Item "hot-bb-count-fraction"
6803 Select fraction of the maximal count of repetitions of basic block in program
6804 given basic block needs to have to be considered hot.
6805 .IP "\fBhot-bb-frequency-fraction\fR" 4
6806 .IX Item "hot-bb-frequency-fraction"
6807 Select fraction of the maximal frequency of executions of basic block in
6808 function given basic block needs to have to be considered hot
6809 .IP "\fBmax-predicted-iterations\fR" 4
6810 .IX Item "max-predicted-iterations"
6811 The maximum number of loop iterations we predict statically.  This is useful
6812 in cases where function contain single loop with known bound and other loop
6813 with unknown.  We predict the known number of iterations correctly, while
6814 the unknown number of iterations average to roughly 10.  This means that the
6815 loop without bounds would appear artificially cold relative to the other one.
6816 .IP "\fBalign-threshold\fR" 4
6817 .IX Item "align-threshold"
6818 Select fraction of the maximal frequency of executions of basic block in
6819 function given basic block will get aligned.
6820 .IP "\fBalign-loop-iterations\fR" 4
6821 .IX Item "align-loop-iterations"
6822 A loop expected to iterate at lest the selected number of iterations will get
6823 aligned.
6824 .IP "\fBtracer-dynamic-coverage\fR" 4
6825 .IX Item "tracer-dynamic-coverage"
6826 .PD 0
6827 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
6828 .IX Item "tracer-dynamic-coverage-feedback"
6829 .PD
6830 This value is used to limit superblock formation once the given percentage of
6831 executed instructions is covered.  This limits unnecessary code size
6832 expansion.
6833 .Sp
6834 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
6835 feedback is available.  The real profiles (as opposed to statically estimated
6836 ones) are much less balanced allowing the threshold to be larger value.
6837 .IP "\fBtracer-max-code-growth\fR" 4
6838 .IX Item "tracer-max-code-growth"
6839 Stop tail duplication once code growth has reached given percentage.  This is
6840 rather hokey argument, as most of the duplicates will be eliminated later in
6841 cross jumping, so it may be set to much higher values than is the desired code
6842 growth.
6843 .IP "\fBtracer-min-branch-ratio\fR" 4
6844 .IX Item "tracer-min-branch-ratio"
6845 Stop reverse growth when the reverse probability of best edge is less than this
6846 threshold (in percent).
6847 .IP "\fBtracer-min-branch-ratio\fR" 4
6848 .IX Item "tracer-min-branch-ratio"
6849 .PD 0
6850 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
6851 .IX Item "tracer-min-branch-ratio-feedback"
6852 .PD
6853 Stop forward growth if the best edge do have probability lower than this
6854 threshold.
6855 .Sp
6856 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
6857 compilation for profile feedback and one for compilation without.  The value
6858 for compilation with profile feedback needs to be more conservative (higher) in
6859 order to make tracer effective.
6860 .IP "\fBmax-cse-path-length\fR" 4
6861 .IX Item "max-cse-path-length"
6862 Maximum number of basic blocks on path that cse considers.  The default is 10.
6863 .IP "\fBmax-cse-insns\fR" 4
6864 .IX Item "max-cse-insns"
6865 The maximum instructions \s-1CSE\s0 process before flushing. The default is 1000.
6866 .IP "\fBmax-aliased-vops\fR" 4
6867 .IX Item "max-aliased-vops"
6868 Maximum number of virtual operands per function allowed to represent
6869 aliases before triggering the alias partitioning heuristic.  Alias
6870 partitioning reduces compile times and memory consumption needed for
6871 aliasing at the expense of precision loss in alias information.  The
6872 default value for this parameter is 100 for \-O1, 500 for \-O2 and 1000
6873 for \-O3.
6874 .Sp
6875 Notice that if a function contains more memory statements than the
6876 value of this parameter, it is not really possible to achieve this
6877 reduction.  In this case, the compiler will use the number of memory
6878 statements as the value for \fBmax-aliased-vops\fR.
6879 .IP "\fBavg-aliased-vops\fR" 4
6880 .IX Item "avg-aliased-vops"
6881 Average number of virtual operands per statement allowed to represent
6882 aliases before triggering the alias partitioning heuristic.  This
6883 works in conjunction with \fBmax-aliased-vops\fR.  If a function
6884 contains more than \fBmax-aliased-vops\fR virtual operators, then
6885 memory symbols will be grouped into memory partitions until either the
6886 total number of virtual operators is below \fBmax-aliased-vops\fR
6887 or the average number of virtual operators per memory statement is
6888 below \fBavg-aliased-vops\fR.  The default value for this parameter
6889 is 1 for \-O1 and \-O2, and 3 for \-O3.
6890 .IP "\fBggc-min-expand\fR" 4
6891 .IX Item "ggc-min-expand"
6892 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
6893 parameter specifies the minimum percentage by which the garbage
6894 collector's heap should be allowed to expand between collections.
6895 Tuning this may improve compilation speed; it has no effect on code
6896 generation.
6897 .Sp
6898 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
6899 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
6900 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
6901 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
6902 bound of 30% is used.  Setting this parameter and
6903 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
6904 every opportunity.  This is extremely slow, but can be useful for
6905 debugging.
6906 .IP "\fBggc-min-heapsize\fR" 4
6907 .IX Item "ggc-min-heapsize"
6908 Minimum size of the garbage collector's heap before it begins bothering
6909 to collect garbage.  The first collection occurs after the heap expands
6910 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
6911 tuning this may improve compilation speed, and has no effect on code
6912 generation.
6913 .Sp
6914 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit which
6915 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
6916 with a lower bound of 4096 (four megabytes) and an upper bound of
6917 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
6918 particular platform, the lower bound is used.  Setting this parameter
6919 very large effectively disables garbage collection.  Setting this
6920 parameter and \fBggc-min-expand\fR to zero causes a full collection
6921 to occur at every opportunity.
6922 .IP "\fBmax-reload-search-insns\fR" 4
6923 .IX Item "max-reload-search-insns"
6924 The maximum number of instruction reload should look backward for equivalent
6925 register.  Increasing values mean more aggressive optimization, making the
6926 compile time increase with probably slightly better performance.  The default
6927 value is 100.
6928 .IP "\fBmax-cselib-memory-locations\fR" 4
6929 .IX Item "max-cselib-memory-locations"
6930 The maximum number of memory locations cselib should take into account.
6931 Increasing values mean more aggressive optimization, making the compile time
6932 increase with probably slightly better performance.  The default value is 500.
6933 .IP "\fBreorder-blocks-duplicate\fR" 4
6934 .IX Item "reorder-blocks-duplicate"
6935 .PD 0
6936 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
6937 .IX Item "reorder-blocks-duplicate-feedback"
6938 .PD
6939 Used by basic block reordering pass to decide whether to use unconditional
6940 branch or duplicate the code on its destination.  Code is duplicated when its
6941 estimated size is smaller than this value multiplied by the estimated size of
6942 unconditional jump in the hot spots of the program.
6943 .Sp
6944 The \fBreorder-block-duplicate-feedback\fR is used only when profile
6945 feedback is available and may be set to higher values than
6946 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
6947 accurate.
6948 .IP "\fBmax-sched-ready-insns\fR" 4
6949 .IX Item "max-sched-ready-insns"
6950 The maximum number of instructions ready to be issued the scheduler should
6951 consider at any given time during the first scheduling pass.  Increasing
6952 values mean more thorough searches, making the compilation time increase
6953 with probably little benefit.  The default value is 100.
6954 .IP "\fBmax-sched-region-blocks\fR" 4
6955 .IX Item "max-sched-region-blocks"
6956 The maximum number of blocks in a region to be considered for
6957 interblock scheduling.  The default value is 10.
6958 .IP "\fBmax-pipeline-region-blocks\fR" 4
6959 .IX Item "max-pipeline-region-blocks"
6960 The maximum number of blocks in a region to be considered for
6961 pipelining in the selective scheduler.  The default value is 15.
6962 .IP "\fBmax-sched-region-insns\fR" 4
6963 .IX Item "max-sched-region-insns"
6964 The maximum number of insns in a region to be considered for
6965 interblock scheduling.  The default value is 100.
6966 .IP "\fBmax-pipeline-region-insns\fR" 4
6967 .IX Item "max-pipeline-region-insns"
6968 The maximum number of insns in a region to be considered for
6969 pipelining in the selective scheduler.  The default value is 200.
6970 .IP "\fBmin-spec-prob\fR" 4
6971 .IX Item "min-spec-prob"
6972 The minimum probability (in percents) of reaching a source block
6973 for interblock speculative scheduling.  The default value is 40.
6974 .IP "\fBmax-sched-extend-regions-iters\fR" 4
6975 .IX Item "max-sched-extend-regions-iters"
6976 The maximum number of iterations through \s-1CFG\s0 to extend regions.
6977 0 \- disable region extension,
6978 N \- do at most N iterations.
6979 The default value is 0.
6980 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
6981 .IX Item "max-sched-insn-conflict-delay"
6982 The maximum conflict delay for an insn to be considered for speculative motion.
6983 The default value is 3.
6984 .IP "\fBsched-spec-prob-cutoff\fR" 4
6985 .IX Item "sched-spec-prob-cutoff"
6986 The minimal probability of speculation success (in percents), so that
6987 speculative insn will be scheduled.
6988 The default value is 40.
6989 .IP "\fBsched-mem-true-dep-cost\fR" 4
6990 .IX Item "sched-mem-true-dep-cost"
6991 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
6992 memory locations.  The default value is 1.
6993 .IP "\fBselsched-max-lookahead\fR" 4
6994 .IX Item "selsched-max-lookahead"
6995 The maximum size of the lookahead window of selective scheduling.  It is a
6996 depth of search for available instructions.
6997 The default value is 50.
6998 .IP "\fBselsched-max-sched-times\fR" 4
6999 .IX Item "selsched-max-sched-times"
7000 The maximum number of times that an instruction will be scheduled during 
7001 selective scheduling.  This is the limit on the number of iterations 
7002 through which the instruction may be pipelined.  The default value is 2.
7003 .IP "\fBselsched-max-insns-to-rename\fR" 4
7004 .IX Item "selsched-max-insns-to-rename"
7005 The maximum number of best instructions in the ready list that are considered
7006 for renaming in the selective scheduler.  The default value is 2.
7007 .IP "\fBmax-last-value-rtl\fR" 4
7008 .IX Item "max-last-value-rtl"
7009 The maximum size measured as number of RTLs that can be recorded in an expression
7010 in combiner for a pseudo register as last known value of that register.  The default
7011 is 10000.
7012 .IP "\fBinteger-share-limit\fR" 4
7013 .IX Item "integer-share-limit"
7014 Small integer constants can use a shared data structure, reducing the
7015 compiler's memory usage and increasing its speed.  This sets the maximum
7016 value of a shared integer constant.  The default value is 256.
7017 .IP "\fBmin-virtual-mappings\fR" 4
7018 .IX Item "min-virtual-mappings"
7019 Specifies the minimum number of virtual mappings in the incremental
7020 \&\s-1SSA\s0 updater that should be registered to trigger the virtual mappings
7021 heuristic defined by virtual-mappings-ratio.  The default value is
7022 100.
7023 .IP "\fBvirtual-mappings-ratio\fR" 4
7024 .IX Item "virtual-mappings-ratio"
7025 If the number of virtual mappings is virtual-mappings-ratio bigger
7026 than the number of virtual symbols to be updated, then the incremental
7027 \&\s-1SSA\s0 updater switches to a full update for those symbols.  The default
7028 ratio is 3.
7029 .IP "\fBssp-buffer-size\fR" 4
7030 .IX Item "ssp-buffer-size"
7031 The minimum size of buffers (i.e. arrays) that will receive stack smashing
7032 protection when \fB\-fstack\-protection\fR is used.
7033 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
7034 .IX Item "max-jump-thread-duplication-stmts"
7035 Maximum number of statements allowed in a block that needs to be
7036 duplicated when threading jumps.
7037 .IP "\fBmax-fields-for-field-sensitive\fR" 4
7038 .IX Item "max-fields-for-field-sensitive"
7039 Maximum number of fields in a structure we will treat in
7040 a field sensitive manner during pointer analysis.  The default is zero
7041 for \-O0, and \-O1 and 100 for \-Os, \-O2, and \-O3.
7042 .IP "\fBprefetch-latency\fR" 4
7043 .IX Item "prefetch-latency"
7044 Estimate on average number of instructions that are executed before
7045 prefetch finishes.  The distance we prefetch ahead is proportional
7046 to this constant.  Increasing this number may also lead to less
7047 streams being prefetched (see \fBsimultaneous-prefetches\fR).
7048 .IP "\fBsimultaneous-prefetches\fR" 4
7049 .IX Item "simultaneous-prefetches"
7050 Maximum number of prefetches that can run at the same time.
7051 .IP "\fBl1\-cache\-line\-size\fR" 4
7052 .IX Item "l1-cache-line-size"
7053 The size of cache line in L1 cache, in bytes.
7054 .IP "\fBl1\-cache\-size\fR" 4
7055 .IX Item "l1-cache-size"
7056 The size of L1 cache, in kilobytes.
7057 .IP "\fBl2\-cache\-size\fR" 4
7058 .IX Item "l2-cache-size"
7059 The size of L2 cache, in kilobytes.
7060 .IP "\fBuse-canonical-types\fR" 4
7061 .IX Item "use-canonical-types"
7062 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
7063 default, this should always be 1, which uses a more efficient internal
7064 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
7065 bugs in the canonical type system are causing compilation failures,
7066 set this value to 0 to disable canonical types.
7067 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
7068 .IX Item "switch-conversion-max-branch-ratio"
7069 Switch initialization conversion will refuse to create arrays that are
7070 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
7071 branches in the switch.
7072 .IP "\fBmax-partial-antic-length\fR" 4
7073 .IX Item "max-partial-antic-length"
7074 Maximum length of the partial antic set computed during the tree
7075 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
7076 optimizing at \fB\-O3\fR and above.  For some sorts of source code
7077 the enhanced partial redundancy elimination optimization can run away,
7078 consuming all of the memory available on the host machine.  This
7079 parameter sets a limit on the length of the sets that are computed,
7080 which prevents the runaway behavior.  Setting a value of 0 for
7081 this parameter will allow an unlimited set length.
7082 .IP "\fBsccvn-max-scc-size\fR" 4
7083 .IX Item "sccvn-max-scc-size"
7084 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
7085 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
7086 function will not be done and optimizations depending on it will
7087 be disabled.  The default maximum \s-1SCC\s0 size is 10000.
7088 .IP "\fBira-max-loops-num\fR" 4
7089 .IX Item "ira-max-loops-num"
7090 \&\s-1IRA\s0 uses a regional register allocation by default.  If a function
7091 contains loops more than number given by the parameter, only at most
7092 given number of the most frequently executed loops will form regions
7093 for the regional register allocation.  The default value of the
7094 parameter is 100.
7095 .IP "\fBira-max-conflict-table-size\fR" 4
7096 .IX Item "ira-max-conflict-table-size"
7097 Although \s-1IRA\s0 uses a sophisticated algorithm of compression conflict
7098 table, the table can be still big for huge functions.  If the conflict
7099 table for a function could be more than size in \s-1MB\s0 given by the
7100 parameter, the conflict table is not built and faster, simpler, and
7101 lower quality register allocation algorithm will be used.  The
7102 algorithm do not use pseudo-register conflicts.  The default value of
7103 the parameter is 2000.
7104 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
7105 .IX Item "loop-invariant-max-bbs-in-loop"
7106 Loop invariant motion can be very expensive, both in compile time and
7107 in amount of needed compile time memory, with very large loops.  Loops
7108 with more basic blocks than this parameter won't have loop invariant
7109 motion optimization performed on them.  The default value of the
7110 parameter is 1000 for \-O1 and 10000 for \-O2 and above.
7111 .RE
7112 .RS 4
7113 .RE
7114 .Sh "Options Controlling the Preprocessor"
7115 .IX Subsection "Options Controlling the Preprocessor"
7116 These options control the C preprocessor, which is run on each C source
7117 file before actual compilation.
7118 .PP
7119 If you use the \fB\-E\fR option, nothing is done except preprocessing.
7120 Some of these options make sense only together with \fB\-E\fR because
7121 they cause the preprocessor output to be unsuitable for actual
7122 compilation.
7123 .Sp
7124 .RS 4
7125 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
7126 and pass \fIoption\fR directly through to the preprocessor.  If
7127 \&\fIoption\fR contains commas, it is split into multiple options at the
7128 commas.  However, many options are modified, translated or interpreted
7129 by the compiler driver before being passed to the preprocessor, and
7130 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
7131 interface is undocumented and subject to change, so whenever possible
7132 you should avoid using \fB\-Wp\fR and let the driver handle the
7133 options instead.
7134 .Sp
7135 \&\fB\-Xpreprocessor\fR \fIoption\fR
7136 .Sp
7137 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
7138 supply system-specific preprocessor options which \s-1GCC\s0 does not know how to
7139 recognize.
7140 .Sp
7141 If you want to pass an option that takes an argument, you must use
7142 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
7143 .RE
7144 .IP "\fB\-D\fR \fIname\fR" 4
7145 .IX Item "-D name"
7146 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
7147 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
7148 .IX Item "-D name=definition"
7149 The contents of \fIdefinition\fR are tokenized and processed as if
7150 they appeared during translation phase three in a \fB#define\fR
7151 directive.  In particular, the definition will be truncated by
7152 embedded newline characters.
7153 .Sp
7154 If you are invoking the preprocessor from a shell or shell-like
7155 program you may need to use the shell's quoting syntax to protect
7156 characters such as spaces that have a meaning in the shell syntax.
7157 .Sp
7158 If you wish to define a function-like macro on the command line, write
7159 its argument list with surrounding parentheses before the equals sign
7160 (if any).  Parentheses are meaningful to most shells, so you will need
7161 to quote the option.  With \fBsh\fR and \fBcsh\fR,
7162 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
7163 .Sp
7164 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
7165 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
7166 \&\fB\-include\fR \fIfile\fR options are processed after all
7167 \&\fB\-D\fR and \fB\-U\fR options.
7168 .IP "\fB\-U\fR \fIname\fR" 4
7169 .IX Item "-U name"
7170 Cancel any previous definition of \fIname\fR, either built in or
7171 provided with a \fB\-D\fR option.
7172 .IP "\fB\-undef\fR" 4
7173 .IX Item "-undef"
7174 Do not predefine any system-specific or GCC-specific macros.  The
7175 standard predefined macros remain defined.
7176 .IP "\fB\-I\fR \fIdir\fR" 4
7177 .IX Item "-I dir"
7178 Add the directory \fIdir\fR to the list of directories to be searched
7179 for header files.
7180 Directories named by \fB\-I\fR are searched before the standard
7181 system include directories.  If the directory \fIdir\fR is a standard
7182 system include directory, the option is ignored to ensure that the
7183 default search order for system directories and the special treatment
7184 of system headers are not defeated
7185 \&.
7186 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7187 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7188 .IP "\fB\-o\fR \fIfile\fR" 4
7189 .IX Item "-o file"
7190 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
7191 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
7192 different interpretation of a second non-option argument, so you must
7193 use \fB\-o\fR to specify the output file.
7194 .IP "\fB\-Wall\fR" 4
7195 .IX Item "-Wall"
7196 Turns on all optional warnings which are desirable for normal code.
7197 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
7198 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
7199 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
7200 preprocessor's warnings are on by default and have no options to
7201 control them.
7202 .IP "\fB\-Wcomment\fR" 4
7203 .IX Item "-Wcomment"
7204 .PD 0
7205 .IP "\fB\-Wcomments\fR" 4
7206 .IX Item "-Wcomments"
7207 .PD
7208 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
7209 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
7210 (Both forms have the same effect.)
7211 .IP "\fB\-Wtrigraphs\fR" 4
7212 .IX Item "-Wtrigraphs"
7213 Most trigraphs in comments cannot affect the meaning of the program.
7214 However, a trigraph that would form an escaped newline (\fB??/\fR at
7215 the end of a line) can, by changing where the comment begins or ends.
7216 Therefore, only trigraphs that would form escaped newlines produce
7217 warnings inside a comment.
7218 .Sp
7219 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
7220 given, this option is still enabled unless trigraphs are enabled.  To
7221 get trigraph conversion without warnings, but get the other
7222 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
7223 .IP "\fB\-Wtraditional\fR" 4
7224 .IX Item "-Wtraditional"
7225 Warn about certain constructs that behave differently in traditional and
7226 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
7227 equivalent, and problematic constructs which should be avoided.
7228 .IP "\fB\-Wundef\fR" 4
7229 .IX Item "-Wundef"
7230 Warn whenever an identifier which is not a macro is encountered in an
7231 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
7232 replaced with zero.
7233 .IP "\fB\-Wunused\-macros\fR" 4
7234 .IX Item "-Wunused-macros"
7235 Warn about macros defined in the main file that are unused.  A macro
7236 is \fIused\fR if it is expanded or tested for existence at least once.
7237 The preprocessor will also warn if the macro has not been used at the
7238 time it is redefined or undefined.
7239 .Sp
7240 Built-in macros, macros defined on the command line, and macros
7241 defined in include files are not warned about.
7242 .Sp
7243 \&\fINote:\fR If a macro is actually used, but only used in skipped
7244 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
7245 warning in such a case, you might improve the scope of the macro's
7246 definition by, for example, moving it into the first skipped block.
7247 Alternatively, you could provide a dummy use with something like:
7248 .Sp
7249 .Vb 2
7250 \&        #if defined the_macro_causing_the_warning
7251 \&        #endif
7252 .Ve
7253 .IP "\fB\-Wendif\-labels\fR" 4
7254 .IX Item "-Wendif-labels"
7255 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
7256 This usually happens in code of the form
7257 .Sp
7258 .Vb 5
7259 \&        #if FOO
7260 \&        ...
7261 \&        #else FOO
7262 \&        ...
7263 \&        #endif FOO
7264 .Ve
7265 .Sp
7266 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
7267 in older programs.  This warning is on by default.
7268 .IP "\fB\-Werror\fR" 4
7269 .IX Item "-Werror"
7270 Make all warnings into hard errors.  Source code which triggers warnings
7271 will be rejected.
7272 .IP "\fB\-Wsystem\-headers\fR" 4
7273 .IX Item "-Wsystem-headers"
7274 Issue warnings for code in system headers.  These are normally unhelpful
7275 in finding bugs in your own code, therefore suppressed.  If you are
7276 responsible for the system library, you may want to see them.
7277 .IP "\fB\-w\fR" 4
7278 .IX Item "-w"
7279 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
7280 .IP "\fB\-pedantic\fR" 4
7281 .IX Item "-pedantic"
7282 Issue all the mandatory diagnostics listed in the C standard.  Some of
7283 them are left out by default, since they trigger frequently on harmless
7284 code.
7285 .IP "\fB\-pedantic\-errors\fR" 4
7286 .IX Item "-pedantic-errors"
7287 Issue all the mandatory diagnostics, and make all mandatory diagnostics
7288 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
7289 without \fB\-pedantic\fR but treats as warnings.
7290 .IP "\fB\-M\fR" 4
7291 .IX Item "-M"
7292 Instead of outputting the result of preprocessing, output a rule
7293 suitable for \fBmake\fR describing the dependencies of the main
7294 source file.  The preprocessor outputs one \fBmake\fR rule containing
7295 the object file name for that source file, a colon, and the names of all
7296 the included files, including those coming from \fB\-include\fR or
7297 \&\fB\-imacros\fR command line options.
7298 .Sp
7299 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
7300 object file name consists of the name of the source file with any
7301 suffix replaced with object file suffix and with any leading directory
7302 parts removed.  If there are many included files then the rule is
7303 split into several lines using \fB\e\fR\-newline.  The rule has no
7304 commands.
7305 .Sp
7306 This option does not suppress the preprocessor's debug output, such as
7307 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
7308 rules you should explicitly specify the dependency output file with
7309 \&\fB\-MF\fR, or use an environment variable like
7310 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
7311 will still be sent to the regular output stream as normal.
7312 .Sp
7313 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
7314 warnings with an implicit \fB\-w\fR.
7315 .IP "\fB\-MM\fR" 4
7316 .IX Item "-MM"
7317 Like \fB\-M\fR but do not mention header files that are found in
7318 system header directories, nor header files that are included,
7319 directly or indirectly, from such a header.
7320 .Sp
7321 This implies that the choice of angle brackets or double quotes in an
7322 \&\fB#include\fR directive does not in itself determine whether that
7323 header will appear in \fB\-MM\fR dependency output.  This is a
7324 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
7325 .IP "\fB\-MF\fR \fIfile\fR" 4
7326 .IX Item "-MF file"
7327 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
7328 file to write the dependencies to.  If no \fB\-MF\fR switch is given
7329 the preprocessor sends the rules to the same place it would have sent
7330 preprocessed output.
7331 .Sp
7332 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
7333 \&\fB\-MF\fR overrides the default dependency output file.
7334 .IP "\fB\-MG\fR" 4
7335 .IX Item "-MG"
7336 In conjunction with an option such as \fB\-M\fR requesting
7337 dependency generation, \fB\-MG\fR assumes missing header files are
7338 generated files and adds them to the dependency list without raising
7339 an error.  The dependency filename is taken directly from the
7340 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
7341 also suppresses preprocessed output, as a missing header file renders
7342 this useless.
7343 .Sp
7344 This feature is used in automatic updating of makefiles.
7345 .IP "\fB\-MP\fR" 4
7346 .IX Item "-MP"
7347 This option instructs \s-1CPP\s0 to add a phony target for each dependency
7348 other than the main file, causing each to depend on nothing.  These
7349 dummy rules work around errors \fBmake\fR gives if you remove header
7350 files without updating the \fIMakefile\fR to match.
7351 .Sp
7352 This is typical output:
7353 .Sp
7354 .Vb 1
7355 \&        test.o: test.c test.h
7356 \&        
7357 \&        test.h:
7358 .Ve
7359 .IP "\fB\-MT\fR \fItarget\fR" 4
7360 .IX Item "-MT target"
7361 Change the target of the rule emitted by dependency generation.  By
7362 default \s-1CPP\s0 takes the name of the main input file, deletes any
7363 directory components and any file suffix such as \fB.c\fR, and
7364 appends the platform's usual object suffix.  The result is the target.
7365 .Sp
7366 An \fB\-MT\fR option will set the target to be exactly the string you
7367 specify.  If you want multiple targets, you can specify them as a single
7368 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
7369 .Sp
7370 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
7371 .Sp
7372 .Vb 1
7373 \&        $(objpfx)foo.o: foo.c
7374 .Ve
7375 .IP "\fB\-MQ\fR \fItarget\fR" 4
7376 .IX Item "-MQ target"
7377 Same as \fB\-MT\fR, but it quotes any characters which are special to
7378 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
7379 .Sp
7380 .Vb 1
7381 \&        $$(objpfx)foo.o: foo.c
7382 .Ve
7383 .Sp
7384 The default target is automatically quoted, as if it were given with
7385 \&\fB\-MQ\fR.
7386 .IP "\fB\-MD\fR" 4
7387 .IX Item "-MD"
7388 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
7389 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
7390 whether an \fB\-o\fR option is given.  If it is, the driver uses its
7391 argument but with a suffix of \fI.d\fR, otherwise it takes the name
7392 of the input file, removes any directory components and suffix, and
7393 applies a \fI.d\fR suffix.
7394 .Sp
7395 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
7396 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
7397 is understood to specify a target object file.
7398 .Sp
7399 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
7400 a dependency output file as a side-effect of the compilation process.
7401 .IP "\fB\-MMD\fR" 4
7402 .IX Item "-MMD"
7403 Like \fB\-MD\fR except mention only user header files, not system
7404 header files.
7405 .IP "\fB\-fpch\-deps\fR" 4
7406 .IX Item "-fpch-deps"
7407 When using precompiled headers, this flag
7408 will cause the dependency-output flags to also list the files from the
7409 precompiled header's dependencies.  If not specified only the
7410 precompiled header would be listed and not the files that were used to
7411 create it because those files are not consulted when a precompiled
7412 header is used.
7413 .IP "\fB\-fpch\-preprocess\fR" 4
7414 .IX Item "-fpch-preprocess"
7415 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
7416 \&\f(CW\*(C`#pragma GCC pch_preprocess "<filename>"\*(C'\fR in the output to mark
7417 the place where the precompiled header was found, and its filename.  When
7418 \&\fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR and
7419 loads the \s-1PCH\s0.
7420 .Sp
7421 This option is off by default, because the resulting preprocessed output
7422 is only really suitable as input to \s-1GCC\s0.  It is switched on by
7423 \&\fB\-save\-temps\fR.
7424 .Sp
7425 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
7426 safe to edit the filename if the \s-1PCH\s0 file is available in a different
7427 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
7428 current directory.
7429 .IP "\fB\-x c\fR" 4
7430 .IX Item "-x c"
7431 .PD 0
7432 .IP "\fB\-x c++\fR" 4
7433 .IX Item "-x c++"
7434 .IP "\fB\-x objective-c\fR" 4
7435 .IX Item "-x objective-c"
7436 .IP "\fB\-x assembler-with-cpp\fR" 4
7437 .IX Item "-x assembler-with-cpp"
7438 .PD
7439 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
7440 nothing to do with standards conformance or extensions; it merely
7441 selects which base syntax to expect.  If you give none of these options,
7442 cpp will deduce the language from the extension of the source file:
7443 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
7444 extensions for \*(C+ and assembly are also recognized.  If cpp does not
7445 recognize the extension, it will treat the file as C; this is the most
7446 generic mode.
7447 .Sp
7448 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
7449 which selected both the language and the standards conformance level.
7450 This option has been removed, because it conflicts with the \fB\-l\fR
7451 option.
7452 .IP "\fB\-std=\fR\fIstandard\fR" 4
7453 .IX Item "-std=standard"
7454 .PD 0
7455 .IP "\fB\-ansi\fR" 4
7456 .IX Item "-ansi"
7457 .PD
7458 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
7459 knows about C and \*(C+ standards; others may be added in the future.
7460 .Sp
7461 \&\fIstandard\fR
7462 may be one of:
7463 .RS 4
7464 .ie n .IP """iso9899:1990""" 4
7465 .el .IP "\f(CWiso9899:1990\fR" 4
7466 .IX Item "iso9899:1990"
7467 .PD 0
7468 .ie n .IP """c89""" 4
7469 .el .IP "\f(CWc89\fR" 4
7470 .IX Item "c89"
7471 .PD
7472 The \s-1ISO\s0 C standard from 1990.  \fBc89\fR is the customary shorthand for
7473 this version of the standard.
7474 .Sp
7475 The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
7476 .ie n .IP """iso9899:199409""" 4
7477 .el .IP "\f(CWiso9899:199409\fR" 4
7478 .IX Item "iso9899:199409"
7479 The 1990 C standard, as amended in 1994.
7480 .ie n .IP """iso9899:1999""" 4
7481 .el .IP "\f(CWiso9899:1999\fR" 4
7482 .IX Item "iso9899:1999"
7483 .PD 0
7484 .ie n .IP """c99""" 4
7485 .el .IP "\f(CWc99\fR" 4
7486 .IX Item "c99"
7487 .ie n .IP """iso9899:199x""" 4
7488 .el .IP "\f(CWiso9899:199x\fR" 4
7489 .IX Item "iso9899:199x"
7490 .ie n .IP """c9x""" 4
7491 .el .IP "\f(CWc9x\fR" 4
7492 .IX Item "c9x"
7493 .PD
7494 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
7495 publication, this was known as C9X.
7496 .ie n .IP """gnu89""" 4
7497 .el .IP "\f(CWgnu89\fR" 4
7498 .IX Item "gnu89"
7499 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
7500 .ie n .IP """gnu99""" 4
7501 .el .IP "\f(CWgnu99\fR" 4
7502 .IX Item "gnu99"
7503 .PD 0
7504 .ie n .IP """gnu9x""" 4
7505 .el .IP "\f(CWgnu9x\fR" 4
7506 .IX Item "gnu9x"
7507 .PD
7508 The 1999 C standard plus \s-1GNU\s0 extensions.
7509 .ie n .IP """c++98""" 4
7510 .el .IP "\f(CWc++98\fR" 4
7511 .IX Item "c++98"
7512 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
7513 .ie n .IP """gnu++98""" 4
7514 .el .IP "\f(CWgnu++98\fR" 4
7515 .IX Item "gnu++98"
7516 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
7517 default for \*(C+ code.
7518 .RE
7519 .RS 4
7520 .RE
7521 .IP "\fB\-I\-\fR" 4
7522 .IX Item "-I-"
7523 Split the include path.  Any directories specified with \fB\-I\fR
7524 options before \fB\-I\-\fR are searched only for headers requested with
7525 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7526 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
7527 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
7528 directories are searched for all \fB#include\fR directives.
7529 .Sp
7530 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
7531 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
7532 This option has been deprecated.
7533 .IP "\fB\-nostdinc\fR" 4
7534 .IX Item "-nostdinc"
7535 Do not search the standard system directories for header files.
7536 Only the directories you have specified with \fB\-I\fR options
7537 (and the directory of the current file, if appropriate) are searched.
7538 .IP "\fB\-nostdinc++\fR" 4
7539 .IX Item "-nostdinc++"
7540 Do not search for header files in the \*(C+\-specific standard directories,
7541 but do still search the other standard directories.  (This option is
7542 used when building the \*(C+ library.)
7543 .IP "\fB\-include\fR \fIfile\fR" 4
7544 .IX Item "-include file"
7545 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
7546 line of the primary source file.  However, the first directory searched
7547 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
7548 the directory containing the main source file.  If not found there, it
7549 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
7550 chain as normal.
7551 .Sp
7552 If multiple \fB\-include\fR options are given, the files are included
7553 in the order they appear on the command line.
7554 .IP "\fB\-imacros\fR \fIfile\fR" 4
7555 .IX Item "-imacros file"
7556 Exactly like \fB\-include\fR, except that any output produced by
7557 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
7558 This allows you to acquire all the macros from a header without also
7559 processing its declarations.
7560 .Sp
7561 All files specified by \fB\-imacros\fR are processed before all files
7562 specified by \fB\-include\fR.
7563 .IP "\fB\-idirafter\fR \fIdir\fR" 4
7564 .IX Item "-idirafter dir"
7565 Search \fIdir\fR for header files, but do it \fIafter\fR all
7566 directories specified with \fB\-I\fR and the standard system directories
7567 have been exhausted.  \fIdir\fR is treated as a system include directory.
7568 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7569 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7570 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
7571 .IX Item "-iprefix prefix"
7572 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
7573 options.  If the prefix represents a directory, you should include the
7574 final \fB/\fR.
7575 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
7576 .IX Item "-iwithprefix dir"
7577 .PD 0
7578 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
7579 .IX Item "-iwithprefixbefore dir"
7580 .PD
7581 Append \fIdir\fR to the prefix specified previously with
7582 \&\fB\-iprefix\fR, and add the resulting directory to the include search
7583 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
7584 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
7585 .IP "\fB\-isysroot\fR \fIdir\fR" 4
7586 .IX Item "-isysroot dir"
7587 This option is like the \fB\-\-sysroot\fR option, but applies only to
7588 header files.  See the \fB\-\-sysroot\fR option for more information.
7589 .IP "\fB\-imultilib\fR \fIdir\fR" 4
7590 .IX Item "-imultilib dir"
7591 Use \fIdir\fR as a subdirectory of the directory containing
7592 target-specific \*(C+ headers.
7593 .IP "\fB\-isystem\fR \fIdir\fR" 4
7594 .IX Item "-isystem dir"
7595 Search \fIdir\fR for header files, after all directories specified by
7596 \&\fB\-I\fR but before the standard system directories.  Mark it
7597 as a system directory, so that it gets the same special treatment as
7598 is applied to the standard system directories.
7599 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7600 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7601 .IP "\fB\-iquote\fR \fIdir\fR" 4
7602 .IX Item "-iquote dir"
7603 Search \fIdir\fR only for header files requested with
7604 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7605 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
7606 \&\fB\-I\fR and before the standard system directories.
7607 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7608 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7609 .IP "\fB\-fdirectives\-only\fR" 4
7610 .IX Item "-fdirectives-only"
7611 When preprocessing, handle directives, but do not expand macros.
7612 .Sp
7613 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
7614 options.
7615 .Sp
7616 With \fB\-E\fR, preprocessing is limited to the handling of directives
7617 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
7618 preprocessor operations, such as macro expansion and trigraph
7619 conversion are not performed.  In addition, the \fB\-dD\fR option is
7620 implicitly enabled.
7621 .Sp
7622 With \fB\-fpreprocessed\fR, predefinition of command line and most
7623 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
7624 contextually dependent, are handled normally.  This enables compilation of
7625 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7626 .Sp
7627 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
7628 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
7629 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7630 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
7631 .IX Item "-fdollars-in-identifiers"
7632 Accept \fB$\fR in identifiers.
7633 .IP "\fB\-fextended\-identifiers\fR" 4
7634 .IX Item "-fextended-identifiers"
7635 Accept universal character names in identifiers.  This option is
7636 experimental; in a future version of \s-1GCC\s0, it will be enabled by
7637 default for C99 and \*(C+.
7638 .IP "\fB\-fpreprocessed\fR" 4
7639 .IX Item "-fpreprocessed"
7640 Indicate to the preprocessor that the input file has already been
7641 preprocessed.  This suppresses things like macro expansion, trigraph
7642 conversion, escaped newline splicing, and processing of most directives.
7643 The preprocessor still recognizes and removes comments, so that you can
7644 pass a file preprocessed with \fB\-C\fR to the compiler without
7645 problems.  In this mode the integrated preprocessor is little more than
7646 a tokenizer for the front ends.
7647 .Sp
7648 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
7649 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
7650 extensions that \s-1GCC\s0 uses for preprocessed files created by
7651 \&\fB\-save\-temps\fR.
7652 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
7653 .IX Item "-ftabstop=width"
7654 Set the distance between tab stops.  This helps the preprocessor report
7655 correct column numbers in warnings or errors, even if tabs appear on the
7656 line.  If the value is less than 1 or greater than 100, the option is
7657 ignored.  The default is 8.
7658 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
7659 .IX Item "-fexec-charset=charset"
7660 Set the execution character set, used for string and character
7661 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
7662 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7663 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
7664 .IX Item "-fwide-exec-charset=charset"
7665 Set the wide execution character set, used for wide string and
7666 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
7667 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
7668 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
7669 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
7670 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
7671 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
7672 .IX Item "-finput-charset=charset"
7673 Set the input character set, used for translation from the character
7674 set of the input file to the source character set used by \s-1GCC\s0.  If the
7675 locale does not specify, or \s-1GCC\s0 cannot get this information from the
7676 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
7677 or this command line option.  Currently the command line option takes
7678 precedence if there's a conflict.  \fIcharset\fR can be any encoding
7679 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7680 .IP "\fB\-fworking\-directory\fR" 4
7681 .IX Item "-fworking-directory"
7682 Enable generation of linemarkers in the preprocessor output that will
7683 let the compiler know the current working directory at the time of
7684 preprocessing.  When this option is enabled, the preprocessor will
7685 emit, after the initial linemarker, a second linemarker with the
7686 current working directory followed by two slashes.  \s-1GCC\s0 will use this
7687 directory, when it's present in the preprocessed input, as the
7688 directory emitted as the current working directory in some debugging
7689 information formats.  This option is implicitly enabled if debugging
7690 information is enabled, but this can be inhibited with the negated
7691 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
7692 present in the command line, this option has no effect, since no
7693 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
7694 .IP "\fB\-fno\-show\-column\fR" 4
7695 .IX Item "-fno-show-column"
7696 Do not print column numbers in diagnostics.  This may be necessary if
7697 diagnostics are being scanned by a program that does not understand the
7698 column numbers, such as \fBdejagnu\fR.
7699 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7700 .IX Item "-A predicate=answer"
7701 Make an assertion with the predicate \fIpredicate\fR and answer
7702 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
7703 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
7704 it does not use shell special characters.
7705 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7706 .IX Item "-A -predicate=answer"
7707 Cancel an assertion with the predicate \fIpredicate\fR and answer
7708 \&\fIanswer\fR.
7709 .IP "\fB\-dCHARS\fR" 4
7710 .IX Item "-dCHARS"
7711 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
7712 and must not be preceded by a space.  Other characters are interpreted
7713 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
7714 are silently ignored.  If you specify characters whose behavior
7715 conflicts, the result is undefined.
7716 .RS 4
7717 .IP "\fBM\fR" 4
7718 .IX Item "M"
7719 Instead of the normal output, generate a list of \fB#define\fR
7720 directives for all the macros defined during the execution of the
7721 preprocessor, including predefined macros.  This gives you a way of
7722 finding out what is predefined in your version of the preprocessor.
7723 Assuming you have no file \fIfoo.h\fR, the command
7724 .Sp
7725 .Vb 1
7726 \&        touch foo.h; cpp \-dM foo.h
7727 .Ve
7728 .Sp
7729 will show all the predefined macros.
7730 .Sp
7731 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
7732 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
7733 .IP "\fBD\fR" 4
7734 .IX Item "D"
7735 Like \fBM\fR except in two respects: it does \fInot\fR include the
7736 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
7737 directives and the result of preprocessing.  Both kinds of output go to
7738 the standard output file.
7739 .IP "\fBN\fR" 4
7740 .IX Item "N"
7741 Like \fBD\fR, but emit only the macro names, not their expansions.
7742 .IP "\fBI\fR" 4
7743 .IX Item "I"
7744 Output \fB#include\fR directives in addition to the result of
7745 preprocessing.
7746 .IP "\fBU\fR" 4
7747 .IX Item "U"
7748 Like \fBD\fR except that only macros that are expanded, or whose
7749 definedness is tested in preprocessor directives, are output; the
7750 output is delayed until the use or test of the macro; and
7751 \&\fB#undef\fR directives are also output for macros tested but
7752 undefined at the time.
7753 .RE
7754 .RS 4
7755 .RE
7756 .IP "\fB\-P\fR" 4
7757 .IX Item "-P"
7758 Inhibit generation of linemarkers in the output from the preprocessor.
7759 This might be useful when running the preprocessor on something that is
7760 not C code, and will be sent to a program which might be confused by the
7761 linemarkers.
7762 .IP "\fB\-C\fR" 4
7763 .IX Item "-C"
7764 Do not discard comments.  All comments are passed through to the output
7765 file, except for comments in processed directives, which are deleted
7766 along with the directive.
7767 .Sp
7768 You should be prepared for side effects when using \fB\-C\fR; it
7769 causes the preprocessor to treat comments as tokens in their own right.
7770 For example, comments appearing at the start of what would be a
7771 directive line have the effect of turning that line into an ordinary
7772 source line, since the first token on the line is no longer a \fB#\fR.
7773 .IP "\fB\-CC\fR" 4
7774 .IX Item "-CC"
7775 Do not discard comments, including during macro expansion.  This is
7776 like \fB\-C\fR, except that comments contained within macros are
7777 also passed through to the output file where the macro is expanded.
7778 .Sp
7779 In addition to the side-effects of the \fB\-C\fR option, the
7780 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
7781 to be converted to C\-style comments.  This is to prevent later use
7782 of that macro from inadvertently commenting out the remainder of
7783 the source line.
7784 .Sp
7785 The \fB\-CC\fR option is generally used to support lint comments.
7786 .IP "\fB\-traditional\-cpp\fR" 4
7787 .IX Item "-traditional-cpp"
7788 Try to imitate the behavior of old-fashioned C preprocessors, as
7789 opposed to \s-1ISO\s0 C preprocessors.
7790 .IP "\fB\-trigraphs\fR" 4
7791 .IX Item "-trigraphs"
7792 Process trigraph sequences.
7793 These are three-character sequences, all starting with \fB??\fR, that
7794 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
7795 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
7796 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
7797 standard-conforming modes it converts them.  See the \fB\-std\fR and
7798 \&\fB\-ansi\fR options.
7799 .Sp
7800 The nine trigraphs and their replacements are
7801 .Sp
7802 .Vb 2
7803 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
7804 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
7805 .Ve
7806 .IP "\fB\-remap\fR" 4
7807 .IX Item "-remap"
7808 Enable special code to work around file systems which only permit very
7809 short file names, such as MS-DOS.
7810 .IP "\fB\-\-help\fR" 4
7811 .IX Item "--help"
7812 .PD 0
7813 .IP "\fB\-\-target\-help\fR" 4
7814 .IX Item "--target-help"
7815 .PD
7816 Print text describing all the command line options instead of
7817 preprocessing anything.
7818 .IP "\fB\-v\fR" 4
7819 .IX Item "-v"
7820 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
7821 execution, and report the final form of the include path.
7822 .IP "\fB\-H\fR" 4
7823 .IX Item "-H"
7824 Print the name of each header file used, in addition to other normal
7825 activities.  Each name is indented to show how deep in the
7826 \&\fB#include\fR stack it is.  Precompiled header files are also
7827 printed, even if they are found to be invalid; an invalid precompiled
7828 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
7829 .IP "\fB\-version\fR" 4
7830 .IX Item "-version"
7831 .PD 0
7832 .IP "\fB\-\-version\fR" 4
7833 .IX Item "--version"
7834 .PD
7835 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
7836 preprocess as normal.  With two dashes, exit immediately.
7837 .Sh "Passing Options to the Assembler"
7838 .IX Subsection "Passing Options to the Assembler"
7839 You can pass options to the assembler.
7840 .IP "\fB\-Wa,\fR\fIoption\fR" 4
7841 .IX Item "-Wa,option"
7842 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
7843 contains commas, it is split into multiple options at the commas.
7844 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
7845 .IX Item "-Xassembler option"
7846 Pass \fIoption\fR as an option to the assembler.  You can use this to
7847 supply system-specific assembler options which \s-1GCC\s0 does not know how to
7848 recognize.
7849 .Sp
7850 If you want to pass an option that takes an argument, you must use
7851 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
7852 .Sh "Options for Linking"
7853 .IX Subsection "Options for Linking"
7854 These options come into play when the compiler links object files into
7855 an executable output file.  They are meaningless if the compiler is
7856 not doing a link step.
7857 .IP "\fIobject-file-name\fR" 4
7858 .IX Item "object-file-name"
7859 A file name that does not end in a special recognized suffix is
7860 considered to name an object file or library.  (Object files are
7861 distinguished from libraries by the linker according to the file
7862 contents.)  If linking is done, these object files are used as input
7863 to the linker.
7864 .IP "\fB\-c\fR" 4
7865 .IX Item "-c"
7866 .PD 0
7867 .IP "\fB\-S\fR" 4
7868 .IX Item "-S"
7869 .IP "\fB\-E\fR" 4
7870 .IX Item "-E"
7871 .PD
7872 If any of these options is used, then the linker is not run, and
7873 object file names should not be used as arguments.
7874 .IP "\fB\-l\fR\fIlibrary\fR" 4
7875 .IX Item "-llibrary"
7876 .PD 0
7877 .IP "\fB\-l\fR \fIlibrary\fR" 4
7878 .IX Item "-l library"
7879 .PD
7880 Search the library named \fIlibrary\fR when linking.  (The second
7881 alternative with the library as a separate argument is only for
7882 \&\s-1POSIX\s0 compliance and is not recommended.)
7883 .Sp
7884 It makes a difference where in the command you write this option; the
7885 linker searches and processes libraries and object files in the order they
7886 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
7887 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
7888 to functions in \fBz\fR, those functions may not be loaded.
7889 .Sp
7890 The linker searches a standard list of directories for the library,
7891 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
7892 then uses this file as if it had been specified precisely by name.
7893 .Sp
7894 The directories searched include several standard system directories
7895 plus any that you specify with \fB\-L\fR.
7896 .Sp
7897 Normally the files found this way are library files\-\-\-archive files
7898 whose members are object files.  The linker handles an archive file by
7899 scanning through it for members which define symbols that have so far
7900 been referenced but not defined.  But if the file that is found is an
7901 ordinary object file, it is linked in the usual fashion.  The only
7902 difference between using an \fB\-l\fR option and specifying a file name
7903 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
7904 and searches several directories.
7905 .IP "\fB\-lobjc\fR" 4
7906 .IX Item "-lobjc"
7907 You need this special case of the \fB\-l\fR option in order to
7908 link an Objective-C or Objective\-\*(C+ program.
7909 .IP "\fB\-nostartfiles\fR" 4
7910 .IX Item "-nostartfiles"
7911 Do not use the standard system startup files when linking.
7912 The standard system libraries are used normally, unless \fB\-nostdlib\fR
7913 or \fB\-nodefaultlibs\fR is used.
7914 .IP "\fB\-nodefaultlibs\fR" 4
7915 .IX Item "-nodefaultlibs"
7916 Do not use the standard system libraries when linking.
7917 Only the libraries you specify will be passed to the linker.
7918 The standard startup files are used normally, unless \fB\-nostartfiles\fR
7919 is used.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
7920 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
7921 These entries are usually resolved by entries in
7922 libc.  These entry points should be supplied through some other
7923 mechanism when this option is specified.
7924 .IP "\fB\-nostdlib\fR" 4
7925 .IX Item "-nostdlib"
7926 Do not use the standard system startup files or libraries when linking.
7927 No startup files and only the libraries you specify will be passed to
7928 the linker.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
7929 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
7930 These entries are usually resolved by entries in
7931 libc.  These entry points should be supplied through some other
7932 mechanism when this option is specified.
7933 .Sp
7934 One of the standard libraries bypassed by \fB\-nostdlib\fR and
7935 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
7936 that \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
7937 needs for some languages.
7938 .Sp
7939 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
7940 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
7941 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
7942 This ensures that you have no unresolved references to internal \s-1GCC\s0
7943 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
7944 constructors will be called.)
7945 .IP "\fB\-pie\fR" 4
7946 .IX Item "-pie"
7947 Produce a position independent executable on targets which support it.
7948 For predictable results, you must also specify the same set of options
7949 that were used to generate code (\fB\-fpie\fR, \fB\-fPIE\fR,
7950 or model suboptions) when you specify this option.
7951 .IP "\fB\-rdynamic\fR" 4
7952 .IX Item "-rdynamic"
7953 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
7954 that support it. This instructs the linker to add all symbols, not
7955 only used ones, to the dynamic symbol table. This option is needed
7956 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
7957 from within a program.
7958 .IP "\fB\-s\fR" 4
7959 .IX Item "-s"
7960 Remove all symbol table and relocation information from the executable.
7961 .IP "\fB\-static\fR" 4
7962 .IX Item "-static"
7963 On systems that support dynamic linking, this prevents linking with the shared
7964 libraries.  On other systems, this option has no effect.
7965 .IP "\fB\-shared\fR" 4
7966 .IX Item "-shared"
7967 Produce a shared object which can then be linked with other objects to
7968 form an executable.  Not all systems support this option.  For predictable
7969 results, you must also specify the same set of options that were used to
7970 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
7971 when you specify this option.[1]
7972 .IP "\fB\-shared\-libgcc\fR" 4
7973 .IX Item "-shared-libgcc"
7974 .PD 0
7975 .IP "\fB\-static\-libgcc\fR" 4
7976 .IX Item "-static-libgcc"
7977 .PD
7978 On systems that provide \fIlibgcc\fR as a shared library, these options
7979 force the use of either the shared or static version respectively.
7980 If no shared version of \fIlibgcc\fR was built when the compiler was
7981 configured, these options have no effect.
7982 .Sp
7983 There are several situations in which an application should use the
7984 shared \fIlibgcc\fR instead of the static version.  The most common
7985 of these is when the application wishes to throw and catch exceptions
7986 across different shared libraries.  In that case, each of the libraries
7987 as well as the application itself should use the shared \fIlibgcc\fR.
7988 .Sp
7989 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
7990 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
7991 executable, because \*(C+ and Java programs typically use exceptions, so
7992 this is the right thing to do.
7993 .Sp
7994 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
7995 find that they will not always be linked with the shared \fIlibgcc\fR.
7996 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
7997 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
7998 it will link the shared version of \fIlibgcc\fR into shared libraries
7999 by default.  Otherwise, it will take advantage of the linker and optimize
8000 away the linking with the shared version of \fIlibgcc\fR, linking with
8001 the static version of libgcc by default.  This allows exceptions to
8002 propagate through such shared libraries, without incurring relocation
8003 costs at library load time.
8004 .Sp
8005 However, if a library or main executable is supposed to throw or catch
8006 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
8007 for the languages used in the program, or using the option
8008 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
8009 \&\fIlibgcc\fR.
8010 .IP "\fB\-symbolic\fR" 4
8011 .IX Item "-symbolic"
8012 Bind references to global symbols when building a shared object.  Warn
8013 about any unresolved references (unless overridden by the link editor
8014 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
8015 this option.
8016 .IP "\fB\-T\fR \fIscript\fR" 4
8017 .IX Item "-T script"
8018 Use \fIscript\fR as the linker script.  This option is supported by most
8019 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
8020 targets without an operating system, the \fB\-T\fR option may be required 
8021 when linking to avoid references to undefined symbols.
8022 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
8023 .IX Item "-Xlinker option"
8024 Pass \fIoption\fR as an option to the linker.  You can use this to
8025 supply system-specific linker options which \s-1GCC\s0 does not know how to
8026 recognize.
8027 .Sp
8028 If you want to pass an option that takes a separate argument, you must use
8029 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
8030 For example, to pass \fB\-assert definitions\fR, you must write
8031 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
8032 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
8033 string as a single argument, which is not what the linker expects.
8034 .Sp
8035 When using the \s-1GNU\s0 linker, it is usually more convenient to pass 
8036 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
8037 syntax than as separate arguments.  For example, you can specify
8038 \&\fB\-Xlinker \-Map=output.map\fR rather than
8039 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
8040 this syntax for command-line options.
8041 .IP "\fB\-Wl,\fR\fIoption\fR" 4
8042 .IX Item "-Wl,option"
8043 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
8044 commas, it is split into multiple options at the commas.  You can use this
8045 syntax to pass an argument to the option.  
8046 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
8047 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
8048 \&\fB\-Wl,\-Map=output.map\fR.
8049 .IP "\fB\-u\fR \fIsymbol\fR" 4
8050 .IX Item "-u symbol"
8051 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
8052 library modules to define it.  You can use \fB\-u\fR multiple times with
8053 different symbols to force loading of additional library modules.
8054 .Sh "Options for Directory Search"
8055 .IX Subsection "Options for Directory Search"
8056 These options specify directories to search for header files, for
8057 libraries and for parts of the compiler:
8058 .IP "\fB\-I\fR\fIdir\fR" 4
8059 .IX Item "-Idir"
8060 Add the directory \fIdir\fR to the head of the list of directories to be
8061 searched for header files.  This can be used to override a system header
8062 file, substituting your own version, since these directories are
8063 searched before the system header file directories.  However, you should
8064 not use this option to add directories that contain vendor-supplied
8065 system header files (use \fB\-isystem\fR for that).  If you use more than
8066 one \fB\-I\fR option, the directories are scanned in left-to-right
8067 order; the standard system directories come after.
8068 .Sp
8069 If a standard system include directory, or a directory specified with
8070 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
8071 option will be ignored.  The directory will still be searched but as a
8072 system directory at its normal position in the system include chain.
8073 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
8074 the ordering for the include_next directive are not inadvertently changed.
8075 If you really need to change the search order for system directories,
8076 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
8077 .IP "\fB\-iquote\fR\fIdir\fR" 4
8078 .IX Item "-iquotedir"
8079 Add the directory \fIdir\fR to the head of the list of directories to
8080 be searched for header files only for the case of \fB#include
8081 "\fR\fIfile\fR\fB"\fR; they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR,
8082 otherwise just like \fB\-I\fR.
8083 .IP "\fB\-L\fR\fIdir\fR" 4
8084 .IX Item "-Ldir"
8085 Add directory \fIdir\fR to the list of directories to be searched
8086 for \fB\-l\fR.
8087 .IP "\fB\-B\fR\fIprefix\fR" 4
8088 .IX Item "-Bprefix"
8089 This option specifies where to find the executables, libraries,
8090 include files, and data files of the compiler itself.
8091 .Sp
8092 The compiler driver program runs one or more of the subprograms
8093 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
8094 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
8095 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
8096 .Sp
8097 For each subprogram to be run, the compiler driver first tries the
8098 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
8099 was not specified, the driver tries two standard prefixes, which are
8100 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
8101 those results in a file name that is found, the unmodified program
8102 name is searched for using the directories specified in your
8103 \&\fB\s-1PATH\s0\fR environment variable.
8104 .Sp
8105 The compiler will check to see if the path provided by the \fB\-B\fR
8106 refers to a directory, and if necessary it will add a directory
8107 separator character at the end of the path.
8108 .Sp
8109 \&\fB\-B\fR prefixes that effectively specify directory names also apply
8110 to libraries in the linker, because the compiler translates these
8111 options into \fB\-L\fR options for the linker.  They also apply to
8112 includes files in the preprocessor, because the compiler translates these
8113 options into \fB\-isystem\fR options for the preprocessor.  In this case,
8114 the compiler appends \fBinclude\fR to the prefix.
8115 .Sp
8116 The run-time support file \fIlibgcc.a\fR can also be searched for using
8117 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
8118 standard prefixes above are tried, and that is all.  The file is left
8119 out of the link if it is not found by those means.
8120 .Sp
8121 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
8122 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
8123 .Sp
8124 As a special kludge, if the path provided by \fB\-B\fR is
8125 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
8126 9, then it will be replaced by \fI[dir/]include\fR.  This is to help
8127 with boot-strapping the compiler.
8128 .IP "\fB\-specs=\fR\fIfile\fR" 4
8129 .IX Item "-specs=file"
8130 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
8131 file, in order to override the defaults that the \fIgcc\fR driver
8132 program uses when determining what switches to pass to \fIcc1\fR,
8133 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
8134 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
8135 are processed in order, from left to right.
8136 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
8137 .IX Item "--sysroot=dir"
8138 Use \fIdir\fR as the logical root directory for headers and libraries.
8139 For example, if the compiler would normally search for headers in
8140 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it will instead
8141 search \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
8142 .Sp
8143 If you use both this option and the \fB\-isysroot\fR option, then
8144 the \fB\-\-sysroot\fR option will apply to libraries, but the
8145 \&\fB\-isysroot\fR option will apply to header files.
8146 .Sp
8147 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
8148 for this option.  If your linker does not support this option, the
8149 header file aspect of \fB\-\-sysroot\fR will still work, but the
8150 library aspect will not.
8151 .IP "\fB\-I\-\fR" 4
8152 .IX Item "-I-"
8153 This option has been deprecated.  Please use \fB\-iquote\fR instead for
8154 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
8155 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
8156 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
8157 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
8158 .Sp
8159 If additional directories are specified with \fB\-I\fR options after
8160 the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
8161 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
8162 this way.)
8163 .Sp
8164 In addition, the \fB\-I\-\fR option inhibits the use of the current
8165 directory (where the current input file came from) as the first search
8166 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
8167 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
8168 searching the directory which was current when the compiler was
8169 invoked.  That is not exactly the same as what the preprocessor does
8170 by default, but it is often satisfactory.
8171 .Sp
8172 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
8173 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
8174 independent.
8175 .Sh "Specifying Target Machine and Compiler Version"
8176 .IX Subsection "Specifying Target Machine and Compiler Version"
8177 The usual way to run \s-1GCC\s0 is to run the executable called \fIgcc\fR, or
8178 \&\fI<machine>\-gcc\fR when cross-compiling, or
8179 \&\fI<machine>\-gcc\-<version>\fR to run a version other than the one that
8180 was installed last.  Sometimes this is inconvenient, so \s-1GCC\s0 provides
8181 options that will switch to another cross-compiler or version.
8182 .IP "\fB\-b\fR \fImachine\fR" 4
8183 .IX Item "-b machine"
8184 The argument \fImachine\fR specifies the target machine for compilation.
8185 .Sp
8186 The value to use for \fImachine\fR is the same as was specified as the
8187 machine type when configuring \s-1GCC\s0 as a cross-compiler.  For
8188 example, if a cross-compiler was configured with \fBconfigure
8189 arm-elf\fR, meaning to compile for an arm processor with elf binaries,
8190 then you would specify \fB\-b arm-elf\fR to run that cross compiler.
8191 Because there are other options beginning with \fB\-b\fR, the
8192 configuration must contain a hyphen, or \fB\-b\fR alone should be one
8193 argument followed by the configuration in the next argument.
8194 .IP "\fB\-V\fR \fIversion\fR" 4
8195 .IX Item "-V version"
8196 The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
8197 This is useful when multiple versions are installed.  For example,
8198 \&\fIversion\fR might be \fB4.0\fR, meaning to run \s-1GCC\s0 version 4.0.
8199 .PP
8200 The \fB\-V\fR and \fB\-b\fR options work by running the
8201 \&\fI<machine>\-gcc\-<version>\fR executable, so there's no real reason to
8202 use them if you can just run that directly.
8203 .Sh "Hardware Models and Configurations"
8204 .IX Subsection "Hardware Models and Configurations"
8205 Earlier we discussed the standard option \fB\-b\fR which chooses among
8206 different installed compilers for completely different target
8207 machines, such as \s-1VAX\s0 vs. 68000 vs. 80386.
8208 .PP
8209 In addition, each of these target machine types can have its own
8210 special options, starting with \fB\-m\fR, to choose among various
8211 hardware models or configurations\-\-\-for example, 68010 vs 68020,
8212 floating coprocessor or none.  A single installed version of the
8213 compiler can compile for any model or configuration, according to the
8214 options specified.
8215 .PP
8216 Some configurations of the compiler also support additional special
8217 options, usually for compatibility with other compilers on the same
8218 platform.
8219 .PP
8220 \fI\s-1ARC\s0 Options\fR
8221 .IX Subsection "ARC Options"
8222 .PP
8223 These options are defined for \s-1ARC\s0 implementations:
8224 .IP "\fB\-EL\fR" 4
8225 .IX Item "-EL"
8226 Compile code for little endian mode.  This is the default.
8227 .IP "\fB\-EB\fR" 4
8228 .IX Item "-EB"
8229 Compile code for big endian mode.
8230 .IP "\fB\-mmangle\-cpu\fR" 4
8231 .IX Item "-mmangle-cpu"
8232 Prepend the name of the cpu to all public symbol names.
8233 In multiple-processor systems, there are many \s-1ARC\s0 variants with different
8234 instruction and register set characteristics.  This flag prevents code
8235 compiled for one cpu to be linked with code compiled for another.
8236 No facility exists for handling variants that are \*(L"almost identical\*(R".
8237 This is an all or nothing option.
8238 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
8239 .IX Item "-mcpu=cpu"
8240 Compile code for \s-1ARC\s0 variant \fIcpu\fR.
8241 Which variants are supported depend on the configuration.
8242 All variants support \fB\-mcpu=base\fR, this is the default.
8243 .IP "\fB\-mtext=\fR\fItext-section\fR" 4
8244 .IX Item "-mtext=text-section"
8245 .PD 0
8246 .IP "\fB\-mdata=\fR\fIdata-section\fR" 4
8247 .IX Item "-mdata=data-section"
8248 .IP "\fB\-mrodata=\fR\fIreadonly-data-section\fR" 4
8249 .IX Item "-mrodata=readonly-data-section"
8250 .PD
8251 Put functions, data, and readonly data in \fItext-section\fR,
8252 \&\fIdata-section\fR, and \fIreadonly-data-section\fR respectively
8253 by default.  This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
8254 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
8255 .IX Item "-mfix-cortex-m3-ldrd"
8256 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
8257 with overlapping destination and base registers are used.  This option avoids
8258 generating these instructions.  This option is enabled by default when
8259 \&\fB\-mcpu=cortex\-m3\fR is specified.
8260 .PP
8261 \fI\s-1ARM\s0 Options\fR
8262 .IX Subsection "ARM Options"
8263 .PP
8264 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
8265 architectures:
8266 .IP "\fB\-mabi=\fR\fIname\fR" 4
8267 .IX Item "-mabi=name"
8268 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
8269 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
8270 .IP "\fB\-mapcs\-frame\fR" 4
8271 .IX Item "-mapcs-frame"
8272 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
8273 Standard for all functions, even if this is not strictly necessary for
8274 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
8275 with this option will cause the stack frames not to be generated for
8276 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
8277 .IP "\fB\-mapcs\fR" 4
8278 .IX Item "-mapcs"
8279 This is a synonym for \fB\-mapcs\-frame\fR.
8280 .IP "\fB\-mthumb\-interwork\fR" 4
8281 .IX Item "-mthumb-interwork"
8282 Generate code which supports calling between the \s-1ARM\s0 and Thumb
8283 instruction sets.  Without this option the two instruction sets cannot
8284 be reliably used inside one program.  The default is
8285 \&\fB\-mno\-thumb\-interwork\fR, since slightly larger code is generated
8286 when \fB\-mthumb\-interwork\fR is specified.
8287 .IP "\fB\-mno\-sched\-prolog\fR" 4
8288 .IX Item "-mno-sched-prolog"
8289 Prevent the reordering of instructions in the function prolog, or the
8290 merging of those instruction with the instructions in the function's
8291 body.  This means that all functions will start with a recognizable set
8292 of instructions (or in fact one of a choice from a small set of
8293 different function prologues), and this information can be used to
8294 locate the start if functions inside an executable piece of code.  The
8295 default is \fB\-msched\-prolog\fR.
8296 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
8297 .IX Item "-mfloat-abi=name"
8298 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
8299 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
8300 .Sp
8301 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing 
8302 library calls for floating-point operations.
8303 \&\fBsoftfp\fR allows the generation of code using hardware floating-point 
8304 instructions, but still uses the soft-float calling conventions.  
8305 \&\fBhard\fR allows generation of floating-point instructions 
8306 and uses FPU-specific calling conventions.
8307 .Sp
8308 Using \fB\-mfloat\-abi=hard\fR with \s-1VFP\s0 coprocessors is not supported.
8309 Use \fB\-mfloat\-abi=softfp\fR with the appropriate \fB\-mfpu\fR option
8310 to allow the compiler to generate code that makes use of the hardware
8311 floating-point capabilities for these CPUs.
8312 .Sp
8313 The default depends on the specific target configuration.  Note that
8314 the hard-float and soft-float ABIs are not link-compatible; you must
8315 compile your entire program with the same \s-1ABI\s0, and link with a
8316 compatible set of libraries.
8317 .IP "\fB\-mhard\-float\fR" 4
8318 .IX Item "-mhard-float"
8319 Equivalent to \fB\-mfloat\-abi=hard\fR.
8320 .IP "\fB\-msoft\-float\fR" 4
8321 .IX Item "-msoft-float"
8322 Equivalent to \fB\-mfloat\-abi=soft\fR.
8323 .IP "\fB\-mlittle\-endian\fR" 4
8324 .IX Item "-mlittle-endian"
8325 Generate code for a processor running in little-endian mode.  This is
8326 the default for all standard configurations.
8327 .IP "\fB\-mbig\-endian\fR" 4
8328 .IX Item "-mbig-endian"
8329 Generate code for a processor running in big-endian mode; the default is
8330 to compile code for a little-endian processor.
8331 .IP "\fB\-mwords\-little\-endian\fR" 4
8332 .IX Item "-mwords-little-endian"
8333 This option only applies when generating code for big-endian processors.
8334 Generate code for a little-endian word order but a big-endian byte
8335 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
8336 option should only be used if you require compatibility with code for
8337 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
8338 2.8.
8339 .IP "\fB\-mcpu=\fR\fIname\fR" 4
8340 .IX Item "-mcpu=name"
8341 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
8342 to determine what kind of instructions it can emit when generating
8343 assembly code.  Permissible names are: \fBarm2\fR, \fBarm250\fR,
8344 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
8345 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
8346 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
8347 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
8348 \&\fBarm720\fR,
8349 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
8350 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
8351 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
8352 \&\fBstrongarm1110\fR,
8353 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
8354 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
8355 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
8356 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
8357 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
8358 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
8359 \&\fBarm1156t2\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
8360 \&\fBcortex\-a8\fR, \fBcortex\-a9\fR,
8361 \&\fBcortex\-r4\fR, \fBcortex\-r4f\fR, \fBcortex\-m3\fR,
8362 \&\fBcortex\-m1\fR,
8363 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8364 .IP "\fB\-mtune=\fR\fIname\fR" 4
8365 .IX Item "-mtune=name"
8366 This option is very similar to the \fB\-mcpu=\fR option, except that
8367 instead of specifying the actual target processor type, and hence
8368 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
8369 tune the performance of the code as if the target were of the type
8370 specified in this option, but still choosing the instructions that it
8371 will generate based on the cpu specified by a \fB\-mcpu=\fR option.
8372 For some \s-1ARM\s0 implementations better performance can be obtained by using
8373 this option.
8374 .IP "\fB\-march=\fR\fIname\fR" 4
8375 .IX Item "-march=name"
8376 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
8377 name to determine what kind of instructions it can emit when generating
8378 assembly code.  This option can be used in conjunction with or instead
8379 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
8380 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
8381 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
8382 \&\fBarmv6\fR, \fBarmv6j\fR,
8383 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
8384 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
8385 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8386 .IP "\fB\-mfpu=\fR\fIname\fR" 4
8387 .IX Item "-mfpu=name"
8388 .PD 0
8389 .IP "\fB\-mfpe=\fR\fInumber\fR" 4
8390 .IX Item "-mfpe=number"
8391 .IP "\fB\-mfp=\fR\fInumber\fR" 4
8392 .IX Item "-mfp=number"
8393 .PD
8394 This specifies what floating point hardware (or hardware emulation) is
8395 available on the target.  Permissible names are: \fBfpa\fR, \fBfpe2\fR,
8396 \&\fBfpe3\fR, \fBmaverick\fR, \fBvfp\fR, \fBvfpv3\fR, \fBvfpv3\-d16\fR and
8397 \&\fBneon\fR.  \fB\-mfp\fR and \fB\-mfpe\fR
8398 are synonyms for \fB\-mfpu\fR=\fBfpe\fR\fInumber\fR, for compatibility
8399 with older versions of \s-1GCC\s0.
8400 .Sp
8401 If \fB\-msoft\-float\fR is specified this specifies the format of
8402 floating point values.
8403 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
8404 .IX Item "-mstructure-size-boundary=n"
8405 The size of all structures and unions will be rounded up to a multiple
8406 of the number of bits set by this option.  Permissible values are 8, 32
8407 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
8408 targeted toolchain the default value is 8.  A value of 64 is only allowed
8409 if the underlying \s-1ABI\s0 supports it.
8410 .Sp
8411 Specifying the larger number can produce faster, more efficient code, but
8412 can also increase the size of the program.  Different values are potentially
8413 incompatible.  Code compiled with one value cannot necessarily expect to
8414 work with code or libraries compiled with another value, if they exchange
8415 information using structures or unions.
8416 .IP "\fB\-mabort\-on\-noreturn\fR" 4
8417 .IX Item "-mabort-on-noreturn"
8418 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
8419 \&\f(CW\*(C`noreturn\*(C'\fR function.  It will be executed if the function tries to
8420 return.
8421 .IP "\fB\-mlong\-calls\fR" 4
8422 .IX Item "-mlong-calls"
8423 .PD 0
8424 .IP "\fB\-mno\-long\-calls\fR" 4
8425 .IX Item "-mno-long-calls"
8426 .PD
8427 Tells the compiler to perform function calls by first loading the
8428 address of the function into a register and then performing a subroutine
8429 call on this register.  This switch is needed if the target function
8430 will lie outside of the 64 megabyte addressing range of the offset based
8431 version of subroutine call instruction.
8432 .Sp
8433 Even if this switch is enabled, not all function calls will be turned
8434 into long calls.  The heuristic is that static functions, functions
8435 which have the \fBshort-call\fR attribute, functions that are inside
8436 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
8437 definitions have already been compiled within the current compilation
8438 unit, will not be turned into long calls.  The exception to this rule is
8439 that weak function definitions, functions with the \fBlong-call\fR
8440 attribute or the \fBsection\fR attribute, and functions that are within
8441 the scope of a \fB#pragma long_calls\fR directive, will always be
8442 turned into long calls.
8443 .Sp
8444 This feature is not enabled by default.  Specifying
8445 \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
8446 placing the function calls within the scope of a \fB#pragma
8447 long_calls_off\fR directive.  Note these switches have no effect on how
8448 the compiler generates code to handle function calls via function
8449 pointers.
8450 .IP "\fB\-msingle\-pic\-base\fR" 4
8451 .IX Item "-msingle-pic-base"
8452 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
8453 loading it in the prologue for each function.  The run-time system is
8454 responsible for initializing this register with an appropriate value
8455 before execution begins.
8456 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
8457 .IX Item "-mpic-register=reg"
8458 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
8459 unless stack-checking is enabled, when R9 is used.
8460 .IP "\fB\-mcirrus\-fix\-invalid\-insns\fR" 4
8461 .IX Item "-mcirrus-fix-invalid-insns"
8462 Insert NOPs into the instruction stream to in order to work around
8463 problems with invalid Maverick instruction combinations.  This option
8464 is only valid if the \fB\-mcpu=ep9312\fR option has been used to
8465 enable generation of instructions for the Cirrus Maverick floating
8466 point co-processor.  This option is not enabled by default, since the
8467 problem is only present in older Maverick implementations.  The default
8468 can be re-enabled by use of the \fB\-mno\-cirrus\-fix\-invalid\-insns\fR
8469 switch.
8470 .IP "\fB\-mpoke\-function\-name\fR" 4
8471 .IX Item "-mpoke-function-name"
8472 Write the name of each function into the text section, directly
8473 preceding the function prologue.  The generated code is similar to this:
8474 .Sp
8475 .Vb 9
8476 \&             t0
8477 \&                 .ascii "arm_poke_function_name", 0
8478 \&                 .align
8479 \&             t1
8480 \&                 .word 0xff000000 + (t1 \- t0)
8481 \&             arm_poke_function_name
8482 \&                 mov     ip, sp
8483 \&                 stmfd   sp!, {fp, ip, lr, pc}
8484 \&                 sub     fp, ip, #4
8485 .Ve
8486 .Sp
8487 When performing a stack backtrace, code can inspect the value of
8488 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
8489 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
8490 there is a function name embedded immediately preceding this location
8491 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
8492 .IP "\fB\-mthumb\fR" 4
8493 .IX Item "-mthumb"
8494 Generate code for the Thumb instruction set.  The default is to
8495 use the 32\-bit \s-1ARM\s0 instruction set.
8496 This option automatically enables either 16\-bit Thumb\-1 or
8497 mixed 16/32\-bit Thumb\-2 instructions based on the \fB\-mcpu=\fR\fIname\fR
8498 and \fB\-march=\fR\fIname\fR options.
8499 .IP "\fB\-mtpcs\-frame\fR" 4
8500 .IX Item "-mtpcs-frame"
8501 Generate a stack frame that is compliant with the Thumb Procedure Call
8502 Standard for all non-leaf functions.  (A leaf function is one that does
8503 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
8504 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
8505 .IX Item "-mtpcs-leaf-frame"
8506 Generate a stack frame that is compliant with the Thumb Procedure Call
8507 Standard for all leaf functions.  (A leaf function is one that does
8508 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
8509 .IP "\fB\-mcallee\-super\-interworking\fR" 4
8510 .IX Item "-mcallee-super-interworking"
8511 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
8512 instruction set header which switches to Thumb mode before executing the
8513 rest of the function.  This allows these functions to be called from
8514 non-interworking code.
8515 .IP "\fB\-mcaller\-super\-interworking\fR" 4
8516 .IX Item "-mcaller-super-interworking"
8517 Allows calls via function pointers (including virtual functions) to
8518 execute correctly regardless of whether the target code has been
8519 compiled for interworking or not.  There is a small overhead in the cost
8520 of executing a function pointer if this option is enabled.
8521 .IP "\fB\-mtp=\fR\fIname\fR" 4
8522 .IX Item "-mtp=name"
8523 Specify the access model for the thread local storage pointer.  The valid
8524 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
8525 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
8526 (supported in the arm6k architecture), and \fBauto\fR, which uses the
8527 best available method for the selected processor.  The default setting is
8528 \&\fBauto\fR.
8529 .IP "\fB\-mword\-relocations\fR" 4
8530 .IX Item "-mword-relocations"
8531 Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
8532 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
8533 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
8534 is specified.
8535 .PP
8536 \fI\s-1AVR\s0 Options\fR
8537 .IX Subsection "AVR Options"
8538 .PP
8539 These options are defined for \s-1AVR\s0 implementations:
8540 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
8541 .IX Item "-mmcu=mcu"
8542 Specify \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
8543 .Sp
8544 Instruction set avr1 is for the minimal \s-1AVR\s0 core, not supported by the C
8545 compiler, only for assembler programs (\s-1MCU\s0 types: at90s1200, attiny10,
8546 attiny11, attiny12, attiny15, attiny28).
8547 .Sp
8548 Instruction set avr2 (default) is for the classic \s-1AVR\s0 core with up to
8549 8K program memory space (\s-1MCU\s0 types: at90s2313, at90s2323, attiny22,
8550 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
8551 at90c8534, at90s8535).
8552 .Sp
8553 Instruction set avr3 is for the classic \s-1AVR\s0 core with up to 128K program
8554 memory space (\s-1MCU\s0 types: atmega103, atmega603, at43usb320, at76c711).
8555 .Sp
8556 Instruction set avr4 is for the enhanced \s-1AVR\s0 core with up to 8K program
8557 memory space (\s-1MCU\s0 types: atmega8, atmega83, atmega85).
8558 .Sp
8559 Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
8560 memory space (\s-1MCU\s0 types: atmega16, atmega161, atmega163, atmega32, atmega323,
8561 atmega64, atmega128, at43usb355, at94k).
8562 .IP "\fB\-msize\fR" 4
8563 .IX Item "-msize"
8564 Output instruction sizes to the asm file.
8565 .IP "\fB\-mno\-interrupts\fR" 4
8566 .IX Item "-mno-interrupts"
8567 Generated code is not compatible with hardware interrupts.
8568 Code size will be smaller.
8569 .IP "\fB\-mcall\-prologues\fR" 4
8570 .IX Item "-mcall-prologues"
8571 Functions prologues/epilogues expanded as call to appropriate
8572 subroutines.  Code size will be smaller.
8573 .IP "\fB\-mno\-tablejump\fR" 4
8574 .IX Item "-mno-tablejump"
8575 Do not generate tablejump insns which sometimes increase code size.
8576 The option is now deprecated in favor of the equivalent 
8577 \&\fB\-fno\-jump\-tables\fR
8578 .IP "\fB\-mtiny\-stack\fR" 4
8579 .IX Item "-mtiny-stack"
8580 Change only the low 8 bits of the stack pointer.
8581 .IP "\fB\-mint8\fR" 4
8582 .IX Item "-mint8"
8583 Assume int to be 8 bit integer.  This affects the sizes of all types: A
8584 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
8585 and long long will be 4 bytes.  Please note that this option does not
8586 comply to the C standards, but it will provide you with smaller code
8587 size.
8588 .PP
8589 \fIBlackfin Options\fR
8590 .IX Subsection "Blackfin Options"
8591 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
8592 .IX Item "-mcpu=cpu[-sirevision]"
8593 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
8594 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
8595 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
8596 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
8597 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
8598 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
8599 \&\fBbf561\fR.
8600 The optional \fIsirevision\fR specifies the silicon revision of the target
8601 Blackfin processor.  Any workarounds available for the targeted silicon revision
8602 will be enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
8603 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
8604 will be enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
8605 hexadecimal digits representing the major and minor numbers in the silicon
8606 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
8607 is not defined.  If \fIsirevision\fR is \fBany\fR, the
8608 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
8609 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
8610 silicon revision of the targeted Blackfin processor.
8611 .Sp
8612 Support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
8613 Only the processor macro is defined.
8614 Without this option, \fBbf532\fR is used as the processor by default.
8615 The corresponding predefined processor macros for \fIcpu\fR is to
8616 be defined.  And for \fBbfin-elf\fR toolchain, this causes the hardware \s-1BSP\s0
8617 provided by libgloss to be linked in if \fB\-msim\fR is not given.
8618 .IP "\fB\-msim\fR" 4
8619 .IX Item "-msim"
8620 Specifies that the program will be run on the simulator.  This causes
8621 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
8622 has effect only for \fBbfin-elf\fR toolchain.
8623 Certain other options, such as \fB\-mid\-shared\-library\fR and
8624 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
8625 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
8626 .IX Item "-momit-leaf-frame-pointer"
8627 Don't keep the frame pointer in a register for leaf functions.  This
8628 avoids the instructions to save, set up and restore frame pointers and
8629 makes an extra register available in leaf functions.  The option
8630 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
8631 which might make debugging harder.
8632 .IP "\fB\-mspecld\-anomaly\fR" 4
8633 .IX Item "-mspecld-anomaly"
8634 When enabled, the compiler will ensure that the generated code does not
8635 contain speculative loads after jump instructions. If this option is used,
8636 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
8637 .IP "\fB\-mno\-specld\-anomaly\fR" 4
8638 .IX Item "-mno-specld-anomaly"
8639 Don't generate extra code to prevent speculative loads from occurring.
8640 .IP "\fB\-mcsync\-anomaly\fR" 4
8641 .IX Item "-mcsync-anomaly"
8642 When enabled, the compiler will ensure that the generated code does not
8643 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
8644 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
8645 .IP "\fB\-mno\-csync\-anomaly\fR" 4
8646 .IX Item "-mno-csync-anomaly"
8647 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
8648 occurring too soon after a conditional branch.
8649 .IP "\fB\-mlow\-64k\fR" 4
8650 .IX Item "-mlow-64k"
8651 When enabled, the compiler is free to take advantage of the knowledge that
8652 the entire program fits into the low 64k of memory.
8653 .IP "\fB\-mno\-low\-64k\fR" 4
8654 .IX Item "-mno-low-64k"
8655 Assume that the program is arbitrarily large.  This is the default.
8656 .IP "\fB\-mstack\-check\-l1\fR" 4
8657 .IX Item "-mstack-check-l1"
8658 Do stack checking using information placed into L1 scratchpad memory by the
8659 uClinux kernel.
8660 .IP "\fB\-mid\-shared\-library\fR" 4
8661 .IX Item "-mid-shared-library"
8662 Generate code that supports shared libraries via the library \s-1ID\s0 method.
8663 This allows for execute in place and shared libraries in an environment
8664 without virtual memory management.  This option implies \fB\-fPIC\fR.
8665 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
8666 .IP "\fB\-mno\-id\-shared\-library\fR" 4
8667 .IX Item "-mno-id-shared-library"
8668 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
8669 This is the default.
8670 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
8671 .IX Item "-mleaf-id-shared-library"
8672 Generate code that supports shared libraries via the library \s-1ID\s0 method,
8673 but assumes that this library or executable won't link against any other
8674 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
8675 and calls.
8676 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
8677 .IX Item "-mno-leaf-id-shared-library"
8678 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
8679 libraries.  Slower code will be generated for jump and call insns.
8680 .IP "\fB\-mshared\-library\-id=n\fR" 4
8681 .IX Item "-mshared-library-id=n"
8682 Specified the identification number of the \s-1ID\s0 based shared library being
8683 compiled.  Specifying a value of 0 will generate more compact code, specifying
8684 other values will force the allocation of that number to the current
8685 library but is no more space or time efficient than omitting this option.
8686 .IP "\fB\-msep\-data\fR" 4
8687 .IX Item "-msep-data"
8688 Generate code that allows the data segment to be located in a different
8689 area of memory from the text segment.  This allows for execute in place in
8690 an environment without virtual memory management by eliminating relocations
8691 against the text section.
8692 .IP "\fB\-mno\-sep\-data\fR" 4
8693 .IX Item "-mno-sep-data"
8694 Generate code that assumes that the data segment follows the text segment.
8695 This is the default.
8696 .IP "\fB\-mlong\-calls\fR" 4
8697 .IX Item "-mlong-calls"
8698 .PD 0
8699 .IP "\fB\-mno\-long\-calls\fR" 4
8700 .IX Item "-mno-long-calls"
8701 .PD
8702 Tells the compiler to perform function calls by first loading the
8703 address of the function into a register and then performing a subroutine
8704 call on this register.  This switch is needed if the target function
8705 will lie outside of the 24 bit addressing range of the offset based
8706 version of subroutine call instruction.
8707 .Sp
8708 This feature is not enabled by default.  Specifying
8709 \&\fB\-mno\-long\-calls\fR will restore the default behavior.  Note these
8710 switches have no effect on how the compiler generates code to handle
8711 function calls via function pointers.
8712 .IP "\fB\-mfast\-fp\fR" 4
8713 .IX Item "-mfast-fp"
8714 Link with the fast floating-point library. This library relaxes some of
8715 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
8716 Not-a-Number (\s-1NAN\s0), in the interest of performance.
8717 .IP "\fB\-minline\-plt\fR" 4
8718 .IX Item "-minline-plt"
8719 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
8720 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
8721 .IP "\fB\-mmulticore\fR" 4
8722 .IX Item "-mmulticore"
8723 Build standalone application for multicore Blackfin processor. Proper
8724 start files and link scripts will be used to support multicore.
8725 This option defines \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. It can only be used with
8726 \&\fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR]. It can be used with
8727 \&\fB\-mcorea\fR or \fB\-mcoreb\fR. If it's used without
8728 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, single application/dual core
8729 programming model is used. In this model, the main function of Core B
8730 should be named as coreb_main. If it's used with \fB\-mcorea\fR or
8731 \&\fB\-mcoreb\fR, one application per core programming model is used.
8732 If this option is not used, single core application programming
8733 model is used.
8734 .IP "\fB\-mcorea\fR" 4
8735 .IX Item "-mcorea"
8736 Build standalone application for Core A of \s-1BF561\s0 when using
8737 one application per core programming model. Proper start files
8738 and link scripts will be used to support Core A. This option
8739 defines \f(CW\*(C`_\|_BFIN_COREA\*(C'\fR. It must be used with \fB\-mmulticore\fR.
8740 .IP "\fB\-mcoreb\fR" 4
8741 .IX Item "-mcoreb"
8742 Build standalone application for Core B of \s-1BF561\s0 when using
8743 one application per core programming model. Proper start files
8744 and link scripts will be used to support Core B. This option
8745 defines \f(CW\*(C`_\|_BFIN_COREB\*(C'\fR. When this option is used, coreb_main
8746 should be used instead of main. It must be used with
8747 \&\fB\-mmulticore\fR.
8748 .IP "\fB\-msdram\fR" 4
8749 .IX Item "-msdram"
8750 Build standalone application for \s-1SDRAM\s0. Proper start files and
8751 link scripts will be used to put the application into \s-1SDRAM\s0.
8752 Loader should initialize \s-1SDRAM\s0 before loading the application
8753 into \s-1SDRAM\s0. This option defines \f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR.
8754 .IP "\fB\-micplb\fR" 4
8755 .IX Item "-micplb"
8756 Assume that ICPLBs are enabled at runtime.  This has an effect on certain
8757 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
8758 are enabled; for standalone applications the default is off.
8759 .PP
8760 \fI\s-1CRIS\s0 Options\fR
8761 .IX Subsection "CRIS Options"
8762 .PP
8763 These options are defined specifically for the \s-1CRIS\s0 ports.
8764 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
8765 .IX Item "-march=architecture-type"
8766 .PD 0
8767 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
8768 .IX Item "-mcpu=architecture-type"
8769 .PD
8770 Generate code for the specified architecture.  The choices for
8771 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
8772 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
8773 Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
8774 \&\fBv10\fR.
8775 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
8776 .IX Item "-mtune=architecture-type"
8777 Tune to \fIarchitecture-type\fR everything applicable about the generated
8778 code, except for the \s-1ABI\s0 and the set of available instructions.  The
8779 choices for \fIarchitecture-type\fR are the same as for
8780 \&\fB\-march=\fR\fIarchitecture-type\fR.
8781 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
8782 .IX Item "-mmax-stack-frame=n"
8783 Warn when the stack frame of a function exceeds \fIn\fR bytes.
8784 .IP "\fB\-metrax4\fR" 4
8785 .IX Item "-metrax4"
8786 .PD 0
8787 .IP "\fB\-metrax100\fR" 4
8788 .IX Item "-metrax100"
8789 .PD
8790 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
8791 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
8792 .IP "\fB\-mmul\-bug\-workaround\fR" 4
8793 .IX Item "-mmul-bug-workaround"
8794 .PD 0
8795 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
8796 .IX Item "-mno-mul-bug-workaround"
8797 .PD
8798 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
8799 models where it applies.  This option is active by default.
8800 .IP "\fB\-mpdebug\fR" 4
8801 .IX Item "-mpdebug"
8802 Enable CRIS-specific verbose debug-related information in the assembly
8803 code.  This option also has the effect to turn off the \fB#NO_APP\fR
8804 formatted-code indicator to the assembler at the beginning of the
8805 assembly file.
8806 .IP "\fB\-mcc\-init\fR" 4
8807 .IX Item "-mcc-init"
8808 Do not use condition-code results from previous instruction; always emit
8809 compare and test instructions before use of condition codes.
8810 .IP "\fB\-mno\-side\-effects\fR" 4
8811 .IX Item "-mno-side-effects"
8812 Do not emit instructions with side-effects in addressing modes other than
8813 post-increment.
8814 .IP "\fB\-mstack\-align\fR" 4
8815 .IX Item "-mstack-align"
8816 .PD 0
8817 .IP "\fB\-mno\-stack\-align\fR" 4
8818 .IX Item "-mno-stack-align"
8819 .IP "\fB\-mdata\-align\fR" 4
8820 .IX Item "-mdata-align"
8821 .IP "\fB\-mno\-data\-align\fR" 4
8822 .IX Item "-mno-data-align"
8823 .IP "\fB\-mconst\-align\fR" 4
8824 .IX Item "-mconst-align"
8825 .IP "\fB\-mno\-const\-align\fR" 4
8826 .IX Item "-mno-const-align"
8827 .PD
8828 These options (no-options) arranges (eliminate arrangements) for the
8829 stack-frame, individual data and constants to be aligned for the maximum
8830 single data access size for the chosen \s-1CPU\s0 model.  The default is to
8831 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
8832 not affected by these options.
8833 .IP "\fB\-m32\-bit\fR" 4
8834 .IX Item "-m32-bit"
8835 .PD 0
8836 .IP "\fB\-m16\-bit\fR" 4
8837 .IX Item "-m16-bit"
8838 .IP "\fB\-m8\-bit\fR" 4
8839 .IX Item "-m8-bit"
8840 .PD
8841 Similar to the stack\- data\- and const-align options above, these options
8842 arrange for stack-frame, writable data and constants to all be 32\-bit,
8843 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
8844 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
8845 .IX Item "-mno-prologue-epilogue"
8846 .PD 0
8847 .IP "\fB\-mprologue\-epilogue\fR" 4
8848 .IX Item "-mprologue-epilogue"
8849 .PD
8850 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
8851 epilogue that sets up the stack-frame are omitted and no return
8852 instructions or return sequences are generated in the code.  Use this
8853 option only together with visual inspection of the compiled code: no
8854 warnings or errors are generated when call-saved registers must be saved,
8855 or storage for local variable needs to be allocated.
8856 .IP "\fB\-mno\-gotplt\fR" 4
8857 .IX Item "-mno-gotplt"
8858 .PD 0
8859 .IP "\fB\-mgotplt\fR" 4
8860 .IX Item "-mgotplt"
8861 .PD
8862 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
8863 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
8864 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
8865 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
8866 .IP "\fB\-melf\fR" 4
8867 .IX Item "-melf"
8868 Legacy no-op option only recognized with the cris-axis-elf and
8869 cris-axis-linux-gnu targets.
8870 .IP "\fB\-mlinux\fR" 4
8871 .IX Item "-mlinux"
8872 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
8873 .IP "\fB\-sim\fR" 4
8874 .IX Item "-sim"
8875 This option, recognized for the cris-axis-elf arranges
8876 to link with input-output functions from a simulator library.  Code,
8877 initialized data and zero-initialized data are allocated consecutively.
8878 .IP "\fB\-sim2\fR" 4
8879 .IX Item "-sim2"
8880 Like \fB\-sim\fR, but pass linker options to locate initialized data at
8881 0x40000000 and zero-initialized data at 0x80000000.
8882 .PP
8883 \fI\s-1CRX\s0 Options\fR
8884 .IX Subsection "CRX Options"
8885 .PP
8886 These options are defined specifically for the \s-1CRX\s0 ports.
8887 .IP "\fB\-mmac\fR" 4
8888 .IX Item "-mmac"
8889 Enable the use of multiply-accumulate instructions. Disabled by default.
8890 .IP "\fB\-mpush\-args\fR" 4
8891 .IX Item "-mpush-args"
8892 Push instructions will be used to pass outgoing arguments when functions
8893 are called. Enabled by default.
8894 .PP
8895 \fIDarwin Options\fR
8896 .IX Subsection "Darwin Options"
8897 .PP
8898 These options are defined for all architectures running the Darwin operating
8899 system.
8900 .PP
8901 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it will create
8902 an object file for the single architecture that it was built to
8903 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
8904 \&\fB\-arch\fR options are used; it does so by running the compiler or
8905 linker multiple times and joining the results together with
8906 \&\fIlipo\fR.
8907 .PP
8908 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
8909 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
8910 that \s-1GCC\s0 is targetting, like \fB\-mcpu\fR or \fB\-march\fR.  The
8911 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
8912 .PP
8913 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
8914 mismatch.  The assembler, \fIas\fR, will only permit instructions to
8915 be used that are valid for the subtype of the file it is generating,
8916 so you cannot put 64\-bit instructions in an \fBppc750\fR object file.
8917 The linker for shared libraries, \fI/usr/bin/libtool\fR, will fail
8918 and print an error if asked to create a shared library with a less
8919 restrictive subtype than its input files (for instance, trying to put
8920 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
8921 for executables, \fIld\fR, will quietly give the executable the most
8922 restrictive subtype of any of its input files.
8923 .IP "\fB\-F\fR\fIdir\fR" 4
8924 .IX Item "-Fdir"
8925 Add the framework directory \fIdir\fR to the head of the list of
8926 directories to be searched for header files.  These directories are
8927 interleaved with those specified by \fB\-I\fR options and are
8928 scanned in a left-to-right order.
8929 .Sp
8930 A framework directory is a directory with frameworks in it.  A
8931 framework is a directory with a \fB\*(L"Headers\*(R"\fR and/or
8932 \&\fB\*(L"PrivateHeaders\*(R"\fR directory contained directly in it that ends
8933 in \fB\*(L".framework\*(R"\fR.  The name of a framework is the name of this
8934 directory excluding the \fB\*(L".framework\*(R"\fR.  Headers associated with
8935 the framework are found in one of those two directories, with
8936 \&\fB\*(L"Headers\*(R"\fR being searched first.  A subframework is a framework
8937 directory that is in a framework's \fB\*(L"Frameworks\*(R"\fR directory.
8938 Includes of subframework headers can only appear in a header of a
8939 framework that contains the subframework, or in a sibling subframework
8940 header.  Two subframeworks are siblings if they occur in the same
8941 framework.  A subframework should not have the same name as a
8942 framework, a warning will be issued if this is violated.  Currently a
8943 subframework cannot have subframeworks, in the future, the mechanism
8944 may be extended to support this.  The standard frameworks can be found
8945 in \fB\*(L"/System/Library/Frameworks\*(R"\fR and
8946 \&\fB\*(L"/Library/Frameworks\*(R"\fR.  An example include looks like
8947 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fBFramework\fR denotes
8948 the name of the framework and header.h is found in the
8949 \&\fB\*(L"PrivateHeaders\*(R"\fR or \fB\*(L"Headers\*(R"\fR directory.
8950 .IP "\fB\-iframework\fR\fIdir\fR" 4
8951 .IX Item "-iframeworkdir"
8952 Like \fB\-F\fR except the directory is a treated as a system
8953 directory.  The main difference between this \fB\-iframework\fR and
8954 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
8955 warn about constructs contained within header files found via
8956 \&\fIdir\fR.  This option is valid only for the C family of languages.
8957 .IP "\fB\-gused\fR" 4
8958 .IX Item "-gused"
8959 Emit debugging information for symbols that are used.  For \s-1STABS\s0
8960 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
8961 This is by default \s-1ON\s0.
8962 .IP "\fB\-gfull\fR" 4
8963 .IX Item "-gfull"
8964 Emit debugging information for all symbols and types.
8965 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
8966 .IX Item "-mmacosx-version-min=version"
8967 The earliest version of MacOS X that this executable will run on
8968 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
8969 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
8970 .Sp
8971 If the compiler was built to use the system's headers by default,
8972 then the default for this option is the system version on which the
8973 compiler is running, otherwise the default is to make choices which
8974 are compatible with as many systems and code bases as possible.
8975 .IP "\fB\-mkernel\fR" 4
8976 .IX Item "-mkernel"
8977 Enable kernel development mode.  The \fB\-mkernel\fR option sets
8978 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-cxa\-atexit\fR,
8979 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
8980 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
8981 applicable.  This mode also sets \fB\-mno\-altivec\fR,
8982 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
8983 \&\fB\-mlong\-branch\fR for PowerPC targets.
8984 .IP "\fB\-mone\-byte\-bool\fR" 4
8985 .IX Item "-mone-byte-bool"
8986 Override the defaults for \fBbool\fR so that \fBsizeof(bool)==1\fR.
8987 By default \fBsizeof(bool)\fR is \fB4\fR when compiling for
8988 Darwin/PowerPC and \fB1\fR when compiling for Darwin/x86, so this
8989 option has no effect on x86.
8990 .Sp
8991 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
8992 to generate code that is not binary compatible with code generated
8993 without that switch.  Using this switch may require recompiling all
8994 other modules in a program, including system libraries.  Use this
8995 switch to conform to a non-default data model.
8996 .IP "\fB\-mfix\-and\-continue\fR" 4
8997 .IX Item "-mfix-and-continue"
8998 .PD 0
8999 .IP "\fB\-ffix\-and\-continue\fR" 4
9000 .IX Item "-ffix-and-continue"
9001 .IP "\fB\-findirect\-data\fR" 4
9002 .IX Item "-findirect-data"
9003 .PD
9004 Generate code suitable for fast turn around development.  Needed to
9005 enable gdb to dynamically load \f(CW\*(C`.o\*(C'\fR files into already running
9006 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
9007 are provided for backwards compatibility.
9008 .IP "\fB\-all_load\fR" 4
9009 .IX Item "-all_load"
9010 Loads all members of static archive libraries.
9011 See man \fIld\fR\|(1) for more information.
9012 .IP "\fB\-arch_errors_fatal\fR" 4
9013 .IX Item "-arch_errors_fatal"
9014 Cause the errors having to do with files that have the wrong architecture
9015 to be fatal.
9016 .IP "\fB\-bind_at_load\fR" 4
9017 .IX Item "-bind_at_load"
9018 Causes the output file to be marked such that the dynamic linker will
9019 bind all undefined references when the file is loaded or launched.
9020 .IP "\fB\-bundle\fR" 4
9021 .IX Item "-bundle"
9022 Produce a Mach-o bundle format file.
9023 See man \fIld\fR\|(1) for more information.
9024 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
9025 .IX Item "-bundle_loader executable"
9026 This option specifies the \fIexecutable\fR that will be loading the build
9027 output file being linked.  See man \fIld\fR\|(1) for more information.
9028 .IP "\fB\-dynamiclib\fR" 4
9029 .IX Item "-dynamiclib"
9030 When passed this option, \s-1GCC\s0 will produce a dynamic library instead of
9031 an executable when linking, using the Darwin \fIlibtool\fR command.
9032 .IP "\fB\-force_cpusubtype_ALL\fR" 4
9033 .IX Item "-force_cpusubtype_ALL"
9034 This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
9035 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
9036 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
9037 .IX Item "-allowable_client  client_name"
9038 .PD 0
9039 .IP "\fB\-client_name\fR" 4
9040 .IX Item "-client_name"
9041 .IP "\fB\-compatibility_version\fR" 4
9042 .IX Item "-compatibility_version"
9043 .IP "\fB\-current_version\fR" 4
9044 .IX Item "-current_version"
9045 .IP "\fB\-dead_strip\fR" 4
9046 .IX Item "-dead_strip"
9047 .IP "\fB\-dependency\-file\fR" 4
9048 .IX Item "-dependency-file"
9049 .IP "\fB\-dylib_file\fR" 4
9050 .IX Item "-dylib_file"
9051 .IP "\fB\-dylinker_install_name\fR" 4
9052 .IX Item "-dylinker_install_name"
9053 .IP "\fB\-dynamic\fR" 4
9054 .IX Item "-dynamic"
9055 .IP "\fB\-exported_symbols_list\fR" 4
9056 .IX Item "-exported_symbols_list"
9057 .IP "\fB\-filelist\fR" 4
9058 .IX Item "-filelist"
9059 .IP "\fB\-flat_namespace\fR" 4
9060 .IX Item "-flat_namespace"
9061 .IP "\fB\-force_flat_namespace\fR" 4
9062 .IX Item "-force_flat_namespace"
9063 .IP "\fB\-headerpad_max_install_names\fR" 4
9064 .IX Item "-headerpad_max_install_names"
9065 .IP "\fB\-image_base\fR" 4
9066 .IX Item "-image_base"
9067 .IP "\fB\-init\fR" 4
9068 .IX Item "-init"
9069 .IP "\fB\-install_name\fR" 4
9070 .IX Item "-install_name"
9071 .IP "\fB\-keep_private_externs\fR" 4
9072 .IX Item "-keep_private_externs"
9073 .IP "\fB\-multi_module\fR" 4
9074 .IX Item "-multi_module"
9075 .IP "\fB\-multiply_defined\fR" 4
9076 .IX Item "-multiply_defined"
9077 .IP "\fB\-multiply_defined_unused\fR" 4
9078 .IX Item "-multiply_defined_unused"
9079 .IP "\fB\-noall_load\fR" 4
9080 .IX Item "-noall_load"
9081 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
9082 .IX Item "-no_dead_strip_inits_and_terms"
9083 .IP "\fB\-nofixprebinding\fR" 4
9084 .IX Item "-nofixprebinding"
9085 .IP "\fB\-nomultidefs\fR" 4
9086 .IX Item "-nomultidefs"
9087 .IP "\fB\-noprebind\fR" 4
9088 .IX Item "-noprebind"
9089 .IP "\fB\-noseglinkedit\fR" 4
9090 .IX Item "-noseglinkedit"
9091 .IP "\fB\-pagezero_size\fR" 4
9092 .IX Item "-pagezero_size"
9093 .IP "\fB\-prebind\fR" 4
9094 .IX Item "-prebind"
9095 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
9096 .IX Item "-prebind_all_twolevel_modules"
9097 .IP "\fB\-private_bundle\fR" 4
9098 .IX Item "-private_bundle"
9099 .IP "\fB\-read_only_relocs\fR" 4
9100 .IX Item "-read_only_relocs"
9101 .IP "\fB\-sectalign\fR" 4
9102 .IX Item "-sectalign"
9103 .IP "\fB\-sectobjectsymbols\fR" 4
9104 .IX Item "-sectobjectsymbols"
9105 .IP "\fB\-whyload\fR" 4
9106 .IX Item "-whyload"
9107 .IP "\fB\-seg1addr\fR" 4
9108 .IX Item "-seg1addr"
9109 .IP "\fB\-sectcreate\fR" 4
9110 .IX Item "-sectcreate"
9111 .IP "\fB\-sectobjectsymbols\fR" 4
9112 .IX Item "-sectobjectsymbols"
9113 .IP "\fB\-sectorder\fR" 4
9114 .IX Item "-sectorder"
9115 .IP "\fB\-segaddr\fR" 4
9116 .IX Item "-segaddr"
9117 .IP "\fB\-segs_read_only_addr\fR" 4
9118 .IX Item "-segs_read_only_addr"
9119 .IP "\fB\-segs_read_write_addr\fR" 4
9120 .IX Item "-segs_read_write_addr"
9121 .IP "\fB\-seg_addr_table\fR" 4
9122 .IX Item "-seg_addr_table"
9123 .IP "\fB\-seg_addr_table_filename\fR" 4
9124 .IX Item "-seg_addr_table_filename"
9125 .IP "\fB\-seglinkedit\fR" 4
9126 .IX Item "-seglinkedit"
9127 .IP "\fB\-segprot\fR" 4
9128 .IX Item "-segprot"
9129 .IP "\fB\-segs_read_only_addr\fR" 4
9130 .IX Item "-segs_read_only_addr"
9131 .IP "\fB\-segs_read_write_addr\fR" 4
9132 .IX Item "-segs_read_write_addr"
9133 .IP "\fB\-single_module\fR" 4
9134 .IX Item "-single_module"
9135 .IP "\fB\-static\fR" 4
9136 .IX Item "-static"
9137 .IP "\fB\-sub_library\fR" 4
9138 .IX Item "-sub_library"
9139 .IP "\fB\-sub_umbrella\fR" 4
9140 .IX Item "-sub_umbrella"
9141 .IP "\fB\-twolevel_namespace\fR" 4
9142 .IX Item "-twolevel_namespace"
9143 .IP "\fB\-umbrella\fR" 4
9144 .IX Item "-umbrella"
9145 .IP "\fB\-undefined\fR" 4
9146 .IX Item "-undefined"
9147 .IP "\fB\-unexported_symbols_list\fR" 4
9148 .IX Item "-unexported_symbols_list"
9149 .IP "\fB\-weak_reference_mismatches\fR" 4
9150 .IX Item "-weak_reference_mismatches"
9151 .IP "\fB\-whatsloaded\fR" 4
9152 .IX Item "-whatsloaded"
9153 .PD
9154 These options are passed to the Darwin linker.  The Darwin linker man page
9155 describes them in detail.
9156 .PP
9157 \fI\s-1DEC\s0 Alpha Options\fR
9158 .IX Subsection "DEC Alpha Options"
9159 .PP
9160 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
9161 .IP "\fB\-mno\-soft\-float\fR" 4
9162 .IX Item "-mno-soft-float"
9163 .PD 0
9164 .IP "\fB\-msoft\-float\fR" 4
9165 .IX Item "-msoft-float"
9166 .PD
9167 Use (do not use) the hardware floating-point instructions for
9168 floating-point operations.  When \fB\-msoft\-float\fR is specified,
9169 functions in \fIlibgcc.a\fR will be used to perform floating-point
9170 operations.  Unless they are replaced by routines that emulate the
9171 floating-point operations, or compiled in such a way as to call such
9172 emulations routines, these routines will issue floating-point
9173 operations.   If you are compiling for an Alpha without floating-point
9174 operations, you must ensure that the library is built so as not to call
9175 them.
9176 .Sp
9177 Note that Alpha implementations without floating-point operations are
9178 required to have floating-point registers.
9179 .IP "\fB\-mfp\-reg\fR" 4
9180 .IX Item "-mfp-reg"
9181 .PD 0
9182 .IP "\fB\-mno\-fp\-regs\fR" 4
9183 .IX Item "-mno-fp-regs"
9184 .PD
9185 Generate code that uses (does not use) the floating-point register set.
9186 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
9187 register set is not used, floating point operands are passed in integer
9188 registers as if they were integers and floating-point results are passed
9189 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
9190 so any function with a floating-point argument or return value called by code
9191 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
9192 option.
9193 .Sp
9194 A typical use of this option is building a kernel that does not use,
9195 and hence need not save and restore, any floating-point registers.
9196 .IP "\fB\-mieee\fR" 4
9197 .IX Item "-mieee"
9198 The Alpha architecture implements floating-point hardware optimized for
9199 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating
9200 point standard.  However, for full compliance, software assistance is
9201 required.  This option generates code fully \s-1IEEE\s0 compliant code
9202 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
9203 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
9204 defined during compilation.  The resulting code is less efficient but is
9205 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
9206 values such as not-a-number and plus/minus infinity.  Other Alpha
9207 compilers call this option \fB\-ieee_with_no_inexact\fR.
9208 .IP "\fB\-mieee\-with\-inexact\fR" 4
9209 .IX Item "-mieee-with-inexact"
9210 This is like \fB\-mieee\fR except the generated code also maintains
9211 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
9212 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
9213 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
9214 macro.  On some Alpha implementations the resulting code may execute
9215 significantly slower than the code generated by default.  Since there is
9216 very little code that depends on the \fIinexact-flag\fR, you should
9217 normally not specify this option.  Other Alpha compilers call this
9218 option \fB\-ieee_with_inexact\fR.
9219 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
9220 .IX Item "-mfp-trap-mode=trap-mode"
9221 This option controls what floating-point related traps are enabled.
9222 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
9223 The trap mode can be set to one of four values:
9224 .RS 4
9225 .IP "\fBn\fR" 4
9226 .IX Item "n"
9227 This is the default (normal) setting.  The only traps that are enabled
9228 are the ones that cannot be disabled in software (e.g., division by zero
9229 trap).
9230 .IP "\fBu\fR" 4
9231 .IX Item "u"
9232 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
9233 as well.
9234 .IP "\fBsu\fR" 4
9235 .IX Item "su"
9236 Like \fBu\fR, but the instructions are marked to be safe for software
9237 completion (see Alpha architecture manual for details).
9238 .IP "\fBsui\fR" 4
9239 .IX Item "sui"
9240 Like \fBsu\fR, but inexact traps are enabled as well.
9241 .RE
9242 .RS 4
9243 .RE
9244 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
9245 .IX Item "-mfp-rounding-mode=rounding-mode"
9246 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
9247 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
9248 of:
9249 .RS 4
9250 .IP "\fBn\fR" 4
9251 .IX Item "n"
9252 Normal \s-1IEEE\s0 rounding mode.  Floating point numbers are rounded towards
9253 the nearest machine number or towards the even machine number in case
9254 of a tie.
9255 .IP "\fBm\fR" 4
9256 .IX Item "m"
9257 Round towards minus infinity.
9258 .IP "\fBc\fR" 4
9259 .IX Item "c"
9260 Chopped rounding mode.  Floating point numbers are rounded towards zero.
9261 .IP "\fBd\fR" 4
9262 .IX Item "d"
9263 Dynamic rounding mode.  A field in the floating point control register
9264 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
9265 rounding mode in effect.  The C library initializes this register for
9266 rounding towards plus infinity.  Thus, unless your program modifies the
9267 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
9268 .RE
9269 .RS 4
9270 .RE
9271 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
9272 .IX Item "-mtrap-precision=trap-precision"
9273 In the Alpha architecture, floating point traps are imprecise.  This
9274 means without software assistance it is impossible to recover from a
9275 floating trap and program execution normally needs to be terminated.
9276 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
9277 in determining the exact location that caused a floating point trap.
9278 Depending on the requirements of an application, different levels of
9279 precisions can be selected:
9280 .RS 4
9281 .IP "\fBp\fR" 4
9282 .IX Item "p"
9283 Program precision.  This option is the default and means a trap handler
9284 can only identify which program caused a floating point exception.
9285 .IP "\fBf\fR" 4
9286 .IX Item "f"
9287 Function precision.  The trap handler can determine the function that
9288 caused a floating point exception.
9289 .IP "\fBi\fR" 4
9290 .IX Item "i"
9291 Instruction precision.  The trap handler can determine the exact
9292 instruction that caused a floating point exception.
9293 .RE
9294 .RS 4
9295 .Sp
9296 Other Alpha compilers provide the equivalent options called
9297 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
9298 .RE
9299 .IP "\fB\-mieee\-conformant\fR" 4
9300 .IX Item "-mieee-conformant"
9301 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
9302 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
9303 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
9304 is to emit the line \fB.eflag 48\fR in the function prologue of the
9305 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
9306 IEEE-conformant math library routines will be linked in.
9307 .IP "\fB\-mbuild\-constants\fR" 4
9308 .IX Item "-mbuild-constants"
9309 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
9310 see if it can construct it from smaller constants in two or three
9311 instructions.  If it cannot, it will output the constant as a literal and
9312 generate code to load it from the data segment at runtime.
9313 .Sp
9314 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
9315 using code, even if it takes more instructions (the maximum is six).
9316 .Sp
9317 You would typically use this option to build a shared library dynamic
9318 loader.  Itself a shared library, it must relocate itself in memory
9319 before it can find the variables and constants in its own data segment.
9320 .IP "\fB\-malpha\-as\fR" 4
9321 .IX Item "-malpha-as"
9322 .PD 0
9323 .IP "\fB\-mgas\fR" 4
9324 .IX Item "-mgas"
9325 .PD
9326 Select whether to generate code to be assembled by the vendor-supplied
9327 assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
9328 .IP "\fB\-mbwx\fR" 4
9329 .IX Item "-mbwx"
9330 .PD 0
9331 .IP "\fB\-mno\-bwx\fR" 4
9332 .IX Item "-mno-bwx"
9333 .IP "\fB\-mcix\fR" 4
9334 .IX Item "-mcix"
9335 .IP "\fB\-mno\-cix\fR" 4
9336 .IX Item "-mno-cix"
9337 .IP "\fB\-mfix\fR" 4
9338 .IX Item "-mfix"
9339 .IP "\fB\-mno\-fix\fR" 4
9340 .IX Item "-mno-fix"
9341 .IP "\fB\-mmax\fR" 4
9342 .IX Item "-mmax"
9343 .IP "\fB\-mno\-max\fR" 4
9344 .IX Item "-mno-max"
9345 .PD
9346 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
9347 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
9348 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
9349 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
9350 .IP "\fB\-mfloat\-vax\fR" 4
9351 .IX Item "-mfloat-vax"
9352 .PD 0
9353 .IP "\fB\-mfloat\-ieee\fR" 4
9354 .IX Item "-mfloat-ieee"
9355 .PD
9356 Generate code that uses (does not use) \s-1VAX\s0 F and G floating point
9357 arithmetic instead of \s-1IEEE\s0 single and double precision.
9358 .IP "\fB\-mexplicit\-relocs\fR" 4
9359 .IX Item "-mexplicit-relocs"
9360 .PD 0
9361 .IP "\fB\-mno\-explicit\-relocs\fR" 4
9362 .IX Item "-mno-explicit-relocs"
9363 .PD
9364 Older Alpha assemblers provided no way to generate symbol relocations
9365 except via assembler macros.  Use of these macros does not allow
9366 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
9367 supports a new syntax that allows the compiler to explicitly mark
9368 which relocations should apply to which instructions.  This option
9369 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
9370 the assembler when it is built and sets the default accordingly.
9371 .IP "\fB\-msmall\-data\fR" 4
9372 .IX Item "-msmall-data"
9373 .PD 0
9374 .IP "\fB\-mlarge\-data\fR" 4
9375 .IX Item "-mlarge-data"
9376 .PD
9377 When \fB\-mexplicit\-relocs\fR is in effect, static data is
9378 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
9379 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
9380 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
9381 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
9382 size of the small data area to 64KB, but allows the variables to be
9383 directly accessed via a single instruction.
9384 .Sp
9385 The default is \fB\-mlarge\-data\fR.  With this option the data area
9386 is limited to just below 2GB.  Programs that require more than 2GB of
9387 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
9388 heap instead of in the program's data segment.
9389 .Sp
9390 When generating code for shared libraries, \fB\-fpic\fR implies
9391 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
9392 .IP "\fB\-msmall\-text\fR" 4
9393 .IX Item "-msmall-text"
9394 .PD 0
9395 .IP "\fB\-mlarge\-text\fR" 4
9396 .IX Item "-mlarge-text"
9397 .PD
9398 When \fB\-msmall\-text\fR is used, the compiler assumes that the
9399 code of the entire program (or shared library) fits in 4MB, and is
9400 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
9401 is used, the compiler can assume that all local symbols share the
9402 same \f(CW$gp\fR value, and thus reduce the number of instructions
9403 required for a function call from 4 to 1.
9404 .Sp
9405 The default is \fB\-mlarge\-text\fR.
9406 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
9407 .IX Item "-mcpu=cpu_type"
9408 Set the instruction set and instruction scheduling parameters for
9409 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
9410 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
9411 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and will
9412 choose the default values for the instruction set from the processor
9413 you specify.  If you do not specify a processor type, \s-1GCC\s0 will default
9414 to the processor on which the compiler was built.
9415 .Sp
9416 Supported values for \fIcpu_type\fR are
9417 .RS 4
9418 .IP "\fBev4\fR" 4
9419 .IX Item "ev4"
9420 .PD 0
9421 .IP "\fBev45\fR" 4
9422 .IX Item "ev45"
9423 .IP "\fB21064\fR" 4
9424 .IX Item "21064"
9425 .PD
9426 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
9427 .IP "\fBev5\fR" 4
9428 .IX Item "ev5"
9429 .PD 0
9430 .IP "\fB21164\fR" 4
9431 .IX Item "21164"
9432 .PD
9433 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
9434 .IP "\fBev56\fR" 4
9435 .IX Item "ev56"
9436 .PD 0
9437 .IP "\fB21164a\fR" 4
9438 .IX Item "21164a"
9439 .PD
9440 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
9441 .IP "\fBpca56\fR" 4
9442 .IX Item "pca56"
9443 .PD 0
9444 .IP "\fB21164pc\fR" 4
9445 .IX Item "21164pc"
9446 .IP "\fB21164PC\fR" 4
9447 .IX Item "21164PC"
9448 .PD
9449 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
9450 .IP "\fBev6\fR" 4
9451 .IX Item "ev6"
9452 .PD 0
9453 .IP "\fB21264\fR" 4
9454 .IX Item "21264"
9455 .PD
9456 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9457 .IP "\fBev67\fR" 4
9458 .IX Item "ev67"
9459 .PD 0
9460 .IP "\fB21264a\fR" 4
9461 .IX Item "21264a"
9462 .PD
9463 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9464 .RE
9465 .RS 4
9466 .Sp
9467 Native Linux/GNU toolchains also support the value \fBnative\fR,
9468 which selects the best architecture option for the host processor.
9469 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
9470 the processor.
9471 .RE
9472 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
9473 .IX Item "-mtune=cpu_type"
9474 Set only the instruction scheduling parameters for machine type
9475 \&\fIcpu_type\fR.  The instruction set is not changed.
9476 .Sp
9477 Native Linux/GNU toolchains also support the value \fBnative\fR,
9478 which selects the best architecture option for the host processor.
9479 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
9480 the processor.
9481 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
9482 .IX Item "-mmemory-latency=time"
9483 Sets the latency the scheduler should assume for typical memory
9484 references as seen by the application.  This number is highly
9485 dependent on the memory access patterns used by the application
9486 and the size of the external cache on the machine.
9487 .Sp
9488 Valid options for \fItime\fR are
9489 .RS 4
9490 .IP "\fInumber\fR" 4
9491 .IX Item "number"
9492 A decimal number representing clock cycles.
9493 .IP "\fBL1\fR" 4
9494 .IX Item "L1"
9495 .PD 0
9496 .IP "\fBL2\fR" 4
9497 .IX Item "L2"
9498 .IP "\fBL3\fR" 4
9499 .IX Item "L3"
9500 .IP "\fBmain\fR" 4
9501 .IX Item "main"
9502 .PD
9503 The compiler contains estimates of the number of clock cycles for
9504 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
9505 (also called Dcache, Scache, and Bcache), as well as to main memory.
9506 Note that L3 is only valid for \s-1EV5\s0.
9507 .RE
9508 .RS 4
9509 .RE
9510 .PP
9511 \fI\s-1DEC\s0 Alpha/VMS Options\fR
9512 .IX Subsection "DEC Alpha/VMS Options"
9513 .PP
9514 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
9515 .IP "\fB\-mvms\-return\-codes\fR" 4
9516 .IX Item "-mvms-return-codes"
9517 Return \s-1VMS\s0 condition codes from main.  The default is to return \s-1POSIX\s0
9518 style condition (e.g. error) codes.
9519 .PP
9520 \fI\s-1FR30\s0 Options\fR
9521 .IX Subsection "FR30 Options"
9522 .PP
9523 These options are defined specifically for the \s-1FR30\s0 port.
9524 .IP "\fB\-msmall\-model\fR" 4
9525 .IX Item "-msmall-model"
9526 Use the small address space model.  This can produce smaller code, but
9527 it does assume that all symbolic values and addresses will fit into a
9528 20\-bit range.
9529 .IP "\fB\-mno\-lsim\fR" 4
9530 .IX Item "-mno-lsim"
9531 Assume that run-time support has been provided and so there is no need
9532 to include the simulator library (\fIlibsim.a\fR) on the linker
9533 command line.
9534 .PP
9535 \fI\s-1FRV\s0 Options\fR
9536 .IX Subsection "FRV Options"
9537 .IP "\fB\-mgpr\-32\fR" 4
9538 .IX Item "-mgpr-32"
9539 Only use the first 32 general purpose registers.
9540 .IP "\fB\-mgpr\-64\fR" 4
9541 .IX Item "-mgpr-64"
9542 Use all 64 general purpose registers.
9543 .IP "\fB\-mfpr\-32\fR" 4
9544 .IX Item "-mfpr-32"
9545 Use only the first 32 floating point registers.
9546 .IP "\fB\-mfpr\-64\fR" 4
9547 .IX Item "-mfpr-64"
9548 Use all 64 floating point registers
9549 .IP "\fB\-mhard\-float\fR" 4
9550 .IX Item "-mhard-float"
9551 Use hardware instructions for floating point operations.
9552 .IP "\fB\-msoft\-float\fR" 4
9553 .IX Item "-msoft-float"
9554 Use library routines for floating point operations.
9555 .IP "\fB\-malloc\-cc\fR" 4
9556 .IX Item "-malloc-cc"
9557 Dynamically allocate condition code registers.
9558 .IP "\fB\-mfixed\-cc\fR" 4
9559 .IX Item "-mfixed-cc"
9560 Do not try to dynamically allocate condition code registers, only
9561 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
9562 .IP "\fB\-mdword\fR" 4
9563 .IX Item "-mdword"
9564 Change \s-1ABI\s0 to use double word insns.
9565 .IP "\fB\-mno\-dword\fR" 4
9566 .IX Item "-mno-dword"
9567 Do not use double word instructions.
9568 .IP "\fB\-mdouble\fR" 4
9569 .IX Item "-mdouble"
9570 Use floating point double instructions.
9571 .IP "\fB\-mno\-double\fR" 4
9572 .IX Item "-mno-double"
9573 Do not use floating point double instructions.
9574 .IP "\fB\-mmedia\fR" 4
9575 .IX Item "-mmedia"
9576 Use media instructions.
9577 .IP "\fB\-mno\-media\fR" 4
9578 .IX Item "-mno-media"
9579 Do not use media instructions.
9580 .IP "\fB\-mmuladd\fR" 4
9581 .IX Item "-mmuladd"
9582 Use multiply and add/subtract instructions.
9583 .IP "\fB\-mno\-muladd\fR" 4
9584 .IX Item "-mno-muladd"
9585 Do not use multiply and add/subtract instructions.
9586 .IP "\fB\-mfdpic\fR" 4
9587 .IX Item "-mfdpic"
9588 Select the \s-1FDPIC\s0 \s-1ABI\s0, that uses function descriptors to represent
9589 pointers to functions.  Without any PIC/PIE\-related options, it
9590 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
9591 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
9592 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
9593 are computed with 32 bits.
9594 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
9595 .IP "\fB\-minline\-plt\fR" 4
9596 .IX Item "-minline-plt"
9597 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
9598 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
9599 It's enabled by default if optimizing for speed and compiling for
9600 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
9601 optimization option such as \fB\-O3\fR or above is present in the
9602 command line.
9603 .IP "\fB\-mTLS\fR" 4
9604 .IX Item "-mTLS"
9605 Assume a large \s-1TLS\s0 segment when generating thread-local code.
9606 .IP "\fB\-mtls\fR" 4
9607 .IX Item "-mtls"
9608 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
9609 .IP "\fB\-mgprel\-ro\fR" 4
9610 .IX Item "-mgprel-ro"
9611 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
9612 that is known to be in read-only sections.  It's enabled by default,
9613 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
9614 make the global offset table smaller, it trades 1 instruction for 4.
9615 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
9616 one of which may be shared by multiple symbols, and it avoids the need
9617 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
9618 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
9619 .IP "\fB\-multilib\-library\-pic\fR" 4
9620 .IX Item "-multilib-library-pic"
9621 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
9622 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
9623 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
9624 it explicitly.
9625 .IP "\fB\-mlinked\-fp\fR" 4
9626 .IX Item "-mlinked-fp"
9627 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
9628 a stack frame is allocated.  This option is enabled by default and can
9629 be disabled with \fB\-mno\-linked\-fp\fR.
9630 .IP "\fB\-mlong\-calls\fR" 4
9631 .IX Item "-mlong-calls"
9632 Use indirect addressing to call functions outside the current
9633 compilation unit.  This allows the functions to be placed anywhere
9634 within the 32\-bit address space.
9635 .IP "\fB\-malign\-labels\fR" 4
9636 .IX Item "-malign-labels"
9637 Try to align labels to an 8\-byte boundary by inserting nops into the
9638 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
9639 is enabled.  It doesn't create new packets; it merely adds nops to
9640 existing ones.
9641 .IP "\fB\-mlibrary\-pic\fR" 4
9642 .IX Item "-mlibrary-pic"
9643 Generate position-independent \s-1EABI\s0 code.
9644 .IP "\fB\-macc\-4\fR" 4
9645 .IX Item "-macc-4"
9646 Use only the first four media accumulator registers.
9647 .IP "\fB\-macc\-8\fR" 4
9648 .IX Item "-macc-8"
9649 Use all eight media accumulator registers.
9650 .IP "\fB\-mpack\fR" 4
9651 .IX Item "-mpack"
9652 Pack \s-1VLIW\s0 instructions.
9653 .IP "\fB\-mno\-pack\fR" 4
9654 .IX Item "-mno-pack"
9655 Do not pack \s-1VLIW\s0 instructions.
9656 .IP "\fB\-mno\-eflags\fR" 4
9657 .IX Item "-mno-eflags"
9658 Do not mark \s-1ABI\s0 switches in e_flags.
9659 .IP "\fB\-mcond\-move\fR" 4
9660 .IX Item "-mcond-move"
9661 Enable the use of conditional-move instructions (default).
9662 .Sp
9663 This switch is mainly for debugging the compiler and will likely be removed
9664 in a future version.
9665 .IP "\fB\-mno\-cond\-move\fR" 4
9666 .IX Item "-mno-cond-move"
9667 Disable the use of conditional-move instructions.
9668 .Sp
9669 This switch is mainly for debugging the compiler and will likely be removed
9670 in a future version.
9671 .IP "\fB\-mscc\fR" 4
9672 .IX Item "-mscc"
9673 Enable the use of conditional set instructions (default).
9674 .Sp
9675 This switch is mainly for debugging the compiler and will likely be removed
9676 in a future version.
9677 .IP "\fB\-mno\-scc\fR" 4
9678 .IX Item "-mno-scc"
9679 Disable the use of conditional set instructions.
9680 .Sp
9681 This switch is mainly for debugging the compiler and will likely be removed
9682 in a future version.
9683 .IP "\fB\-mcond\-exec\fR" 4
9684 .IX Item "-mcond-exec"
9685 Enable the use of conditional execution (default).
9686 .Sp
9687 This switch is mainly for debugging the compiler and will likely be removed
9688 in a future version.
9689 .IP "\fB\-mno\-cond\-exec\fR" 4
9690 .IX Item "-mno-cond-exec"
9691 Disable the use of conditional execution.
9692 .Sp
9693 This switch is mainly for debugging the compiler and will likely be removed
9694 in a future version.
9695 .IP "\fB\-mvliw\-branch\fR" 4
9696 .IX Item "-mvliw-branch"
9697 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
9698 .Sp
9699 This switch is mainly for debugging the compiler and will likely be removed
9700 in a future version.
9701 .IP "\fB\-mno\-vliw\-branch\fR" 4
9702 .IX Item "-mno-vliw-branch"
9703 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
9704 .Sp
9705 This switch is mainly for debugging the compiler and will likely be removed
9706 in a future version.
9707 .IP "\fB\-mmulti\-cond\-exec\fR" 4
9708 .IX Item "-mmulti-cond-exec"
9709 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
9710 (default).
9711 .Sp
9712 This switch is mainly for debugging the compiler and will likely be removed
9713 in a future version.
9714 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
9715 .IX Item "-mno-multi-cond-exec"
9716 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
9717 .Sp
9718 This switch is mainly for debugging the compiler and will likely be removed
9719 in a future version.
9720 .IP "\fB\-mnested\-cond\-exec\fR" 4
9721 .IX Item "-mnested-cond-exec"
9722 Enable nested conditional execution optimizations (default).
9723 .Sp
9724 This switch is mainly for debugging the compiler and will likely be removed
9725 in a future version.
9726 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
9727 .IX Item "-mno-nested-cond-exec"
9728 Disable nested conditional execution optimizations.
9729 .Sp
9730 This switch is mainly for debugging the compiler and will likely be removed
9731 in a future version.
9732 .IP "\fB\-moptimize\-membar\fR" 4
9733 .IX Item "-moptimize-membar"
9734 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
9735 compiler generated code.  It is enabled by default.
9736 .IP "\fB\-mno\-optimize\-membar\fR" 4
9737 .IX Item "-mno-optimize-membar"
9738 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
9739 instructions from the generated code.
9740 .IP "\fB\-mtomcat\-stats\fR" 4
9741 .IX Item "-mtomcat-stats"
9742 Cause gas to print out tomcat statistics.
9743 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
9744 .IX Item "-mcpu=cpu"
9745 Select the processor type for which to generate code.  Possible values are
9746 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
9747 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
9748 .PP
9749 \fIGNU/Linux Options\fR
9750 .IX Subsection "GNU/Linux Options"
9751 .PP
9752 These \fB\-m\fR options are defined for GNU/Linux targets:
9753 .IP "\fB\-mglibc\fR" 4
9754 .IX Item "-mglibc"
9755 Use the \s-1GNU\s0 C library instead of uClibc.  This is the default except
9756 on \fB*\-*\-linux\-*uclibc*\fR targets.
9757 .IP "\fB\-muclibc\fR" 4
9758 .IX Item "-muclibc"
9759 Use uClibc instead of the \s-1GNU\s0 C library.  This is the default on
9760 \&\fB*\-*\-linux\-*uclibc*\fR targets.
9761 .PP
9762 \fIH8/300 Options\fR
9763 .IX Subsection "H8/300 Options"
9764 .PP
9765 These \fB\-m\fR options are defined for the H8/300 implementations:
9766 .IP "\fB\-mrelax\fR" 4
9767 .IX Item "-mrelax"
9768 Shorten some address references at link time, when possible; uses the
9769 linker option \fB\-relax\fR.
9770 .IP "\fB\-mh\fR" 4
9771 .IX Item "-mh"
9772 Generate code for the H8/300H.
9773 .IP "\fB\-ms\fR" 4
9774 .IX Item "-ms"
9775 Generate code for the H8S.
9776 .IP "\fB\-mn\fR" 4
9777 .IX Item "-mn"
9778 Generate code for the H8S and H8/300H in the normal mode.  This switch
9779 must be used either with \fB\-mh\fR or \fB\-ms\fR.
9780 .IP "\fB\-ms2600\fR" 4
9781 .IX Item "-ms2600"
9782 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
9783 .IP "\fB\-mint32\fR" 4
9784 .IX Item "-mint32"
9785 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
9786 .IP "\fB\-malign\-300\fR" 4
9787 .IX Item "-malign-300"
9788 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9789 The default for the H8/300H and H8S is to align longs and floats on 4
9790 byte boundaries.
9791 \&\fB\-malign\-300\fR causes them to be aligned on 2 byte boundaries.
9792 This option has no effect on the H8/300.
9793 .PP
9794 \fI\s-1HPPA\s0 Options\fR
9795 .IX Subsection "HPPA Options"
9796 .PP
9797 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
9798 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
9799 .IX Item "-march=architecture-type"
9800 Generate code for the specified architecture.  The choices for
9801 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
9802 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
9803 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
9804 architecture option for your machine.  Code compiled for lower numbered
9805 architectures will run on higher numbered architectures, but not the
9806 other way around.
9807 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
9808 .IX Item "-mpa-risc-1-0"
9809 .PD 0
9810 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
9811 .IX Item "-mpa-risc-1-1"
9812 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
9813 .IX Item "-mpa-risc-2-0"
9814 .PD
9815 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
9816 .IP "\fB\-mbig\-switch\fR" 4
9817 .IX Item "-mbig-switch"
9818 Generate code suitable for big switch tables.  Use this option only if
9819 the assembler/linker complain about out of range branches within a switch
9820 table.
9821 .IP "\fB\-mjump\-in\-delay\fR" 4
9822 .IX Item "-mjump-in-delay"
9823 Fill delay slots of function calls with unconditional jump instructions
9824 by modifying the return pointer for the function call to be the target
9825 of the conditional jump.
9826 .IP "\fB\-mdisable\-fpregs\fR" 4
9827 .IX Item "-mdisable-fpregs"
9828 Prevent floating point registers from being used in any manner.  This is
9829 necessary for compiling kernels which perform lazy context switching of
9830 floating point registers.  If you use this option and attempt to perform
9831 floating point operations, the compiler will abort.
9832 .IP "\fB\-mdisable\-indexing\fR" 4
9833 .IX Item "-mdisable-indexing"
9834 Prevent the compiler from using indexing address modes.  This avoids some
9835 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
9836 .IP "\fB\-mno\-space\-regs\fR" 4
9837 .IX Item "-mno-space-regs"
9838 Generate code that assumes the target has no space registers.  This allows
9839 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
9840 .Sp
9841 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
9842 .IP "\fB\-mfast\-indirect\-calls\fR" 4
9843 .IX Item "-mfast-indirect-calls"
9844 Generate code that assumes calls never cross space boundaries.  This
9845 allows \s-1GCC\s0 to emit code which performs faster indirect calls.
9846 .Sp
9847 This option will not work in the presence of shared libraries or nested
9848 functions.
9849 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
9850 .IX Item "-mfixed-range=register-range"
9851 Generate code treating the given register range as fixed registers.
9852 A fixed register is one that the register allocator can not use.  This is
9853 useful when compiling kernel code.  A register range is specified as
9854 two registers separated by a dash.  Multiple register ranges can be
9855 specified separated by a comma.
9856 .IP "\fB\-mlong\-load\-store\fR" 4
9857 .IX Item "-mlong-load-store"
9858 Generate 3\-instruction load and store sequences as sometimes required by
9859 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
9860 the \s-1HP\s0 compilers.
9861 .IP "\fB\-mportable\-runtime\fR" 4
9862 .IX Item "-mportable-runtime"
9863 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
9864 .IP "\fB\-mgas\fR" 4
9865 .IX Item "-mgas"
9866 Enable the use of assembler directives only \s-1GAS\s0 understands.
9867 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
9868 .IX Item "-mschedule=cpu-type"
9869 Schedule code according to the constraints for the machine type
9870 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
9871 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
9872 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
9873 proper scheduling option for your machine.  The default scheduling is
9874 \&\fB8000\fR.
9875 .IP "\fB\-mlinker\-opt\fR" 4
9876 .IX Item "-mlinker-opt"
9877 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
9878 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
9879 linkers in which they give bogus error messages when linking some programs.
9880 .IP "\fB\-msoft\-float\fR" 4
9881 .IX Item "-msoft-float"
9882 Generate output containing library calls for floating point.
9883 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
9884 targets.  Normally the facilities of the machine's usual C compiler are
9885 used, but this cannot be done directly in cross-compilation.  You must make
9886 your own arrangements to provide suitable library functions for
9887 cross-compilation.
9888 .Sp
9889 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
9890 therefore, it is only useful if you compile \fIall\fR of a program with
9891 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
9892 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
9893 this to work.
9894 .IP "\fB\-msio\fR" 4
9895 .IX Item "-msio"
9896 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
9897 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
9898 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
9899 options are available under HP-UX and HI-UX.
9900 .IP "\fB\-mgnu\-ld\fR" 4
9901 .IX Item "-mgnu-ld"
9902 Use \s-1GNU\s0 ld specific options.  This passes \fB\-shared\fR to ld when
9903 building a shared library.  It is the default when \s-1GCC\s0 is configured,
9904 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
9905 have any affect on which ld is called, it only changes what parameters
9906 are passed to that ld.  The ld that is called is determined by the
9907 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
9908 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
9909 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
9910 on the 64 bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
9911 .IP "\fB\-mhp\-ld\fR" 4
9912 .IX Item "-mhp-ld"
9913 Use \s-1HP\s0 ld specific options.  This passes \fB\-b\fR to ld when building
9914 a shared library and passes \fB+Accept TypeMismatch\fR to ld on all
9915 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
9916 implicitly, with the \s-1HP\s0 linker.  This option does not have any affect on
9917 which ld is called, it only changes what parameters are passed to that
9918 ld.  The ld that is called is determined by the \fB\-\-with\-ld\fR
9919 configure option, \s-1GCC\s0's program search path, and finally by the user's
9920 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
9921 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64 bit
9922 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
9923 .IP "\fB\-mlong\-calls\fR" 4
9924 .IX Item "-mlong-calls"
9925 Generate code that uses long call sequences.  This ensures that a call
9926 is always able to reach linker generated stubs.  The default is to generate
9927 long calls only when the distance from the call site to the beginning
9928 of the function or translation unit, as the case may be, exceeds a
9929 predefined limit set by the branch type being used.  The limits for
9930 normal calls are 7,600,000 and 240,000 bytes, respectively for the
9931 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
9932 240,000 bytes.
9933 .Sp
9934 Distances are measured from the beginning of functions when using the
9935 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
9936 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
9937 the \s-1SOM\s0 linker.
9938 .Sp
9939 It is normally not desirable to use this option as it will degrade
9940 performance.  However, it may be useful in large applications,
9941 particularly when partial linking is used to build the application.
9942 .Sp
9943 The types of long calls used depends on the capabilities of the
9944 assembler and linker, and the type of code being generated.  The
9945 impact on systems that support long absolute calls, and long pic
9946 symbol-difference or pc-relative calls should be relatively small.
9947 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
9948 and it is quite long.
9949 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
9950 .IX Item "-munix=unix-std"
9951 Generate compiler predefines and select a startfile for the specified
9952 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
9953 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
9954 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
9955 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
9956 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
9957 and later.
9958 .Sp
9959 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
9960 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
9961 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
9962 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
9963 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
9964 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
9965 .Sp
9966 It is \fIimportant\fR to note that this option changes the interfaces
9967 for various library routines.  It also affects the operational behavior
9968 of the C library.  Thus, \fIextreme\fR care is needed in using this
9969 option.
9970 .Sp
9971 Library code that is intended to operate with more than one \s-1UNIX\s0
9972 standard must test, set and restore the variable \fI_\|_xpg4_extended_mask\fR
9973 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
9974 .IP "\fB\-nolibdld\fR" 4
9975 .IX Item "-nolibdld"
9976 Suppress the generation of link options to search libdld.sl when the
9977 \&\fB\-static\fR option is specified on HP-UX 10 and later.
9978 .IP "\fB\-static\fR" 4
9979 .IX Item "-static"
9980 The HP-UX implementation of setlocale in libc has a dependency on
9981 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9982 when the \fB\-static\fR option is specified, special link options
9983 are needed to resolve this dependency.
9984 .Sp
9985 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
9986 link with libdld.sl when the \fB\-static\fR option is specified.
9987 This causes the resulting binary to be dynamic.  On the 64\-bit port,
9988 the linkers generate dynamic binaries by default in any case.  The
9989 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
9990 adding these link options.
9991 .IP "\fB\-threads\fR" 4
9992 .IX Item "-threads"
9993 Add support for multithreading with the \fIdce thread\fR library
9994 under HP-UX.  This option sets flags for both the preprocessor and
9995 linker.
9996 .PP
9997 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
9998 .IX Subsection "Intel 386 and AMD x86-64 Options"
9999 .PP
10000 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
10001 computers:
10002 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10003 .IX Item "-mtune=cpu-type"
10004 Tune to \fIcpu-type\fR everything applicable about the generated code, except
10005 for the \s-1ABI\s0 and the set of available instructions.  The choices for
10006 \&\fIcpu-type\fR are:
10007 .RS 4
10008 .IP "\fIgeneric\fR" 4
10009 .IX Item "generic"
10010 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
10011 If you know the \s-1CPU\s0 on which your code will run, then you should use
10012 the corresponding \fB\-mtune\fR option instead of
10013 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
10014 of your application will have, then you should use this option.
10015 .Sp
10016 As new processors are deployed in the marketplace, the behavior of this
10017 option will change.  Therefore, if you upgrade to a newer version of
10018 \&\s-1GCC\s0, the code generated option will change to reflect the processors
10019 that were most common when that version of \s-1GCC\s0 was released.
10020 .Sp
10021 There is no \fB\-march=generic\fR option because \fB\-march\fR
10022 indicates the instruction set the compiler can use, and there is no
10023 generic instruction set applicable to all processors.  In contrast,
10024 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
10025 processors) for which the code is optimized.
10026 .IP "\fInative\fR" 4
10027 .IX Item "native"
10028 This selects the \s-1CPU\s0 to tune for at compilation time by determining
10029 the processor type of the compiling machine.  Using \fB\-mtune=native\fR
10030 will produce code optimized for the local machine under the constraints
10031 of the selected instruction set.  Using \fB\-march=native\fR will
10032 enable all instruction subsets supported by the local machine (hence
10033 the result might not run on different machines).
10034 .IP "\fIi386\fR" 4
10035 .IX Item "i386"
10036 Original Intel's i386 \s-1CPU\s0.
10037 .IP "\fIi486\fR" 4
10038 .IX Item "i486"
10039 Intel's i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
10040 .IP "\fIi586, pentium\fR" 4
10041 .IX Item "i586, pentium"
10042 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
10043 .IP "\fIpentium-mmx\fR" 4
10044 .IX Item "pentium-mmx"
10045 Intel PentiumMMX \s-1CPU\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
10046 .IP "\fIpentiumpro\fR" 4
10047 .IX Item "pentiumpro"
10048 Intel PentiumPro \s-1CPU\s0.
10049 .IP "\fIi686\fR" 4
10050 .IX Item "i686"
10051 Same as \f(CW\*(C`generic\*(C'\fR, but when used as \f(CW\*(C`march\*(C'\fR option, PentiumPro
10052 instruction set will be used, so the code will run on all i686 family chips.
10053 .IP "\fIpentium2\fR" 4
10054 .IX Item "pentium2"
10055 Intel Pentium2 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 instruction set support.
10056 .IP "\fIpentium3, pentium3m\fR" 4
10057 .IX Item "pentium3, pentium3m"
10058 Intel Pentium3 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 and \s-1SSE\s0 instruction set
10059 support.
10060 .IP "\fIpentium-m\fR" 4
10061 .IX Item "pentium-m"
10062 Low power version of Intel Pentium3 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set
10063 support.  Used by Centrino notebooks.
10064 .IP "\fIpentium4, pentium4m\fR" 4
10065 .IX Item "pentium4, pentium4m"
10066 Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
10067 .IP "\fIprescott\fR" 4
10068 .IX Item "prescott"
10069 Improved version of Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
10070 set support.
10071 .IP "\fInocona\fR" 4
10072 .IX Item "nocona"
10073 Improved version of Intel Pentium4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
10074 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
10075 .IP "\fIcore2\fR" 4
10076 .IX Item "core2"
10077 Intel Core2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0 and \s-1SSSE3\s0
10078 instruction set support.
10079 .IP "\fIk6\fR" 4
10080 .IX Item "k6"
10081 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
10082 .IP "\fIk6\-2, k6\-3\fR" 4
10083 .IX Item "k6-2, k6-3"
10084 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10085 .IP "\fIathlon, athlon-tbird\fR" 4
10086 .IX Item "athlon, athlon-tbird"
10087 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and \s-1SSE\s0 prefetch instructions
10088 support.
10089 .IP "\fIathlon\-4, athlon-xp, athlon-mp\fR" 4
10090 .IX Item "athlon-4, athlon-xp, athlon-mp"
10091 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and full \s-1SSE\s0
10092 instruction set support.
10093 .IP "\fIk8, opteron, athlon64, athlon-fx\fR" 4
10094 .IX Item "k8, opteron, athlon64, athlon-fx"
10095 \&\s-1AMD\s0 K8 core based CPUs with x86\-64 instruction set support.  (This supersets
10096 \&\s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3dNOW!, enhanced 3dNOW! and 64\-bit instruction set extensions.)
10097 .IP "\fIk8\-sse3, opteron\-sse3, athlon64\-sse3\fR" 4
10098 .IX Item "k8-sse3, opteron-sse3, athlon64-sse3"
10099 Improved versions of k8, opteron and athlon64 with \s-1SSE3\s0 instruction set support.
10100 .IP "\fIamdfam10, barcelona\fR" 4
10101 .IX Item "amdfam10, barcelona"
10102 \&\s-1AMD\s0 Family 10h core based CPUs with x86\-64 instruction set support.  (This
10103 supersets \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSE4A\s0, 3dNOW!, enhanced 3dNOW!, \s-1ABM\s0 and 64\-bit
10104 instruction set extensions.)
10105 .IP "\fIwinchip\-c6\fR" 4
10106 .IX Item "winchip-c6"
10107 \&\s-1IDT\s0 Winchip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
10108 set support.
10109 .IP "\fIwinchip2\fR" 4
10110 .IX Item "winchip2"
10111 \&\s-1IDT\s0 Winchip2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3dNOW!
10112 instruction set support.
10113 .IP "\fIc3\fR" 4
10114 .IX Item "c3"
10115 Via C3 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.  (No scheduling is
10116 implemented for this chip.)
10117 .IP "\fIc3\-2\fR" 4
10118 .IX Item "c3-2"
10119 Via C3\-2 \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.  (No scheduling is
10120 implemented for this chip.)
10121 .IP "\fIgeode\fR" 4
10122 .IX Item "geode"
10123 Embedded \s-1AMD\s0 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10124 .RE
10125 .RS 4
10126 .Sp
10127 While picking a specific \fIcpu-type\fR will schedule things appropriately
10128 for that particular chip, the compiler will not generate any code that
10129 does not run on the i386 without the \fB\-march=\fR\fIcpu-type\fR option
10130 being used.
10131 .RE
10132 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
10133 .IX Item "-march=cpu-type"
10134 Generate instructions for the machine type \fIcpu-type\fR.  The choices
10135 for \fIcpu-type\fR are the same as for \fB\-mtune\fR.  Moreover,
10136 specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mtune=\fR\fIcpu-type\fR.
10137 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
10138 .IX Item "-mcpu=cpu-type"
10139 A deprecated synonym for \fB\-mtune\fR.
10140 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
10141 .IX Item "-mfpmath=unit"
10142 Generate floating point arithmetics for selected unit \fIunit\fR.  The choices
10143 for \fIunit\fR are:
10144 .RS 4
10145 .IP "\fB387\fR" 4
10146 .IX Item "387"
10147 Use the standard 387 floating point coprocessor present majority of chips and
10148 emulated otherwise.  Code compiled with this option will run almost everywhere.
10149 The temporary results are computed in 80bit precision instead of precision
10150 specified by the type resulting in slightly different results compared to most
10151 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
10152 .Sp
10153 This is the default choice for i386 compiler.
10154 .IP "\fBsse\fR" 4
10155 .IX Item "sse"
10156 Use scalar floating point instructions present in the \s-1SSE\s0 instruction set.
10157 This instruction set is supported by Pentium3 and newer chips, in the \s-1AMD\s0 line
10158 by Athlon\-4, Athlon-xp and Athlon-mp chips.  The earlier version of \s-1SSE\s0
10159 instruction set supports only single precision arithmetics, thus the double and
10160 extended precision arithmetics is still done using 387.  Later version, present
10161 only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips supports double precision
10162 arithmetics too.
10163 .Sp
10164 For the i386 compiler, you need to use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
10165 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
10166 effective.  For the x86\-64 compiler, these extensions are enabled by default.
10167 .Sp
10168 The resulting code should be considerably faster in the majority of cases and avoid
10169 the numerical instability problems of 387 code, but may break some existing
10170 code that expects temporaries to be 80bit.
10171 .Sp
10172 This is the default choice for the x86\-64 compiler.
10173 .IP "\fBsse,387\fR" 4
10174 .IX Item "sse,387"
10175 .PD 0
10176 .IP "\fBsse+387\fR" 4
10177 .IX Item "sse+387"
10178 .IP "\fBboth\fR" 4
10179 .IX Item "both"
10180 .PD
10181 Attempt to utilize both instruction sets at once.  This effectively double the
10182 amount of available registers and on chips with separate execution units for
10183 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
10184 still experimental, because the \s-1GCC\s0 register allocator does not model separate
10185 functional units well resulting in instable performance.
10186 .RE
10187 .RS 4
10188 .RE
10189 .IP "\fB\-masm=\fR\fIdialect\fR" 4
10190 .IX Item "-masm=dialect"
10191 Output asm instructions using selected \fIdialect\fR.  Supported
10192 choices are \fBintel\fR or \fBatt\fR (the default one).  Darwin does
10193 not support \fBintel\fR.
10194 .IP "\fB\-mieee\-fp\fR" 4
10195 .IX Item "-mieee-fp"
10196 .PD 0
10197 .IP "\fB\-mno\-ieee\-fp\fR" 4
10198 .IX Item "-mno-ieee-fp"
10199 .PD
10200 Control whether or not the compiler uses \s-1IEEE\s0 floating point
10201 comparisons.  These handle correctly the case where the result of a
10202 comparison is unordered.
10203 .IP "\fB\-msoft\-float\fR" 4
10204 .IX Item "-msoft-float"
10205 Generate output containing library calls for floating point.
10206 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
10207 Normally the facilities of the machine's usual C compiler are used, but
10208 this can't be done directly in cross-compilation.  You must make your
10209 own arrangements to provide suitable library functions for
10210 cross-compilation.
10211 .Sp
10212 On machines where a function returns floating point results in the 80387
10213 register stack, some floating point opcodes may be emitted even if
10214 \&\fB\-msoft\-float\fR is used.
10215 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
10216 .IX Item "-mno-fp-ret-in-387"
10217 Do not use the \s-1FPU\s0 registers for return values of functions.
10218 .Sp
10219 The usual calling convention has functions return values of types
10220 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
10221 is no \s-1FPU\s0.  The idea is that the operating system should emulate
10222 an \s-1FPU\s0.
10223 .Sp
10224 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
10225 in ordinary \s-1CPU\s0 registers instead.
10226 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
10227 .IX Item "-mno-fancy-math-387"
10228 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
10229 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
10230 generating those instructions.  This option is the default on FreeBSD,
10231 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
10232 indicates that the target cpu will always have an \s-1FPU\s0 and so the
10233 instruction will not need emulation.  As of revision 2.6.1, these
10234 instructions are not generated unless you also use the
10235 \&\fB\-funsafe\-math\-optimizations\fR switch.
10236 .IP "\fB\-malign\-double\fR" 4
10237 .IX Item "-malign-double"
10238 .PD 0
10239 .IP "\fB\-mno\-align\-double\fR" 4
10240 .IX Item "-mno-align-double"
10241 .PD
10242 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
10243 \&\f(CW\*(C`long long\*(C'\fR variables on a two word boundary or a one word
10244 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two word boundary will
10245 produce code that runs somewhat faster on a \fBPentium\fR at the
10246 expense of more memory.
10247 .Sp
10248 On x86\-64, \fB\-malign\-double\fR is enabled by default.
10249 .Sp
10250 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
10251 structures containing the above types will be aligned differently than
10252 the published application binary interface specifications for the 386
10253 and will not be binary compatible with structures in code compiled
10254 without that switch.
10255 .IP "\fB\-m96bit\-long\-double\fR" 4
10256 .IX Item "-m96bit-long-double"
10257 .PD 0
10258 .IP "\fB\-m128bit\-long\-double\fR" 4
10259 .IX Item "-m128bit-long-double"
10260 .PD
10261 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
10262 application binary interface specifies the size to be 96 bits,
10263 so \fB\-m96bit\-long\-double\fR is the default in 32 bit mode.
10264 .Sp
10265 Modern architectures (Pentium and newer) would prefer \f(CW\*(C`long double\*(C'\fR
10266 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
10267 conforming to the \s-1ABI\s0, this would not be possible.  So specifying a
10268 \&\fB\-m128bit\-long\-double\fR will align \f(CW\*(C`long double\*(C'\fR
10269 to a 16 byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
10270 32 bit zero.
10271 .Sp
10272 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
10273 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is to be aligned on 16 byte boundary.
10274 .Sp
10275 Notice that neither of these options enable any extra precision over the x87
10276 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
10277 .Sp
10278 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, the
10279 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables will change
10280 their size as well as function calling convention for function taking
10281 \&\f(CW\*(C`long double\*(C'\fR will be modified.  Hence they will not be binary
10282 compatible with arrays or structures in code compiled without that switch.
10283 .IP "\fB\-mlarge\-data\-threshold=\fR\fInumber\fR" 4
10284 .IX Item "-mlarge-data-threshold=number"
10285 When \fB\-mcmodel=medium\fR is specified, the data greater than
10286 \&\fIthreshold\fR are placed in large data section.  This value must be the
10287 same across all object linked into the binary and defaults to 65535.
10288 .IP "\fB\-mrtd\fR" 4
10289 .IX Item "-mrtd"
10290 Use a different function-calling convention, in which functions that
10291 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
10292 instruction, which pops their arguments while returning.  This saves one
10293 instruction in the caller since there is no need to pop the arguments
10294 there.
10295 .Sp
10296 You can specify that an individual function is called with this calling
10297 sequence with the function attribute \fBstdcall\fR.  You can also
10298 override the \fB\-mrtd\fR option by using the function attribute
10299 \&\fBcdecl\fR.
10300 .Sp
10301 \&\fBWarning:\fR this calling convention is incompatible with the one
10302 normally used on Unix, so you cannot use it if you need to call
10303 libraries compiled with the Unix compiler.
10304 .Sp
10305 Also, you must provide function prototypes for all functions that
10306 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
10307 otherwise incorrect code will be generated for calls to those
10308 functions.
10309 .Sp
10310 In addition, seriously incorrect code will result if you call a
10311 function with too many arguments.  (Normally, extra arguments are
10312 harmlessly ignored.)
10313 .IP "\fB\-mregparm=\fR\fInum\fR" 4
10314 .IX Item "-mregparm=num"
10315 Control how many registers are used to pass integer arguments.  By
10316 default, no registers are used to pass arguments, and at most 3
10317 registers can be used.  You can control this behavior for a specific
10318 function by using the function attribute \fBregparm\fR.
10319 .Sp
10320 \&\fBWarning:\fR if you use this switch, and
10321 \&\fInum\fR is nonzero, then you must build all modules with the same
10322 value, including any libraries.  This includes the system libraries and
10323 startup modules.
10324 .IP "\fB\-msseregparm\fR" 4
10325 .IX Item "-msseregparm"
10326 Use \s-1SSE\s0 register passing conventions for float and double arguments
10327 and return values.  You can control this behavior for a specific
10328 function by using the function attribute \fBsseregparm\fR.
10329 .Sp
10330 \&\fBWarning:\fR if you use this switch then you must build all
10331 modules with the same value, including any libraries.  This includes
10332 the system libraries and startup modules.
10333 .IP "\fB\-mpc32\fR" 4
10334 .IX Item "-mpc32"
10335 .PD 0
10336 .IP "\fB\-mpc64\fR" 4
10337 .IX Item "-mpc64"
10338 .IP "\fB\-mpc80\fR" 4
10339 .IX Item "-mpc80"
10340 .PD
10341 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
10342 is specified, the significands of results of floating-point operations are
10343 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
10344 significands of results of floating-point operations to 53 bits (double
10345 precision) and \fB\-mpc80\fR rounds the significands of results of
10346 floating-point operations to 64 bits (extended double precision), which is
10347 the default.  When this option is used, floating-point operations in higher
10348 precisions are not available to the programmer without setting the \s-1FPU\s0
10349 control word explicitly.
10350 .Sp
10351 Setting the rounding of floating-point operations to less than the default
10352 80 bits can speed some programs by 2% or more.  Note that some mathematical
10353 libraries assume that extended precision (80 bit) floating-point operations
10354 are enabled by default; routines in such libraries could suffer significant
10355 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
10356 when this option is used to set the precision to less than extended precision.
10357 .IP "\fB\-mstackrealign\fR" 4
10358 .IX Item "-mstackrealign"
10359 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
10360 option will generate an alternate prologue and epilogue that realigns the
10361 runtime stack if necessary.  This supports mixing legacy codes that keep
10362 a 4\-byte aligned stack with modern codes that keep a 16\-byte stack for
10363 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
10364 applicable to individual functions.
10365 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
10366 .IX Item "-mpreferred-stack-boundary=num"
10367 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
10368 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
10369 the default is 4 (16 bytes or 128 bits).
10370 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
10371 .IX Item "-mincoming-stack-boundary=num"
10372 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
10373 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
10374 the one specified by \fB\-mpreferred\-stack\-boundary\fR will be used.
10375 .Sp
10376 On Pentium and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
10377 should be aligned to an 8 byte boundary (see \fB\-malign\-double\fR) or
10378 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
10379 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
10380 properly if it is not 16 byte aligned.
10381 .Sp
10382 To ensure proper alignment of this values on the stack, the stack boundary
10383 must be as aligned as that required by any value stored on the stack.
10384 Further, every function must be generated such that it keeps the stack
10385 aligned.  Thus calling a function compiled with a higher preferred
10386 stack boundary from a function compiled with a lower preferred stack
10387 boundary will most likely misalign the stack.  It is recommended that
10388 libraries that use callbacks always use the default setting.
10389 .Sp
10390 This extra alignment does consume extra stack space, and generally
10391 increases code size.  Code that is sensitive to stack space usage, such
10392 as embedded systems and operating system kernels, may want to reduce the
10393 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
10394 .IP "\fB\-mmmx\fR" 4
10395 .IX Item "-mmmx"
10396 .PD 0
10397 .IP "\fB\-mno\-mmx\fR" 4
10398 .IX Item "-mno-mmx"
10399 .IP "\fB\-msse\fR" 4
10400 .IX Item "-msse"
10401 .IP "\fB\-mno\-sse\fR" 4
10402 .IX Item "-mno-sse"
10403 .IP "\fB\-msse2\fR" 4
10404 .IX Item "-msse2"
10405 .IP "\fB\-mno\-sse2\fR" 4
10406 .IX Item "-mno-sse2"
10407 .IP "\fB\-msse3\fR" 4
10408 .IX Item "-msse3"
10409 .IP "\fB\-mno\-sse3\fR" 4
10410 .IX Item "-mno-sse3"
10411 .IP "\fB\-mssse3\fR" 4
10412 .IX Item "-mssse3"
10413 .IP "\fB\-mno\-ssse3\fR" 4
10414 .IX Item "-mno-ssse3"
10415 .IP "\fB\-msse4.1\fR" 4
10416 .IX Item "-msse4.1"
10417 .IP "\fB\-mno\-sse4.1\fR" 4
10418 .IX Item "-mno-sse4.1"
10419 .IP "\fB\-msse4.2\fR" 4
10420 .IX Item "-msse4.2"
10421 .IP "\fB\-mno\-sse4.2\fR" 4
10422 .IX Item "-mno-sse4.2"
10423 .IP "\fB\-msse4\fR" 4
10424 .IX Item "-msse4"
10425 .IP "\fB\-mno\-sse4\fR" 4
10426 .IX Item "-mno-sse4"
10427 .IP "\fB\-mavx\fR" 4
10428 .IX Item "-mavx"
10429 .IP "\fB\-mno\-avx\fR" 4
10430 .IX Item "-mno-avx"
10431 .IP "\fB\-maes\fR" 4
10432 .IX Item "-maes"
10433 .IP "\fB\-mno\-aes\fR" 4
10434 .IX Item "-mno-aes"
10435 .IP "\fB\-mpclmul\fR" 4
10436 .IX Item "-mpclmul"
10437 .IP "\fB\-mno\-pclmul\fR" 4
10438 .IX Item "-mno-pclmul"
10439 .IP "\fB\-msse4a\fR" 4
10440 .IX Item "-msse4a"
10441 .IP "\fB\-mno\-sse4a\fR" 4
10442 .IX Item "-mno-sse4a"
10443 .IP "\fB\-msse5\fR" 4
10444 .IX Item "-msse5"
10445 .IP "\fB\-mno\-sse5\fR" 4
10446 .IX Item "-mno-sse5"
10447 .IP "\fB\-m3dnow\fR" 4
10448 .IX Item "-m3dnow"
10449 .IP "\fB\-mno\-3dnow\fR" 4
10450 .IX Item "-mno-3dnow"
10451 .IP "\fB\-mpopcnt\fR" 4
10452 .IX Item "-mpopcnt"
10453 .IP "\fB\-mno\-popcnt\fR" 4
10454 .IX Item "-mno-popcnt"
10455 .IP "\fB\-mabm\fR" 4
10456 .IX Item "-mabm"
10457 .IP "\fB\-mno\-abm\fR" 4
10458 .IX Item "-mno-abm"
10459 .PD
10460 These switches enable or disable the use of instructions in the \s-1MMX\s0,
10461 \&\s-1SSE\s0, \s-1SSE2\s0, \s-1SSE3\s0, \s-1SSSE3\s0, \s-1SSE4\s0.1, \s-1AVX\s0, \s-1AES\s0, \s-1PCLMUL\s0, \s-1SSE4A\s0, \s-1SSE5\s0, \s-1ABM\s0 or
10462 3DNow! extended instruction sets.
10463 These extensions are also available as built-in functions: see
10464 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
10465 disabled by these switches.
10466 .Sp
10467 To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
10468 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
10469 .Sp
10470 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
10471 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
10472 when needed.
10473 .Sp
10474 These options will enable \s-1GCC\s0 to use these extended instructions in
10475 generated code, even without \fB\-mfpmath=sse\fR.  Applications which
10476 perform runtime \s-1CPU\s0 detection must compile separate files for each
10477 supported architecture, using the appropriate flags.  In particular,
10478 the file containing the \s-1CPU\s0 detection code should be compiled without
10479 these options.
10480 .IP "\fB\-mcld\fR" 4
10481 .IX Item "-mcld"
10482 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
10483 of functions that use string instructions.  String instructions depend on
10484 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
10485 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
10486 systems violate this specification by not clearing the \s-1DF\s0 flag in their
10487 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
10488 set which leads to wrong direction mode, when string instructions are used.
10489 This option can be enabled by default on 32\-bit x86 targets by configuring
10490 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
10491 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
10492 in this case.
10493 .IP "\fB\-mcx16\fR" 4
10494 .IX Item "-mcx16"
10495 This option will enable \s-1GCC\s0 to use \s-1CMPXCHG16B\s0 instruction in generated code.
10496 \&\s-1CMPXCHG16B\s0 allows for atomic operations on 128\-bit double quadword (or oword)
10497 data types.  This is useful for high resolution counters that could be updated
10498 by multiple processors (or cores).  This instruction is generated as part of
10499 atomic built-in functions: see \fBAtomic Builtins\fR for details.
10500 .IP "\fB\-msahf\fR" 4
10501 .IX Item "-msahf"
10502 This option will enable \s-1GCC\s0 to use \s-1SAHF\s0 instruction in generated 64\-bit code.
10503 Early Intel CPUs with Intel 64 lacked \s-1LAHF\s0 and \s-1SAHF\s0 instructions supported
10504 by \s-1AMD64\s0 until introduction of Pentium 4 G1 step in December 2005.  \s-1LAHF\s0 and
10505 \&\s-1SAHF\s0 are load and store instructions, respectively, for certain status flags.
10506 In 64\-bit mode, \s-1SAHF\s0 instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR, \f(CW\*(C`drem\*(C'\fR
10507 or \f(CW\*(C`remainder\*(C'\fR built-in functions: see \fBOther Builtins\fR for details.
10508 .IP "\fB\-mrecip\fR" 4
10509 .IX Item "-mrecip"
10510 This option will enable \s-1GCC\s0 to use \s-1RCPSS\s0 and \s-1RSQRTSS\s0 instructions (and their
10511 vectorized variants \s-1RCPPS\s0 and \s-1RSQRTPS\s0) with an additional Newton-Raphson step
10512 to increase precision instead of \s-1DIVSS\s0 and \s-1SQRTSS\s0 (and their vectorized
10513 variants) for single precision floating point arguments.  These instructions
10514 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
10515 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
10516 Note that while the throughput of the sequence is higher than the throughput
10517 of the non-reciprocal instruction, the precision of the sequence can be
10518 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
10519 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
10520 .IX Item "-mveclibabi=type"
10521 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
10522 external library.  Supported types are \f(CW\*(C`svml\*(C'\fR for the Intel short
10523 vector math library and \f(CW\*(C`acml\*(C'\fR for the \s-1AMD\s0 math core library style
10524 of interfacing.  \s-1GCC\s0 will currently emit calls to \f(CW\*(C`vmldExp2\*(C'\fR,
10525 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
10526 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
10527 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
10528 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
10529 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
10530 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
10531 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
10532 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
10533 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
10534 function type when \fB\-mveclibabi=svml\fR is used and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
10535 \&\f(CW\*(C`_\|_vrd2_cos\*(C'\fR, \f(CW\*(C`_\|_vrd2_exp\*(C'\fR, \f(CW\*(C`_\|_vrd2_log\*(C'\fR, \f(CW\*(C`_\|_vrd2_log2\*(C'\fR,
10536 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
10537 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
10538 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for corresponding function type
10539 when \fB\-mveclibabi=acml\fR is used. Both \fB\-ftree\-vectorize\fR and
10540 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled. A \s-1SVML\s0 or \s-1ACML\s0 \s-1ABI\s0
10541 compatible library will have to be specified at link time.
10542 .IP "\fB\-mpush\-args\fR" 4
10543 .IX Item "-mpush-args"
10544 .PD 0
10545 .IP "\fB\-mno\-push\-args\fR" 4
10546 .IX Item "-mno-push-args"
10547 .PD
10548 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
10549 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
10550 by default.  In some cases disabling it may improve performance because of
10551 improved scheduling and reduced dependencies.
10552 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
10553 .IX Item "-maccumulate-outgoing-args"
10554 If enabled, the maximum amount of space required for outgoing arguments will be
10555 computed in the function prologue.  This is faster on most modern CPUs
10556 because of reduced dependencies, improved scheduling and reduced stack usage
10557 when preferred stack boundary is not equal to 2.  The drawback is a notable
10558 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
10559 .IP "\fB\-mthreads\fR" 4
10560 .IX Item "-mthreads"
10561 Support thread-safe exception handling on \fBMingw32\fR.  Code that relies
10562 on thread-safe exception handling must compile and link all code with the
10563 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
10564 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
10565 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
10566 .IP "\fB\-mno\-align\-stringops\fR" 4
10567 .IX Item "-mno-align-stringops"
10568 Do not align destination of inlined string operations.  This switch reduces
10569 code size and improves performance in case the destination is already aligned,
10570 but \s-1GCC\s0 doesn't know about it.
10571 .IP "\fB\-minline\-all\-stringops\fR" 4
10572 .IX Item "-minline-all-stringops"
10573 By default \s-1GCC\s0 inlines string operations only when destination is known to be
10574 aligned at least to 4 byte boundary.  This enables more inlining, increase code
10575 size, but may improve performance of code that depends on fast memcpy, strlen
10576 and memset for short lengths.
10577 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
10578 .IX Item "-minline-stringops-dynamically"
10579 For string operation of unknown size, inline runtime checks so for small
10580 blocks inline code is used, while for large blocks library call is used.
10581 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
10582 .IX Item "-mstringop-strategy=alg"
10583 Overwrite internal decision heuristic about particular algorithm to inline
10584 string operation with.  The allowed values are \f(CW\*(C`rep_byte\*(C'\fR,
10585 \&\f(CW\*(C`rep_4byte\*(C'\fR, \f(CW\*(C`rep_8byte\*(C'\fR for expanding using i386 \f(CW\*(C`rep\*(C'\fR prefix
10586 of specified size, \f(CW\*(C`byte_loop\*(C'\fR, \f(CW\*(C`loop\*(C'\fR, \f(CW\*(C`unrolled_loop\*(C'\fR for
10587 expanding inline loop, \f(CW\*(C`libcall\*(C'\fR for always expanding library call.
10588 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
10589 .IX Item "-momit-leaf-frame-pointer"
10590 Don't keep the frame pointer in a register for leaf functions.  This
10591 avoids the instructions to save, set up and restore frame pointers and
10592 makes an extra register available in leaf functions.  The option
10593 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
10594 which might make debugging harder.
10595 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
10596 .IX Item "-mtls-direct-seg-refs"
10597 .PD 0
10598 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
10599 .IX Item "-mno-tls-direct-seg-refs"
10600 .PD
10601 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
10602 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
10603 or whether the thread base pointer must be added.  Whether or not this
10604 is legal depends on the operating system, and whether it maps the
10605 segment to cover the entire \s-1TLS\s0 area.
10606 .Sp
10607 For systems that use \s-1GNU\s0 libc, the default is on.
10608 .IP "\fB\-mfused\-madd\fR" 4
10609 .IX Item "-mfused-madd"
10610 .PD 0
10611 .IP "\fB\-mno\-fused\-madd\fR" 4
10612 .IX Item "-mno-fused-madd"
10613 .PD
10614 Enable automatic generation of fused floating point multiply-add instructions
10615 if the \s-1ISA\s0 supports such instructions.  The \-mfused\-madd option is on by
10616 default.  The fused multiply-add instructions have a different
10617 rounding behavior compared to executing a multiply followed by an add.
10618 .IP "\fB\-msse2avx\fR" 4
10619 .IX Item "-msse2avx"
10620 .PD 0
10621 .IP "\fB\-mno\-sse2avx\fR" 4
10622 .IX Item "-mno-sse2avx"
10623 .PD
10624 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
10625 prefix.  The option \fB\-mavx\fR turns this on by default.
10626 .PP
10627 These \fB\-m\fR switches are supported in addition to the above
10628 on \s-1AMD\s0 x86\-64 processors in 64\-bit environments.
10629 .IP "\fB\-m32\fR" 4
10630 .IX Item "-m32"
10631 .PD 0
10632 .IP "\fB\-m64\fR" 4
10633 .IX Item "-m64"
10634 .PD
10635 Generate code for a 32\-bit or 64\-bit environment.
10636 The 32\-bit environment sets int, long and pointer to 32 bits and
10637 generates code that runs on any i386 system.
10638 The 64\-bit environment sets int to 32 bits and long and pointer
10639 to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture. For
10640 darwin only the \-m64 option turns off the \fB\-fno\-pic\fR and
10641 \&\fB\-mdynamic\-no\-pic\fR options.
10642 .IP "\fB\-mno\-red\-zone\fR" 4
10643 .IX Item "-mno-red-zone"
10644 Do not use a so called red zone for x86\-64 code.  The red zone is mandated
10645 by the x86\-64 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
10646 stack pointer that will not be modified by signal or interrupt handlers
10647 and therefore can be used for temporary data without adjusting the stack
10648 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
10649 .IP "\fB\-mcmodel=small\fR" 4
10650 .IX Item "-mcmodel=small"
10651 Generate code for the small code model: the program and its symbols must
10652 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
10653 Programs can be statically or dynamically linked.  This is the default
10654 code model.
10655 .IP "\fB\-mcmodel=kernel\fR" 4
10656 .IX Item "-mcmodel=kernel"
10657 Generate code for the kernel code model.  The kernel runs in the
10658 negative 2 \s-1GB\s0 of the address space.
10659 This model has to be used for Linux kernel code.
10660 .IP "\fB\-mcmodel=medium\fR" 4
10661 .IX Item "-mcmodel=medium"
10662 Generate code for the medium model: The program is linked in the lower 2
10663 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
10664 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
10665 large data or bss sections and can be located above 2GB.  Programs can
10666 be statically or dynamically linked.
10667 .IP "\fB\-mcmodel=large\fR" 4
10668 .IX Item "-mcmodel=large"
10669 Generate code for the large model: This model makes no assumptions
10670 about addresses and sizes of sections.
10671 .PP
10672 \fI\s-1IA\-64\s0 Options\fR
10673 .IX Subsection "IA-64 Options"
10674 .PP
10675 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
10676 .IP "\fB\-mbig\-endian\fR" 4
10677 .IX Item "-mbig-endian"
10678 Generate code for a big endian target.  This is the default for HP-UX.
10679 .IP "\fB\-mlittle\-endian\fR" 4
10680 .IX Item "-mlittle-endian"
10681 Generate code for a little endian target.  This is the default for \s-1AIX5\s0
10682 and GNU/Linux.
10683 .IP "\fB\-mgnu\-as\fR" 4
10684 .IX Item "-mgnu-as"
10685 .PD 0
10686 .IP "\fB\-mno\-gnu\-as\fR" 4
10687 .IX Item "-mno-gnu-as"
10688 .PD
10689 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
10690 .IP "\fB\-mgnu\-ld\fR" 4
10691 .IX Item "-mgnu-ld"
10692 .PD 0
10693 .IP "\fB\-mno\-gnu\-ld\fR" 4
10694 .IX Item "-mno-gnu-ld"
10695 .PD
10696 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
10697 .IP "\fB\-mno\-pic\fR" 4
10698 .IX Item "-mno-pic"
10699 Generate code that does not use a global pointer register.  The result
10700 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
10701 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
10702 .IX Item "-mvolatile-asm-stop"
10703 .PD 0
10704 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
10705 .IX Item "-mno-volatile-asm-stop"
10706 .PD
10707 Generate (or don't) a stop bit immediately before and after volatile asm
10708 statements.
10709 .IP "\fB\-mregister\-names\fR" 4
10710 .IX Item "-mregister-names"
10711 .PD 0
10712 .IP "\fB\-mno\-register\-names\fR" 4
10713 .IX Item "-mno-register-names"
10714 .PD
10715 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
10716 the stacked registers.  This may make assembler output more readable.
10717 .IP "\fB\-mno\-sdata\fR" 4
10718 .IX Item "-mno-sdata"
10719 .PD 0
10720 .IP "\fB\-msdata\fR" 4
10721 .IX Item "-msdata"
10722 .PD
10723 Disable (or enable) optimizations that use the small data section.  This may
10724 be useful for working around optimizer bugs.
10725 .IP "\fB\-mconstant\-gp\fR" 4
10726 .IX Item "-mconstant-gp"
10727 Generate code that uses a single constant global pointer value.  This is
10728 useful when compiling kernel code.
10729 .IP "\fB\-mauto\-pic\fR" 4
10730 .IX Item "-mauto-pic"
10731 Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
10732 This is useful when compiling firmware code.
10733 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
10734 .IX Item "-minline-float-divide-min-latency"
10735 Generate code for inline divides of floating point values
10736 using the minimum latency algorithm.
10737 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
10738 .IX Item "-minline-float-divide-max-throughput"
10739 Generate code for inline divides of floating point values
10740 using the maximum throughput algorithm.
10741 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
10742 .IX Item "-minline-int-divide-min-latency"
10743 Generate code for inline divides of integer values
10744 using the minimum latency algorithm.
10745 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
10746 .IX Item "-minline-int-divide-max-throughput"
10747 Generate code for inline divides of integer values
10748 using the maximum throughput algorithm.
10749 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
10750 .IX Item "-minline-sqrt-min-latency"
10751 Generate code for inline square roots
10752 using the minimum latency algorithm.
10753 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
10754 .IX Item "-minline-sqrt-max-throughput"
10755 Generate code for inline square roots
10756 using the maximum throughput algorithm.
10757 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
10758 .IX Item "-mno-dwarf2-asm"
10759 .PD 0
10760 .IP "\fB\-mdwarf2\-asm\fR" 4
10761 .IX Item "-mdwarf2-asm"
10762 .PD
10763 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
10764 info.  This may be useful when not using the \s-1GNU\s0 assembler.
10765 .IP "\fB\-mearly\-stop\-bits\fR" 4
10766 .IX Item "-mearly-stop-bits"
10767 .PD 0
10768 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
10769 .IX Item "-mno-early-stop-bits"
10770 .PD
10771 Allow stop bits to be placed earlier than immediately preceding the
10772 instruction that triggered the stop bit.  This can improve instruction
10773 scheduling, but does not always do so.
10774 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
10775 .IX Item "-mfixed-range=register-range"
10776 Generate code treating the given register range as fixed registers.
10777 A fixed register is one that the register allocator can not use.  This is
10778 useful when compiling kernel code.  A register range is specified as
10779 two registers separated by a dash.  Multiple register ranges can be
10780 specified separated by a comma.
10781 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
10782 .IX Item "-mtls-size=tls-size"
10783 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
10784 64.
10785 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10786 .IX Item "-mtune=cpu-type"
10787 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
10788 itanium, itanium1, merced, itanium2, and mckinley.
10789 .IP "\fB\-mt\fR" 4
10790 .IX Item "-mt"
10791 .PD 0
10792 .IP "\fB\-pthread\fR" 4
10793 .IX Item "-pthread"
10794 .PD
10795 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
10796 option sets flags for both the preprocessor and linker.  It does
10797 not affect the thread safety of object code produced by the compiler or
10798 that of libraries supplied with it.  These are HP-UX specific flags.
10799 .IP "\fB\-milp32\fR" 4
10800 .IX Item "-milp32"
10801 .PD 0
10802 .IP "\fB\-mlp64\fR" 4
10803 .IX Item "-mlp64"
10804 .PD
10805 Generate code for a 32\-bit or 64\-bit environment.
10806 The 32\-bit environment sets int, long and pointer to 32 bits.
10807 The 64\-bit environment sets int to 32 bits and long and pointer
10808 to 64 bits.  These are HP-UX specific flags.
10809 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
10810 .IX Item "-mno-sched-br-data-spec"
10811 .PD 0
10812 .IP "\fB\-msched\-br\-data\-spec\fR" 4
10813 .IX Item "-msched-br-data-spec"
10814 .PD
10815 (Dis/En)able data speculative scheduling before reload.
10816 This will result in generation of the ld.a instructions and
10817 the corresponding check instructions (ld.c / chk.a).
10818 The default is 'disable'.
10819 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
10820 .IX Item "-msched-ar-data-spec"
10821 .PD 0
10822 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
10823 .IX Item "-mno-sched-ar-data-spec"
10824 .PD
10825 (En/Dis)able data speculative scheduling after reload.
10826 This will result in generation of the ld.a instructions and
10827 the corresponding check instructions (ld.c / chk.a).
10828 The default is 'enable'.
10829 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
10830 .IX Item "-mno-sched-control-spec"
10831 .PD 0
10832 .IP "\fB\-msched\-control\-spec\fR" 4
10833 .IX Item "-msched-control-spec"
10834 .PD
10835 (Dis/En)able control speculative scheduling.  This feature is
10836 available only during region scheduling (i.e. before reload).
10837 This will result in generation of the ld.s instructions and
10838 the corresponding check instructions chk.s .
10839 The default is 'disable'.
10840 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
10841 .IX Item "-msched-br-in-data-spec"
10842 .PD 0
10843 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
10844 .IX Item "-mno-sched-br-in-data-spec"
10845 .PD
10846 (En/Dis)able speculative scheduling of the instructions that
10847 are dependent on the data speculative loads before reload.
10848 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
10849 The default is 'enable'.
10850 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
10851 .IX Item "-msched-ar-in-data-spec"
10852 .PD 0
10853 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
10854 .IX Item "-mno-sched-ar-in-data-spec"
10855 .PD
10856 (En/Dis)able speculative scheduling of the instructions that
10857 are dependent on the data speculative loads after reload.
10858 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
10859 The default is 'enable'.
10860 .IP "\fB\-msched\-in\-control\-spec\fR" 4
10861 .IX Item "-msched-in-control-spec"
10862 .PD 0
10863 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
10864 .IX Item "-mno-sched-in-control-spec"
10865 .PD
10866 (En/Dis)able speculative scheduling of the instructions that
10867 are dependent on the control speculative loads.
10868 This is effective only with \fB\-msched\-control\-spec\fR enabled.
10869 The default is 'enable'.
10870 .IP "\fB\-msched\-ldc\fR" 4
10871 .IX Item "-msched-ldc"
10872 .PD 0
10873 .IP "\fB\-mno\-sched\-ldc\fR" 4
10874 .IX Item "-mno-sched-ldc"
10875 .PD
10876 (En/Dis)able use of simple data speculation checks ld.c .
10877 If disabled, only chk.a instructions will be emitted to check
10878 data speculative loads.
10879 The default is 'enable'.
10880 .IP "\fB\-mno\-sched\-control\-ldc\fR" 4
10881 .IX Item "-mno-sched-control-ldc"
10882 .PD 0
10883 .IP "\fB\-msched\-control\-ldc\fR" 4
10884 .IX Item "-msched-control-ldc"
10885 .PD
10886 (Dis/En)able use of ld.c instructions to check control speculative loads.
10887 If enabled, in case of control speculative load with no speculatively
10888 scheduled dependent instructions this load will be emitted as ld.sa and
10889 ld.c will be used to check it.
10890 The default is 'disable'.
10891 .IP "\fB\-mno\-sched\-spec\-verbose\fR" 4
10892 .IX Item "-mno-sched-spec-verbose"
10893 .PD 0
10894 .IP "\fB\-msched\-spec\-verbose\fR" 4
10895 .IX Item "-msched-spec-verbose"
10896 .PD
10897 (Dis/En)able printing of the information about speculative motions.
10898 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
10899 .IX Item "-mno-sched-prefer-non-data-spec-insns"
10900 .PD 0
10901 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
10902 .IX Item "-msched-prefer-non-data-spec-insns"
10903 .PD
10904 If enabled, data speculative instructions will be chosen for schedule
10905 only if there are no other choices at the moment.  This will make
10906 the use of the data speculation much more conservative.
10907 The default is 'disable'.
10908 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
10909 .IX Item "-mno-sched-prefer-non-control-spec-insns"
10910 .PD 0
10911 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
10912 .IX Item "-msched-prefer-non-control-spec-insns"
10913 .PD
10914 If enabled, control speculative instructions will be chosen for schedule
10915 only if there are no other choices at the moment.  This will make
10916 the use of the control speculation much more conservative.
10917 The default is 'disable'.
10918 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
10919 .IX Item "-mno-sched-count-spec-in-critical-path"
10920 .PD 0
10921 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
10922 .IX Item "-msched-count-spec-in-critical-path"
10923 .PD
10924 If enabled, speculative dependencies will be considered during
10925 computation of the instructions priorities.  This will make the use of the
10926 speculation a bit more conservative.
10927 The default is 'disable'.
10928 .PP
10929 \fIM32C Options\fR
10930 .IX Subsection "M32C Options"
10931 .IP "\fB\-mcpu=\fR\fIname\fR" 4
10932 .IX Item "-mcpu=name"
10933 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
10934 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
10935 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
10936 the M32C/80 series.
10937 .IP "\fB\-msim\fR" 4
10938 .IX Item "-msim"
10939 Specifies that the program will be run on the simulator.  This causes
10940 an alternate runtime library to be linked in which supports, for
10941 example, file I/O.  You must not use this option when generating
10942 programs that will run on real hardware; you must provide your own
10943 runtime library for whatever I/O functions are needed.
10944 .IP "\fB\-memregs=\fR\fInumber\fR" 4
10945 .IX Item "-memregs=number"
10946 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 will use
10947 during code generation.  These pseudo-registers will be used like real
10948 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
10949 code into available registers, and the performance penalty of using
10950 memory instead of registers.  Note that all modules in a program must
10951 be compiled with the same value for this option.  Because of that, you
10952 must not use this option with the default runtime libraries gcc
10953 builds.
10954 .PP
10955 \fIM32R/D Options\fR
10956 .IX Subsection "M32R/D Options"
10957 .PP
10958 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
10959 .IP "\fB\-m32r2\fR" 4
10960 .IX Item "-m32r2"
10961 Generate code for the M32R/2.
10962 .IP "\fB\-m32rx\fR" 4
10963 .IX Item "-m32rx"
10964 Generate code for the M32R/X.
10965 .IP "\fB\-m32r\fR" 4
10966 .IX Item "-m32r"
10967 Generate code for the M32R.  This is the default.
10968 .IP "\fB\-mmodel=small\fR" 4
10969 .IX Item "-mmodel=small"
10970 Assume all objects live in the lower 16MB of memory (so that their addresses
10971 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
10972 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
10973 This is the default.
10974 .Sp
10975 The addressability of a particular object can be set with the
10976 \&\f(CW\*(C`model\*(C'\fR attribute.
10977 .IP "\fB\-mmodel=medium\fR" 4
10978 .IX Item "-mmodel=medium"
10979 Assume objects may be anywhere in the 32\-bit address space (the compiler
10980 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
10981 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
10982 .IP "\fB\-mmodel=large\fR" 4
10983 .IX Item "-mmodel=large"
10984 Assume objects may be anywhere in the 32\-bit address space (the compiler
10985 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
10986 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
10987 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
10988 instruction sequence).
10989 .IP "\fB\-msdata=none\fR" 4
10990 .IX Item "-msdata=none"
10991 Disable use of the small data area.  Variables will be put into
10992 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
10993 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
10994 This is the default.
10995 .Sp
10996 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
10997 Objects may be explicitly put in the small data area with the
10998 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
10999 .IP "\fB\-msdata=sdata\fR" 4
11000 .IX Item "-msdata=sdata"
11001 Put small global and static data in the small data area, but do not
11002 generate special code to reference them.
11003 .IP "\fB\-msdata=use\fR" 4
11004 .IX Item "-msdata=use"
11005 Put small global and static data in the small data area, and generate
11006 special instructions to reference them.
11007 .IP "\fB\-G\fR \fInum\fR" 4
11008 .IX Item "-G num"
11009 Put global and static objects less than or equal to \fInum\fR bytes
11010 into the small data or bss sections instead of the normal data or bss
11011 sections.  The default value of \fInum\fR is 8.
11012 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
11013 for this option to have any effect.
11014 .Sp
11015 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
11016 Compiling with different values of \fInum\fR may or may not work; if it
11017 doesn't the linker will give an error message\-\-\-incorrect code will not be
11018 generated.
11019 .IP "\fB\-mdebug\fR" 4
11020 .IX Item "-mdebug"
11021 Makes the M32R specific code in the compiler display some statistics
11022 that might help in debugging programs.
11023 .IP "\fB\-malign\-loops\fR" 4
11024 .IX Item "-malign-loops"
11025 Align all loops to a 32\-byte boundary.
11026 .IP "\fB\-mno\-align\-loops\fR" 4
11027 .IX Item "-mno-align-loops"
11028 Do not enforce a 32\-byte alignment for loops.  This is the default.
11029 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
11030 .IX Item "-missue-rate=number"
11031 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
11032 or 2.
11033 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
11034 .IX Item "-mbranch-cost=number"
11035 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches will be
11036 preferred over conditional code, if it is 2, then the opposite will
11037 apply.
11038 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
11039 .IX Item "-mflush-trap=number"
11040 Specifies the trap number to use to flush the cache.  The default is
11041 12.  Valid numbers are between 0 and 15 inclusive.
11042 .IP "\fB\-mno\-flush\-trap\fR" 4
11043 .IX Item "-mno-flush-trap"
11044 Specifies that the cache cannot be flushed by using a trap.
11045 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
11046 .IX Item "-mflush-func=name"
11047 Specifies the name of the operating system function to call to flush
11048 the cache.  The default is \fI_flush_cache\fR, but a function call
11049 will only be used if a trap is not available.
11050 .IP "\fB\-mno\-flush\-func\fR" 4
11051 .IX Item "-mno-flush-func"
11052 Indicates that there is no \s-1OS\s0 function for flushing the cache.
11053 .PP
11054 \fIM680x0 Options\fR
11055 .IX Subsection "M680x0 Options"
11056 .PP
11057 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
11058 The default settings depend on which architecture was selected when
11059 the compiler was configured; the defaults for the most common choices
11060 are given below.
11061 .IP "\fB\-march=\fR\fIarch\fR" 4
11062 .IX Item "-march=arch"
11063 Generate code for a specific M680x0 or ColdFire instruction set
11064 architecture.  Permissible values of \fIarch\fR for M680x0
11065 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11066 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
11067 architectures are selected according to Freescale's \s-1ISA\s0 classification
11068 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
11069 \&\fBisab\fR and \fBisac\fR.
11070 .Sp
11071 gcc defines a macro \fB_\|_mcf\fR\fIarch\fR\fB_\|_\fR whenever it is generating
11072 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
11073 \&\fB\-march\fR arguments given above.
11074 .Sp
11075 When used together, \fB\-march\fR and \fB\-mtune\fR select code
11076 that runs on a family of similar processors but that is optimized
11077 for a particular microarchitecture.
11078 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11079 .IX Item "-mcpu=cpu"
11080 Generate code for a specific M680x0 or ColdFire processor.
11081 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11082 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
11083 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
11084 below, which also classifies the CPUs into families:
11085 .RS 4
11086 .IP "Family : \fB\-mcpu\fR arguments" 4
11087 .IX Item "Family : -mcpu arguments"
11088 .PD 0
11089 .IP "\fB51qe\fR : \fB51qe\fR" 4
11090 .IX Item "51qe : 51qe"
11091 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
11092 .IX Item "5206 : 5202 5204 5206"
11093 .IP "\fB5206e\fR : \fB5206e\fR" 4
11094 .IX Item "5206e : 5206e"
11095 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
11096 .IX Item "5208 : 5207 5208"
11097 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
11098 .IX Item "5211a : 5210a 5211a"
11099 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
11100 .IX Item "5213 : 5211 5212 5213"
11101 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
11102 .IX Item "5216 : 5214 5216"
11103 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
11104 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
11105 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
11106 .IX Item "5225 : 5224 5225"
11107 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
11108 .IX Item "5235 : 5232 5233 5234 5235 523x"
11109 .IP "\fB5249\fR : \fB5249\fR" 4
11110 .IX Item "5249 : 5249"
11111 .IP "\fB5250\fR : \fB5250\fR" 4
11112 .IX Item "5250 : 5250"
11113 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
11114 .IX Item "5271 : 5270 5271"
11115 .IP "\fB5272\fR : \fB5272\fR" 4
11116 .IX Item "5272 : 5272"
11117 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
11118 .IX Item "5275 : 5274 5275"
11119 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
11120 .IX Item "5282 : 5280 5281 5282 528x"
11121 .IP "\fB5307\fR : \fB5307\fR" 4
11122 .IX Item "5307 : 5307"
11123 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
11124 .IX Item "5329 : 5327 5328 5329 532x"
11125 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
11126 .IX Item "5373 : 5372 5373 537x"
11127 .IP "\fB5407\fR : \fB5407\fR" 4
11128 .IX Item "5407 : 5407"
11129 .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
11130 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
11131 .RE
11132 .RS 4
11133 .PD
11134 .Sp
11135 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
11136 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
11137 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
11138 .Sp
11139 gcc defines the macro \fB_\|_mcf_cpu_\fR\fIcpu\fR when ColdFire target
11140 \&\fIcpu\fR is selected.  It also defines \fB_\|_mcf_family_\fR\fIfamily\fR,
11141 where the value of \fIfamily\fR is given by the table above.
11142 .RE
11143 .IP "\fB\-mtune=\fR\fItune\fR" 4
11144 .IX Item "-mtune=tune"
11145 Tune the code for a particular microarchitecture, within the
11146 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
11147 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
11148 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
11149 and \fBcpu32\fR.  The ColdFire microarchitectures
11150 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
11151 .Sp
11152 You can also use \fB\-mtune=68020\-40\fR for code that needs
11153 to run relatively well on 68020, 68030 and 68040 targets.
11154 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
11155 as well.  These two options select the same tuning decisions as
11156 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
11157 .Sp
11158 gcc defines the macros \fB_\|_mc\fR\fIarch\fR and \fB_\|_mc\fR\fIarch\fR\fB_\|_\fR
11159 when tuning for 680x0 architecture \fIarch\fR.  It also defines
11160 \&\fBmc\fR\fIarch\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
11161 option is used.  If gcc is tuning for a range of architectures,
11162 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
11163 it defines the macros for every architecture in the range.
11164 .Sp
11165 gcc also defines the macro \fB_\|_m\fR\fIuarch\fR\fB_\|_\fR when tuning for
11166 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
11167 of the arguments given above.
11168 .IP "\fB\-m68000\fR" 4
11169 .IX Item "-m68000"
11170 .PD 0
11171 .IP "\fB\-mc68000\fR" 4
11172 .IX Item "-mc68000"
11173 .PD
11174 Generate output for a 68000.  This is the default
11175 when the compiler is configured for 68000\-based systems.
11176 It is equivalent to \fB\-march=68000\fR.
11177 .Sp
11178 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
11179 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
11180 .IP "\fB\-m68010\fR" 4
11181 .IX Item "-m68010"
11182 Generate output for a 68010.  This is the default
11183 when the compiler is configured for 68010\-based systems.
11184 It is equivalent to \fB\-march=68010\fR.
11185 .IP "\fB\-m68020\fR" 4
11186 .IX Item "-m68020"
11187 .PD 0
11188 .IP "\fB\-mc68020\fR" 4
11189 .IX Item "-mc68020"
11190 .PD
11191 Generate output for a 68020.  This is the default
11192 when the compiler is configured for 68020\-based systems.
11193 It is equivalent to \fB\-march=68020\fR.
11194 .IP "\fB\-m68030\fR" 4
11195 .IX Item "-m68030"
11196 Generate output for a 68030.  This is the default when the compiler is
11197 configured for 68030\-based systems.  It is equivalent to
11198 \&\fB\-march=68030\fR.
11199 .IP "\fB\-m68040\fR" 4
11200 .IX Item "-m68040"
11201 Generate output for a 68040.  This is the default when the compiler is
11202 configured for 68040\-based systems.  It is equivalent to
11203 \&\fB\-march=68040\fR.
11204 .Sp
11205 This option inhibits the use of 68881/68882 instructions that have to be
11206 emulated by software on the 68040.  Use this option if your 68040 does not
11207 have code to emulate those instructions.
11208 .IP "\fB\-m68060\fR" 4
11209 .IX Item "-m68060"
11210 Generate output for a 68060.  This is the default when the compiler is
11211 configured for 68060\-based systems.  It is equivalent to
11212 \&\fB\-march=68060\fR.
11213 .Sp
11214 This option inhibits the use of 68020 and 68881/68882 instructions that
11215 have to be emulated by software on the 68060.  Use this option if your 68060
11216 does not have code to emulate those instructions.
11217 .IP "\fB\-mcpu32\fR" 4
11218 .IX Item "-mcpu32"
11219 Generate output for a \s-1CPU32\s0.  This is the default
11220 when the compiler is configured for CPU32\-based systems.
11221 It is equivalent to \fB\-march=cpu32\fR.
11222 .Sp
11223 Use this option for microcontrollers with a
11224 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
11225 68336, 68340, 68341, 68349 and 68360.
11226 .IP "\fB\-m5200\fR" 4
11227 .IX Item "-m5200"
11228 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
11229 when the compiler is configured for 520X\-based systems.
11230 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
11231 in favor of that option.
11232 .Sp
11233 Use this option for microcontroller with a 5200 core, including
11234 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
11235 .IP "\fB\-m5206e\fR" 4
11236 .IX Item "-m5206e"
11237 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
11238 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
11239 .IP "\fB\-m528x\fR" 4
11240 .IX Item "-m528x"
11241 Generate output for a member of the ColdFire 528X family.
11242 The option is now deprecated in favor of the equivalent
11243 \&\fB\-mcpu=528x\fR.
11244 .IP "\fB\-m5307\fR" 4
11245 .IX Item "-m5307"
11246 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
11247 in favor of the equivalent \fB\-mcpu=5307\fR.
11248 .IP "\fB\-m5407\fR" 4
11249 .IX Item "-m5407"
11250 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
11251 in favor of the equivalent \fB\-mcpu=5407\fR.
11252 .IP "\fB\-mcfv4e\fR" 4
11253 .IX Item "-mcfv4e"
11254 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
11255 This includes use of hardware floating point instructions.
11256 The option is equivalent to \fB\-mcpu=547x\fR, and is now
11257 deprecated in favor of that option.
11258 .IP "\fB\-m68020\-40\fR" 4
11259 .IX Item "-m68020-40"
11260 Generate output for a 68040, without using any of the new instructions.
11261 This results in code which can run relatively efficiently on either a
11262 68020/68881 or a 68030 or a 68040.  The generated code does use the
11263 68881 instructions that are emulated on the 68040.
11264 .Sp
11265 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
11266 .IP "\fB\-m68020\-60\fR" 4
11267 .IX Item "-m68020-60"
11268 Generate output for a 68060, without using any of the new instructions.
11269 This results in code which can run relatively efficiently on either a
11270 68020/68881 or a 68030 or a 68040.  The generated code does use the
11271 68881 instructions that are emulated on the 68060.
11272 .Sp
11273 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
11274 .IP "\fB\-mhard\-float\fR" 4
11275 .IX Item "-mhard-float"
11276 .PD 0
11277 .IP "\fB\-m68881\fR" 4
11278 .IX Item "-m68881"
11279 .PD
11280 Generate floating-point instructions.  This is the default for 68020
11281 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
11282 macro \fB_\|_HAVE_68881_\|_\fR on M680x0 targets and \fB_\|_mcffpu_\|_\fR
11283 on ColdFire targets.
11284 .IP "\fB\-msoft\-float\fR" 4
11285 .IX Item "-msoft-float"
11286 Do not generate floating-point instructions; use library calls instead.
11287 This is the default for 68000, 68010, and 68832 targets.  It is also
11288 the default for ColdFire devices that have no \s-1FPU\s0.
11289 .IP "\fB\-mdiv\fR" 4
11290 .IX Item "-mdiv"
11291 .PD 0
11292 .IP "\fB\-mno\-div\fR" 4
11293 .IX Item "-mno-div"
11294 .PD
11295 Generate (do not generate) ColdFire hardware divide and remainder
11296 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
11297 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
11298 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
11299 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
11300 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
11301 \&\fB\-mcpu=5206e\fR.
11302 .Sp
11303 gcc defines the macro \fB_\|_mcfhwdiv_\|_\fR when this option is enabled.
11304 .IP "\fB\-mshort\fR" 4
11305 .IX Item "-mshort"
11306 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11307 Additionally, parameters passed on the stack are also aligned to a
11308 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
11309 .IP "\fB\-mno\-short\fR" 4
11310 .IX Item "-mno-short"
11311 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
11312 .IP "\fB\-mnobitfield\fR" 4
11313 .IX Item "-mnobitfield"
11314 .PD 0
11315 .IP "\fB\-mno\-bitfield\fR" 4
11316 .IX Item "-mno-bitfield"
11317 .PD
11318 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
11319 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
11320 .IP "\fB\-mbitfield\fR" 4
11321 .IX Item "-mbitfield"
11322 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
11323 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
11324 designed for a 68020.
11325 .IP "\fB\-mrtd\fR" 4
11326 .IX Item "-mrtd"
11327 Use a different function-calling convention, in which functions
11328 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
11329 instruction, which pops their arguments while returning.  This
11330 saves one instruction in the caller since there is no need to pop
11331 the arguments there.
11332 .Sp
11333 This calling convention is incompatible with the one normally
11334 used on Unix, so you cannot use it if you need to call libraries
11335 compiled with the Unix compiler.
11336 .Sp
11337 Also, you must provide function prototypes for all functions that
11338 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
11339 otherwise incorrect code will be generated for calls to those
11340 functions.
11341 .Sp
11342 In addition, seriously incorrect code will result if you call a
11343 function with too many arguments.  (Normally, extra arguments are
11344 harmlessly ignored.)
11345 .Sp
11346 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
11347 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
11348 .IP "\fB\-mno\-rtd\fR" 4
11349 .IX Item "-mno-rtd"
11350 Do not use the calling conventions selected by \fB\-mrtd\fR.
11351 This is the default.
11352 .IP "\fB\-malign\-int\fR" 4
11353 .IX Item "-malign-int"
11354 .PD 0
11355 .IP "\fB\-mno\-align\-int\fR" 4
11356 .IX Item "-mno-align-int"
11357 .PD
11358 Control whether \s-1GCC\s0 aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
11359 \&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
11360 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
11361 Aligning variables on 32\-bit boundaries produces code that runs somewhat
11362 faster on processors with 32\-bit busses at the expense of more memory.
11363 .Sp
11364 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0 will
11365 align structures containing the above types  differently than
11366 most published application binary interface specifications for the m68k.
11367 .IP "\fB\-mpcrel\fR" 4
11368 .IX Item "-mpcrel"
11369 Use the pc-relative addressing mode of the 68000 directly, instead of
11370 using a global offset table.  At present, this option implies \fB\-fpic\fR,
11371 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
11372 not presently supported with \fB\-mpcrel\fR, though this could be supported for
11373 68020 and higher processors.
11374 .IP "\fB\-mno\-strict\-align\fR" 4
11375 .IX Item "-mno-strict-align"
11376 .PD 0
11377 .IP "\fB\-mstrict\-align\fR" 4
11378 .IX Item "-mstrict-align"
11379 .PD
11380 Do not (do) assume that unaligned memory references will be handled by
11381 the system.
11382 .IP "\fB\-msep\-data\fR" 4
11383 .IX Item "-msep-data"
11384 Generate code that allows the data segment to be located in a different
11385 area of memory from the text segment.  This allows for execute in place in
11386 an environment without virtual memory management.  This option implies
11387 \&\fB\-fPIC\fR.
11388 .IP "\fB\-mno\-sep\-data\fR" 4
11389 .IX Item "-mno-sep-data"
11390 Generate code that assumes that the data segment follows the text segment.
11391 This is the default.
11392 .IP "\fB\-mid\-shared\-library\fR" 4
11393 .IX Item "-mid-shared-library"
11394 Generate code that supports shared libraries via the library \s-1ID\s0 method.
11395 This allows for execute in place and shared libraries in an environment
11396 without virtual memory management.  This option implies \fB\-fPIC\fR.
11397 .IP "\fB\-mno\-id\-shared\-library\fR" 4
11398 .IX Item "-mno-id-shared-library"
11399 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
11400 This is the default.
11401 .IP "\fB\-mshared\-library\-id=n\fR" 4
11402 .IX Item "-mshared-library-id=n"
11403 Specified the identification number of the \s-1ID\s0 based shared library being
11404 compiled.  Specifying a value of 0 will generate more compact code, specifying
11405 other values will force the allocation of that number to the current
11406 library but is no more space or time efficient than omitting this option.
11407 .IP "\fB\-mxgot\fR" 4
11408 .IX Item "-mxgot"
11409 .PD 0
11410 .IP "\fB\-mno\-xgot\fR" 4
11411 .IX Item "-mno-xgot"
11412 .PD
11413 When generating position-independent code for ColdFire, generate code
11414 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
11415 larger and slower than code generated without this option.  On M680x0
11416 processors, this option is not needed; \fB\-fPIC\fR suffices.
11417 .Sp
11418 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
11419 While this is relatively efficient, it only works if the \s-1GOT\s0
11420 is smaller than about 64k.  Anything larger causes the linker
11421 to report an error such as:
11422 .Sp
11423 .Vb 1
11424 \&        relocation truncated to fit: R_68K_GOT16O foobar
11425 .Ve
11426 .Sp
11427 If this happens, you should recompile your code with \fB\-mxgot\fR.
11428 It should then work with very large GOTs.  However, code generated with
11429 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
11430 the value of a global symbol.
11431 .Sp
11432 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
11433 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
11434 you should only need to use \fB\-mxgot\fR when compiling a single
11435 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
11436 .Sp
11437 These options have no effect unless \s-1GCC\s0 is generating
11438 position-independent code.
11439 .PP
11440 \fIM68hc1x Options\fR
11441 .IX Subsection "M68hc1x Options"
11442 .PP
11443 These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
11444 microcontrollers.  The default values for these options depends on
11445 which style of microcontroller was selected when the compiler was configured;
11446 the defaults for the most common choices are given below.
11447 .IP "\fB\-m6811\fR" 4
11448 .IX Item "-m6811"
11449 .PD 0
11450 .IP "\fB\-m68hc11\fR" 4
11451 .IX Item "-m68hc11"
11452 .PD
11453 Generate output for a 68HC11.  This is the default
11454 when the compiler is configured for 68HC11\-based systems.
11455 .IP "\fB\-m6812\fR" 4
11456 .IX Item "-m6812"
11457 .PD 0
11458 .IP "\fB\-m68hc12\fR" 4
11459 .IX Item "-m68hc12"
11460 .PD
11461 Generate output for a 68HC12.  This is the default
11462 when the compiler is configured for 68HC12\-based systems.
11463 .IP "\fB\-m68S12\fR" 4
11464 .IX Item "-m68S12"
11465 .PD 0
11466 .IP "\fB\-m68hcs12\fR" 4
11467 .IX Item "-m68hcs12"
11468 .PD
11469 Generate output for a 68HCS12.
11470 .IP "\fB\-mauto\-incdec\fR" 4
11471 .IX Item "-mauto-incdec"
11472 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
11473 addressing modes.
11474 .IP "\fB\-minmax\fR" 4
11475 .IX Item "-minmax"
11476 .PD 0
11477 .IP "\fB\-nominmax\fR" 4
11478 .IX Item "-nominmax"
11479 .PD
11480 Enable the use of 68HC12 min and max instructions.
11481 .IP "\fB\-mlong\-calls\fR" 4
11482 .IX Item "-mlong-calls"
11483 .PD 0
11484 .IP "\fB\-mno\-long\-calls\fR" 4
11485 .IX Item "-mno-long-calls"
11486 .PD
11487 Treat all calls as being far away (near).  If calls are assumed to be
11488 far away, the compiler will use the \f(CW\*(C`call\*(C'\fR instruction to
11489 call a function and the \f(CW\*(C`rtc\*(C'\fR instruction for returning.
11490 .IP "\fB\-mshort\fR" 4
11491 .IX Item "-mshort"
11492 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11493 .IP "\fB\-msoft\-reg\-count=\fR\fIcount\fR" 4
11494 .IX Item "-msoft-reg-count=count"
11495 Specify the number of pseudo-soft registers which are used for the
11496 code generation.  The maximum number is 32.  Using more pseudo-soft
11497 register may or may not result in better code depending on the program.
11498 The default is 4 for 68HC11 and 2 for 68HC12.
11499 .PP
11500 \fIMCore Options\fR
11501 .IX Subsection "MCore Options"
11502 .PP
11503 These are the \fB\-m\fR options defined for the Motorola M*Core
11504 processors.
11505 .IP "\fB\-mhardlit\fR" 4
11506 .IX Item "-mhardlit"
11507 .PD 0
11508 .IP "\fB\-mno\-hardlit\fR" 4
11509 .IX Item "-mno-hardlit"
11510 .PD
11511 Inline constants into the code stream if it can be done in two
11512 instructions or less.
11513 .IP "\fB\-mdiv\fR" 4
11514 .IX Item "-mdiv"
11515 .PD 0
11516 .IP "\fB\-mno\-div\fR" 4
11517 .IX Item "-mno-div"
11518 .PD
11519 Use the divide instruction.  (Enabled by default).
11520 .IP "\fB\-mrelax\-immediate\fR" 4
11521 .IX Item "-mrelax-immediate"
11522 .PD 0
11523 .IP "\fB\-mno\-relax\-immediate\fR" 4
11524 .IX Item "-mno-relax-immediate"
11525 .PD
11526 Allow arbitrary sized immediates in bit operations.
11527 .IP "\fB\-mwide\-bitfields\fR" 4
11528 .IX Item "-mwide-bitfields"
11529 .PD 0
11530 .IP "\fB\-mno\-wide\-bitfields\fR" 4
11531 .IX Item "-mno-wide-bitfields"
11532 .PD
11533 Always treat bit-fields as int-sized.
11534 .IP "\fB\-m4byte\-functions\fR" 4
11535 .IX Item "-m4byte-functions"
11536 .PD 0
11537 .IP "\fB\-mno\-4byte\-functions\fR" 4
11538 .IX Item "-mno-4byte-functions"
11539 .PD
11540 Force all functions to be aligned to a four byte boundary.
11541 .IP "\fB\-mcallgraph\-data\fR" 4
11542 .IX Item "-mcallgraph-data"
11543 .PD 0
11544 .IP "\fB\-mno\-callgraph\-data\fR" 4
11545 .IX Item "-mno-callgraph-data"
11546 .PD
11547 Emit callgraph information.
11548 .IP "\fB\-mslow\-bytes\fR" 4
11549 .IX Item "-mslow-bytes"
11550 .PD 0
11551 .IP "\fB\-mno\-slow\-bytes\fR" 4
11552 .IX Item "-mno-slow-bytes"
11553 .PD
11554 Prefer word access when reading byte quantities.
11555 .IP "\fB\-mlittle\-endian\fR" 4
11556 .IX Item "-mlittle-endian"
11557 .PD 0
11558 .IP "\fB\-mbig\-endian\fR" 4
11559 .IX Item "-mbig-endian"
11560 .PD
11561 Generate code for a little endian target.
11562 .IP "\fB\-m210\fR" 4
11563 .IX Item "-m210"
11564 .PD 0
11565 .IP "\fB\-m340\fR" 4
11566 .IX Item "-m340"
11567 .PD
11568 Generate code for the 210 processor.
11569 .IP "\fB\-mno\-lsim\fR" 4
11570 .IX Item "-mno-lsim"
11571 Assume that run-time support has been provided and so omit the
11572 simulator library (\fIlibsim.a)\fR from the linker command line.
11573 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
11574 .IX Item "-mstack-increment=size"
11575 Set the maximum amount for a single stack increment operation.  Large
11576 values can increase the speed of programs which contain functions
11577 that need a large amount of stack space, but they can also trigger a
11578 segmentation fault if the stack is extended too much.  The default
11579 value is 0x1000.
11580 .PP
11581 \fI\s-1MIPS\s0 Options\fR
11582 .IX Subsection "MIPS Options"
11583 .IP "\fB\-EB\fR" 4
11584 .IX Item "-EB"
11585 Generate big-endian code.
11586 .IP "\fB\-EL\fR" 4
11587 .IX Item "-EL"
11588 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
11589 configurations.
11590 .IP "\fB\-march=\fR\fIarch\fR" 4
11591 .IX Item "-march=arch"
11592 Generate code that will run on \fIarch\fR, which can be the name of a
11593 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
11594 The \s-1ISA\s0 names are:
11595 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
11596 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips64\fR and \fBmips64r2\fR.
11597 The processor names are:
11598 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
11599 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
11600 \&\fB5kc\fR, \fB5kf\fR,
11601 \&\fB20kc\fR,
11602 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
11603 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
11604 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR,
11605 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
11606 \&\fBloongson2e\fR, \fBloongson2f\fR,
11607 \&\fBm4k\fR,
11608 \&\fBocteon\fR,
11609 \&\fBorion\fR,
11610 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
11611 \&\fBr4600\fR, \fBr4650\fR, \fBr6000\fR, \fBr8000\fR,
11612 \&\fBrm7000\fR, \fBrm9000\fR,
11613 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
11614 \&\fBsb1\fR,
11615 \&\fBsr71000\fR,
11616 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
11617 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR
11618 and \fBxlr\fR.
11619 The special value \fBfrom-abi\fR selects the
11620 most compatible architecture for the selected \s-1ABI\s0 (that is,
11621 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
11622 .Sp
11623 Native Linux/GNU toolchains also support the value \fBnative\fR,
11624 which selects the best architecture option for the host processor.
11625 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
11626 the processor.
11627 .Sp
11628 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
11629 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
11630 \&\fBvr\fR may be written \fBr\fR.
11631 .Sp
11632 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
11633 FPUs clocked at half the rate of the core, names of the form
11634 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
11635 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
11636 processors with FPUs clocked a ratio of 3:2 with respect to the core.
11637 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
11638 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
11639 accepted as synonyms for \fIn\fR\fBf1_1\fR.
11640 .Sp
11641 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
11642 is \fB_MIPS_ARCH\fR, which gives the name of target architecture, as
11643 a string.  The second has the form \fB_MIPS_ARCH_\fR\fIfoo\fR,
11644 where \fIfoo\fR is the capitalized value of \fB_MIPS_ARCH\fR.
11645 For example, \fB\-march=r2000\fR will set \fB_MIPS_ARCH\fR
11646 to \fB\*(L"r2000\*(R"\fR and define the macro \fB_MIPS_ARCH_R2000\fR.
11647 .Sp
11648 Note that the \fB_MIPS_ARCH\fR macro uses the processor names given
11649 above.  In other words, it will have the full prefix and will not
11650 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
11651 the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
11652 \&\fB\*(L"mips3\*(R"\fR).  It names the default architecture when no
11653 \&\fB\-march\fR option is given.
11654 .IP "\fB\-mtune=\fR\fIarch\fR" 4
11655 .IX Item "-mtune=arch"
11656 Optimize for \fIarch\fR.  Among other things, this option controls
11657 the way instructions are scheduled, and the perceived cost of arithmetic
11658 operations.  The list of \fIarch\fR values is the same as for
11659 \&\fB\-march\fR.
11660 .Sp
11661 When this option is not used, \s-1GCC\s0 will optimize for the processor
11662 specified by \fB\-march\fR.  By using \fB\-march\fR and
11663 \&\fB\-mtune\fR together, it is possible to generate code that will
11664 run on a family of processors, but optimize the code for one
11665 particular member of that family.
11666 .Sp
11667 \&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
11668 \&\fB_MIPS_TUNE_\fR\fIfoo\fR, which work in the same way as the
11669 \&\fB\-march\fR ones described above.
11670 .IP "\fB\-mips1\fR" 4
11671 .IX Item "-mips1"
11672 Equivalent to \fB\-march=mips1\fR.
11673 .IP "\fB\-mips2\fR" 4
11674 .IX Item "-mips2"
11675 Equivalent to \fB\-march=mips2\fR.
11676 .IP "\fB\-mips3\fR" 4
11677 .IX Item "-mips3"
11678 Equivalent to \fB\-march=mips3\fR.
11679 .IP "\fB\-mips4\fR" 4
11680 .IX Item "-mips4"
11681 Equivalent to \fB\-march=mips4\fR.
11682 .IP "\fB\-mips32\fR" 4
11683 .IX Item "-mips32"
11684 Equivalent to \fB\-march=mips32\fR.
11685 .IP "\fB\-mips32r2\fR" 4
11686 .IX Item "-mips32r2"
11687 Equivalent to \fB\-march=mips32r2\fR.
11688 .IP "\fB\-mips64\fR" 4
11689 .IX Item "-mips64"
11690 Equivalent to \fB\-march=mips64\fR.
11691 .IP "\fB\-mips64r2\fR" 4
11692 .IX Item "-mips64r2"
11693 Equivalent to \fB\-march=mips64r2\fR.
11694 .IP "\fB\-mips16\fR" 4
11695 .IX Item "-mips16"
11696 .PD 0
11697 .IP "\fB\-mno\-mips16\fR" 4
11698 .IX Item "-mno-mips16"
11699 .PD
11700 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targetting a
11701 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it will make use of the MIPS16e \s-1ASE\s0.
11702 .Sp
11703 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
11704 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
11705 .IP "\fB\-mflip\-mips16\fR" 4
11706 .IX Item "-mflip-mips16"
11707 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
11708 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
11709 not intended for ordinary use in compiling user code.
11710 .IP "\fB\-minterlink\-mips16\fR" 4
11711 .IX Item "-minterlink-mips16"
11712 .PD 0
11713 .IP "\fB\-mno\-interlink\-mips16\fR" 4
11714 .IX Item "-mno-interlink-mips16"
11715 .PD
11716 Require (do not require) that non\-MIPS16 code be link-compatible with
11717 \&\s-1MIPS16\s0 code.
11718 .Sp
11719 For example, non\-MIPS16 code cannot jump directly to \s-1MIPS16\s0 code;
11720 it must either use a call or an indirect jump.  \fB\-minterlink\-mips16\fR
11721 therefore disables direct jumps unless \s-1GCC\s0 knows that the target of the
11722 jump is not \s-1MIPS16\s0.
11723 .IP "\fB\-mabi=32\fR" 4
11724 .IX Item "-mabi=32"
11725 .PD 0
11726 .IP "\fB\-mabi=o64\fR" 4
11727 .IX Item "-mabi=o64"
11728 .IP "\fB\-mabi=n32\fR" 4
11729 .IX Item "-mabi=n32"
11730 .IP "\fB\-mabi=64\fR" 4
11731 .IX Item "-mabi=64"
11732 .IP "\fB\-mabi=eabi\fR" 4
11733 .IX Item "-mabi=eabi"
11734 .PD
11735 Generate code for the given \s-1ABI\s0.
11736 .Sp
11737 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
11738 generates 64\-bit code when you select a 64\-bit architecture, but you
11739 can use \fB\-mgp32\fR to get 32\-bit code instead.
11740 .Sp
11741 For information about the O64 \s-1ABI\s0, see
11742 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
11743 .Sp
11744 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
11745 are 64 rather than 32 bits wide.  You can select this combination with
11746 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \fBmthc1\fR
11747 and \fBmfhc1\fR instructions and is therefore only supported for
11748 \&\s-1MIPS32R2\s0 processors.
11749 .Sp
11750 The register assignments for arguments and return values remain the
11751 same, but each scalar value is passed in a single 64\-bit register
11752 rather than a pair of 32\-bit registers.  For example, scalar
11753 floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
11754 \&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
11755 remains the same, but all 64 bits are saved.
11756 .IP "\fB\-mabicalls\fR" 4
11757 .IX Item "-mabicalls"
11758 .PD 0
11759 .IP "\fB\-mno\-abicalls\fR" 4
11760 .IX Item "-mno-abicalls"
11761 .PD
11762 Generate (do not generate) code that is suitable for SVR4\-style
11763 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
11764 systems.
11765 .IP "\fB\-mshared\fR" 4
11766 .IX Item "-mshared"
11767 .PD 0
11768 .IP "\fB\-mno\-shared\fR" 4
11769 .IX Item "-mno-shared"
11770 .PD
11771 Generate (do not generate) code that is fully position-independent,
11772 and that can therefore be linked into shared libraries.  This option
11773 only affects \fB\-mabicalls\fR.
11774 .Sp
11775 All \fB\-mabicalls\fR code has traditionally been position-independent,
11776 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
11777 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
11778 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
11779 initialization sequences and generate direct calls to locally-defined
11780 functions.  This mode is selected by \fB\-mno\-shared\fR.
11781 .Sp
11782 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
11783 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
11784 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
11785 of relocatable objects.  Using \fB\-mno\-shared\fR will generally make
11786 executables both smaller and quicker.
11787 .Sp
11788 \&\fB\-mshared\fR is the default.
11789 .IP "\fB\-mplt\fR" 4
11790 .IX Item "-mplt"
11791 .PD 0
11792 .IP "\fB\-mno\-plt\fR" 4
11793 .IX Item "-mno-plt"
11794 .PD
11795 Assume (do not assume) that the static and dynamic linkers
11796 support PLTs and copy relocations.  This option only affects
11797 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
11798 has no effect without \fB\-msym32\fR.
11799 .Sp
11800 You can make \fB\-mplt\fR the default by configuring
11801 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
11802 \&\fB\-mno\-plt\fR otherwise.
11803 .IP "\fB\-mxgot\fR" 4
11804 .IX Item "-mxgot"
11805 .PD 0
11806 .IP "\fB\-mno\-xgot\fR" 4
11807 .IX Item "-mno-xgot"
11808 .PD
11809 Lift (do not lift) the usual restrictions on the size of the global
11810 offset table.
11811 .Sp
11812 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
11813 While this is relatively efficient, it will only work if the \s-1GOT\s0
11814 is smaller than about 64k.  Anything larger will cause the linker
11815 to report an error such as:
11816 .Sp
11817 .Vb 1
11818 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
11819 .Ve
11820 .Sp
11821 If this happens, you should recompile your code with \fB\-mxgot\fR.
11822 It should then work with very large GOTs, although it will also be
11823 less efficient, since it will take three instructions to fetch the
11824 value of a global symbol.
11825 .Sp
11826 Note that some linkers can create multiple GOTs.  If you have such a
11827 linker, you should only need to use \fB\-mxgot\fR when a single object
11828 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
11829 .Sp
11830 These options have no effect unless \s-1GCC\s0 is generating position
11831 independent code.
11832 .IP "\fB\-mgp32\fR" 4
11833 .IX Item "-mgp32"
11834 Assume that general-purpose registers are 32 bits wide.
11835 .IP "\fB\-mgp64\fR" 4
11836 .IX Item "-mgp64"
11837 Assume that general-purpose registers are 64 bits wide.
11838 .IP "\fB\-mfp32\fR" 4
11839 .IX Item "-mfp32"
11840 Assume that floating-point registers are 32 bits wide.
11841 .IP "\fB\-mfp64\fR" 4
11842 .IX Item "-mfp64"
11843 Assume that floating-point registers are 64 bits wide.
11844 .IP "\fB\-mhard\-float\fR" 4
11845 .IX Item "-mhard-float"
11846 Use floating-point coprocessor instructions.
11847 .IP "\fB\-msoft\-float\fR" 4
11848 .IX Item "-msoft-float"
11849 Do not use floating-point coprocessor instructions.  Implement
11850 floating-point calculations using library calls instead.
11851 .IP "\fB\-msingle\-float\fR" 4
11852 .IX Item "-msingle-float"
11853 Assume that the floating-point coprocessor only supports single-precision
11854 operations.
11855 .IP "\fB\-mdouble\-float\fR" 4
11856 .IX Item "-mdouble-float"
11857 Assume that the floating-point coprocessor supports double-precision
11858 operations.  This is the default.
11859 .IP "\fB\-mllsc\fR" 4
11860 .IX Item "-mllsc"
11861 .PD 0
11862 .IP "\fB\-mno\-llsc\fR" 4
11863 .IX Item "-mno-llsc"
11864 .PD
11865 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
11866 implement atomic memory built-in functions.  When neither option is
11867 specified, \s-1GCC\s0 will use the instructions if the target architecture
11868 supports them.
11869 .Sp
11870 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
11871 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
11872 nonstandard ISAs.  You can make either option the default by
11873 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
11874 respectively.  \fB\-\-with\-llsc\fR is the default for some
11875 configurations; see the installation documentation for details.
11876 .IP "\fB\-mdsp\fR" 4
11877 .IX Item "-mdsp"
11878 .PD 0
11879 .IP "\fB\-mno\-dsp\fR" 4
11880 .IX Item "-mno-dsp"
11881 .PD
11882 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
11883   This option defines the
11884 preprocessor macro \fB_\|_mips_dsp\fR.  It also defines
11885 \&\fB_\|_mips_dsp_rev\fR to 1.
11886 .IP "\fB\-mdspr2\fR" 4
11887 .IX Item "-mdspr2"
11888 .PD 0
11889 .IP "\fB\-mno\-dspr2\fR" 4
11890 .IX Item "-mno-dspr2"
11891 .PD
11892 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
11893   This option defines the
11894 preprocessor macros \fB_\|_mips_dsp\fR and \fB_\|_mips_dspr2\fR.
11895 It also defines \fB_\|_mips_dsp_rev\fR to 2.
11896 .IP "\fB\-msmartmips\fR" 4
11897 .IX Item "-msmartmips"
11898 .PD 0
11899 .IP "\fB\-mno\-smartmips\fR" 4
11900 .IX Item "-mno-smartmips"
11901 .PD
11902 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
11903 .IP "\fB\-mpaired\-single\fR" 4
11904 .IX Item "-mpaired-single"
11905 .PD 0
11906 .IP "\fB\-mno\-paired\-single\fR" 4
11907 .IX Item "-mno-paired-single"
11908 .PD
11909 Use (do not use) paired-single floating-point instructions.
11910   This option requires
11911 hardware floating-point support to be enabled.
11912 .IP "\fB\-mdmx\fR" 4
11913 .IX Item "-mdmx"
11914 .PD 0
11915 .IP "\fB\-mno\-mdmx\fR" 4
11916 .IX Item "-mno-mdmx"
11917 .PD
11918 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
11919 This option can only be used when generating 64\-bit code and requires
11920 hardware floating-point support to be enabled.
11921 .IP "\fB\-mips3d\fR" 4
11922 .IX Item "-mips3d"
11923 .PD 0
11924 .IP "\fB\-mno\-mips3d\fR" 4
11925 .IX Item "-mno-mips3d"
11926 .PD
11927 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
11928 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
11929 .IP "\fB\-mmt\fR" 4
11930 .IX Item "-mmt"
11931 .PD 0
11932 .IP "\fB\-mno\-mt\fR" 4
11933 .IX Item "-mno-mt"
11934 .PD
11935 Use (do not use) \s-1MT\s0 Multithreading instructions.
11936 .IP "\fB\-mlong64\fR" 4
11937 .IX Item "-mlong64"
11938 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
11939 an explanation of the default and the way that the pointer size is
11940 determined.
11941 .IP "\fB\-mlong32\fR" 4
11942 .IX Item "-mlong32"
11943 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
11944 .Sp
11945 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
11946 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
11947 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
11948 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
11949 or the same size as integer registers, whichever is smaller.
11950 .IP "\fB\-msym32\fR" 4
11951 .IX Item "-msym32"
11952 .PD 0
11953 .IP "\fB\-mno\-sym32\fR" 4
11954 .IX Item "-mno-sym32"
11955 .PD
11956 Assume (do not assume) that all symbols have 32\-bit values, regardless
11957 of the selected \s-1ABI\s0.  This option is useful in combination with
11958 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
11959 to generate shorter and faster references to symbolic addresses.
11960 .IP "\fB\-G\fR \fInum\fR" 4
11961 .IX Item "-G num"
11962 Put definitions of externally-visible data in a small data section
11963 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then access
11964 the data more efficiently; see \fB\-mgpopt\fR for details.
11965 .Sp
11966 The default \fB\-G\fR option depends on the configuration.
11967 .IP "\fB\-mlocal\-sdata\fR" 4
11968 .IX Item "-mlocal-sdata"
11969 .PD 0
11970 .IP "\fB\-mno\-local\-sdata\fR" 4
11971 .IX Item "-mno-local-sdata"
11972 .PD
11973 Extend (do not extend) the \fB\-G\fR behavior to local data too,
11974 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
11975 default for all configurations.
11976 .Sp
11977 If the linker complains that an application is using too much small data,
11978 you might want to try rebuilding the less performance-critical parts with
11979 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
11980 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
11981 more room for the main program.
11982 .IP "\fB\-mextern\-sdata\fR" 4
11983 .IX Item "-mextern-sdata"
11984 .PD 0
11985 .IP "\fB\-mno\-extern\-sdata\fR" 4
11986 .IX Item "-mno-extern-sdata"
11987 .PD
11988 Assume (do not assume) that externally-defined data will be in
11989 a small data section if that data is within the \fB\-G\fR limit.
11990 \&\fB\-mextern\-sdata\fR is the default for all configurations.
11991 .Sp
11992 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
11993 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
11994 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
11995 is placed in a small data section.  If \fIVar\fR is defined by another
11996 module, you must either compile that module with a high-enough
11997 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
11998 definition.  If \fIVar\fR is common, you must link the application
11999 with a high-enough \fB\-G\fR setting.
12000 .Sp
12001 The easiest way of satisfying these restrictions is to compile
12002 and link every module with the same \fB\-G\fR option.  However,
12003 you may wish to build a library that supports several different
12004 small data limits.  You can do this by compiling the library with
12005 the highest supported \fB\-G\fR setting and additionally using
12006 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
12007 about externally-defined data.
12008 .IP "\fB\-mgpopt\fR" 4
12009 .IX Item "-mgpopt"
12010 .PD 0
12011 .IP "\fB\-mno\-gpopt\fR" 4
12012 .IX Item "-mno-gpopt"
12013 .PD
12014 Use (do not use) GP-relative accesses for symbols that are known to be
12015 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
12016 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
12017 configurations.
12018 .Sp
12019 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
12020 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
12021 part of a library that might be used in a boot monitor, programs that
12022 call boot monitor routines will pass an unknown value in \f(CW$gp\fR.
12023 (In such situations, the boot monitor itself would usually be compiled
12024 with \fB\-G0\fR.)
12025 .Sp
12026 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
12027 \&\fB\-mno\-extern\-sdata\fR.
12028 .IP "\fB\-membedded\-data\fR" 4
12029 .IX Item "-membedded-data"
12030 .PD 0
12031 .IP "\fB\-mno\-embedded\-data\fR" 4
12032 .IX Item "-mno-embedded-data"
12033 .PD
12034 Allocate variables to the read-only data section first if possible, then
12035 next in the small data section if possible, otherwise in data.  This gives
12036 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
12037 when executing, and thus may be preferred for some embedded systems.
12038 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
12039 .IX Item "-muninit-const-in-rodata"
12040 .PD 0
12041 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
12042 .IX Item "-mno-uninit-const-in-rodata"
12043 .PD
12044 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
12045 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
12046 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
12047 .IX Item "-mcode-readable=setting"
12048 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
12049 There are three possible settings:
12050 .RS 4
12051 .IP "\fB\-mcode\-readable=yes\fR" 4
12052 .IX Item "-mcode-readable=yes"
12053 Instructions may freely access executable sections.  This is the
12054 default setting.
12055 .IP "\fB\-mcode\-readable=pcrel\fR" 4
12056 .IX Item "-mcode-readable=pcrel"
12057 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
12058 but other instructions must not do so.  This option is useful on 4KSc
12059 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
12060 It is also useful on processors that can be configured to have a dual
12061 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
12062 redirect PC-relative loads to the instruction \s-1RAM\s0.
12063 .IP "\fB\-mcode\-readable=no\fR" 4
12064 .IX Item "-mcode-readable=no"
12065 Instructions must not access executable sections.  This option can be
12066 useful on targets that are configured to have a dual instruction/data
12067 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
12068 PC-relative loads to the instruction \s-1RAM\s0.
12069 .RE
12070 .RS 4
12071 .RE
12072 .IP "\fB\-msplit\-addresses\fR" 4
12073 .IX Item "-msplit-addresses"
12074 .PD 0
12075 .IP "\fB\-mno\-split\-addresses\fR" 4
12076 .IX Item "-mno-split-addresses"
12077 .PD
12078 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
12079 relocation operators.  This option has been superseded by
12080 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
12081 .IP "\fB\-mexplicit\-relocs\fR" 4
12082 .IX Item "-mexplicit-relocs"
12083 .PD 0
12084 .IP "\fB\-mno\-explicit\-relocs\fR" 4
12085 .IX Item "-mno-explicit-relocs"
12086 .PD
12087 Use (do not use) assembler relocation operators when dealing with symbolic
12088 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
12089 is to use assembler macros instead.
12090 .Sp
12091 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
12092 to use an assembler that supports relocation operators.
12093 .IP "\fB\-mcheck\-zero\-division\fR" 4
12094 .IX Item "-mcheck-zero-division"
12095 .PD 0
12096 .IP "\fB\-mno\-check\-zero\-division\fR" 4
12097 .IX Item "-mno-check-zero-division"
12098 .PD
12099 Trap (do not trap) on integer division by zero.
12100 .Sp
12101 The default is \fB\-mcheck\-zero\-division\fR.
12102 .IP "\fB\-mdivide\-traps\fR" 4
12103 .IX Item "-mdivide-traps"
12104 .PD 0
12105 .IP "\fB\-mdivide\-breaks\fR" 4
12106 .IX Item "-mdivide-breaks"
12107 .PD
12108 \&\s-1MIPS\s0 systems check for division by zero by generating either a
12109 conditional trap or a break instruction.  Using traps results in
12110 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
12111 versions of the Linux kernel have a bug that prevents trap from
12112 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
12113 allow conditional traps on architectures that support them and
12114 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
12115 .Sp
12116 The default is usually \fB\-mdivide\-traps\fR, but this can be
12117 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
12118 Divide-by-zero checks can be completely disabled using
12119 \&\fB\-mno\-check\-zero\-division\fR.
12120 .IP "\fB\-mmemcpy\fR" 4
12121 .IX Item "-mmemcpy"
12122 .PD 0
12123 .IP "\fB\-mno\-memcpy\fR" 4
12124 .IX Item "-mno-memcpy"
12125 .PD
12126 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
12127 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
12128 most constant-sized copies.
12129 .IP "\fB\-mlong\-calls\fR" 4
12130 .IX Item "-mlong-calls"
12131 .PD 0
12132 .IP "\fB\-mno\-long\-calls\fR" 4
12133 .IX Item "-mno-long-calls"
12134 .PD
12135 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
12136 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
12137 and callee to be in the same 256 megabyte segment.
12138 .Sp
12139 This option has no effect on abicalls code.  The default is
12140 \&\fB\-mno\-long\-calls\fR.
12141 .IP "\fB\-mmad\fR" 4
12142 .IX Item "-mmad"
12143 .PD 0
12144 .IP "\fB\-mno\-mad\fR" 4
12145 .IX Item "-mno-mad"
12146 .PD
12147 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
12148 instructions, as provided by the R4650 \s-1ISA\s0.
12149 .IP "\fB\-mfused\-madd\fR" 4
12150 .IX Item "-mfused-madd"
12151 .PD 0
12152 .IP "\fB\-mno\-fused\-madd\fR" 4
12153 .IX Item "-mno-fused-madd"
12154 .PD
12155 Enable (disable) use of the floating point multiply-accumulate
12156 instructions, when they are available.  The default is
12157 \&\fB\-mfused\-madd\fR.
12158 .Sp
12159 When multiply-accumulate instructions are used, the intermediate
12160 product is calculated to infinite precision and is not subject to
12161 the \s-1FCSR\s0 Flush to Zero bit.  This may be undesirable in some
12162 circumstances.
12163 .IP "\fB\-nocpp\fR" 4
12164 .IX Item "-nocpp"
12165 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
12166 assembler files (with a \fB.s\fR suffix) when assembling them.
12167 .IP "\fB\-mfix\-r4000\fR" 4
12168 .IX Item "-mfix-r4000"
12169 .PD 0
12170 .IP "\fB\-mno\-fix\-r4000\fR" 4
12171 .IX Item "-mno-fix-r4000"
12172 .PD
12173 Work around certain R4000 \s-1CPU\s0 errata:
12174 .RS 4
12175 .IP "\-" 4
12176 A double-word or a variable shift may give an incorrect result if executed
12177 immediately after starting an integer division.
12178 .IP "\-" 4
12179 A double-word or a variable shift may give an incorrect result if executed
12180 while an integer multiplication is in progress.
12181 .IP "\-" 4
12182 An integer division may give an incorrect result if started in a delay slot
12183 of a taken branch or a jump.
12184 .RE
12185 .RS 4
12186 .RE
12187 .IP "\fB\-mfix\-r4400\fR" 4
12188 .IX Item "-mfix-r4400"
12189 .PD 0
12190 .IP "\fB\-mno\-fix\-r4400\fR" 4
12191 .IX Item "-mno-fix-r4400"
12192 .PD
12193 Work around certain R4400 \s-1CPU\s0 errata:
12194 .RS 4
12195 .IP "\-" 4
12196 A double-word or a variable shift may give an incorrect result if executed
12197 immediately after starting an integer division.
12198 .RE
12199 .RS 4
12200 .RE
12201 .IP "\fB\-mfix\-r10000\fR" 4
12202 .IX Item "-mfix-r10000"
12203 .PD 0
12204 .IP "\fB\-mno\-fix\-r10000\fR" 4
12205 .IX Item "-mno-fix-r10000"
12206 .PD
12207 Work around certain R10000 errata:
12208 .RS 4
12209 .IP "\-" 4
12210 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
12211 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
12212 .RE
12213 .RS 4
12214 .Sp
12215 This option can only be used if the target architecture supports
12216 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
12217 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
12218 otherwise.
12219 .RE
12220 .IP "\fB\-mfix\-vr4120\fR" 4
12221 .IX Item "-mfix-vr4120"
12222 .PD 0
12223 .IP "\fB\-mno\-fix\-vr4120\fR" 4
12224 .IX Item "-mno-fix-vr4120"
12225 .PD
12226 Work around certain \s-1VR4120\s0 errata:
12227 .RS 4
12228 .IP "\-" 4
12229 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
12230 .IP "\-" 4
12231 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
12232 of the operands is negative.
12233 .RE
12234 .RS 4
12235 .Sp
12236 The workarounds for the division errata rely on special functions in
12237 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
12238 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
12239 .Sp
12240 Other \s-1VR4120\s0 errata require a nop to be inserted between certain pairs of
12241 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
12242 .RE
12243 .IP "\fB\-mfix\-vr4130\fR" 4
12244 .IX Item "-mfix-vr4130"
12245 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
12246 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
12247 although \s-1GCC\s0 will avoid using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
12248 \&\s-1VR4130\s0 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
12249 instructions are available instead.
12250 .IP "\fB\-mfix\-sb1\fR" 4
12251 .IX Item "-mfix-sb1"
12252 .PD 0
12253 .IP "\fB\-mno\-fix\-sb1\fR" 4
12254 .IX Item "-mno-fix-sb1"
12255 .PD
12256 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
12257 (This flag currently works around the \s-1SB\-1\s0 revision 2
12258 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating point errata.)
12259 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
12260 .IX Item "-mr10k-cache-barrier=setting"
12261 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
12262 side-effects of speculation on R10K processors.
12263 .Sp
12264 In common with many processors, the R10K tries to predict the outcome
12265 of a conditional branch and speculatively executes instructions from
12266 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
12267 predicted outcome was wrong.  However, on the R10K, even aborted
12268 instructions can have side effects.
12269 .Sp
12270 This problem only affects kernel stores and, depending on the system,
12271 kernel loads.  As an example, a speculatively-executed store may load
12272 the target memory into cache and mark the cache line as dirty, even if
12273 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
12274 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
12275 data will overwrite the DMA-ed data.  See the R10K processor manual
12276 for a full description, including other potential problems.
12277 .Sp
12278 One workaround is to insert cache barrier instructions before every memory
12279 access that might be speculatively executed and that might have side
12280 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
12281 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
12282 aborted accesses to any byte in the following regions will not have
12283 side effects:
12284 .RS 4
12285 .IP "1." 4
12286 the memory occupied by the current function's stack frame;
12287 .IP "2." 4
12288 the memory occupied by an incoming stack argument;
12289 .IP "3." 4
12290 the memory occupied by an object with a link-time-constant address.
12291 .RE
12292 .RS 4
12293 .Sp
12294 It is the kernel's responsibility to ensure that speculative
12295 accesses to these regions are indeed safe.
12296 .Sp
12297 If the input program contains a function declaration such as:
12298 .Sp
12299 .Vb 1
12300 \&        void foo (void);
12301 .Ve
12302 .Sp
12303 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
12304 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
12305 restriction for functions it compiles itself.  It expects non-GCC
12306 functions (such as hand-written assembly code) to do the same.
12307 .Sp
12308 The option has three forms:
12309 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
12310 .IX Item "-mr10k-cache-barrier=load-store"
12311 Insert a cache barrier before a load or store that might be
12312 speculatively executed and that might have side effects even
12313 if aborted.
12314 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
12315 .IX Item "-mr10k-cache-barrier=store"
12316 Insert a cache barrier before a store that might be speculatively
12317 executed and that might have side effects even if aborted.
12318 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
12319 .IX Item "-mr10k-cache-barrier=none"
12320 Disable the insertion of cache barriers.  This is the default setting.
12321 .RE
12322 .RS 4
12323 .RE
12324 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
12325 .IX Item "-mflush-func=func"
12326 .PD 0
12327 .IP "\fB\-mno\-flush\-func\fR" 4
12328 .IX Item "-mno-flush-func"
12329 .PD
12330 Specifies the function to call to flush the I and D caches, or to not
12331 call any such function.  If called, the function must take the same
12332 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
12333 memory range for which the cache is being flushed, the size of the
12334 memory range, and the number 3 (to flush both caches).  The default
12335 depends on the target \s-1GCC\s0 was configured for, but commonly is either
12336 \&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
12337 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
12338 .IX Item "mbranch-cost=num"
12339 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
12340 This cost is only a heuristic and is not guaranteed to produce
12341 consistent results across releases.  A zero cost redundantly selects
12342 the default, which is based on the \fB\-mtune\fR setting.
12343 .IP "\fB\-mbranch\-likely\fR" 4
12344 .IX Item "-mbranch-likely"
12345 .PD 0
12346 .IP "\fB\-mno\-branch\-likely\fR" 4
12347 .IX Item "-mno-branch-likely"
12348 .PD
12349 Enable or disable use of Branch Likely instructions, regardless of the
12350 default for the selected architecture.  By default, Branch Likely
12351 instructions may be generated if they are supported by the selected
12352 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
12353 and processors which implement those architectures; for those, Branch
12354 Likely instructions will not be generated by default because the \s-1MIPS32\s0
12355 and \s-1MIPS64\s0 architectures specifically deprecate their use.
12356 .IP "\fB\-mfp\-exceptions\fR" 4
12357 .IX Item "-mfp-exceptions"
12358 .PD 0
12359 .IP "\fB\-mno\-fp\-exceptions\fR" 4
12360 .IX Item "-mno-fp-exceptions"
12361 .PD
12362 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how we schedule
12363 \&\s-1FP\s0 instructions for some processors.  The default is that \s-1FP\s0 exceptions are
12364 enabled.
12365 .Sp
12366 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
12367 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
12368 \&\s-1FP\s0 pipe.
12369 .IP "\fB\-mvr4130\-align\fR" 4
12370 .IX Item "-mvr4130-align"
12371 .PD 0
12372 .IP "\fB\-mno\-vr4130\-align\fR" 4
12373 .IX Item "-mno-vr4130-align"
12374 .PD
12375 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
12376 instructions together if the first one is 8\-byte aligned.  When this
12377 option is enabled, \s-1GCC\s0 will align pairs of instructions that it
12378 thinks should execute in parallel.
12379 .Sp
12380 This option only has an effect when optimizing for the \s-1VR4130\s0.
12381 It normally makes code faster, but at the expense of making it bigger.
12382 It is enabled by default at optimization level \fB\-O3\fR.
12383 .PP
12384 \fI\s-1MMIX\s0 Options\fR
12385 .IX Subsection "MMIX Options"
12386 .PP
12387 These options are defined for the \s-1MMIX:\s0
12388 .IP "\fB\-mlibfuncs\fR" 4
12389 .IX Item "-mlibfuncs"
12390 .PD 0
12391 .IP "\fB\-mno\-libfuncs\fR" 4
12392 .IX Item "-mno-libfuncs"
12393 .PD
12394 Specify that intrinsic library functions are being compiled, passing all
12395 values in registers, no matter the size.
12396 .IP "\fB\-mepsilon\fR" 4
12397 .IX Item "-mepsilon"
12398 .PD 0
12399 .IP "\fB\-mno\-epsilon\fR" 4
12400 .IX Item "-mno-epsilon"
12401 .PD
12402 Generate floating-point comparison instructions that compare with respect
12403 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
12404 .IP "\fB\-mabi=mmixware\fR" 4
12405 .IX Item "-mabi=mmixware"
12406 .PD 0
12407 .IP "\fB\-mabi=gnu\fR" 4
12408 .IX Item "-mabi=gnu"
12409 .PD
12410 Generate code that passes function parameters and return values that (in
12411 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
12412 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
12413 .IP "\fB\-mzero\-extend\fR" 4
12414 .IX Item "-mzero-extend"
12415 .PD 0
12416 .IP "\fB\-mno\-zero\-extend\fR" 4
12417 .IX Item "-mno-zero-extend"
12418 .PD
12419 When reading data from memory in sizes shorter than 64 bits, use (do not
12420 use) zero-extending load instructions by default, rather than
12421 sign-extending ones.
12422 .IP "\fB\-mknuthdiv\fR" 4
12423 .IX Item "-mknuthdiv"
12424 .PD 0
12425 .IP "\fB\-mno\-knuthdiv\fR" 4
12426 .IX Item "-mno-knuthdiv"
12427 .PD
12428 Make the result of a division yielding a remainder have the same sign as
12429 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
12430 remainder follows the sign of the dividend.  Both methods are
12431 arithmetically valid, the latter being almost exclusively used.
12432 .IP "\fB\-mtoplevel\-symbols\fR" 4
12433 .IX Item "-mtoplevel-symbols"
12434 .PD 0
12435 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
12436 .IX Item "-mno-toplevel-symbols"
12437 .PD
12438 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
12439 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
12440 .IP "\fB\-melf\fR" 4
12441 .IX Item "-melf"
12442 Generate an executable in the \s-1ELF\s0 format, rather than the default
12443 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
12444 .IP "\fB\-mbranch\-predict\fR" 4
12445 .IX Item "-mbranch-predict"
12446 .PD 0
12447 .IP "\fB\-mno\-branch\-predict\fR" 4
12448 .IX Item "-mno-branch-predict"
12449 .PD
12450 Use (do not use) the probable-branch instructions, when static branch
12451 prediction indicates a probable branch.
12452 .IP "\fB\-mbase\-addresses\fR" 4
12453 .IX Item "-mbase-addresses"
12454 .PD 0
12455 .IP "\fB\-mno\-base\-addresses\fR" 4
12456 .IX Item "-mno-base-addresses"
12457 .PD
12458 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
12459 base address automatically generates a request (handled by the assembler
12460 and the linker) for a constant to be set up in a global register.  The
12461 register is used for one or more base address requests within the range 0
12462 to 255 from the value held in the register.  The generally leads to short
12463 and fast code, but the number of different data items that can be
12464 addressed is limited.  This means that a program that uses lots of static
12465 data may require \fB\-mno\-base\-addresses\fR.
12466 .IP "\fB\-msingle\-exit\fR" 4
12467 .IX Item "-msingle-exit"
12468 .PD 0
12469 .IP "\fB\-mno\-single\-exit\fR" 4
12470 .IX Item "-mno-single-exit"
12471 .PD
12472 Force (do not force) generated code to have a single exit point in each
12473 function.
12474 .PP
12475 \fI\s-1MN10300\s0 Options\fR
12476 .IX Subsection "MN10300 Options"
12477 .PP
12478 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
12479 .IP "\fB\-mmult\-bug\fR" 4
12480 .IX Item "-mmult-bug"
12481 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
12482 processors.  This is the default.
12483 .IP "\fB\-mno\-mult\-bug\fR" 4
12484 .IX Item "-mno-mult-bug"
12485 Do not generate code to avoid bugs in the multiply instructions for the
12486 \&\s-1MN10300\s0 processors.
12487 .IP "\fB\-mam33\fR" 4
12488 .IX Item "-mam33"
12489 Generate code which uses features specific to the \s-1AM33\s0 processor.
12490 .IP "\fB\-mno\-am33\fR" 4
12491 .IX Item "-mno-am33"
12492 Do not generate code which uses features specific to the \s-1AM33\s0 processor.  This
12493 is the default.
12494 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
12495 .IX Item "-mreturn-pointer-on-d0"
12496 When generating a function which returns a pointer, return the pointer
12497 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
12498 only in a0, and attempts to call such functions without a prototype
12499 would result in errors.  Note that this option is on by default; use
12500 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
12501 .IP "\fB\-mno\-crt0\fR" 4
12502 .IX Item "-mno-crt0"
12503 Do not link in the C run-time initialization object file.
12504 .IP "\fB\-mrelax\fR" 4
12505 .IX Item "-mrelax"
12506 Indicate to the linker that it should perform a relaxation optimization pass
12507 to shorten branches, calls and absolute memory addresses.  This option only
12508 has an effect when used on the command line for the final link step.
12509 .Sp
12510 This option makes symbolic debugging impossible.
12511 .PP
12512 \fI\s-1PDP\-11\s0 Options\fR
12513 .IX Subsection "PDP-11 Options"
12514 .PP
12515 These options are defined for the \s-1PDP\-11:\s0
12516 .IP "\fB\-mfpu\fR" 4
12517 .IX Item "-mfpu"
12518 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
12519 point on the \s-1PDP\-11/40\s0 is not supported.)
12520 .IP "\fB\-msoft\-float\fR" 4
12521 .IX Item "-msoft-float"
12522 Do not use hardware floating point.
12523 .IP "\fB\-mac0\fR" 4
12524 .IX Item "-mac0"
12525 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
12526 .IP "\fB\-mno\-ac0\fR" 4
12527 .IX Item "-mno-ac0"
12528 Return floating-point results in memory.  This is the default.
12529 .IP "\fB\-m40\fR" 4
12530 .IX Item "-m40"
12531 Generate code for a \s-1PDP\-11/40\s0.
12532 .IP "\fB\-m45\fR" 4
12533 .IX Item "-m45"
12534 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
12535 .IP "\fB\-m10\fR" 4
12536 .IX Item "-m10"
12537 Generate code for a \s-1PDP\-11/10\s0.
12538 .IP "\fB\-mbcopy\-builtin\fR" 4
12539 .IX Item "-mbcopy-builtin"
12540 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
12541 default.
12542 .IP "\fB\-mbcopy\fR" 4
12543 .IX Item "-mbcopy"
12544 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
12545 .IP "\fB\-mint16\fR" 4
12546 .IX Item "-mint16"
12547 .PD 0
12548 .IP "\fB\-mno\-int32\fR" 4
12549 .IX Item "-mno-int32"
12550 .PD
12551 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
12552 .IP "\fB\-mint32\fR" 4
12553 .IX Item "-mint32"
12554 .PD 0
12555 .IP "\fB\-mno\-int16\fR" 4
12556 .IX Item "-mno-int16"
12557 .PD
12558 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
12559 .IP "\fB\-mfloat64\fR" 4
12560 .IX Item "-mfloat64"
12561 .PD 0
12562 .IP "\fB\-mno\-float32\fR" 4
12563 .IX Item "-mno-float32"
12564 .PD
12565 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
12566 .IP "\fB\-mfloat32\fR" 4
12567 .IX Item "-mfloat32"
12568 .PD 0
12569 .IP "\fB\-mno\-float64\fR" 4
12570 .IX Item "-mno-float64"
12571 .PD
12572 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
12573 .IP "\fB\-mabshi\fR" 4
12574 .IX Item "-mabshi"
12575 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
12576 .IP "\fB\-mno\-abshi\fR" 4
12577 .IX Item "-mno-abshi"
12578 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
12579 .IP "\fB\-mbranch\-expensive\fR" 4
12580 .IX Item "-mbranch-expensive"
12581 Pretend that branches are expensive.  This is for experimenting with
12582 code generation only.
12583 .IP "\fB\-mbranch\-cheap\fR" 4
12584 .IX Item "-mbranch-cheap"
12585 Do not pretend that branches are expensive.  This is the default.
12586 .IP "\fB\-msplit\fR" 4
12587 .IX Item "-msplit"
12588 Generate code for a system with split I&D.
12589 .IP "\fB\-mno\-split\fR" 4
12590 .IX Item "-mno-split"
12591 Generate code for a system without split I&D.  This is the default.
12592 .IP "\fB\-munix\-asm\fR" 4
12593 .IX Item "-munix-asm"
12594 Use Unix assembler syntax.  This is the default when configured for
12595 \&\fBpdp11\-*\-bsd\fR.
12596 .IP "\fB\-mdec\-asm\fR" 4
12597 .IX Item "-mdec-asm"
12598 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
12599 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
12600 .PP
12601 \fIpicoChip Options\fR
12602 .IX Subsection "picoChip Options"
12603 .PP
12604 These \fB\-m\fR options are defined for picoChip implementations:
12605 .IP "\fB\-mae=\fR\fIae_type\fR" 4
12606 .IX Item "-mae=ae_type"
12607 Set the instruction set, register set, and instruction scheduling
12608 parameters for array element type \fIae_type\fR.  Supported values
12609 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
12610 .Sp
12611 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
12612 generated with this option will run on any of the other \s-1AE\s0 types.  The
12613 code will not be as efficient as it would be if compiled for a specific
12614 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) will not
12615 work properly on all types of \s-1AE\s0.
12616 .Sp
12617 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
12618 for compiled code, and is the default.
12619 .Sp
12620 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
12621 option may suffer from poor performance of byte (char) manipulation,
12622 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
12623 .IP "\fB\-msymbol\-as\-address\fR" 4
12624 .IX Item "-msymbol-as-address"
12625 Enable the compiler to directly use a symbol name as an address in a
12626 load/store instruction, without first loading it into a
12627 register.  Typically, the use of this option will generate larger
12628 programs, which run faster than when the option isn't used.  However, the
12629 results vary from program to program, so it is left as a user option,
12630 rather than being permanently enabled.
12631 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
12632 .IX Item "-mno-inefficient-warnings"
12633 Disables warnings about the generation of inefficient code.  These
12634 warnings can be generated, for example, when compiling code which
12635 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
12636 no hardware support for byte-level memory operations, so all byte
12637 load/stores must be synthesized from word load/store operations.  This is
12638 inefficient and a warning will be generated indicating to the programmer
12639 that they should rewrite the code to avoid byte operations, or to target
12640 an \s-1AE\s0 type which has the necessary hardware support.  This option enables
12641 the warning to be turned off.
12642 .PP
12643 \fIPowerPC Options\fR
12644 .IX Subsection "PowerPC Options"
12645 .PP
12646 These are listed under
12647 .PP
12648 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
12649 .IX Subsection "IBM RS/6000 and PowerPC Options"
12650 .PP
12651 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
12652 .IP "\fB\-mpower\fR" 4
12653 .IX Item "-mpower"
12654 .PD 0
12655 .IP "\fB\-mno\-power\fR" 4
12656 .IX Item "-mno-power"
12657 .IP "\fB\-mpower2\fR" 4
12658 .IX Item "-mpower2"
12659 .IP "\fB\-mno\-power2\fR" 4
12660 .IX Item "-mno-power2"
12661 .IP "\fB\-mpowerpc\fR" 4
12662 .IX Item "-mpowerpc"
12663 .IP "\fB\-mno\-powerpc\fR" 4
12664 .IX Item "-mno-powerpc"
12665 .IP "\fB\-mpowerpc\-gpopt\fR" 4
12666 .IX Item "-mpowerpc-gpopt"
12667 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
12668 .IX Item "-mno-powerpc-gpopt"
12669 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
12670 .IX Item "-mpowerpc-gfxopt"
12671 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
12672 .IX Item "-mno-powerpc-gfxopt"
12673 .IP "\fB\-mpowerpc64\fR" 4
12674 .IX Item "-mpowerpc64"
12675 .IP "\fB\-mno\-powerpc64\fR" 4
12676 .IX Item "-mno-powerpc64"
12677 .IP "\fB\-mmfcrf\fR" 4
12678 .IX Item "-mmfcrf"
12679 .IP "\fB\-mno\-mfcrf\fR" 4
12680 .IX Item "-mno-mfcrf"
12681 .IP "\fB\-mpopcntb\fR" 4
12682 .IX Item "-mpopcntb"
12683 .IP "\fB\-mno\-popcntb\fR" 4
12684 .IX Item "-mno-popcntb"
12685 .IP "\fB\-mfprnd\fR" 4
12686 .IX Item "-mfprnd"
12687 .IP "\fB\-mno\-fprnd\fR" 4
12688 .IX Item "-mno-fprnd"
12689 .IP "\fB\-mcmpb\fR" 4
12690 .IX Item "-mcmpb"
12691 .IP "\fB\-mno\-cmpb\fR" 4
12692 .IX Item "-mno-cmpb"
12693 .IP "\fB\-mmfpgpr\fR" 4
12694 .IX Item "-mmfpgpr"
12695 .IP "\fB\-mno\-mfpgpr\fR" 4
12696 .IX Item "-mno-mfpgpr"
12697 .IP "\fB\-mhard\-dfp\fR" 4
12698 .IX Item "-mhard-dfp"
12699 .IP "\fB\-mno\-hard\-dfp\fR" 4
12700 .IX Item "-mno-hard-dfp"
12701 .PD
12702 \&\s-1GCC\s0 supports two related instruction set architectures for the
12703 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
12704 instructions supported by the \fBrios\fR chip set used in the original
12705 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
12706 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
12707 the \s-1IBM\s0 4xx, 6xx, and follow-on microprocessors.
12708 .Sp
12709 Neither architecture is a subset of the other.  However there is a
12710 large common subset of instructions supported by both.  An \s-1MQ\s0
12711 register is included in processors supporting the \s-1POWER\s0 architecture.
12712 .Sp
12713 You use these options to specify which instructions are available on the
12714 processor you are using.  The default value of these options is
12715 determined when configuring \s-1GCC\s0.  Specifying the
12716 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
12717 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
12718 rather than the options listed above.
12719 .Sp
12720 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
12721 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
12722 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
12723 to generate instructions that are present in the \s-1POWER2\s0 architecture but
12724 not the original \s-1POWER\s0 architecture.
12725 .Sp
12726 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
12727 are found only in the 32\-bit subset of the PowerPC architecture.
12728 Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also allows
12729 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
12730 General Purpose group, including floating-point square root.  Specifying
12731 \&\fB\-mpowerpc\-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
12732 use the optional PowerPC architecture instructions in the Graphics
12733 group, including floating-point select.
12734 .Sp
12735 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
12736 condition register field instruction implemented on the \s-1POWER4\s0
12737 processor and other processors that support the PowerPC V2.01
12738 architecture.
12739 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
12740 double precision \s-1FP\s0 reciprocal estimate instruction implemented on the
12741 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
12742 architecture.
12743 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
12744 integer instructions implemented on the \s-1POWER5+\s0 processor and other
12745 processors that support the PowerPC V2.03 architecture.
12746 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
12747 instruction implemented on the \s-1POWER6\s0 processor and other processors
12748 that support the PowerPC V2.05 architecture.
12749 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
12750 general purpose register instructions implemented on the \s-1POWER6X\s0
12751 processor and other processors that support the extended PowerPC V2.05
12752 architecture.
12753 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal floating
12754 point instructions implemented on some \s-1POWER\s0 processors.
12755 .Sp
12756 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
12757 64\-bit instructions that are found in the full PowerPC64 architecture
12758 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
12759 \&\fB\-mno\-powerpc64\fR.
12760 .Sp
12761 If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
12762 will use only the instructions in the common subset of both
12763 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
12764 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
12765 permits \s-1GCC\s0 to use any instruction from either architecture and to
12766 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
12767 .IP "\fB\-mnew\-mnemonics\fR" 4
12768 .IX Item "-mnew-mnemonics"
12769 .PD 0
12770 .IP "\fB\-mold\-mnemonics\fR" 4
12771 .IX Item "-mold-mnemonics"
12772 .PD
12773 Select which mnemonics to use in the generated assembler code.  With
12774 \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
12775 the PowerPC architecture.  With \fB\-mold\-mnemonics\fR it uses the
12776 assembler mnemonics defined for the \s-1POWER\s0 architecture.  Instructions
12777 defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
12778 mnemonic irrespective of which of these options is specified.
12779 .Sp
12780 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
12781 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
12782 value of these option.  Unless you are building a cross-compiler, you
12783 should normally not specify either \fB\-mnew\-mnemonics\fR or
12784 \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
12785 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
12786 .IX Item "-mcpu=cpu_type"
12787 Set architecture type, register usage, choice of mnemonics, and
12788 instruction scheduling parameters for machine type \fIcpu_type\fR.
12789 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
12790 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
12791 \&\fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR, \fB603e\fR, \fB604\fR,
12792 \&\fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR, \fB7400\fR,
12793 \&\fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
12794 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBe300c2\fR, \fBe300c3\fR,
12795 \&\fBe500mc\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
12796 \&\fBpower\fR, \fBpower2\fR, \fBpower3\fR, \fBpower4\fR,
12797 \&\fBpower5\fR, \fBpower5+\fR, \fBpower6\fR, \fBpower6x\fR, \fBpower7\fR
12798 \&\fBcommon\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBrios\fR,
12799 \&\fBrios1\fR, \fBrios2\fR, \fBrsc\fR, and \fBrs64\fR.
12800 .Sp
12801 \&\fB\-mcpu=common\fR selects a completely generic processor.  Code
12802 generated under this option will run on any \s-1POWER\s0 or PowerPC processor.
12803 \&\s-1GCC\s0 will use only the instructions in the common subset of both
12804 architectures, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
12805 processor model for scheduling purposes.
12806 .Sp
12807 \&\fB\-mcpu=power\fR, \fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and
12808 \&\fB\-mcpu=powerpc64\fR specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit
12809 PowerPC (i.e., not \s-1MPC601\s0), and 64\-bit PowerPC architecture machine
12810 types, with an appropriate, generic processor model assumed for
12811 scheduling purposes.
12812 .Sp
12813 The other options specify a specific processor.  Code generated under
12814 those options will run best on that processor, and may not run at all on
12815 others.
12816 .Sp
12817 The \fB\-mcpu\fR options automatically enable or disable the
12818 following options:
12819 .Sp
12820 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
12821 \&\-mnew\-mnemonics  \-mpopcntb  \-mpower  \-mpower2  \-mpowerpc64 
12822 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
12823 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr\fR
12824 .Sp
12825 The particular options set for any particular \s-1CPU\s0 will vary between
12826 compiler versions, depending on what setting seems to produce optimal
12827 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
12828 capabilities.  If you wish to set an individual option to a particular
12829 value, you may specify it after the \fB\-mcpu\fR option, like
12830 \&\fB\-mcpu=970 \-mno\-altivec\fR.
12831 .Sp
12832 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
12833 not enabled or disabled by the \fB\-mcpu\fR option at present because
12834 \&\s-1AIX\s0 does not have full support for these options.  You may still
12835 enable or disable them individually if you're sure it'll work in your
12836 environment.
12837 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
12838 .IX Item "-mtune=cpu_type"
12839 Set the instruction scheduling parameters for machine type
12840 \&\fIcpu_type\fR, but do not set the architecture type, register usage, or
12841 choice of mnemonics, as \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
12842 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
12843 \&\fB\-mcpu\fR.  If both are specified, the code generated will use the
12844 architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
12845 scheduling parameters set by \fB\-mtune\fR.
12846 .IP "\fB\-mswdiv\fR" 4
12847 .IX Item "-mswdiv"
12848 .PD 0
12849 .IP "\fB\-mno\-swdiv\fR" 4
12850 .IX Item "-mno-swdiv"
12851 .PD
12852 Generate code to compute division as reciprocal estimate and iterative
12853 refinement, creating opportunities for increased throughput.  This
12854 feature requires: optional PowerPC Graphics instruction set for single
12855 precision and \s-1FRE\s0 instruction for double precision, assuming divides
12856 cannot generate user-visible traps, and the domain values not include
12857 Infinities, denormals or zero denominator.
12858 .IP "\fB\-maltivec\fR" 4
12859 .IX Item "-maltivec"
12860 .PD 0
12861 .IP "\fB\-mno\-altivec\fR" 4
12862 .IX Item "-mno-altivec"
12863 .PD
12864 Generate code that uses (does not use) AltiVec instructions, and also
12865 enable the use of built-in functions that allow more direct access to
12866 the AltiVec instruction set.  You may also need to set
12867 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
12868 enhancements.
12869 .IP "\fB\-mvrsave\fR" 4
12870 .IX Item "-mvrsave"
12871 .PD 0
12872 .IP "\fB\-mno\-vrsave\fR" 4
12873 .IX Item "-mno-vrsave"
12874 .PD
12875 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
12876 .IP "\fB\-mgen\-cell\-microcode\fR" 4
12877 .IX Item "-mgen-cell-microcode"
12878 Generate Cell microcode instructions
12879 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
12880 .IX Item "-mwarn-cell-microcode"
12881 Warning when a Cell microcode instruction is going to emitted.  An example
12882 of a Cell microcode instruction is a variable shift.
12883 .IP "\fB\-msecure\-plt\fR" 4
12884 .IX Item "-msecure-plt"
12885 Generate code that allows ld and ld.so to build executables and shared
12886 libraries with non-exec .plt and .got sections.  This is a PowerPC
12887 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
12888 .IP "\fB\-mbss\-plt\fR" 4
12889 .IX Item "-mbss-plt"
12890 Generate code that uses a \s-1BSS\s0 .plt section that ld.so fills in, and
12891 requires .plt and .got sections that are both writable and executable.
12892 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
12893 .IP "\fB\-misel\fR" 4
12894 .IX Item "-misel"
12895 .PD 0
12896 .IP "\fB\-mno\-isel\fR" 4
12897 .IX Item "-mno-isel"
12898 .PD
12899 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
12900 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
12901 .IX Item "-misel=yes/no"
12902 This switch has been deprecated.  Use \fB\-misel\fR and
12903 \&\fB\-mno\-isel\fR instead.
12904 .IP "\fB\-mspe\fR" 4
12905 .IX Item "-mspe"
12906 .PD 0
12907 .IP "\fB\-mno\-spe\fR" 4
12908 .IX Item "-mno-spe"
12909 .PD
12910 This switch enables or disables the generation of \s-1SPE\s0 simd
12911 instructions.
12912 .IP "\fB\-mpaired\fR" 4
12913 .IX Item "-mpaired"
12914 .PD 0
12915 .IP "\fB\-mno\-paired\fR" 4
12916 .IX Item "-mno-paired"
12917 .PD
12918 This switch enables or disables the generation of \s-1PAIRED\s0 simd
12919 instructions.
12920 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
12921 .IX Item "-mspe=yes/no"
12922 This option has been deprecated.  Use \fB\-mspe\fR and
12923 \&\fB\-mno\-spe\fR instead.
12924 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
12925 .IX Item "-mfloat-gprs=yes/single/double/no"
12926 .PD 0
12927 .IP "\fB\-mfloat\-gprs\fR" 4
12928 .IX Item "-mfloat-gprs"
12929 .PD
12930 This switch enables or disables the generation of floating point
12931 operations on the general purpose registers for architectures that
12932 support it.
12933 .Sp
12934 The argument \fIyes\fR or \fIsingle\fR enables the use of
12935 single-precision floating point operations.
12936 .Sp
12937 The argument \fIdouble\fR enables the use of single and
12938 double-precision floating point operations.
12939 .Sp
12940 The argument \fIno\fR disables floating point operations on the
12941 general purpose registers.
12942 .Sp
12943 This option is currently only available on the MPC854x.
12944 .IP "\fB\-m32\fR" 4
12945 .IX Item "-m32"
12946 .PD 0
12947 .IP "\fB\-m64\fR" 4
12948 .IX Item "-m64"
12949 .PD
12950 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
12951 targets (including GNU/Linux).  The 32\-bit environment sets int, long
12952 and pointer to 32 bits and generates code that runs on any PowerPC
12953 variant.  The 64\-bit environment sets int to 32 bits and long and
12954 pointer to 64 bits, and generates code for PowerPC64, as for
12955 \&\fB\-mpowerpc64\fR.
12956 .IP "\fB\-mfull\-toc\fR" 4
12957 .IX Item "-mfull-toc"
12958 .PD 0
12959 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
12960 .IX Item "-mno-fp-in-toc"
12961 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
12962 .IX Item "-mno-sum-in-toc"
12963 .IP "\fB\-mminimal\-toc\fR" 4
12964 .IX Item "-mminimal-toc"
12965 .PD
12966 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
12967 every executable file.  The \fB\-mfull\-toc\fR option is selected by
12968 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
12969 each unique non-automatic variable reference in your program.  \s-1GCC\s0
12970 will also place floating-point constants in the \s-1TOC\s0.  However, only
12971 16,384 entries are available in the \s-1TOC\s0.
12972 .Sp
12973 If you receive a linker error message that saying you have overflowed
12974 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
12975 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
12976 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
12977 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
12978 generate code to calculate the sum of an address and a constant at
12979 run-time instead of putting that sum into the \s-1TOC\s0.  You may specify one
12980 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
12981 slower and larger code at the expense of conserving \s-1TOC\s0 space.
12982 .Sp
12983 If you still run out of space in the \s-1TOC\s0 even when you specify both of
12984 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
12985 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
12986 option, \s-1GCC\s0 will produce code that is slower and larger but which
12987 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
12988 only on files that contain less frequently executed code.
12989 .IP "\fB\-maix64\fR" 4
12990 .IX Item "-maix64"
12991 .PD 0
12992 .IP "\fB\-maix32\fR" 4
12993 .IX Item "-maix32"
12994 .PD
12995 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
12996 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
12997 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
12998 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
12999 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
13000 .IP "\fB\-mxl\-compat\fR" 4
13001 .IX Item "-mxl-compat"
13002 .PD 0
13003 .IP "\fB\-mno\-xl\-compat\fR" 4
13004 .IX Item "-mno-xl-compat"
13005 .PD
13006 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
13007 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
13008 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
13009 in addition to argument FPRs.  Do not assume that most significant
13010 double in 128\-bit long double value is properly rounded when comparing
13011 values and converting to double.  Use \s-1XL\s0 symbol names for long double
13012 support routines.
13013 .Sp
13014 The \s-1AIX\s0 calling convention was extended but not initially documented to
13015 handle an obscure K&R C case of calling a function that takes the
13016 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
13017 compilers access floating point arguments which do not fit in the
13018 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
13019 optimization.  Because always storing floating-point arguments on the
13020 stack is inefficient and rarely needed, this option is not enabled by
13021 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
13022 \&\s-1XL\s0 compilers without optimization.
13023 .IP "\fB\-mpe\fR" 4
13024 .IX Item "-mpe"
13025 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
13026 application written to use message passing with special startup code to
13027 enable the application to run.  The system must have \s-1PE\s0 installed in the
13028 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
13029 must be overridden with the \fB\-specs=\fR option to specify the
13030 appropriate directory location.  The Parallel Environment does not
13031 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
13032 option are incompatible.
13033 .IP "\fB\-malign\-natural\fR" 4
13034 .IX Item "-malign-natural"
13035 .PD 0
13036 .IP "\fB\-malign\-power\fR" 4
13037 .IX Item "-malign-power"
13038 .PD
13039 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
13040 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
13041 types, such as floating-point doubles, on their natural size-based boundary.
13042 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
13043 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
13044 .Sp
13045 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
13046 is not supported.
13047 .IP "\fB\-msoft\-float\fR" 4
13048 .IX Item "-msoft-float"
13049 .PD 0
13050 .IP "\fB\-mhard\-float\fR" 4
13051 .IX Item "-mhard-float"
13052 .PD
13053 Generate code that does not use (uses) the floating-point register set.
13054 Software floating point emulation is provided if you use the
13055 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
13056 .IP "\fB\-msingle\-float\fR" 4
13057 .IX Item "-msingle-float"
13058 .PD 0
13059 .IP "\fB\-mdouble\-float\fR" 4
13060 .IX Item "-mdouble-float"
13061 .PD
13062 Generate code for single or double-precision floating point operations. 
13063 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR.
13064 .IP "\fB\-msimple\-fpu\fR" 4
13065 .IX Item "-msimple-fpu"
13066 Do not generate sqrt and div instructions for hardware floating point unit.
13067 .IP "\fB\-mfpu\fR" 4
13068 .IX Item "-mfpu"
13069 Specify type of floating point unit.  Valid values are \fIsp_lite\fR 
13070 (equivalent to \-msingle\-float \-msimple\-fpu), \fIdp_lite\fR (equivalent
13071 to \-mdouble\-float \-msimple\-fpu), \fIsp_full\fR (equivalent to \-msingle\-float),
13072 and \fIdp_full\fR (equivalent to \-mdouble\-float).
13073 .IP "\fB\-mxilinx\-fpu\fR" 4
13074 .IX Item "-mxilinx-fpu"
13075 Perform optimizations for floating point unit on Xilinx \s-1PPC\s0 405/440.
13076 .IP "\fB\-mmultiple\fR" 4
13077 .IX Item "-mmultiple"
13078 .PD 0
13079 .IP "\fB\-mno\-multiple\fR" 4
13080 .IX Item "-mno-multiple"
13081 .PD
13082 Generate code that uses (does not use) the load multiple word
13083 instructions and the store multiple word instructions.  These
13084 instructions are generated by default on \s-1POWER\s0 systems, and not
13085 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little
13086 endian PowerPC systems, since those instructions do not work when the
13087 processor is in little endian mode.  The exceptions are \s-1PPC740\s0 and
13088 \&\s-1PPC750\s0 which permit the instructions usage in little endian mode.
13089 .IP "\fB\-mstring\fR" 4
13090 .IX Item "-mstring"
13091 .PD 0
13092 .IP "\fB\-mno\-string\fR" 4
13093 .IX Item "-mno-string"
13094 .PD
13095 Generate code that uses (does not use) the load string instructions
13096 and the store string word instructions to save multiple registers and
13097 do small block moves.  These instructions are generated by default on
13098 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
13099 \&\fB\-mstring\fR on little endian PowerPC systems, since those
13100 instructions do not work when the processor is in little endian mode.
13101 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
13102 usage in little endian mode.
13103 .IP "\fB\-mupdate\fR" 4
13104 .IX Item "-mupdate"
13105 .PD 0
13106 .IP "\fB\-mno\-update\fR" 4
13107 .IX Item "-mno-update"
13108 .PD
13109 Generate code that uses (does not use) the load or store instructions
13110 that update the base register to the address of the calculated memory
13111 location.  These instructions are generated by default.  If you use
13112 \&\fB\-mno\-update\fR, there is a small window between the time that the
13113 stack pointer is updated and the address of the previous frame is
13114 stored, which means code that walks the stack frame across interrupts or
13115 signals may get corrupted data.
13116 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
13117 .IX Item "-mavoid-indexed-addresses"
13118 .PD 0
13119 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
13120 .IX Item "-mno-avoid-indexed-addresses"
13121 .PD
13122 Generate code that tries to avoid (not avoid) the use of indexed load
13123 or store instructions. These instructions can incur a performance
13124 penalty on Power6 processors in certain situations, such as when
13125 stepping through large arrays that cross a 16M boundary.  This option
13126 is enabled by default when targetting Power6 and disabled otherwise.
13127 .IP "\fB\-mfused\-madd\fR" 4
13128 .IX Item "-mfused-madd"
13129 .PD 0
13130 .IP "\fB\-mno\-fused\-madd\fR" 4
13131 .IX Item "-mno-fused-madd"
13132 .PD
13133 Generate code that uses (does not use) the floating point multiply and
13134 accumulate instructions.  These instructions are generated by default if
13135 hardware floating is used.
13136 .IP "\fB\-mmulhw\fR" 4
13137 .IX Item "-mmulhw"
13138 .PD 0
13139 .IP "\fB\-mno\-mulhw\fR" 4
13140 .IX Item "-mno-mulhw"
13141 .PD
13142 Generate code that uses (does not use) the half-word multiply and
13143 multiply-accumulate instructions on the \s-1IBM\s0 405, 440 and 464 processors.
13144 These instructions are generated by default when targetting those
13145 processors.
13146 .IP "\fB\-mdlmzb\fR" 4
13147 .IX Item "-mdlmzb"
13148 .PD 0
13149 .IP "\fB\-mno\-dlmzb\fR" 4
13150 .IX Item "-mno-dlmzb"
13151 .PD
13152 Generate code that uses (does not use) the string-search \fBdlmzb\fR
13153 instruction on the \s-1IBM\s0 405, 440 and 464 processors.  This instruction is
13154 generated by default when targetting those processors.
13155 .IP "\fB\-mno\-bit\-align\fR" 4
13156 .IX Item "-mno-bit-align"
13157 .PD 0
13158 .IP "\fB\-mbit\-align\fR" 4
13159 .IX Item "-mbit-align"
13160 .PD
13161 On System V.4 and embedded PowerPC systems do not (do) force structures
13162 and unions that contain bit-fields to be aligned to the base type of the
13163 bit-field.
13164 .Sp
13165 For example, by default a structure containing nothing but 8
13166 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 would be aligned to a 4 byte
13167 boundary and have a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
13168 the structure would be aligned to a 1 byte boundary and be one byte in
13169 size.
13170 .IP "\fB\-mno\-strict\-align\fR" 4
13171 .IX Item "-mno-strict-align"
13172 .PD 0
13173 .IP "\fB\-mstrict\-align\fR" 4
13174 .IX Item "-mstrict-align"
13175 .PD
13176 On System V.4 and embedded PowerPC systems do not (do) assume that
13177 unaligned memory references will be handled by the system.
13178 .IP "\fB\-mrelocatable\fR" 4
13179 .IX Item "-mrelocatable"
13180 .PD 0
13181 .IP "\fB\-mno\-relocatable\fR" 4
13182 .IX Item "-mno-relocatable"
13183 .PD
13184 On embedded PowerPC systems generate code that allows (does not allow)
13185 the program to be relocated to a different address at runtime.  If you
13186 use \fB\-mrelocatable\fR on any module, all objects linked together must
13187 be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
13188 .IP "\fB\-mrelocatable\-lib\fR" 4
13189 .IX Item "-mrelocatable-lib"
13190 .PD 0
13191 .IP "\fB\-mno\-relocatable\-lib\fR" 4
13192 .IX Item "-mno-relocatable-lib"
13193 .PD
13194 On embedded PowerPC systems generate code that allows (does not allow)
13195 the program to be relocated to a different address at runtime.  Modules
13196 compiled with \fB\-mrelocatable\-lib\fR can be linked with either modules
13197 compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable\-lib\fR or
13198 with modules compiled with the \fB\-mrelocatable\fR options.
13199 .IP "\fB\-mno\-toc\fR" 4
13200 .IX Item "-mno-toc"
13201 .PD 0
13202 .IP "\fB\-mtoc\fR" 4
13203 .IX Item "-mtoc"
13204 .PD
13205 On System V.4 and embedded PowerPC systems do not (do) assume that
13206 register 2 contains a pointer to a global area pointing to the addresses
13207 used in the program.
13208 .IP "\fB\-mlittle\fR" 4
13209 .IX Item "-mlittle"
13210 .PD 0
13211 .IP "\fB\-mlittle\-endian\fR" 4
13212 .IX Item "-mlittle-endian"
13213 .PD
13214 On System V.4 and embedded PowerPC systems compile code for the
13215 processor in little endian mode.  The \fB\-mlittle\-endian\fR option is
13216 the same as \fB\-mlittle\fR.
13217 .IP "\fB\-mbig\fR" 4
13218 .IX Item "-mbig"
13219 .PD 0
13220 .IP "\fB\-mbig\-endian\fR" 4
13221 .IX Item "-mbig-endian"
13222 .PD
13223 On System V.4 and embedded PowerPC systems compile code for the
13224 processor in big endian mode.  The \fB\-mbig\-endian\fR option is
13225 the same as \fB\-mbig\fR.
13226 .IP "\fB\-mdynamic\-no\-pic\fR" 4
13227 .IX Item "-mdynamic-no-pic"
13228 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
13229 relocatable, but that its external references are relocatable.  The
13230 resulting code is suitable for applications, but not shared
13231 libraries.
13232 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
13233 .IX Item "-mprioritize-restricted-insns=priority"
13234 This option controls the priority that is assigned to
13235 dispatch-slot restricted instructions during the second scheduling
13236 pass.  The argument \fIpriority\fR takes the value \fI0/1/2\fR to assign
13237 \&\fIno/highest/second\-highest\fR priority to dispatch slot restricted
13238 instructions.
13239 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
13240 .IX Item "-msched-costly-dep=dependence_type"
13241 This option controls which dependences are considered costly
13242 by the target during instruction scheduling.  The argument
13243 \&\fIdependence_type\fR takes one of the following values:
13244 \&\fIno\fR: no dependence is costly,
13245 \&\fIall\fR: all dependences are costly,
13246 \&\fItrue_store_to_load\fR: a true dependence from store to load is costly,
13247 \&\fIstore_to_load\fR: any dependence from store to load is costly,
13248 \&\fInumber\fR: any dependence which latency >= \fInumber\fR is costly.
13249 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
13250 .IX Item "-minsert-sched-nops=scheme"
13251 This option controls which nop insertion scheme will be used during
13252 the second scheduling pass.  The argument \fIscheme\fR takes one of the
13253 following values:
13254 \&\fIno\fR: Don't insert nops.
13255 \&\fIpad\fR: Pad with nops any dispatch group which has vacant issue slots,
13256 according to the scheduler's grouping.
13257 \&\fIregroup_exact\fR: Insert nops to force costly dependent insns into
13258 separate groups.  Insert exactly as many nops as needed to force an insn
13259 to a new group, according to the estimated processor grouping.
13260 \&\fInumber\fR: Insert nops to force costly dependent insns into
13261 separate groups.  Insert \fInumber\fR nops to force an insn to a new group.
13262 .IP "\fB\-mcall\-sysv\fR" 4
13263 .IX Item "-mcall-sysv"
13264 On System V.4 and embedded PowerPC systems compile code using calling
13265 conventions that adheres to the March 1995 draft of the System V
13266 Application Binary Interface, PowerPC processor supplement.  This is the
13267 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
13268 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
13269 .IX Item "-mcall-sysv-eabi"
13270 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
13271 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
13272 .IX Item "-mcall-sysv-noeabi"
13273 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
13274 .IP "\fB\-mcall\-solaris\fR" 4
13275 .IX Item "-mcall-solaris"
13276 On System V.4 and embedded PowerPC systems compile code for the Solaris
13277 operating system.
13278 .IP "\fB\-mcall\-linux\fR" 4
13279 .IX Item "-mcall-linux"
13280 On System V.4 and embedded PowerPC systems compile code for the
13281 Linux-based \s-1GNU\s0 system.
13282 .IP "\fB\-mcall\-gnu\fR" 4
13283 .IX Item "-mcall-gnu"
13284 On System V.4 and embedded PowerPC systems compile code for the
13285 Hurd-based \s-1GNU\s0 system.
13286 .IP "\fB\-mcall\-netbsd\fR" 4
13287 .IX Item "-mcall-netbsd"
13288 On System V.4 and embedded PowerPC systems compile code for the
13289 NetBSD operating system.
13290 .IP "\fB\-maix\-struct\-return\fR" 4
13291 .IX Item "-maix-struct-return"
13292 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
13293 .IP "\fB\-msvr4\-struct\-return\fR" 4
13294 .IX Item "-msvr4-struct-return"
13295 Return structures smaller than 8 bytes in registers (as specified by the
13296 \&\s-1SVR4\s0 \s-1ABI\s0).
13297 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
13298 .IX Item "-mabi=abi-type"
13299 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
13300 Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
13301 \&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
13302 .IP "\fB\-mabi=spe\fR" 4
13303 .IX Item "-mabi=spe"
13304 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
13305 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
13306 \&\s-1ABI\s0.
13307 .IP "\fB\-mabi=no\-spe\fR" 4
13308 .IX Item "-mabi=no-spe"
13309 Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
13310 .IP "\fB\-mabi=ibmlongdouble\fR" 4
13311 .IX Item "-mabi=ibmlongdouble"
13312 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended precision long double.
13313 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13314 .IP "\fB\-mabi=ieeelongdouble\fR" 4
13315 .IX Item "-mabi=ieeelongdouble"
13316 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended precision long double.
13317 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
13318 .IP "\fB\-mprototype\fR" 4
13319 .IX Item "-mprototype"
13320 .PD 0
13321 .IP "\fB\-mno\-prototype\fR" 4
13322 .IX Item "-mno-prototype"
13323 .PD
13324 On System V.4 and embedded PowerPC systems assume that all calls to
13325 variable argument functions are properly prototyped.  Otherwise, the
13326 compiler must insert an instruction before every non prototyped call to
13327 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
13328 indicate whether floating point values were passed in the floating point
13329 registers in case the function takes a variable arguments.  With
13330 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
13331 will set or clear the bit.
13332 .IP "\fB\-msim\fR" 4
13333 .IX Item "-msim"
13334 On embedded PowerPC systems, assume that the startup module is called
13335 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
13336 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
13337 configurations.
13338 .IP "\fB\-mmvme\fR" 4
13339 .IX Item "-mmvme"
13340 On embedded PowerPC systems, assume that the startup module is called
13341 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
13342 \&\fIlibc.a\fR.
13343 .IP "\fB\-mads\fR" 4
13344 .IX Item "-mads"
13345 On embedded PowerPC systems, assume that the startup module is called
13346 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
13347 \&\fIlibc.a\fR.
13348 .IP "\fB\-myellowknife\fR" 4
13349 .IX Item "-myellowknife"
13350 On embedded PowerPC systems, assume that the startup module is called
13351 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
13352 \&\fIlibc.a\fR.
13353 .IP "\fB\-mvxworks\fR" 4
13354 .IX Item "-mvxworks"
13355 On System V.4 and embedded PowerPC systems, specify that you are
13356 compiling for a VxWorks system.
13357 .IP "\fB\-memb\fR" 4
13358 .IX Item "-memb"
13359 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
13360 header to indicate that \fBeabi\fR extended relocations are used.
13361 .IP "\fB\-meabi\fR" 4
13362 .IX Item "-meabi"
13363 .PD 0
13364 .IP "\fB\-mno\-eabi\fR" 4
13365 .IX Item "-mno-eabi"
13366 .PD
13367 On System V.4 and embedded PowerPC systems do (do not) adhere to the
13368 Embedded Applications Binary Interface (eabi) which is a set of
13369 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
13370 means that the stack is aligned to an 8 byte boundary, a function
13371 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
13372 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
13373 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
13374 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16 byte boundary,
13375 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
13376 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
13377 small data area.  The \fB\-meabi\fR option is on by default if you
13378 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
13379 .IP "\fB\-msdata=eabi\fR" 4
13380 .IX Item "-msdata=eabi"
13381 On System V.4 and embedded PowerPC systems, put small initialized
13382 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
13383 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
13384 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
13385 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
13386 global and static data in the \fB.sbss\fR section, which is adjacent to
13387 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
13388 incompatible with the \fB\-mrelocatable\fR option.  The
13389 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
13390 .IP "\fB\-msdata=sysv\fR" 4
13391 .IX Item "-msdata=sysv"
13392 On System V.4 and embedded PowerPC systems, put small global and static
13393 data in the \fB.sdata\fR section, which is pointed to by register
13394 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
13395 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
13396 The \fB\-msdata=sysv\fR option is incompatible with the
13397 \&\fB\-mrelocatable\fR option.
13398 .IP "\fB\-msdata=default\fR" 4
13399 .IX Item "-msdata=default"
13400 .PD 0
13401 .IP "\fB\-msdata\fR" 4
13402 .IX Item "-msdata"
13403 .PD
13404 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
13405 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
13406 same as \fB\-msdata=sysv\fR.
13407 .IP "\fB\-msdata=data\fR" 4
13408 .IX Item "-msdata=data"
13409 On System V.4 and embedded PowerPC systems, put small global
13410 data in the \fB.sdata\fR section.  Put small uninitialized global
13411 data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
13412 to address small data however.  This is the default behavior unless
13413 other \fB\-msdata\fR options are used.
13414 .IP "\fB\-msdata=none\fR" 4
13415 .IX Item "-msdata=none"
13416 .PD 0
13417 .IP "\fB\-mno\-sdata\fR" 4
13418 .IX Item "-mno-sdata"
13419 .PD
13420 On embedded PowerPC systems, put all initialized global and static data
13421 in the \fB.data\fR section, and all uninitialized data in the
13422 \&\fB.bss\fR section.
13423 .IP "\fB\-G\fR \fInum\fR" 4
13424 .IX Item "-G num"
13425 On embedded PowerPC systems, put global and static items less than or
13426 equal to \fInum\fR bytes into the small data or bss sections instead of
13427 the normal data or bss section.  By default, \fInum\fR is 8.  The
13428 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
13429 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
13430 .IP "\fB\-mregnames\fR" 4
13431 .IX Item "-mregnames"
13432 .PD 0
13433 .IP "\fB\-mno\-regnames\fR" 4
13434 .IX Item "-mno-regnames"
13435 .PD
13436 On System V.4 and embedded PowerPC systems do (do not) emit register
13437 names in the assembly language output using symbolic forms.
13438 .IP "\fB\-mlongcall\fR" 4
13439 .IX Item "-mlongcall"
13440 .PD 0
13441 .IP "\fB\-mno\-longcall\fR" 4
13442 .IX Item "-mno-longcall"
13443 .PD
13444 By default assume that all calls are far away so that a longer more
13445 expensive calling sequence is required.  This is required for calls
13446 further than 32 megabytes (33,554,432 bytes) from the current location.
13447 A short call will be generated if the compiler knows
13448 the call cannot be that far away.  This setting can be overridden by
13449 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
13450 longcall(0)\*(C'\fR.
13451 .Sp
13452 Some linkers are capable of detecting out-of-range calls and generating
13453 glue code on the fly.  On these systems, long calls are unnecessary and
13454 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
13455 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
13456 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
13457 .Sp
13458 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR will generate \*(L"jbsr
13459 callee, L42\*(R", plus a \*(L"branch island\*(R" (glue code).  The two target
13460 addresses represent the callee and the \*(L"branch island\*(R".  The
13461 Darwin/PPC linker will prefer the first address and generate a \*(L"bl
13462 callee\*(R" if the \s-1PPC\s0 \*(L"bl\*(R" instruction will reach the callee directly;
13463 otherwise, the linker will generate \*(L"bl L42\*(R" to call the \*(L"branch
13464 island\*(R".  The \*(L"branch island\*(R" is appended to the body of the
13465 calling function; it computes the full 32\-bit address of the callee
13466 and jumps to it.
13467 .Sp
13468 On Mach-O (Darwin) systems, this option directs the compiler emit to
13469 the glue for every direct call, and the Darwin linker decides whether
13470 to use or discard it.
13471 .Sp
13472 In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
13473 when the linker is known to generate glue.
13474 .IP "\fB\-pthread\fR" 4
13475 .IX Item "-pthread"
13476 Adds support for multithreading with the \fIpthreads\fR library.
13477 This option sets flags for both the preprocessor and linker.
13478 .PP
13479 \fIS/390 and zSeries Options\fR
13480 .IX Subsection "S/390 and zSeries Options"
13481 .PP
13482 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
13483 .IP "\fB\-mhard\-float\fR" 4
13484 .IX Item "-mhard-float"
13485 .PD 0
13486 .IP "\fB\-msoft\-float\fR" 4
13487 .IX Item "-msoft-float"
13488 .PD
13489 Use (do not use) the hardware floating-point instructions and registers
13490 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
13491 functions in \fIlibgcc.a\fR will be used to perform floating-point
13492 operations.  When \fB\-mhard\-float\fR is specified, the compiler
13493 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
13494 .IP "\fB\-mhard\-dfp\fR" 4
13495 .IX Item "-mhard-dfp"
13496 .PD 0
13497 .IP "\fB\-mno\-hard\-dfp\fR" 4
13498 .IX Item "-mno-hard-dfp"
13499 .PD
13500 Use (do not use) the hardware decimal-floating-point instructions for
13501 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
13502 specified, functions in \fIlibgcc.a\fR will be used to perform
13503 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
13504 specified, the compiler generates decimal-floating-point hardware
13505 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
13506 .IP "\fB\-mlong\-double\-64\fR" 4
13507 .IX Item "-mlong-double-64"
13508 .PD 0
13509 .IP "\fB\-mlong\-double\-128\fR" 4
13510 .IX Item "-mlong-double-128"
13511 .PD
13512 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
13513 of 64bit makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
13514 type. This is the default.
13515 .IP "\fB\-mbackchain\fR" 4
13516 .IX Item "-mbackchain"
13517 .PD 0
13518 .IP "\fB\-mno\-backchain\fR" 4
13519 .IX Item "-mno-backchain"
13520 .PD
13521 Store (do not store) the address of the caller's frame as backchain pointer
13522 into the callee's stack frame.
13523 A backchain may be needed to allow debugging using tools that do not understand
13524 \&\s-1DWARF\-2\s0 call frame information.
13525 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
13526 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
13527 the backchain is placed into the topmost word of the 96/160 byte register
13528 save area.
13529 .Sp
13530 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
13531 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
13532 for debugging purposes usually requires that the whole binary is built with
13533 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
13534 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13535 to build a linux kernel use \fB\-msoft\-float\fR.
13536 .Sp
13537 The default is to not maintain the backchain.
13538 .IP "\fB\-mpacked\-stack\fR" 4
13539 .IX Item "-mpacked-stack"
13540 .PD 0
13541 .IP "\fB\-mno\-packed\-stack\fR" 4
13542 .IX Item "-mno-packed-stack"
13543 .PD
13544 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
13545 specified, the compiler uses the all fields of the 96/160 byte register save
13546 area only for their default purpose; unused fields still take up stack space.
13547 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
13548 packed at the top of the register save area; unused space is reused for other
13549 purposes, allowing for more efficient use of the available stack space.
13550 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
13551 the save area is always used to store the backchain, and the return address
13552 register is always saved two words below the backchain.
13553 .Sp
13554 As long as the stack frame backchain is not used, code generated with
13555 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
13556 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
13557 S/390 or zSeries generated code that uses the stack frame backchain at run
13558 time, not just for debugging purposes.  Such code is not call-compatible
13559 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
13560 combination of \fB\-mbackchain\fR,
13561 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13562 to build a linux kernel use \fB\-msoft\-float\fR.
13563 .Sp
13564 The default is to not use the packed stack layout.
13565 .IP "\fB\-msmall\-exec\fR" 4
13566 .IX Item "-msmall-exec"
13567 .PD 0
13568 .IP "\fB\-mno\-small\-exec\fR" 4
13569 .IX Item "-mno-small-exec"
13570 .PD
13571 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
13572 to do subroutine calls.
13573 This only works reliably if the total executable size does not
13574 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
13575 which does not have this limitation.
13576 .IP "\fB\-m64\fR" 4
13577 .IX Item "-m64"
13578 .PD 0
13579 .IP "\fB\-m31\fR" 4
13580 .IX Item "-m31"
13581 .PD
13582 When \fB\-m31\fR is specified, generate code compliant to the
13583 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
13584 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
13585 particular to generate 64\-bit instructions.  For the \fBs390\fR
13586 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
13587 targets default to \fB\-m64\fR.
13588 .IP "\fB\-mzarch\fR" 4
13589 .IX Item "-mzarch"
13590 .PD 0
13591 .IP "\fB\-mesa\fR" 4
13592 .IX Item "-mesa"
13593 .PD
13594 When \fB\-mzarch\fR is specified, generate code using the
13595 instructions available on z/Architecture.
13596 When \fB\-mesa\fR is specified, generate code using the
13597 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
13598 not possible with \fB\-m64\fR.
13599 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
13600 the default is \fB\-mesa\fR.  When generating code compliant
13601 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
13602 .IP "\fB\-mmvcle\fR" 4
13603 .IX Item "-mmvcle"
13604 .PD 0
13605 .IP "\fB\-mno\-mvcle\fR" 4
13606 .IX Item "-mno-mvcle"
13607 .PD
13608 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
13609 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
13610 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
13611 size.
13612 .IP "\fB\-mdebug\fR" 4
13613 .IX Item "-mdebug"
13614 .PD 0
13615 .IP "\fB\-mno\-debug\fR" 4
13616 .IX Item "-mno-debug"
13617 .PD
13618 Print (or do not print) additional debug information when compiling.
13619 The default is to not print debug information.
13620 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
13621 .IX Item "-march=cpu-type"
13622 Generate code that will run on \fIcpu-type\fR, which is the name of a system
13623 representing a certain processor type.  Possible values for
13624 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
13625 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
13626 When generating code using the instructions available on z/Architecture,
13627 the default is \fB\-march=z900\fR.  Otherwise, the default is
13628 \&\fB\-march=g5\fR.
13629 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
13630 .IX Item "-mtune=cpu-type"
13631 Tune to \fIcpu-type\fR everything applicable about the generated code,
13632 except for the \s-1ABI\s0 and the set of available instructions.
13633 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
13634 The default is the value used for \fB\-march\fR.
13635 .IP "\fB\-mtpf\-trace\fR" 4
13636 .IX Item "-mtpf-trace"
13637 .PD 0
13638 .IP "\fB\-mno\-tpf\-trace\fR" 4
13639 .IX Item "-mno-tpf-trace"
13640 .PD
13641 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
13642 routines in the operating system.  This option is off by default, even
13643 when compiling for the \s-1TPF\s0 \s-1OS\s0.
13644 .IP "\fB\-mfused\-madd\fR" 4
13645 .IX Item "-mfused-madd"
13646 .PD 0
13647 .IP "\fB\-mno\-fused\-madd\fR" 4
13648 .IX Item "-mno-fused-madd"
13649 .PD
13650 Generate code that uses (does not use) the floating point multiply and
13651 accumulate instructions.  These instructions are generated by default if
13652 hardware floating point is used.
13653 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
13654 .IX Item "-mwarn-framesize=framesize"
13655 Emit a warning if the current function exceeds the given frame size.  Because
13656 this is a compile time check it doesn't need to be a real problem when the program
13657 runs.  It is intended to identify functions which most probably cause
13658 a stack overflow.  It is useful to be used in an environment with limited stack
13659 size e.g. the linux kernel.
13660 .IP "\fB\-mwarn\-dynamicstack\fR" 4
13661 .IX Item "-mwarn-dynamicstack"
13662 Emit a warning if the function calls alloca or uses dynamically
13663 sized arrays.  This is generally a bad idea with a limited stack size.
13664 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
13665 .IX Item "-mstack-guard=stack-guard"
13666 .PD 0
13667 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
13668 .IX Item "-mstack-size=stack-size"
13669 .PD
13670 If these options are provided the s390 back end emits additional instructions in
13671 the function prologue which trigger a trap if the stack size is \fIstack-guard\fR
13672 bytes above the \fIstack-size\fR (remember that the stack on s390 grows downward).
13673 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
13674 the frame size of the compiled function is chosen.
13675 These options are intended to be used to help debugging stack overflow problems.
13676 The additionally emitted code causes only little overhead and hence can also be
13677 used in production like systems without greater performance degradation.  The given
13678 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
13679 \&\fIstack-guard\fR without exceeding 64k.
13680 In order to be efficient the extra code makes the assumption that the stack starts
13681 at an address aligned to the value given by \fIstack-size\fR.
13682 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
13683 .PP
13684 \fIScore Options\fR
13685 .IX Subsection "Score Options"
13686 .PP
13687 These options are defined for Score implementations:
13688 .IP "\fB\-meb\fR" 4
13689 .IX Item "-meb"
13690 Compile code for big endian mode.  This is the default.
13691 .IP "\fB\-mel\fR" 4
13692 .IX Item "-mel"
13693 Compile code for little endian mode.
13694 .IP "\fB\-mnhwloop\fR" 4
13695 .IX Item "-mnhwloop"
13696 Disable generate bcnz instruction.
13697 .IP "\fB\-muls\fR" 4
13698 .IX Item "-muls"
13699 Enable generate unaligned load and store instruction.
13700 .IP "\fB\-mmac\fR" 4
13701 .IX Item "-mmac"
13702 Enable the use of multiply-accumulate instructions. Disabled by default.
13703 .IP "\fB\-mscore5\fR" 4
13704 .IX Item "-mscore5"
13705 Specify the \s-1SCORE5\s0 as the target architecture.
13706 .IP "\fB\-mscore5u\fR" 4
13707 .IX Item "-mscore5u"
13708 Specify the \s-1SCORE5U\s0 of the target architecture.
13709 .IP "\fB\-mscore7\fR" 4
13710 .IX Item "-mscore7"
13711 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
13712 .IP "\fB\-mscore7d\fR" 4
13713 .IX Item "-mscore7d"
13714 Specify the \s-1SCORE7D\s0 as the target architecture.
13715 .PP
13716 \fI\s-1SH\s0 Options\fR
13717 .IX Subsection "SH Options"
13718 .PP
13719 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
13720 .IP "\fB\-m1\fR" 4
13721 .IX Item "-m1"
13722 Generate code for the \s-1SH1\s0.
13723 .IP "\fB\-m2\fR" 4
13724 .IX Item "-m2"
13725 Generate code for the \s-1SH2\s0.
13726 .IP "\fB\-m2e\fR" 4
13727 .IX Item "-m2e"
13728 Generate code for the SH2e.
13729 .IP "\fB\-m3\fR" 4
13730 .IX Item "-m3"
13731 Generate code for the \s-1SH3\s0.
13732 .IP "\fB\-m3e\fR" 4
13733 .IX Item "-m3e"
13734 Generate code for the SH3e.
13735 .IP "\fB\-m4\-nofpu\fR" 4
13736 .IX Item "-m4-nofpu"
13737 Generate code for the \s-1SH4\s0 without a floating-point unit.
13738 .IP "\fB\-m4\-single\-only\fR" 4
13739 .IX Item "-m4-single-only"
13740 Generate code for the \s-1SH4\s0 with a floating-point unit that only
13741 supports single-precision arithmetic.
13742 .IP "\fB\-m4\-single\fR" 4
13743 .IX Item "-m4-single"
13744 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
13745 single-precision mode by default.
13746 .IP "\fB\-m4\fR" 4
13747 .IX Item "-m4"
13748 Generate code for the \s-1SH4\s0.
13749 .IP "\fB\-m4a\-nofpu\fR" 4
13750 .IX Item "-m4a-nofpu"
13751 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
13752 floating-point unit is not used.
13753 .IP "\fB\-m4a\-single\-only\fR" 4
13754 .IX Item "-m4a-single-only"
13755 Generate code for the SH4a, in such a way that no double-precision
13756 floating point operations are used.
13757 .IP "\fB\-m4a\-single\fR" 4
13758 .IX Item "-m4a-single"
13759 Generate code for the SH4a assuming the floating-point unit is in
13760 single-precision mode by default.
13761 .IP "\fB\-m4a\fR" 4
13762 .IX Item "-m4a"
13763 Generate code for the SH4a.
13764 .IP "\fB\-m4al\fR" 4
13765 .IX Item "-m4al"
13766 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
13767 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
13768 instructions at the moment.
13769 .IP "\fB\-mb\fR" 4
13770 .IX Item "-mb"
13771 Compile code for the processor in big endian mode.
13772 .IP "\fB\-ml\fR" 4
13773 .IX Item "-ml"
13774 Compile code for the processor in little endian mode.
13775 .IP "\fB\-mdalign\fR" 4
13776 .IX Item "-mdalign"
13777 Align doubles at 64\-bit boundaries.  Note that this changes the calling
13778 conventions, and thus some functions from the standard C library will
13779 not work unless you recompile it first with \fB\-mdalign\fR.
13780 .IP "\fB\-mrelax\fR" 4
13781 .IX Item "-mrelax"
13782 Shorten some address references at link time, when possible; uses the
13783 linker option \fB\-relax\fR.
13784 .IP "\fB\-mbigtable\fR" 4
13785 .IX Item "-mbigtable"
13786 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
13787 16\-bit offsets.
13788 .IP "\fB\-mbitops\fR" 4
13789 .IX Item "-mbitops"
13790 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
13791 .IP "\fB\-mfmovd\fR" 4
13792 .IX Item "-mfmovd"
13793 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
13794 .IP "\fB\-mhitachi\fR" 4
13795 .IX Item "-mhitachi"
13796 Comply with the calling conventions defined by Renesas.
13797 .IP "\fB\-mrenesas\fR" 4
13798 .IX Item "-mrenesas"
13799 Comply with the calling conventions defined by Renesas.
13800 .IP "\fB\-mno\-renesas\fR" 4
13801 .IX Item "-mno-renesas"
13802 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
13803 conventions were available.  This option is the default for all
13804 targets of the \s-1SH\s0 toolchain except for \fBsh-symbianelf\fR.
13805 .IP "\fB\-mnomacsave\fR" 4
13806 .IX Item "-mnomacsave"
13807 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
13808 \&\fB\-mhitachi\fR is given.
13809 .IP "\fB\-mieee\fR" 4
13810 .IX Item "-mieee"
13811 Increase IEEE-compliance of floating-point code.
13812 At the moment, this is equivalent to \fB\-fno\-finite\-math\-only\fR.
13813 When generating 16 bit \s-1SH\s0 opcodes, getting IEEE-conforming results for
13814 comparisons of NANs / infinities incurs extra overhead in every
13815 floating point comparison, therefore the default is set to
13816 \&\fB\-ffinite\-math\-only\fR.
13817 .IP "\fB\-minline\-ic_invalidate\fR" 4
13818 .IX Item "-minline-ic_invalidate"
13819 Inline code to invalidate instruction cache entries after setting up
13820 nested function trampolines.
13821 This option has no effect if \-musermode is in effect and the selected
13822 code generation option (e.g. \-m4) does not allow the use of the icbi
13823 instruction.
13824 If the selected code generation option does not allow the use of the icbi
13825 instruction, and \-musermode is not in effect, the inlined code will
13826 manipulate the instruction cache address array directly with an associative
13827 write.  This not only requires privileged mode, but it will also
13828 fail if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
13829 .IP "\fB\-misize\fR" 4
13830 .IX Item "-misize"
13831 Dump instruction size and location in the assembly code.
13832 .IP "\fB\-mpadstruct\fR" 4
13833 .IX Item "-mpadstruct"
13834 This option is deprecated.  It pads structures to multiple of 4 bytes,
13835 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
13836 .IP "\fB\-mspace\fR" 4
13837 .IX Item "-mspace"
13838 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
13839 .IP "\fB\-mprefergot\fR" 4
13840 .IX Item "-mprefergot"
13841 When generating position-independent code, emit function calls using
13842 the Global Offset Table instead of the Procedure Linkage Table.
13843 .IP "\fB\-musermode\fR" 4
13844 .IX Item "-musermode"
13845 Don't generate privileged mode only code; implies \-mno\-inline\-ic_invalidate
13846 if the inlined code would not work in user mode.
13847 This is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
13848 .IP "\fB\-multcost=\fR\fInumber\fR" 4
13849 .IX Item "-multcost=number"
13850 Set the cost to assume for a multiply insn.
13851 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
13852 .IX Item "-mdiv=strategy"
13853 Set the division strategy to use for SHmedia code.  \fIstrategy\fR must be
13854 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
13855 inv:call2, inv:fp .
13856 \&\*(L"fp\*(R" performs the operation in floating point.  This has a very high latency,
13857 but needs only a few instructions, so it might be a good choice if
13858 your code has enough easily exploitable \s-1ILP\s0 to allow the compiler to
13859 schedule the floating point instructions together with other instructions.
13860 Division by zero causes a floating point exception.
13861 \&\*(L"inv\*(R" uses integer operations to calculate the inverse of the divisor,
13862 and then multiplies the dividend with the inverse.  This strategy allows
13863 cse and hoisting of the inverse calculation.  Division by zero calculates
13864 an unspecified result, but does not trap.
13865 \&\*(L"inv:minlat\*(R" is a variant of \*(L"inv\*(R" where if no cse / hoisting opportunities
13866 have been found, or if the entire operation has been hoisted to the same
13867 place, the last stages of the inverse calculation are intertwined with the
13868 final multiply to reduce the overall latency, at the expense of using a few
13869 more instructions, and thus offering fewer scheduling opportunities with
13870 other code.
13871 \&\*(L"call\*(R" calls a library function that usually implements the inv:minlat
13872 strategy.
13873 This gives high code density for m5\-*media\-nofpu compilations.
13874 \&\*(L"call2\*(R" uses a different entry point of the same library function, where it
13875 assumes that a pointer to a lookup table has already been set up, which
13876 exposes the pointer load to cse / code hoisting optimizations.
13877 \&\*(L"inv:call\*(R", \*(L"inv:call2\*(R" and \*(L"inv:fp\*(R" all use the \*(L"inv\*(R" algorithm for initial
13878 code generation, but if the code stays unoptimized, revert to the \*(L"call\*(R",
13879 \&\*(L"call2\*(R", or \*(L"fp\*(R" strategies, respectively.  Note that the
13880 potentially-trapping side effect of division by zero is carried by a
13881 separate instruction, so it is possible that all the integer instructions
13882 are hoisted out, but the marker for the side effect stays where it is.
13883 A recombination to fp operations or a call is not possible in that case.
13884 \&\*(L"inv20u\*(R" and \*(L"inv20l\*(R" are variants of the \*(L"inv:minlat\*(R" strategy.  In the case
13885 that the inverse calculation was nor separated from the multiply, they speed
13886 up division where the dividend fits into 20 bits (plus sign where applicable),
13887 by inserting a test to skip a number of operations in this case; this test
13888 slows down the case of larger dividends.  inv20u assumes the case of a such
13889 a small dividend to be unlikely, and inv20l assumes it to be likely.
13890 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
13891 .IX Item "-mdivsi3_libfunc=name"
13892 Set the name of the library function used for 32 bit signed division to
13893 \&\fIname\fR.  This only affect the name used in the call and inv:call
13894 division strategies, and the compiler will still expect the same
13895 sets of input/output/clobbered registers as if this option was not present.
13896 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
13897 .IX Item "-mfixed-range=register-range"
13898 Generate code treating the given register range as fixed registers.
13899 A fixed register is one that the register allocator can not use.  This is
13900 useful when compiling kernel code.  A register range is specified as
13901 two registers separated by a dash.  Multiple register ranges can be
13902 specified separated by a comma.
13903 .IP "\fB\-madjust\-unroll\fR" 4
13904 .IX Item "-madjust-unroll"
13905 Throttle unrolling to avoid thrashing target registers.
13906 This option only has an effect if the gcc code base supports the
13907 \&\s-1TARGET_ADJUST_UNROLL_MAX\s0 target hook.
13908 .IP "\fB\-mindexed\-addressing\fR" 4
13909 .IX Item "-mindexed-addressing"
13910 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
13911 This is only safe if the hardware and/or \s-1OS\s0 implement 32 bit wrap-around
13912 semantics for the indexed addressing mode.  The architecture allows the
13913 implementation of processors with 64 bit \s-1MMU\s0, which the \s-1OS\s0 could use to
13914 get 32 bit addressing, but since no current hardware implementation supports
13915 this or any other way to make the indexed addressing mode safe to use in
13916 the 32 bit \s-1ABI\s0, the default is \-mno\-indexed\-addressing.
13917 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
13918 .IX Item "-mgettrcost=number"
13919 Set the cost assumed for the gettr instruction to \fInumber\fR.
13920 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
13921 .IP "\fB\-mpt\-fixed\fR" 4
13922 .IX Item "-mpt-fixed"
13923 Assume pt* instructions won't trap.  This will generally generate better
13924 scheduled code, but is unsafe on current hardware.  The current architecture
13925 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
13926 This has the unintentional effect of making it unsafe to schedule ptabs /
13927 ptrel before a branch, or hoist it out of a loop.  For example,
13928 _\|_do_global_ctors, a part of libgcc that runs constructors at program
13929 startup, calls functions in a list which is delimited by \-1.  With the
13930 \&\-mpt\-fixed option, the ptabs will be done before testing against \-1.
13931 That means that all the constructors will be run a bit quicker, but when
13932 the loop comes to the end of the list, the program crashes because ptabs
13933 loads \-1 into a target register.  Since this option is unsafe for any
13934 hardware implementing the current architecture specification, the default
13935 is \-mno\-pt\-fixed.  Unless the user specifies a specific cost with
13936 \&\fB\-mgettrcost\fR, \-mno\-pt\-fixed also implies \fB\-mgettrcost=100\fR;
13937 this deters register allocation using target registers for storing
13938 ordinary integers.
13939 .IP "\fB\-minvalid\-symbols\fR" 4
13940 .IX Item "-minvalid-symbols"
13941 Assume symbols might be invalid.  Ordinary function symbols generated by
13942 the compiler will always be valid to load with movi/shori/ptabs or
13943 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
13944 to generate symbols that will cause ptabs / ptrel to trap.
13945 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
13946 It will then prevent cross-basic-block cse, hoisting and most scheduling
13947 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
13948 .PP
13949 \fI\s-1SPARC\s0 Options\fR
13950 .IX Subsection "SPARC Options"
13951 .PP
13952 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
13953 .IP "\fB\-mno\-app\-regs\fR" 4
13954 .IX Item "-mno-app-regs"
13955 .PD 0
13956 .IP "\fB\-mapp\-regs\fR" 4
13957 .IX Item "-mapp-regs"
13958 .PD
13959 Specify \fB\-mapp\-regs\fR to generate output using the global registers
13960 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
13961 is the default.
13962 .Sp
13963 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
13964 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
13965 software with this option.
13966 .IP "\fB\-mfpu\fR" 4
13967 .IX Item "-mfpu"
13968 .PD 0
13969 .IP "\fB\-mhard\-float\fR" 4
13970 .IX Item "-mhard-float"
13971 .PD
13972 Generate output containing floating point instructions.  This is the
13973 default.
13974 .IP "\fB\-mno\-fpu\fR" 4
13975 .IX Item "-mno-fpu"
13976 .PD 0
13977 .IP "\fB\-msoft\-float\fR" 4
13978 .IX Item "-msoft-float"
13979 .PD
13980 Generate output containing library calls for floating point.
13981 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
13982 targets.  Normally the facilities of the machine's usual C compiler are
13983 used, but this cannot be done directly in cross-compilation.  You must make
13984 your own arrangements to provide suitable library functions for
13985 cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
13986 \&\fBsparclite\-*\-*\fR do provide software floating point support.
13987 .Sp
13988 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
13989 therefore, it is only useful if you compile \fIall\fR of a program with
13990 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
13991 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
13992 this to work.
13993 .IP "\fB\-mhard\-quad\-float\fR" 4
13994 .IX Item "-mhard-quad-float"
13995 Generate output containing quad-word (long double) floating point
13996 instructions.
13997 .IP "\fB\-msoft\-quad\-float\fR" 4
13998 .IX Item "-msoft-quad-float"
13999 Generate output containing library calls for quad-word (long double)
14000 floating point instructions.  The functions called are those specified
14001 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
14002 .Sp
14003 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
14004 support for the quad-word floating point instructions.  They all invoke
14005 a trap handler for one of these instructions, and then the trap handler
14006 emulates the effect of the instruction.  Because of the trap handler overhead,
14007 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
14008 \&\fB\-msoft\-quad\-float\fR option is the default.
14009 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
14010 .IX Item "-mno-unaligned-doubles"
14011 .PD 0
14012 .IP "\fB\-munaligned\-doubles\fR" 4
14013 .IX Item "-munaligned-doubles"
14014 .PD
14015 Assume that doubles have 8 byte alignment.  This is the default.
14016 .Sp
14017 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8 byte
14018 alignment only if they are contained in another type, or if they have an
14019 absolute address.  Otherwise, it assumes they have 4 byte alignment.
14020 Specifying this option avoids some rare compatibility problems with code
14021 generated by other compilers.  It is not the default because it results
14022 in a performance loss, especially for floating point code.
14023 .IP "\fB\-mno\-faster\-structs\fR" 4
14024 .IX Item "-mno-faster-structs"
14025 .PD 0
14026 .IP "\fB\-mfaster\-structs\fR" 4
14027 .IX Item "-mfaster-structs"
14028 .PD
14029 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
14030 should have 8 byte alignment.  This enables the use of pairs of
14031 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
14032 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
14033 However, the use of this changed alignment directly violates the \s-1SPARC\s0
14034 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
14035 acknowledges that their resulting code will not be directly in line with
14036 the rules of the \s-1ABI\s0.
14037 .IP "\fB\-mimpure\-text\fR" 4
14038 .IX Item "-mimpure-text"
14039 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
14040 the compiler to not pass \fB\-z text\fR to the linker when linking a
14041 shared object.  Using this option, you can link position-dependent
14042 code into a shared object.
14043 .Sp
14044 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
14045 allocatable but non-writable sections\*(R" linker error message.
14046 However, the necessary relocations will trigger copy-on-write, and the
14047 shared object is not actually shared across processes.  Instead of
14048 using \fB\-mimpure\-text\fR, you should compile all source code with
14049 \&\fB\-fpic\fR or \fB\-fPIC\fR.
14050 .Sp
14051 This option is only available on SunOS and Solaris.
14052 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
14053 .IX Item "-mcpu=cpu_type"
14054 Set the instruction set, register set, and instruction scheduling parameters
14055 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
14056 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBsparclite\fR,
14057 \&\fBf930\fR, \fBf934\fR, \fBhypersparc\fR, \fBsparclite86x\fR,
14058 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
14059 \&\fBultrasparc3\fR, \fBniagara\fR and \fBniagara2\fR.
14060 .Sp
14061 Default instruction scheduling parameters are used for values that select
14062 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
14063 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
14064 .Sp
14065 Here is a list of each supported architecture and their supported
14066 implementations.
14067 .Sp
14068 .Vb 5
14069 \&            v7:             cypress
14070 \&            v8:             supersparc, hypersparc
14071 \&            sparclite:      f930, f934, sparclite86x
14072 \&            sparclet:       tsc701
14073 \&            v9:             ultrasparc, ultrasparc3, niagara, niagara2
14074 .Ve
14075 .Sp
14076 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
14077 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
14078 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
14079 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
14080 SPARCStation 1, 2, \s-1IPX\s0 etc.
14081 .Sp
14082 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
14083 architecture.  The only difference from V7 code is that the compiler emits
14084 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
14085 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
14086 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
14087 2000 series.
14088 .Sp
14089 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
14090 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
14091 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
14092 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
14093 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
14094 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
14095 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
14096 .Sp
14097 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
14098 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
14099 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
14100 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
14101 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
14102 .Sp
14103 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
14104 architecture.  This adds 64\-bit integer and floating-point move instructions,
14105 3 additional floating-point condition code registers and conditional move
14106 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
14107 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
14108 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
14109 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
14110 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
14111 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
14112 additionally optimizes it for Sun UltraSPARC T2 chips.
14113 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
14114 .IX Item "-mtune=cpu_type"
14115 Set the instruction scheduling parameters for machine type
14116 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
14117 option \fB\-mcpu=\fR\fIcpu_type\fR would.
14118 .Sp
14119 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
14120 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
14121 that select a particular cpu implementation.  Those are \fBcypress\fR,
14122 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBf930\fR, \fBf934\fR,
14123 \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
14124 \&\fBultrasparc3\fR, \fBniagara\fR, and \fBniagara2\fR.
14125 .IP "\fB\-mv8plus\fR" 4
14126 .IX Item "-mv8plus"
14127 .PD 0
14128 .IP "\fB\-mno\-v8plus\fR" 4
14129 .IX Item "-mno-v8plus"
14130 .PD
14131 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
14132 difference from the V8 \s-1ABI\s0 is that the global and out registers are
14133 considered 64\-bit wide.  This is enabled by default on Solaris in 32\-bit
14134 mode for all \s-1SPARC\-V9\s0 processors.
14135 .IP "\fB\-mvis\fR" 4
14136 .IX Item "-mvis"
14137 .PD 0
14138 .IP "\fB\-mno\-vis\fR" 4
14139 .IX Item "-mno-vis"
14140 .PD
14141 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
14142 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
14143 .PP
14144 These \fB\-m\fR options are supported in addition to the above
14145 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
14146 .IP "\fB\-mlittle\-endian\fR" 4
14147 .IX Item "-mlittle-endian"
14148 Generate code for a processor running in little-endian mode.  It is only
14149 available for a few configurations and most notably not on Solaris and Linux.
14150 .IP "\fB\-m32\fR" 4
14151 .IX Item "-m32"
14152 .PD 0
14153 .IP "\fB\-m64\fR" 4
14154 .IX Item "-m64"
14155 .PD
14156 Generate code for a 32\-bit or 64\-bit environment.
14157 The 32\-bit environment sets int, long and pointer to 32 bits.
14158 The 64\-bit environment sets int to 32 bits and long and pointer
14159 to 64 bits.
14160 .IP "\fB\-mcmodel=medlow\fR" 4
14161 .IX Item "-mcmodel=medlow"
14162 Generate code for the Medium/Low code model: 64\-bit addresses, programs
14163 must be linked in the low 32 bits of memory.  Programs can be statically
14164 or dynamically linked.
14165 .IP "\fB\-mcmodel=medmid\fR" 4
14166 .IX Item "-mcmodel=medmid"
14167 Generate code for the Medium/Middle code model: 64\-bit addresses, programs
14168 must be linked in the low 44 bits of memory, the text and data segments must
14169 be less than 2GB in size and the data segment must be located within 2GB of
14170 the text segment.
14171 .IP "\fB\-mcmodel=medany\fR" 4
14172 .IX Item "-mcmodel=medany"
14173 Generate code for the Medium/Anywhere code model: 64\-bit addresses, programs
14174 may be linked anywhere in memory, the text and data segments must be less
14175 than 2GB in size and the data segment must be located within 2GB of the
14176 text segment.
14177 .IP "\fB\-mcmodel=embmedany\fR" 4
14178 .IX Item "-mcmodel=embmedany"
14179 Generate code for the Medium/Anywhere code model for embedded systems:
14180 64\-bit addresses, the text and data segments must be less than 2GB in
14181 size, both starting anywhere in memory (determined at link time).  The
14182 global register \f(CW%g4\fR points to the base of the data segment.  Programs
14183 are statically linked and \s-1PIC\s0 is not supported.
14184 .IP "\fB\-mstack\-bias\fR" 4
14185 .IX Item "-mstack-bias"
14186 .PD 0
14187 .IP "\fB\-mno\-stack\-bias\fR" 4
14188 .IX Item "-mno-stack-bias"
14189 .PD
14190 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
14191 frame pointer if present, are offset by \-2047 which must be added back
14192 when making stack frame references.  This is the default in 64\-bit mode.
14193 Otherwise, assume no such offset is present.
14194 .PP
14195 These switches are supported in addition to the above on Solaris:
14196 .IP "\fB\-threads\fR" 4
14197 .IX Item "-threads"
14198 Add support for multithreading using the Solaris threads library.  This
14199 option sets flags for both the preprocessor and linker.  This option does
14200 not affect the thread safety of object code produced by the compiler or
14201 that of libraries supplied with it.
14202 .IP "\fB\-pthreads\fR" 4
14203 .IX Item "-pthreads"
14204 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
14205 option sets flags for both the preprocessor and linker.  This option does
14206 not affect the thread safety of object code produced  by the compiler or
14207 that of libraries supplied with it.
14208 .IP "\fB\-pthread\fR" 4
14209 .IX Item "-pthread"
14210 This is a synonym for \fB\-pthreads\fR.
14211 .PP
14212 \fI\s-1SPU\s0 Options\fR
14213 .IX Subsection "SPU Options"
14214 .PP
14215 These \fB\-m\fR options are supported on the \s-1SPU:\s0
14216 .IP "\fB\-mwarn\-reloc\fR" 4
14217 .IX Item "-mwarn-reloc"
14218 .PD 0
14219 .IP "\fB\-merror\-reloc\fR" 4
14220 .IX Item "-merror-reloc"
14221 .PD
14222 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
14223 will give an error when it generates code that requires a dynamic
14224 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
14225 \&\fB\-mwarn\-reloc\fR will generate a warning instead.
14226 .IP "\fB\-msafe\-dma\fR" 4
14227 .IX Item "-msafe-dma"
14228 .PD 0
14229 .IP "\fB\-munsafe\-dma\fR" 4
14230 .IX Item "-munsafe-dma"
14231 .PD
14232 Instructions which initiate or test completion of \s-1DMA\s0 must not be
14233 reordered with respect to loads and stores of the memory which is being
14234 accessed.  Users typically address this problem using the volatile
14235 keyword, but that can lead to inefficient code in places where the
14236 memory is known to not change.  Rather than mark the memory as volatile
14237 we treat the \s-1DMA\s0 instructions as potentially effecting all memory.  With
14238 \&\fB\-munsafe\-dma\fR users must use the volatile keyword to protect
14239 memory accesses.
14240 .IP "\fB\-mbranch\-hints\fR" 4
14241 .IX Item "-mbranch-hints"
14242 By default, \s-1GCC\s0 will generate a branch hint instruction to avoid
14243 pipeline stalls for always taken or probably taken branches.  A hint
14244 will not be generated closer than 8 instructions away from its branch.
14245 There is little reason to disable them, except for debugging purposes,
14246 or to make an object a little bit smaller.
14247 .IP "\fB\-msmall\-mem\fR" 4
14248 .IX Item "-msmall-mem"
14249 .PD 0
14250 .IP "\fB\-mlarge\-mem\fR" 4
14251 .IX Item "-mlarge-mem"
14252 .PD
14253 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
14254 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
14255 a full 32 bit address.
14256 .IP "\fB\-mstdmain\fR" 4
14257 .IX Item "-mstdmain"
14258 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
14259 main function interface (which has an unconventional parameter list).
14260 With \fB\-mstdmain\fR, \s-1GCC\s0 will link your program against startup
14261 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
14262 local copy of \f(CW\*(C`argv\*(C'\fR strings.
14263 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14264 .IX Item "-mfixed-range=register-range"
14265 Generate code treating the given register range as fixed registers.
14266 A fixed register is one that the register allocator can not use.  This is
14267 useful when compiling kernel code.  A register range is specified as
14268 two registers separated by a dash.  Multiple register ranges can be
14269 specified separated by a comma.
14270 .IP "\fB\-mdual\-nops\fR" 4
14271 .IX Item "-mdual-nops"
14272 .PD 0
14273 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
14274 .IX Item "-mdual-nops=n"
14275 .PD
14276 By default, \s-1GCC\s0 will insert nops to increase dual issue when it expects
14277 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
14278 smaller \fIn\fR will insert fewer nops.  10 is the default, 0 is the
14279 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
14280 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
14281 .IX Item "-mhint-max-nops=n"
14282 Maximum number of nops to insert for a branch hint.  A branch hint must
14283 be at least 8 instructions away from the branch it is effecting.  \s-1GCC\s0
14284 will insert up to \fIn\fR nops to enforce this, otherwise it will not
14285 generate the branch hint.
14286 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
14287 .IX Item "-mhint-max-distance=n"
14288 The encoding of the branch hint instruction limits the hint to be within
14289 256 instructions of the branch it is effecting.  By default, \s-1GCC\s0 makes
14290 sure it is within 125.
14291 .IP "\fB\-msafe\-hints\fR" 4
14292 .IX Item "-msafe-hints"
14293 Work around a hardware bug which causes the \s-1SPU\s0 to stall indefinitely.
14294 By default, \s-1GCC\s0 will insert the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
14295 this stall won't happen.
14296 .PP
14297 \fIOptions for System V\fR
14298 .IX Subsection "Options for System V"
14299 .PP
14300 These additional options are available on System V Release 4 for
14301 compatibility with other compilers on those systems:
14302 .IP "\fB\-G\fR" 4
14303 .IX Item "-G"
14304 Create a shared object.
14305 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
14306 .IP "\fB\-Qy\fR" 4
14307 .IX Item "-Qy"
14308 Identify the versions of each tool used by the compiler, in a
14309 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
14310 .IP "\fB\-Qn\fR" 4
14311 .IX Item "-Qn"
14312 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
14313 the default).
14314 .IP "\fB\-YP,\fR\fIdirs\fR" 4
14315 .IX Item "-YP,dirs"
14316 Search the directories \fIdirs\fR, and no others, for libraries
14317 specified with \fB\-l\fR.
14318 .IP "\fB\-Ym,\fR\fIdir\fR" 4
14319 .IX Item "-Ym,dir"
14320 Look in the directory \fIdir\fR to find the M4 preprocessor.
14321 The assembler uses this option.
14322 .PP
14323 \fIV850 Options\fR
14324 .IX Subsection "V850 Options"
14325 .PP
14326 These \fB\-m\fR options are defined for V850 implementations:
14327 .IP "\fB\-mlong\-calls\fR" 4
14328 .IX Item "-mlong-calls"
14329 .PD 0
14330 .IP "\fB\-mno\-long\-calls\fR" 4
14331 .IX Item "-mno-long-calls"
14332 .PD
14333 Treat all calls as being far away (near).  If calls are assumed to be
14334 far away, the compiler will always load the functions address up into a
14335 register, and call indirect through the pointer.
14336 .IP "\fB\-mno\-ep\fR" 4
14337 .IX Item "-mno-ep"
14338 .PD 0
14339 .IP "\fB\-mep\fR" 4
14340 .IX Item "-mep"
14341 .PD
14342 Do not optimize (do optimize) basic blocks that use the same index
14343 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
14344 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
14345 option is on by default if you optimize.
14346 .IP "\fB\-mno\-prolog\-function\fR" 4
14347 .IX Item "-mno-prolog-function"
14348 .PD 0
14349 .IP "\fB\-mprolog\-function\fR" 4
14350 .IX Item "-mprolog-function"
14351 .PD
14352 Do not use (do use) external functions to save and restore registers
14353 at the prologue and epilogue of a function.  The external functions
14354 are slower, but use less code space if more than one function saves
14355 the same number of registers.  The \fB\-mprolog\-function\fR option
14356 is on by default if you optimize.
14357 .IP "\fB\-mspace\fR" 4
14358 .IX Item "-mspace"
14359 Try to make the code as small as possible.  At present, this just turns
14360 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
14361 .IP "\fB\-mtda=\fR\fIn\fR" 4
14362 .IX Item "-mtda=n"
14363 Put static or global variables whose size is \fIn\fR bytes or less into
14364 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
14365 area can hold up to 256 bytes in total (128 bytes for byte references).
14366 .IP "\fB\-msda=\fR\fIn\fR" 4
14367 .IX Item "-msda=n"
14368 Put static or global variables whose size is \fIn\fR bytes or less into
14369 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
14370 area can hold up to 64 kilobytes.
14371 .IP "\fB\-mzda=\fR\fIn\fR" 4
14372 .IX Item "-mzda=n"
14373 Put static or global variables whose size is \fIn\fR bytes or less into
14374 the first 32 kilobytes of memory.
14375 .IP "\fB\-mv850\fR" 4
14376 .IX Item "-mv850"
14377 Specify that the target processor is the V850.
14378 .IP "\fB\-mbig\-switch\fR" 4
14379 .IX Item "-mbig-switch"
14380 Generate code suitable for big switch tables.  Use this option only if
14381 the assembler/linker complain about out of range branches within a switch
14382 table.
14383 .IP "\fB\-mapp\-regs\fR" 4
14384 .IX Item "-mapp-regs"
14385 This option will cause r2 and r5 to be used in the code generated by
14386 the compiler.  This setting is the default.
14387 .IP "\fB\-mno\-app\-regs\fR" 4
14388 .IX Item "-mno-app-regs"
14389 This option will cause r2 and r5 to be treated as fixed registers.
14390 .IP "\fB\-mv850e1\fR" 4
14391 .IX Item "-mv850e1"
14392 Specify that the target processor is the V850E1.  The preprocessor
14393 constants \fB_\|_v850e1_\|_\fR and \fB_\|_v850e_\|_\fR will be defined if
14394 this option is used.
14395 .IP "\fB\-mv850e\fR" 4
14396 .IX Item "-mv850e"
14397 Specify that the target processor is the V850E.  The preprocessor
14398 constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
14399 .Sp
14400 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
14401 are defined then a default target processor will be chosen and the
14402 relevant \fB_\|_v850*_\|_\fR preprocessor constant will be defined.
14403 .Sp
14404 The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
14405 defined, regardless of which processor variant is the target.
14406 .IP "\fB\-mdisable\-callt\fR" 4
14407 .IX Item "-mdisable-callt"
14408 This option will suppress generation of the \s-1CALLT\s0 instruction for the
14409 v850e and v850e1 flavors of the v850 architecture.  The default is
14410 \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
14411 .PP
14412 \fI\s-1VAX\s0 Options\fR
14413 .IX Subsection "VAX Options"
14414 .PP
14415 These \fB\-m\fR options are defined for the \s-1VAX:\s0
14416 .IP "\fB\-munix\fR" 4
14417 .IX Item "-munix"
14418 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
14419 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
14420 ranges.
14421 .IP "\fB\-mgnu\fR" 4
14422 .IX Item "-mgnu"
14423 Do output those jump instructions, on the assumption that you
14424 will assemble with the \s-1GNU\s0 assembler.
14425 .IP "\fB\-mg\fR" 4
14426 .IX Item "-mg"
14427 Output code for g\-format floating point numbers instead of d\-format.
14428 .PP
14429 \fIVxWorks Options\fR
14430 .IX Subsection "VxWorks Options"
14431 .PP
14432 The options in this section are defined for all VxWorks targets.
14433 Options specific to the target hardware are listed with the other
14434 options for that target.
14435 .IP "\fB\-mrtp\fR" 4
14436 .IX Item "-mrtp"
14437 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
14438 (RTPs).  This option switches from the former to the latter.  It also
14439 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
14440 .IP "\fB\-non\-static\fR" 4
14441 .IX Item "-non-static"
14442 Link an \s-1RTP\s0 executable against shared libraries rather than static
14443 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
14444 also be used for RTPs; \fB\-static\fR
14445 is the default.
14446 .IP "\fB\-Bstatic\fR" 4
14447 .IX Item "-Bstatic"
14448 .PD 0
14449 .IP "\fB\-Bdynamic\fR" 4
14450 .IX Item "-Bdynamic"
14451 .PD
14452 These options are passed down to the linker.  They are defined for
14453 compatibility with Diab.
14454 .IP "\fB\-Xbind\-lazy\fR" 4
14455 .IX Item "-Xbind-lazy"
14456 Enable lazy binding of function calls.  This option is equivalent to
14457 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
14458 .IP "\fB\-Xbind\-now\fR" 4
14459 .IX Item "-Xbind-now"
14460 Disable lazy binding of function calls.  This option is the default and
14461 is defined for compatibility with Diab.
14462 .PP
14463 \fIx86\-64 Options\fR
14464 .IX Subsection "x86-64 Options"
14465 .PP
14466 These are listed under
14467 .PP
14468 \fIi386 and x86\-64 Windows Options\fR
14469 .IX Subsection "i386 and x86-64 Windows Options"
14470 .PP
14471 These additional options are available for Windows targets:
14472 .IP "\fB\-mconsole\fR" 4
14473 .IX Item "-mconsole"
14474 This option is available for Cygwin and MinGW targets.  It
14475 specifies that a console application is to be generated, by
14476 instructing the linker to set the \s-1PE\s0 header subsystem type
14477 required for console applications.
14478 This is the default behaviour for Cygwin and MinGW targets.
14479 .IP "\fB\-mcygwin\fR" 4
14480 .IX Item "-mcygwin"
14481 This option is available for Cygwin targets.  It specifies that
14482 the Cygwin internal interface is to be used for predefined
14483 preprocessor macros, C runtime libraries and related linker
14484 paths and options.  For Cygwin targets this is the default behaviour.
14485 This option is deprecated and will be removed in a future release.
14486 .IP "\fB\-mno\-cygwin\fR" 4
14487 .IX Item "-mno-cygwin"
14488 This option is available for Cygwin targets.  It specifies that
14489 the MinGW internal interface is to be used instead of Cygwin's, by
14490 setting MinGW-related predefined macros and linker paths and default
14491 library options.
14492 This option is deprecated and will be removed in a future release.
14493 .IP "\fB\-mdll\fR" 4
14494 .IX Item "-mdll"
14495 This option is available for Cygwin and MinGW targets.  It
14496 specifies that a \s-1DLL\s0 \- a dynamic link library \- is to be
14497 generated, enabling the selection of the required runtime
14498 startup object and entry point.
14499 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
14500 .IX Item "-mnop-fun-dllimport"
14501 This option is available for Cygwin and MinGW targets.  It
14502 specifies that the dllimport attribute should be ignored.
14503 .IP "\fB\-mthread\fR" 4
14504 .IX Item "-mthread"
14505 This option is available for MinGW targets. It specifies
14506 that MinGW-specific thread support is to be used.
14507 .IP "\fB\-mwin32\fR" 4
14508 .IX Item "-mwin32"
14509 This option is available for Cygwin and MinGW targets.  It
14510 specifies that the typical Windows pre-defined macros are to
14511 be set in the pre-processor, but does not influence the choice
14512 of runtime library/startup code.
14513 .IP "\fB\-mwindows\fR" 4
14514 .IX Item "-mwindows"
14515 This option is available for Cygwin and MinGW targets.  It
14516 specifies that a \s-1GUI\s0 application is to be generated by
14517 instructing the linker to set the \s-1PE\s0 header subsystem type
14518 appropriately.
14519 .PP
14520 See also under \fBi386 and x86\-64 Options\fR for standard options.
14521 .PP
14522 \fIXstormy16 Options\fR
14523 .IX Subsection "Xstormy16 Options"
14524 .PP
14525 These options are defined for Xstormy16:
14526 .IP "\fB\-msim\fR" 4
14527 .IX Item "-msim"
14528 Choose startup files and linker script suitable for the simulator.
14529 .PP
14530 \fIXtensa Options\fR
14531 .IX Subsection "Xtensa Options"
14532 .PP
14533 These options are supported for Xtensa targets:
14534 .IP "\fB\-mconst16\fR" 4
14535 .IX Item "-mconst16"
14536 .PD 0
14537 .IP "\fB\-mno\-const16\fR" 4
14538 .IX Item "-mno-const16"
14539 .PD
14540 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
14541 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
14542 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
14543 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
14544 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
14545 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
14546 .IP "\fB\-mfused\-madd\fR" 4
14547 .IX Item "-mfused-madd"
14548 .PD 0
14549 .IP "\fB\-mno\-fused\-madd\fR" 4
14550 .IX Item "-mno-fused-madd"
14551 .PD
14552 Enable or disable use of fused multiply/add and multiply/subtract
14553 instructions in the floating-point option.  This has no effect if the
14554 floating-point option is not also enabled.  Disabling fused multiply/add
14555 and multiply/subtract instructions forces the compiler to use separate
14556 instructions for the multiply and add/subtract operations.  This may be
14557 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
14558 required: the fused multiply add/subtract instructions do not round the
14559 intermediate result, thereby producing results with \fImore\fR bits of
14560 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
14561 add/subtract instructions also ensures that the program output is not
14562 sensitive to the compiler's ability to combine multiply and add/subtract
14563 operations.
14564 .IP "\fB\-mserialize\-volatile\fR" 4
14565 .IX Item "-mserialize-volatile"
14566 .PD 0
14567 .IP "\fB\-mno\-serialize\-volatile\fR" 4
14568 .IX Item "-mno-serialize-volatile"
14569 .PD
14570 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
14571 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
14572 The default is \fB\-mserialize\-volatile\fR.  Use
14573 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
14574 .IP "\fB\-mtext\-section\-literals\fR" 4
14575 .IX Item "-mtext-section-literals"
14576 .PD 0
14577 .IP "\fB\-mno\-text\-section\-literals\fR" 4
14578 .IX Item "-mno-text-section-literals"
14579 .PD
14580 Control the treatment of literal pools.  The default is
14581 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
14582 section in the output file.  This allows the literal pool to be placed
14583 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
14584 pools from separate object files to remove redundant literals and
14585 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
14586 are interspersed in the text section in order to keep them as close as
14587 possible to their references.  This may be necessary for large assembly
14588 files.
14589 .IP "\fB\-mtarget\-align\fR" 4
14590 .IX Item "-mtarget-align"
14591 .PD 0
14592 .IP "\fB\-mno\-target\-align\fR" 4
14593 .IX Item "-mno-target-align"
14594 .PD
14595 When this option is enabled, \s-1GCC\s0 instructs the assembler to
14596 automatically align instructions to reduce branch penalties at the
14597 expense of some code density.  The assembler attempts to widen density
14598 instructions to align branch targets and the instructions following call
14599 instructions.  If there are not enough preceding safe density
14600 instructions to align a target, no widening will be performed.  The
14601 default is \fB\-mtarget\-align\fR.  These options do not affect the
14602 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
14603 assembler will always align, either by widening density instructions or
14604 by inserting no-op instructions.
14605 .IP "\fB\-mlongcalls\fR" 4
14606 .IX Item "-mlongcalls"
14607 .PD 0
14608 .IP "\fB\-mno\-longcalls\fR" 4
14609 .IX Item "-mno-longcalls"
14610 .PD
14611 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
14612 direct calls to indirect calls unless it can determine that the target
14613 of a direct call is in the range allowed by the call instruction.  This
14614 translation typically occurs for calls to functions in other source
14615 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
14616 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
14617 The default is \fB\-mno\-longcalls\fR.  This option should be used in
14618 programs where the call target can potentially be out of range.  This
14619 option is implemented in the assembler, not the compiler, so the
14620 assembly code generated by \s-1GCC\s0 will still show direct call
14621 instructions\-\-\-look at the disassembled object code to see the actual
14622 instructions.  Note that the assembler will use an indirect call for
14623 every cross-file call, not just those that really will be out of range.
14624 .PP
14625 \fIzSeries Options\fR
14626 .IX Subsection "zSeries Options"
14627 .PP
14628 These are listed under
14629 .Sh "Options for Code Generation Conventions"
14630 .IX Subsection "Options for Code Generation Conventions"
14631 These machine-independent options control the interface conventions
14632 used in code generation.
14633 .PP
14634 Most of them have both positive and negative forms; the negative form
14635 of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table below, only
14636 one of the forms is listed\-\-\-the one which is not the default.  You
14637 can figure out the other form by either removing \fBno\-\fR or adding
14638 it.
14639 .IP "\fB\-fbounds\-check\fR" 4
14640 .IX Item "-fbounds-check"
14641 For front-ends that support it, generate additional code to check that
14642 indices used to access arrays are within the declared range.  This is
14643 currently only supported by the Java and Fortran front-ends, where
14644 this option defaults to true and false respectively.
14645 .IP "\fB\-ftrapv\fR" 4
14646 .IX Item "-ftrapv"
14647 This option generates traps for signed overflow on addition, subtraction,
14648 multiplication operations.
14649 .IP "\fB\-fwrapv\fR" 4
14650 .IX Item "-fwrapv"
14651 This option instructs the compiler to assume that signed arithmetic
14652 overflow of addition, subtraction and multiplication wraps around
14653 using twos-complement representation.  This flag enables some optimizations
14654 and disables others.  This option is enabled by default for the Java
14655 front-end, as required by the Java language specification.
14656 .IP "\fB\-fexceptions\fR" 4
14657 .IX Item "-fexceptions"
14658 Enable exception handling.  Generates extra code needed to propagate
14659 exceptions.  For some targets, this implies \s-1GCC\s0 will generate frame
14660 unwind information for all functions, which can produce significant data
14661 size overhead, although it does not affect execution.  If you do not
14662 specify this option, \s-1GCC\s0 will enable it by default for languages like
14663 \&\*(C+ which normally require exception handling, and disable it for
14664 languages like C that do not normally require it.  However, you may need
14665 to enable this option when compiling C code that needs to interoperate
14666 properly with exception handlers written in \*(C+.  You may also wish to
14667 disable this option if you are compiling older \*(C+ programs that don't
14668 use exception handling.
14669 .IP "\fB\-fnon\-call\-exceptions\fR" 4
14670 .IX Item "-fnon-call-exceptions"
14671 Generate code that allows trapping instructions to throw exceptions.
14672 Note that this requires platform-specific runtime support that does
14673 not exist everywhere.  Moreover, it only allows \fItrapping\fR
14674 instructions to throw exceptions, i.e. memory references or floating
14675 point instructions.  It does not allow exceptions to be thrown from
14676 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
14677 .IP "\fB\-funwind\-tables\fR" 4
14678 .IX Item "-funwind-tables"
14679 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
14680 static data, but will not affect the generated code in any other way.
14681 You will normally not enable this option; instead, a language processor
14682 that needs this handling would enable it on your behalf.
14683 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
14684 .IX Item "-fasynchronous-unwind-tables"
14685 Generate unwind table in dwarf2 format, if supported by target machine.  The
14686 table is exact at each instruction boundary, so it can be used for stack
14687 unwinding from asynchronous events (such as debugger or garbage collector).
14688 .IP "\fB\-fpcc\-struct\-return\fR" 4
14689 .IX Item "-fpcc-struct-return"
14690 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
14691 longer ones, rather than in registers.  This convention is less
14692 efficient, but it has the advantage of allowing intercallability between
14693 GCC-compiled files and files compiled with other compilers, particularly
14694 the Portable C Compiler (pcc).
14695 .Sp
14696 The precise convention for returning structures in memory depends
14697 on the target configuration macros.
14698 .Sp
14699 Short structures and unions are those whose size and alignment match
14700 that of some integer type.
14701 .Sp
14702 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
14703 switch is not binary compatible with code compiled with the
14704 \&\fB\-freg\-struct\-return\fR switch.
14705 Use it to conform to a non-default application binary interface.
14706 .IP "\fB\-freg\-struct\-return\fR" 4
14707 .IX Item "-freg-struct-return"
14708 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
14709 This is more efficient for small structures than
14710 \&\fB\-fpcc\-struct\-return\fR.
14711 .Sp
14712 If you specify neither \fB\-fpcc\-struct\-return\fR nor
14713 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
14714 standard for the target.  If there is no standard convention, \s-1GCC\s0
14715 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
14716 the principal compiler.  In those cases, we can choose the standard, and
14717 we chose the more efficient register return alternative.
14718 .Sp
14719 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
14720 switch is not binary compatible with code compiled with the
14721 \&\fB\-fpcc\-struct\-return\fR switch.
14722 Use it to conform to a non-default application binary interface.
14723 .IP "\fB\-fshort\-enums\fR" 4
14724 .IX Item "-fshort-enums"
14725 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
14726 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
14727 will be equivalent to the smallest integer type which has enough room.
14728 .Sp
14729 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
14730 code that is not binary compatible with code generated without that switch.
14731 Use it to conform to a non-default application binary interface.
14732 .IP "\fB\-fshort\-double\fR" 4
14733 .IX Item "-fshort-double"
14734 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
14735 .Sp
14736 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
14737 code that is not binary compatible with code generated without that switch.
14738 Use it to conform to a non-default application binary interface.
14739 .IP "\fB\-fshort\-wchar\fR" 4
14740 .IX Item "-fshort-wchar"
14741 Override the underlying type for \fBwchar_t\fR to be \fBshort
14742 unsigned int\fR instead of the default for the target.  This option is
14743 useful for building programs to run under \s-1WINE\s0.
14744 .Sp
14745 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
14746 code that is not binary compatible with code generated without that switch.
14747 Use it to conform to a non-default application binary interface.
14748 .IP "\fB\-fno\-common\fR" 4
14749 .IX Item "-fno-common"
14750 In C code, controls the placement of uninitialized global variables.
14751 Unix C compilers have traditionally permitted multiple definitions of
14752 such variables in different compilation units by placing the variables
14753 in a common block.  
14754 This is the behavior specified by \fB\-fcommon\fR, and is the default 
14755 for \s-1GCC\s0 on most targets.  
14756 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
14757 targets may carry a speed or code size penalty on variable references.
14758 The \fB\-fno\-common\fR option specifies that the compiler should place 
14759 uninitialized global variables in the data section of the object file,
14760 rather than generating them as common blocks.
14761 This has the effect that if the same variable is declared 
14762 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
14763 you will get a multiple-definition error when you link them.
14764 In this case, you must compile with \fB\-fcommon\fR instead.  
14765 Compiling with \fB\-fno\-common\fR is useful on targets for which 
14766 it provides better performance, or if you wish to verify that the
14767 program will work on other systems which always treat uninitialized
14768 variable declarations this way.
14769 .IP "\fB\-fno\-ident\fR" 4
14770 .IX Item "-fno-ident"
14771 Ignore the \fB#ident\fR directive.
14772 .IP "\fB\-finhibit\-size\-directive\fR" 4
14773 .IX Item "-finhibit-size-directive"
14774 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
14775 would cause trouble if the function is split in the middle, and the
14776 two halves are placed at locations far apart in memory.  This option is
14777 used when compiling \fIcrtstuff.c\fR; you should not need to use it
14778 for anything else.
14779 .IP "\fB\-fverbose\-asm\fR" 4
14780 .IX Item "-fverbose-asm"
14781 Put extra commentary information in the generated assembly code to
14782 make it more readable.  This option is generally only of use to those
14783 who actually need to read the generated assembly code (perhaps while
14784 debugging the compiler itself).
14785 .Sp
14786 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
14787 extra information to be omitted and is useful when comparing two assembler
14788 files.
14789 .IP "\fB\-frecord\-gcc\-switches\fR" 4
14790 .IX Item "-frecord-gcc-switches"
14791 This switch causes the command line that was used to invoke the
14792 compiler to be recorded into the object file that is being created.
14793 This switch is only implemented on some targets and the exact format
14794 of the recording is target and binary file format dependent, but it
14795 usually takes the form of a section containing \s-1ASCII\s0 text.  This
14796 switch is related to the \fB\-fverbose\-asm\fR switch, but that
14797 switch only records information in the assembler output file as
14798 comments, so it never reaches the object file.
14799 .IP "\fB\-fpic\fR" 4
14800 .IX Item "-fpic"
14801 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
14802 library, if supported for the target machine.  Such code accesses all
14803 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
14804 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
14805 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
14806 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
14807 maximum size, you get an error message from the linker indicating that
14808 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
14809 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
14810 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
14811 .Sp
14812 Position-independent code requires special support, and therefore works
14813 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
14814 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
14815 position-independent.
14816 .Sp
14817 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
14818 are defined to 1.
14819 .IP "\fB\-fPIC\fR" 4
14820 .IX Item "-fPIC"
14821 If supported for the target machine, emit position-independent code,
14822 suitable for dynamic linking and avoiding any limit on the size of the
14823 global offset table.  This option makes a difference on the m68k,
14824 PowerPC and \s-1SPARC\s0.
14825 .Sp
14826 Position-independent code requires special support, and therefore works
14827 only on certain machines.
14828 .Sp
14829 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
14830 are defined to 2.
14831 .IP "\fB\-fpie\fR" 4
14832 .IX Item "-fpie"
14833 .PD 0
14834 .IP "\fB\-fPIE\fR" 4
14835 .IX Item "-fPIE"
14836 .PD
14837 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
14838 generated position independent code can be only linked into executables.
14839 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option will be
14840 used during linking.
14841 .Sp
14842 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
14843 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
14844 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
14845 .IP "\fB\-fno\-jump\-tables\fR" 4
14846 .IX Item "-fno-jump-tables"
14847 Do not use jump tables for switch statements even where it would be
14848 more efficient than other code generation strategies.  This option is
14849 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
14850 building code which forms part of a dynamic linker and cannot
14851 reference the address of a jump table.  On some targets, jump tables
14852 do not require a \s-1GOT\s0 and this option is not needed.
14853 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
14854 .IX Item "-ffixed-reg"
14855 Treat the register named \fIreg\fR as a fixed register; generated code
14856 should never refer to it (except perhaps as a stack pointer, frame
14857 pointer or in some other fixed role).
14858 .Sp
14859 \&\fIreg\fR must be the name of a register.  The register names accepted
14860 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
14861 macro in the machine description macro file.
14862 .Sp
14863 This flag does not have a negative form, because it specifies a
14864 three-way choice.
14865 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
14866 .IX Item "-fcall-used-reg"
14867 Treat the register named \fIreg\fR as an allocable register that is
14868 clobbered by function calls.  It may be allocated for temporaries or
14869 variables that do not live across a call.  Functions compiled this way
14870 will not save and restore the register \fIreg\fR.
14871 .Sp
14872 It is an error to used this flag with the frame pointer or stack pointer.
14873 Use of this flag for other registers that have fixed pervasive roles in
14874 the machine's execution model will produce disastrous results.
14875 .Sp
14876 This flag does not have a negative form, because it specifies a
14877 three-way choice.
14878 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
14879 .IX Item "-fcall-saved-reg"
14880 Treat the register named \fIreg\fR as an allocable register saved by
14881 functions.  It may be allocated even for temporaries or variables that
14882 live across a call.  Functions compiled this way will save and restore
14883 the register \fIreg\fR if they use it.
14884 .Sp
14885 It is an error to used this flag with the frame pointer or stack pointer.
14886 Use of this flag for other registers that have fixed pervasive roles in
14887 the machine's execution model will produce disastrous results.
14888 .Sp
14889 A different sort of disaster will result from the use of this flag for
14890 a register in which function values may be returned.
14891 .Sp
14892 This flag does not have a negative form, because it specifies a
14893 three-way choice.
14894 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
14895 .IX Item "-fpack-struct[=n]"
14896 Without a value specified, pack all structure members together without
14897 holes.  When a value is specified (which must be a small power of two), pack
14898 structure members according to this value, representing the maximum
14899 alignment (that is, objects with default alignment requirements larger than
14900 this will be output potentially unaligned at the next fitting location.
14901 .Sp
14902 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
14903 code that is not binary compatible with code generated without that switch.
14904 Additionally, it makes the code suboptimal.
14905 Use it to conform to a non-default application binary interface.
14906 .IP "\fB\-finstrument\-functions\fR" 4
14907 .IX Item "-finstrument-functions"
14908 Generate instrumentation calls for entry and exit to functions.  Just
14909 after function entry and just before function exit, the following
14910 profiling functions will be called with the address of the current
14911 function and its call site.  (On some platforms,
14912 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
14913 function, so the call site information may not be available to the
14914 profiling functions otherwise.)
14915 .Sp
14916 .Vb 4
14917 \&        void _\|_cyg_profile_func_enter (void *this_fn,
14918 \&                                       void *call_site);
14919 \&        void _\|_cyg_profile_func_exit  (void *this_fn,
14920 \&                                       void *call_site);
14921 .Ve
14922 .Sp
14923 The first argument is the address of the start of the current function,
14924 which may be looked up exactly in the symbol table.
14925 .Sp
14926 This instrumentation is also done for functions expanded inline in other
14927 functions.  The profiling calls will indicate where, conceptually, the
14928 inline function is entered and exited.  This means that addressable
14929 versions of such functions must be available.  If all your uses of a
14930 function are expanded inline, this may mean an additional expansion of
14931 code size.  If you use \fBextern inline\fR in your C code, an
14932 addressable version of such functions must be provided.  (This is
14933 normally the case anyways, but if you get lucky and the optimizer always
14934 expands the functions inline, you might have gotten away without
14935 providing static copies.)
14936 .Sp
14937 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
14938 which case this instrumentation will not be done.  This can be used, for
14939 example, for the profiling functions listed above, high-priority
14940 interrupt routines, and any functions from which the profiling functions
14941 cannot safely be called (perhaps signal handlers, if the profiling
14942 routines generate output or allocate memory).
14943 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
14944 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
14945 Set the list of functions that are excluded from instrumentation (see
14946 the description of \f(CW\*(C`\-finstrument\-functions\*(C'\fR).  If the file that
14947 contains a function definition matches with one of \fIfile\fR, then
14948 that function is not instrumented.  The match is done on substrings:
14949 if the \fIfile\fR parameter is a substring of the file name, it is
14950 considered to be a match.
14951 .Sp
14952 For example,
14953 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys\*(C'\fR
14954 will exclude any inline function defined in files whose pathnames
14955 contain \f(CW\*(C`/bits/stl\*(C'\fR or \f(CW\*(C`include/sys\*(C'\fR.
14956 .Sp
14957 If, for some reason, you want to include letter \f(CW\*(Aq,\*(Aq\fR in one of
14958 \&\fIsym\fR, write \f(CW\*(Aq,\*(Aq\fR. For example,
14959 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\*(C'\fR
14960 (note the single quote surrounding the option).
14961 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
14962 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
14963 This is similar to \f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list\*(C'\fR,
14964 but this option sets the list of function names to be excluded from
14965 instrumentation.  The function name to be matched is its user-visible
14966 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
14967 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
14968 match is done on substrings: if the \fIsym\fR parameter is a substring
14969 of the function name, it is considered to be a match.
14970 .IP "\fB\-fstack\-check\fR" 4
14971 .IX Item "-fstack-check"
14972 Generate code to verify that you do not go beyond the boundary of the
14973 stack.  You should specify this flag if you are running in an
14974 environment with multiple threads, but only rarely need to specify it in
14975 a single-threaded environment since stack overflow is automatically
14976 detected on nearly all systems if there is only one stack.
14977 .Sp
14978 Note that this switch does not actually cause checking to be done; the
14979 operating system or the language runtime must do that.  The switch causes
14980 generation of code to ensure that they see the stack being extended.
14981 .Sp
14982 You can additionally specify a string parameter: \f(CW\*(C`no\*(C'\fR means no
14983 checking, \f(CW\*(C`generic\*(C'\fR means force the use of old-style checking,
14984 \&\f(CW\*(C`specific\*(C'\fR means use the best checking method and is equivalent
14985 to bare \fB\-fstack\-check\fR.
14986 .Sp
14987 Old-style checking is a generic mechanism that requires no specific
14988 target support in the compiler but comes with the following drawbacks:
14989 .RS 4
14990 .IP "1." 4
14991 Modified allocation strategy for large objects: they will always be
14992 allocated dynamically if their size exceeds a fixed threshold.
14993 .IP "2." 4
14994 Fixed limit on the size of the static frame of functions: when it is
14995 topped by a particular function, stack checking is not reliable and
14996 a warning is issued by the compiler.
14997 .IP "3." 4
14998 Inefficiency: because of both the modified allocation strategy and the
14999 generic implementation, the performances of the code are hampered.
15000 .RE
15001 .RS 4
15002 .Sp
15003 Note that old-style stack checking is also the fallback method for
15004 \&\f(CW\*(C`specific\*(C'\fR if no target support has been added in the compiler.
15005 .RE
15006 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
15007 .IX Item "-fstack-limit-register=reg"
15008 .PD 0
15009 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
15010 .IX Item "-fstack-limit-symbol=sym"
15011 .IP "\fB\-fno\-stack\-limit\fR" 4
15012 .IX Item "-fno-stack-limit"
15013 .PD
15014 Generate code to ensure that the stack does not grow beyond a certain value,
15015 either the value of a register or the address of a symbol.  If the stack
15016 would grow beyond the value, a signal is raised.  For most targets,
15017 the signal is raised before the stack overruns the boundary, so
15018 it is possible to catch the signal without taking special precautions.
15019 .Sp
15020 For instance, if the stack starts at absolute address \fB0x80000000\fR
15021 and grows downwards, you can use the flags
15022 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
15023 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
15024 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
15025 .IP "\fB\-fargument\-alias\fR" 4
15026 .IX Item "-fargument-alias"
15027 .PD 0
15028 .IP "\fB\-fargument\-noalias\fR" 4
15029 .IX Item "-fargument-noalias"
15030 .IP "\fB\-fargument\-noalias\-global\fR" 4
15031 .IX Item "-fargument-noalias-global"
15032 .IP "\fB\-fargument\-noalias\-anything\fR" 4
15033 .IX Item "-fargument-noalias-anything"
15034 .PD
15035 Specify the possible relationships among parameters and between
15036 parameters and global data.
15037 .Sp
15038 \&\fB\-fargument\-alias\fR specifies that arguments (parameters) may
15039 alias each other and may alias global storage.\fB\-fargument\-noalias\fR specifies that arguments do not alias
15040 each other, but may alias global storage.\fB\-fargument\-noalias\-global\fR specifies that arguments do not
15041 alias each other and do not alias global storage.
15042 \&\fB\-fargument\-noalias\-anything\fR specifies that arguments do not
15043 alias any other storage.
15044 .Sp
15045 Each language will automatically use whatever option is required by
15046 the language standard.  You should not need to use these options yourself.
15047 .IP "\fB\-fleading\-underscore\fR" 4
15048 .IX Item "-fleading-underscore"
15049 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
15050 change the way C symbols are represented in the object file.  One use
15051 is to help link with legacy assembly code.
15052 .Sp
15053 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
15054 generate code that is not binary compatible with code generated without that
15055 switch.  Use it to conform to a non-default application binary interface.
15056 Not all targets provide complete support for this switch.
15057 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
15058 .IX Item "-ftls-model=model"
15059 Alter the thread-local storage model to be used.
15060 The \fImodel\fR argument should be one of \f(CW\*(C`global\-dynamic\*(C'\fR,
15061 \&\f(CW\*(C`local\-dynamic\*(C'\fR, \f(CW\*(C`initial\-exec\*(C'\fR or \f(CW\*(C`local\-exec\*(C'\fR.
15062 .Sp
15063 The default without \fB\-fpic\fR is \f(CW\*(C`initial\-exec\*(C'\fR; with
15064 \&\fB\-fpic\fR the default is \f(CW\*(C`global\-dynamic\*(C'\fR.
15065 .IP "\fB\-fvisibility=\fR\fIdefault|internal|hidden|protected\fR" 4
15066 .IX Item "-fvisibility=default|internal|hidden|protected"
15067 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
15068 symbols will be marked with this unless overridden within the code.
15069 Using this feature can very substantially improve linking and
15070 load times of shared object libraries, produce more optimized
15071 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
15072 It is \fBstrongly\fR recommended that you use this in any shared objects
15073 you distribute.
15074 .Sp
15075 Despite the nomenclature, \f(CW\*(C`default\*(C'\fR always means public ie;
15076 available to be linked against from outside the shared object.
15077 \&\f(CW\*(C`protected\*(C'\fR and \f(CW\*(C`internal\*(C'\fR are pretty useless in real-world
15078 usage so the only other commonly used option will be \f(CW\*(C`hidden\*(C'\fR.
15079 The default if \fB\-fvisibility\fR isn't specified is
15080 \&\f(CW\*(C`default\*(C'\fR, i.e., make every
15081 symbol public\-\-\-this causes the same behavior as previous versions of
15082 \&\s-1GCC\s0.
15083 .Sp
15084 A good explanation of the benefits offered by ensuring \s-1ELF\s0
15085 symbols have the correct visibility is given by \*(L"How To Write
15086 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
15087 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
15088 solution made possible by this option to marking things hidden when
15089 the default is public is to make the default hidden and mark things
15090 public.  This is the norm with \s-1DLL\s0's on Windows and with \fB\-fvisibility=hidden\fR
15091 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
15092 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
15093 identical syntax.  This is a great boon to those working with
15094 cross-platform projects.
15095 .Sp
15096 For those adding visibility support to existing code, you may find
15097 \&\fB#pragma \s-1GCC\s0 visibility\fR of use.  This works by you enclosing
15098 the declarations you wish to set visibility for with (for example)
15099 \&\fB#pragma \s-1GCC\s0 visibility push(hidden)\fR and
15100 \&\fB#pragma \s-1GCC\s0 visibility pop\fR.
15101 Bear in mind that symbol visibility should be viewed \fBas
15102 part of the \s-1API\s0 interface contract\fR and thus all new code should
15103 always specify visibility when it is not the default ie; declarations
15104 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
15105 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
15106 abundantly clear also aids readability and self-documentation of the code.
15107 Note that due to \s-1ISO\s0 \*(C+ specification requirements, operator new and
15108 operator delete must always be of default visibility.
15109 .Sp
15110 Be aware that headers from outside your project, in particular system
15111 headers and headers from any other library you use, may not be
15112 expecting to be compiled with visibility other than the default.  You
15113 may need to explicitly say \fB#pragma \s-1GCC\s0 visibility push(default)\fR
15114 before including any such headers.
15115 .Sp
15116 \&\fBextern\fR declarations are not affected by \fB\-fvisibility\fR, so
15117 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
15118 no modifications.  However, this means that calls to \fBextern\fR
15119 functions with no explicit visibility will use the \s-1PLT\s0, so it is more
15120 effective to use \fB_\|_attribute ((visibility))\fR and/or
15121 \&\fB#pragma \s-1GCC\s0 visibility\fR to tell the compiler which \fBextern\fR
15122 declarations should be treated as hidden.
15123 .Sp
15124 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
15125 entities. This means that, for instance, an exception class that will
15126 be thrown between DSOs must be explicitly marked with default
15127 visibility so that the \fBtype_info\fR nodes will be unified between
15128 the DSOs.
15129 .Sp
15130 An overview of these techniques, their benefits and how to use them
15131 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
15132 .SH "ENVIRONMENT"
15133 .IX Header "ENVIRONMENT"
15134 This section describes several environment variables that affect how \s-1GCC\s0
15135 operates.  Some of them work by specifying directories or prefixes to use
15136 when searching for various kinds of files.  Some are used to specify other
15137 aspects of the compilation environment.
15138 .PP
15139 Note that you can also specify places to search using options such as
15140 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
15141 take precedence over places specified using environment variables, which
15142 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
15143 .IP "\fB\s-1LANG\s0\fR" 4
15144 .IX Item "LANG"
15145 .PD 0
15146 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
15147 .IX Item "LC_CTYPE"
15148 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
15149 .IX Item "LC_MESSAGES"
15150 .IP "\fB\s-1LC_ALL\s0\fR" 4
15151 .IX Item "LC_ALL"
15152 .PD
15153 These environment variables control the way that \s-1GCC\s0 uses
15154 localization information that allow \s-1GCC\s0 to work with different
15155 national conventions.  \s-1GCC\s0 inspects the locale categories
15156 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
15157 so.  These locale categories can be set to any value supported by your
15158 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
15159 Kingdom encoded in \s-1UTF\-8\s0.
15160 .Sp
15161 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
15162 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
15163 a string; this is needed for some multibyte encodings that contain quote
15164 and escape characters that would otherwise be interpreted as a string
15165 end or escape.
15166 .Sp
15167 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
15168 use in diagnostic messages.
15169 .Sp
15170 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
15171 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
15172 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
15173 environment variable.  If none of these variables are set, \s-1GCC\s0
15174 defaults to traditional C English behavior.
15175 .IP "\fB\s-1TMPDIR\s0\fR" 4
15176 .IX Item "TMPDIR"
15177 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
15178 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
15179 compilation which is to be used as input to the next stage: for example,
15180 the output of the preprocessor, which is the input to the compiler
15181 proper.
15182 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
15183 .IX Item "GCC_EXEC_PREFIX"
15184 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
15185 names of the subprograms executed by the compiler.  No slash is added
15186 when this prefix is combined with the name of a subprogram, but you can
15187 specify a prefix that ends with a slash if you wish.
15188 .Sp
15189 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 will attempt to figure out
15190 an appropriate prefix to use based on the pathname it was invoked with.
15191 .Sp
15192 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
15193 tries looking in the usual places for the subprogram.
15194 .Sp
15195 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
15196 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
15197 the installed compiler. In many cases \fIprefix\fR is the value
15198 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
15199 .Sp
15200 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
15201 .Sp
15202 This prefix is also used for finding files such as \fIcrt0.o\fR that are
15203 used for linking.
15204 .Sp
15205 In addition, the prefix is used in an unusual way in finding the
15206 directories to search for header files.  For each of the standard
15207 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
15208 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
15209 replacing that beginning with the specified prefix to produce an
15210 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
15211 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
15212 These alternate directories are searched first; the standard directories
15213 come next. If a standard directory begins with the configured
15214 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
15215 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
15216 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
15217 .IX Item "COMPILER_PATH"
15218 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
15219 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
15220 specified when searching for subprograms, if it can't find the
15221 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
15222 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
15223 .IX Item "LIBRARY_PATH"
15224 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
15225 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
15226 \&\s-1GCC\s0 tries the directories thus specified when searching for special
15227 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
15228 using \s-1GCC\s0 also uses these directories when searching for ordinary
15229 libraries for the \fB\-l\fR option (but directories specified with
15230 \&\fB\-L\fR come first).
15231 .IP "\fB\s-1LANG\s0\fR" 4
15232 .IX Item "LANG"
15233 This variable is used to pass locale information to the compiler.  One way in
15234 which this information is used is to determine the character set to be used
15235 when character literals, string literals and comments are parsed in C and \*(C+.
15236 When the compiler is configured to allow multibyte characters,
15237 the following values for \fB\s-1LANG\s0\fR are recognized:
15238 .RS 4
15239 .IP "\fBC\-JIS\fR" 4
15240 .IX Item "C-JIS"
15241 Recognize \s-1JIS\s0 characters.
15242 .IP "\fBC\-SJIS\fR" 4
15243 .IX Item "C-SJIS"
15244 Recognize \s-1SJIS\s0 characters.
15245 .IP "\fBC\-EUCJP\fR" 4
15246 .IX Item "C-EUCJP"
15247 Recognize \s-1EUCJP\s0 characters.
15248 .RE
15249 .RS 4
15250 .Sp
15251 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
15252 compiler will use mblen and mbtowc as defined by the default locale to
15253 recognize and translate multibyte characters.
15254 .RE
15255 .PP
15256 Some additional environments variables affect the behavior of the
15257 preprocessor.
15258 .IP "\fB\s-1CPATH\s0\fR" 4
15259 .IX Item "CPATH"
15260 .PD 0
15261 .IP "\fBC_INCLUDE_PATH\fR" 4
15262 .IX Item "C_INCLUDE_PATH"
15263 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
15264 .IX Item "CPLUS_INCLUDE_PATH"
15265 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
15266 .IX Item "OBJC_INCLUDE_PATH"
15267 .PD
15268 Each variable's value is a list of directories separated by a special
15269 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
15270 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
15271 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
15272 semicolon, and for almost all other targets it is a colon.
15273 .Sp
15274 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
15275 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
15276 options on the command line.  This environment variable is used
15277 regardless of which language is being preprocessed.
15278 .Sp
15279 The remaining environment variables apply only when preprocessing the
15280 particular language indicated.  Each specifies a list of directories
15281 to be searched as if specified with \fB\-isystem\fR, but after any
15282 paths given with \fB\-isystem\fR options on the command line.
15283 .Sp
15284 In all these variables, an empty element instructs the compiler to
15285 search its current working directory.  Empty elements can appear at the
15286 beginning or end of a path.  For instance, if the value of
15287 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
15288 effect as \fB\-I.\ \-I/special/include\fR.
15289 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
15290 .IX Item "DEPENDENCIES_OUTPUT"
15291 If this variable is set, its value specifies how to output
15292 dependencies for Make based on the non-system header files processed
15293 by the compiler.  System header files are ignored in the dependency
15294 output.
15295 .Sp
15296 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
15297 which case the Make rules are written to that file, guessing the target
15298 name from the source file name.  Or the value can have the form
15299 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
15300 file \fIfile\fR using \fItarget\fR as the target name.
15301 .Sp
15302 In other words, this environment variable is equivalent to combining
15303 the options \fB\-MM\fR and \fB\-MF\fR,
15304 with an optional \fB\-MT\fR switch too.
15305 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
15306 .IX Item "SUNPRO_DEPENDENCIES"
15307 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
15308 except that system header files are not ignored, so it implies
15309 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
15310 main input file is omitted.
15311 .SH "BUGS"
15312 .IX Header "BUGS"
15313 For instructions on reporting bugs, see
15314 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
15315 .SH "FOOTNOTES"
15316 .IX Header "FOOTNOTES"
15317 .IP "1." 4
15318 On some systems, \fBgcc \-shared\fR
15319 needs to build supplementary stub code for constructors to work.  On
15320 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
15321 libraries to link against.  Failing to supply the correct flags may lead
15322 to subtle defects.  Supplying them in cases where they are not necessary
15323 is innocuous.
15324 .SH "SEE ALSO"
15325 .IX Header "SEE ALSO"
15326 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
15327 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
15328 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
15329 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
15330 .SH "AUTHOR"
15331 .IX Header "AUTHOR"
15332 See the Info entry for \fBgcc\fR, or
15333 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
15334 for contributors to \s-1GCC\s0.
15335 .SH "COPYRIGHT"
15336 .IX Header "COPYRIGHT"
15337 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
15338 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
15339 Free Software Foundation, Inc.
15340 .PP
15341 Permission is granted to copy, distribute and/or modify this document
15342 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or
15343 any later version published by the Free Software Foundation; with the
15344 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
15345 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
15346 the Back-Cover Texts being (b) (see below).  A copy of the license is
15347 included in the \fIgfdl\fR\|(7) man page.
15348 .PP
15349 (a) The \s-1FSF\s0's Front-Cover Text is:
15350 .PP
15351 .Vb 1
15352 \&     A GNU Manual
15353 .Ve
15354 .PP
15355 (b) The \s-1FSF\s0's Back-Cover Text is:
15356 .PP
15357 .Vb 3
15358 \&     You have freedom to copy and modify this GNU Manual, like GNU
15359 \&     software.  Copies published by the Free Software Foundation raise
15360 \&     funds for GNU development.
15361 .Ve
15362 .SH "POD ERRORS"
15363 .IX Header "POD ERRORS"
15364 Hey! \fBThe above document had some coding errors, which are explained below:\fR
15365 .IP "Around line 8736:" 4
15366 .IX Item "Around line 8736:"
15367 You can't have =items (as at line 8749) unless the first thing after the =over is an =item