OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / prebuilt / linux-x86 / toolchain / arm-eabi-4.4.0 / man / man1 / arm-eabi-gcc.1
1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
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.  | will give a
29 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
32 .tr \(*W-|\(bv\*(Tr
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 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD.  Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
55 .if \nF \{\
56 .    de IX
57 .    tm Index:\\$1\t\\n%\t"\\$2"
58 ..
59 .    nr % 0
60 .    rr F
61 .\}
62 .\"
63 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
65 .hy 0
66 .if n .na
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "GCC 1"
132 .TH GCC 1 " " "gcc-4.4.0" "GNU"
133 .SH "NAME"
134 gcc \- GNU project C and C++ compiler
135 .SH "SYNOPSIS"
136 .IX Header "SYNOPSIS"
137 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
138     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
139     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
140     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
141     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
142     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
143     [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
144 .PP
145 Only the most useful options are listed here; see below for the
146 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
147 .SH "DESCRIPTION"
148 .IX Header "DESCRIPTION"
149 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
150 assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
151 process at an intermediate stage.  For example, the \fB\-c\fR option
152 says not to run the linker.  Then the output consists of object files
153 output by the assembler.
154 .PP
155 Other options are passed on to one stage of processing.  Some options
156 control the preprocessor and others the compiler itself.  Yet other
157 options control the assembler and linker; most of these are not
158 documented here, since you rarely need to use any of them.
159 .PP
160 Most of the command line options that you can use with \s-1GCC\s0 are useful
161 for C programs; when an option is only useful with another language
162 (usually \*(C+), the explanation says so explicitly.  If the description
163 for a particular option does not mention a source language, you can use
164 that option with all supported languages.
165 .PP
166 The \fBgcc\fR program accepts options and file names as operands.  Many
167 options have multi-letter names; therefore multiple single-letter options
168 may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
169 .PP
170 You can mix options and other arguments.  For the most part, the order
171 you use doesn't matter.  Order does matter when you use several
172 options of the same kind; for example, if you specify \fB\-L\fR more
173 than once, the directories are searched in the order specified.  Also,
174 the placement of the \fB\-l\fR option is significant.
175 .PP
176 Many options have long names starting with \fB\-f\fR or with
177 \&\fB\-W\fR\-\-\-for example,
178 \&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
179 these have both positive and negative forms; the negative form of
180 \&\fB\-ffoo\fR would be \fB\-fno\-foo\fR.  This manual documents
181 only one of these two forms, whichever one is not the default.
182 .SH "OPTIONS"
183 .IX Header "OPTIONS"
184 .Sh "Option Summary"
185 .IX Subsection "Option Summary"
186 Here is a summary of all the options, grouped by type.  Explanations are
187 in the following sections.
188 .IP "\fIOverall Options\fR" 4
189 .IX Item "Overall Options"
190 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-combine  \-no\-canonical\-prefixes  
191 \&\-pipe  \-pass\-exit\-codes  
192 \&\-x\fR \fIlanguage\fR  \fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  
193 \&\-\-version \-wrapper@\fR\fIfile\fR \fB\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR
194 .IP "\fIC Language Options\fR" 4
195 .IX Item "C Language Options"
196 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
197 \&\-aux\-info\fR \fIfilename\fR 
198 \&\fB\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR 
199 \&\fB\-fhosted  \-ffreestanding \-fopenmp \-fms\-extensions 
200 \&\-trigraphs  \-no\-integrated\-cpp  \-traditional  \-traditional\-cpp 
201 \&\-fallow\-single\-precision  \-fcond\-mismatch \-flax\-vector\-conversions 
202 \&\-fsigned\-bitfields  \-fsigned\-char 
203 \&\-funsigned\-bitfields  \-funsigned\-char\fR
204 .IP "\fI\*(C+ Language Options\fR" 4
205 .IX Item " Language Options"
206 \&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control  \-fcheck\-new 
207 \&\-fconserve\-space  \-ffriend\-injection 
208 \&\-fno\-elide\-constructors 
209 \&\-fno\-enforce\-eh\-specs 
210 \&\-ffor\-scope  \-fno\-for\-scope  \-fno\-gnu\-keywords 
211 \&\-fno\-implicit\-templates 
212 \&\-fno\-implicit\-inline\-templates 
213 \&\-fno\-implement\-inlines  \-fms\-extensions 
214 \&\-fno\-nonansi\-builtins  \-fno\-operator\-names 
215 \&\-fno\-optional\-diags  \-fpermissive 
216 \&\-frepo  \-fno\-rtti  \-fstats  \-ftemplate\-depth\-\fR\fIn\fR 
217 \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit  \-fno\-weak  \-nostdinc++ 
218 \&\-fno\-default\-inline  \-fvisibility\-inlines\-hidden 
219 \&\-fvisibility\-ms\-compat 
220 \&\-Wabi  \-Wctor\-dtor\-privacy 
221 \&\-Wnon\-virtual\-dtor  \-Wreorder 
222 \&\-Weffc++  \-Wstrict\-null\-sentinel 
223 \&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
224 \&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
225 \&\-Wsign\-promo\fR
226 .IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
227 .IX Item "Objective-C and Objective- Language Options"
228 \&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
229 \&\fB\-fgnu\-runtime  \-fnext\-runtime 
230 \&\-fno\-nil\-receivers 
231 \&\-fobjc\-call\-cxx\-cdtors 
232 \&\-fobjc\-direct\-dispatch 
233 \&\-fobjc\-exceptions 
234 \&\-fobjc\-gc 
235 \&\-freplace\-objc\-classes 
236 \&\-fzero\-link 
237 \&\-gen\-decls 
238 \&\-Wassign\-intercept 
239 \&\-Wno\-protocol  \-Wselector 
240 \&\-Wstrict\-selector\-match 
241 \&\-Wundeclared\-selector\fR
242 .IP "\fILanguage Independent Options\fR" 4
243 .IX Item "Language Independent Options"
244 \&\fB\-fmessage\-length=\fR\fIn\fR  
245 \&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
246 \&\fB\-fdiagnostics\-show\-option\fR
247 .IP "\fIWarning Options\fR" 4
248 .IX Item "Warning Options"
249 \&\fB\-fsyntax\-only  \-pedantic  \-pedantic\-errors 
250 \&\-w  \-Wextra  \-Wall  \-Waddress  \-Waggregate\-return  \-Warray\-bounds 
251 \&\-Wno\-attributes \-Wno\-builtin\-macro\-redefined 
252 \&\-Wc++\-compat \-Wc++0x\-compat \-Wcast\-align  \-Wcast\-qual  
253 \&\-Wchar\-subscripts \-Wclobbered  \-Wcomment 
254 \&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-deprecated  
255 \&\-Wno\-deprecated\-declarations \-Wdisabled\-optimization  
256 \&\-Wno\-div\-by\-zero \-Wempty\-body  \-Wenum\-compare \-Wno\-endif\-labels 
257 \&\-Werror  \-Werror=* 
258 \&\-Wfatal\-errors  \-Wfloat\-equal  \-Wformat  \-Wformat=2 
259 \&\-Wno\-format\-contains\-nul \-Wno\-format\-extra\-args \-Wformat\-nonliteral 
260 \&\-Wformat\-security  \-Wformat\-y2k 
261 \&\-Wframe\-larger\-than=\fR\fIlen\fR \fB\-Wignored\-qualifiers 
262 \&\-Wimplicit  \-Wimplicit\-function\-declaration  \-Wimplicit\-int 
263 \&\-Winit\-self  \-Winline 
264 \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-offsetof 
265 \&\-Winvalid\-pch \-Wlarger\-than=\fR\fIlen\fR  \fB\-Wunsafe\-loop\-optimizations 
266 \&\-Wlogical\-op \-Wlong\-long 
267 \&\-Wmain  \-Wmissing\-braces  \-Wmissing\-field\-initializers 
268 \&\-Wmissing\-format\-attribute  \-Wmissing\-include\-dirs 
269 \&\-Wmissing\-noreturn  \-Wno\-mudflap 
270 \&\-Wno\-multichar  \-Wnonnull  \-Wno\-overflow 
271 \&\-Woverlength\-strings  \-Wpacked  \-Wpacked\-bitfield\-compat  \-Wpadded 
272 \&\-Wparentheses  \-Wpedantic\-ms\-format \-Wno\-pedantic\-ms\-format 
273 \&\-Wpointer\-arith  \-Wno\-pointer\-to\-int\-cast 
274 \&\-Wredundant\-decls 
275 \&\-Wreturn\-type  \-Wripa\-opt\-mismatch  \-Wsequence\-point  \-Wshadow 
276 \&\-Wsign\-compare  \-Wsign\-conversion  \-Wstack\-protector 
277 \&\-Wstrict\-aliasing \-Wstrict\-aliasing=n 
278 \&\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR 
279 \&\fB\-Wswitch  \-Wswitch\-default  \-Wswitch\-enum \-Wsync\-nand 
280 \&\-Wsystem\-headers  \-Wtrigraphs  \-Wtype\-limits  \-Wundef  \-Wuninitialized 
281 \&\-Wunknown\-pragmas  \-Wno\-pragmas \-Wunreachable\-code 
282 \&\-Wunused  \-Wunused\-function  \-Wunused\-label  \-Wunused\-parameter 
283 \&\-Wunused\-value  \-Wunused\-variable 
284 \&\-Wvariadic\-macros \-Wvla 
285 \&\-Wvolatile\-register\-var  \-Wwrite\-strings\fR
286 .IP "\fIC and Objective-C-only Warning Options\fR" 4
287 .IX Item "C and Objective-C-only Warning Options"
288 \&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
289 \&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
290 \&\-Wold\-style\-declaration  \-Wold\-style\-definition 
291 \&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
292 \&\-Wdeclaration\-after\-statement \-Wpointer\-sign\fR
293 .IP "\fIDebugging Options\fR" 4
294 .IX Item "Debugging Options"
295 \&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
296 \&\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter-value-list\fR 
297 \&\fB\-fdump\-noaddr \-fdump\-unnumbered 
298 \&\-fdump\-translation\-unit\fR[\fB\-\fR\fIn\fR] 
299 \&\fB\-fdump\-class\-hierarchy\fR[\fB\-\fR\fIn\fR] 
300 \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline 
301 \&\-fdump\-statistics 
302 \&\-fdump\-tree\-all 
303 \&\-fdump\-tree\-original\fR[\fB\-\fR\fIn\fR]  
304 \&\fB\-fdump\-tree\-optimized\fR[\fB\-\fR\fIn\fR] 
305 \&\fB\-fdump\-tree\-cfg \-fdump\-tree\-vcg \-fdump\-tree\-alias 
306 \&\-fdump\-tree\-ch 
307 \&\-fdump\-tree\-ssa\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-pre\fR[\fB\-\fR\fIn\fR] 
308 \&\fB\-fdump\-tree\-ccp\fR[\fB\-\fR\fIn\fR] \fB\-fdump\-tree\-dce\fR[\fB\-\fR\fIn\fR] 
309 \&\fB\-fdump\-tree\-gimple\fR[\fB\-raw\fR] \fB\-fdump\-tree\-mudflap\fR[\fB\-\fR\fIn\fR] 
310 \&\fB\-fdump\-tree\-dom\fR[\fB\-\fR\fIn\fR] 
311 \&\fB\-fdump\-tree\-dse\fR[\fB\-\fR\fIn\fR] 
312 \&\fB\-fdump\-tree\-phiopt\fR[\fB\-\fR\fIn\fR] 
313 \&\fB\-fdump\-tree\-forwprop\fR[\fB\-\fR\fIn\fR] 
314 \&\fB\-fdump\-tree\-copyrename\fR[\fB\-\fR\fIn\fR] 
315 \&\fB\-fdump\-tree\-nrv \-fdump\-tree\-vect 
316 \&\-fdump\-tree\-sink 
317 \&\-fdump\-tree\-sra\fR[\fB\-\fR\fIn\fR] 
318 \&\fB\-fdump\-tree\-fre\fR[\fB\-\fR\fIn\fR] 
319 \&\fB\-fdump\-tree\-vrp\fR[\fB\-\fR\fIn\fR] 
320 \&\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR 
321 \&\fB\-fdump\-tree\-storeccp\fR[\fB\-\fR\fIn\fR] 
322 \&\fB\-feliminate\-dwarf2\-dups \-feliminate\-unused\-debug\-types 
323 \&\-feliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always 
324 \&\-fenable\-icf\-debug 
325 \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \-fprofile\-arcs 
326 \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR 
327 \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose 
328 \&\-ftest\-coverage  \-ftime\-report \-fvar\-tracking 
329 \&\-g  \-g\fR\fIlevel\fR  \fB\-gcoff \-gdwarf\-2 
330 \&\-ggdb  \-gmlt  \-gstabs  \-gstabs+  \-gvms  \-gxcoff  \-gxcoff+ 
331 \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm 
332 \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 
333 \&\fB\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced 
334 \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
335 \&\fB\-p  \-pg  \-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
336 \&\-print\-multi\-directory  \-print\-multi\-lib 
337 \&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
338 \&\-print\-sysroot \-print\-sysroot\-headers\-suffix 
339 \&\-save\-temps  \-time\fR
340 .IP "\fIOptimization Options\fR" 4
341 .IX Item "Optimization Options"
342 \&\fB\-falign\-functions[=\fR\fIn\fR\fB] \-falign\-jumps[=\fR\fIn\fR\fB] 
343 \&\-falign\-labels[=\fR\fIn\fR\fB] \-falign\-loops[=\fR\fIn\fR\fB] \-fassociative\-math 
344 \&\-fauto\-inc\-dec \-fbranch\-probabilities \-fbranch\-target\-load\-optimize 
345 \&\-fbranch\-target\-load\-optimize2 \-fbtr\-bb\-exclusive \-fcaller\-saves 
346 \&\-fcheck\-data\-deps \-fconserve\-stack \-fcprop\-registers \-fcrossjumping 
347 \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \-fcx\-limited\-range 
348 \&\-fdata\-sections \-fdce \-fdce 
349 \&\-fdelayed\-branch \-fdelete\-null\-pointer\-checks \-fdse \-fdse 
350 \&\-fearly\-inlining \-fexpensive\-optimizations \-ffast\-math 
351 \&\-ffinite\-math\-only \-ffloat\-store \-fforward\-propagate 
352 \&\-ffunction\-sections \-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm 
353 \&\-fgcse\-sm \-fif\-conversion \-fif\-conversion2 \-findirect\-inlining 
354 \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR 
355 \&\fB\-finline\-small\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-matrix\-reorg \-fipa\-pta  
356 \&\-fipa\-pure\-const \-fipa\-reference \-fipa\-struct\-reorg 
357 \&\-fipa\-type\-escape \-fira\-algorithm=\fR\fIalgorithm\fR 
358 \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-coalesce \-fno\-ira\-share\-save\-slots 
359 \&\-fno\-ira\-share\-spill\-slots \-fira\-verbose=\fR\fIn\fR 
360 \&\fB\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-consts 
361 \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine 
362 \&\-fmerge\-all\-constants \-fmerge\-constants \-fmodulo\-sched 
363 \&\-fmodulo\-sched\-allow\-regmoves \-fmove\-loop\-invariants \-fmudflap 
364 \&\-fmudflapir \-fmudflapth \-fno\-branch\-count\-reg \-fno\-default\-inline 
365 \&\-fno\-defer\-pop \-fno\-function\-cse \-fno\-guess\-branch\-probability 
366 \&\-fno\-inline \-fno\-math\-errno \-fno\-peephole \-fno\-peephole2 
367 \&\-fno\-sched\-interblock \-fno\-sched\-spec \-fno\-signed\-zeros 
368 \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss 
369 \&\-fomit\-frame\-pointer \-foptimize\-register\-move \-foptimize\-sibling\-calls 
370 \&\-fpeel\-loops \-fpredictive\-commoning \-fprefetch\-loop\-arrays 
371 \&\-fprofile\-correction \-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate 
372 \&\-fprofile\-generate=\fR\fIpath\fR 
373 \&\fB\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-values 
374 \&\-freciprocal\-math \-fregmove \-frename\-registers \-freorder\-blocks 
375 \&\-freorder\-blocks\-and\-partition \-freorder\-functions 
376 \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops 
377 \&\-fripa \-fripa\-disallow\-opt\-mismatch \-fripa\-verbose \-frounding\-math 
378 \&\-fsample\-profile \-fsample\-profile\-aggregate\-using \-fsched2\-use\-superblocks 
379 \&\-fsched2\-use\-traces \-fsched\-spec\-load \-fsched\-spec\-load\-dangerous 
380 \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
381 \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \-fsee 
382 \&\-fselective\-scheduling \-fselective\-scheduling2 
383 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops 
384 \&\-fsignaling\-nans \-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller 
385 \&\-fsplit\-wide\-types \-fstack\-protector \-fstack\-protector\-all 
386 \&\-fstrict\-aliasing \-fstrict\-overflow \-fthread\-jumps \-ftracer 
387 \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-copy\-prop 
388 \&\-ftree\-copyrename \-ftree\-dce 
389 \&\-ftree\-dominator\-opts \-ftree\-dse \-ftree\-fre \-ftree\-loop\-im 
390 \&\-ftree\-loop\-distribution 
391 \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize 
392 \&\-ftree\-lr\-shrinking 
393 \&\-ftree\-parallelize\-loops=\fR\fIn\fR \fB\-ftree\-pre \-ftree\-reassoc 
394 \&\-ftree\-sink \-ftree\-sra \-ftree\-switch\-conversion 
395 \&\-ftree\-ter \-ftree\-vect\-loop\-version \-ftree\-vectorize \-ftree\-vrp 
396 \&\-funit\-at\-a\-time \-funroll\-all\-loops \-funroll\-loops 
397 \&\-funsafe\-loop\-optimizations \-funsafe\-math\-optimizations \-funswitch\-loops 
398 \&\-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \-fweb 
399 \&\-fwhole\-program 
400 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
401 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
402 .IP "\fIPreprocessor Options\fR" 4
403 .IX Item "Preprocessor Options"
404 \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
405 \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
406 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
407 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
408 \&\-idirafter\fR \fIdir\fR 
409 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
410 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
411 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
412 \&\fB\-imultilib\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR 
413 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  
414 \&\-P  \-fworking\-directory  \-remap 
415 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR 
416 \&\fB\-Xpreprocessor\fR \fIoption\fR
417 .IP "\fIAssembler Option\fR" 4
418 .IX Item "Assembler Option"
419 \&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
420 .IP "\fILinker Options\fR" 4
421 .IX Item "Linker Options"
422 \&\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
423 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib \-pie \-rdynamic 
424 \&\-s  \-static  \-static\-libgcc  \-shared  \-shared\-libgcc  \-symbolic 
425 \&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
426 \&\fB\-u\fR \fIsymbol\fR
427 .IP "\fIDirectory Options\fR" 4
428 .IX Item "Directory Options"
429 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-iquote\fR\fIdir\fR  \fB\-L\fR\fIdir\fR
430 \&\fB\-specs=\fR\fIfile\fR  \fB\-I\- \-\-sysroot=\fR\fIdir\fR
431 .IP "\fITarget Options\fR" 4
432 .IX Item "Target Options"
433 \&\fB\-V\fR \fIversion\fR  \fB\-b\fR \fImachine\fR
434 .IP "\fIMachine Dependent Options\fR" 4
435 .IX Item "Machine Dependent Options"
436 \&\fI\s-1ARC\s0 Options\fR
437 \&\fB\-EB  \-EL 
438 \&\-mmangle\-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext-section\fR 
439 \&\fB\-mdata=\fR\fIdata-section\fR  \fB\-mrodata=\fR\fIreadonly-data-section\fR
440 .Sp
441 \&\fI\s-1ARM\s0 Options\fR
442 \&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
443 \&\-mabi=\fR\fIname\fR 
444 \&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
445 \&\-mapcs\-float  \-mno\-apcs\-float 
446 \&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
447 \&\-msched\-prolog  \-mno\-sched\-prolog 
448 \&\-mlittle\-endian  \-mbig\-endian  \-mwords\-little\-endian 
449 \&\-mfloat\-abi=\fR\fIname\fR  \fB\-msoft\-float  \-mhard\-float  \-mfpe 
450 \&\-mthumb\-interwork  \-mno\-thumb\-interwork 
451 \&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
452 \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR 
453 \&\fB\-mabort\-on\-noreturn 
454 \&\-mlong\-calls  \-mno\-long\-calls 
455 \&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
456 \&\-mpic\-register=\fR\fIreg\fR 
457 \&\fB\-mnop\-fun\-dllimport 
458 \&\-mcirrus\-fix\-invalid\-insns \-mno\-cirrus\-fix\-invalid\-insns 
459 \&\-mpoke\-function\-name 
460 \&\-mthumb  \-marm 
461 \&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
462 \&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
463 \&\-mtp=\fR\fIname\fR 
464 \&\fB\-mword\-relocations 
465 \&\-mfix\-cortex\-m3\-ldrd 
466 \&\-mandroid\fR
467 .Sp
468 \&\fI\s-1AVR\s0 Options\fR
469 \&\fB\-mmcu=\fR\fImcu\fR  \fB\-msize  \-minit\-stack=\fR\fIn\fR  \fB\-mno\-interrupts 
470 \&\-mcall\-prologues  \-mno\-tablejump  \-mtiny\-stack  \-mint8\fR
471 .Sp
472 \&\fIBlackfin Options\fR
473 \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
474 \&\fB\-msim \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
475 \&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
476 \&\-mlow\-64k \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
477 \&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
478 \&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
479 \&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
480 \&\-mfast\-fp \-minline\-plt \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
481 \&\-micplb\fR
482 .Sp
483 \&\fI\s-1CRIS\s0 Options\fR
484 \&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
485 \&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
486 \&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
487 \&\-mstack\-align  \-mdata\-align  \-mconst\-align 
488 \&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
489 \&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
490 \&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
491 .Sp
492 \&\fI\s-1CRX\s0 Options\fR
493 \&\fB\-mmac \-mpush\-args\fR
494 .Sp
495 \&\fIDarwin Options\fR
496 \&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
497 \&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
498 \&\-client_name  \-compatibility_version  \-current_version 
499 \&\-dead_strip 
500 \&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
501 \&\-dynamic  \-dynamiclib  \-exported_symbols_list 
502 \&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
503 \&\-force_flat_namespace  \-headerpad_max_install_names 
504 \&\-iframework 
505 \&\-image_base  \-init  \-install_name  \-keep_private_externs 
506 \&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
507 \&\-noall_load   \-no_dead_strip_inits_and_terms 
508 \&\-nofixprebinding \-nomultidefs  \-noprebind  \-noseglinkedit 
509 \&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
510 \&\-private_bundle  \-read_only_relocs  \-sectalign 
511 \&\-sectobjectsymbols  \-whyload  \-seg1addr 
512 \&\-sectcreate  \-sectobjectsymbols  \-sectorder 
513 \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr 
514 \&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
515 \&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
516 \&\-single_module  \-static  \-sub_library  \-sub_umbrella 
517 \&\-twolevel_namespace  \-umbrella  \-undefined 
518 \&\-unexported_symbols_list  \-weak_reference_mismatches 
519 \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR 
520 \&\fB\-mkernel \-mone\-byte\-bool\fR
521 .Sp
522 \&\fI\s-1DEC\s0 Alpha Options\fR
523 \&\fB\-mno\-fp\-regs  \-msoft\-float  \-malpha\-as  \-mgas 
524 \&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
525 \&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
526 \&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
527 \&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
528 \&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
529 \&\-mfloat\-vax  \-mfloat\-ieee 
530 \&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
531 \&\-msmall\-text  \-mlarge\-text 
532 \&\-mmemory\-latency=\fR\fItime\fR
533 .Sp
534 \&\fI\s-1DEC\s0 Alpha/VMS Options\fR
535 \&\fB\-mvms\-return\-codes\fR
536 .Sp
537 \&\fI\s-1FR30\s0 Options\fR
538 \&\fB\-msmall\-model \-mno\-lsim\fR
539 .Sp
540 \&\fI\s-1FRV\s0 Options\fR
541 \&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
542 \&\-mhard\-float  \-msoft\-float 
543 \&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
544 \&\-mdouble  \-mno\-double 
545 \&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
546 \&\-mfdpic  \-minline\-plt \-mgprel\-ro  \-multilib\-library\-pic 
547 \&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
548 \&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
549 \&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
550 \&\-moptimize\-membar \-mno\-optimize\-membar 
551 \&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
552 \&\-mvliw\-branch  \-mno\-vliw\-branch 
553 \&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
554 \&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
555 \&\-mTLS \-mtls 
556 \&\-mcpu=\fR\fIcpu\fR
557 .Sp
558 \&\fIGNU/Linux Options\fR
559 \&\fB\-muclibc\fR
560 .Sp
561 \&\fIH8/300 Options\fR
562 \&\fB\-mrelax  \-mh  \-ms  \-mn  \-mint32  \-malign\-300\fR
563 .Sp
564 \&\fI\s-1HPPA\s0 Options\fR
565 \&\fB\-march=\fR\fIarchitecture-type\fR 
566 \&\fB\-mbig\-switch  \-mdisable\-fpregs  \-mdisable\-indexing 
567 \&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
568 \&\-mfixed\-range=\fR\fIregister-range\fR 
569 \&\fB\-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls 
570 \&\-mlong\-load\-store  \-mno\-big\-switch  \-mno\-disable\-fpregs 
571 \&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
572 \&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
573 \&\-mno\-portable\-runtime  \-mno\-soft\-float 
574 \&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
575 \&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
576 \&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
577 \&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
578 .Sp
579 \&\fIi386 and x86\-64 Options\fR
580 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
581 \&\fB\-mfpmath=\fR\fIunit\fR 
582 \&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
583 \&\-mno\-fp\-ret\-in\-387  \-msoft\-float 
584 \&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
585 \&\-mpreferred\-stack\-boundary=\fR\fInum\fR
586 \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR
587 \&\fB\-mcld \-mcx16 \-msahf \-mrecip 
588 \&\-mmmx  \-msse  \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx 
589 \&\-maes \-mpclmul 
590 \&\-msse4a \-m3dnow \-mpopcnt \-mabm \-msse5 
591 \&\-mthreads  \-mno\-align\-stringops  \-minline\-all\-stringops 
592 \&\-minline\-stringops\-dynamically \-minline\-compares 
593 \&\-mstringop\-strategy=\fR\fIalg\fR \fB\-mpush\-args  \-maccumulate\-outgoing\-args 
594 \&\-m128bit\-long\-double \-m96bit\-long\-double \-mregparm=\fR\fInum\fR \fB\-msseregparm 
595 \&\-mveclibabi=\fR\fItype\fR \fB\-mpc32 \-mpc64 \-mpc80 \-mstackrealign 
596 \&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs 
597 \&\-mcmodel=\fR\fIcode-model\fR 
598 \&\fB\-m32  \-m64 \-mlarge\-data\-threshold=\fR\fInum\fR 
599 \&\fB\-mfused\-madd \-mno\-fused\-madd \-msse2avx\fR
600 .Sp
601 \&\fI\s-1IA\-64\s0 Options\fR
602 \&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
603 \&\-mvolatile\-asm\-stop  \-mregister\-names  \-mno\-sdata 
604 \&\-mconstant\-gp  \-mauto\-pic  \-minline\-float\-divide\-min\-latency 
605 \&\-minline\-float\-divide\-max\-throughput 
606 \&\-minline\-int\-divide\-min\-latency 
607 \&\-minline\-int\-divide\-max\-throughput  
608 \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput 
609 \&\-mno\-dwarf2\-asm \-mearly\-stop\-bits 
610 \&\-mfixed\-range=\fR\fIregister-range\fR \fB\-mtls\-size=\fR\fItls-size\fR 
611 \&\fB\-mtune=\fR\fIcpu-type\fR \fB\-mt \-pthread \-milp32 \-mlp64 
612 \&\-mno\-sched\-br\-data\-spec \-msched\-ar\-data\-spec \-mno\-sched\-control\-spec 
613 \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec 
614 \&\-msched\-ldc \-mno\-sched\-control\-ldc \-mno\-sched\-spec\-verbose 
615 \&\-mno\-sched\-prefer\-non\-data\-spec\-insns 
616 \&\-mno\-sched\-prefer\-non\-control\-spec\-insns 
617 \&\-mno\-sched\-count\-spec\-in\-critical\-path\fR
618 .Sp
619 \&\fIM32R/D Options\fR
620 \&\fB\-m32r2 \-m32rx \-m32r 
621 \&\-mdebug 
622 \&\-malign\-loops \-mno\-align\-loops 
623 \&\-missue\-rate=\fR\fInumber\fR 
624 \&\fB\-mbranch\-cost=\fR\fInumber\fR 
625 \&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
626 \&\fB\-msdata=\fR\fIsdata-type\fR 
627 \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR 
628 \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR 
629 \&\fB\-G\fR \fInum\fR
630 .Sp
631 \&\fIM32C Options\fR
632 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR
633 .Sp
634 \&\fIM680x0 Options\fR
635 \&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR
636 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
637 \&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
638 \&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
639 \&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
640 \&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
641 \&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
642 \&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
643 \&\-mxgot \-mno\-xgot\fR
644 .Sp
645 \&\fIM68hc1x Options\fR
646 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12   \-m68hcs12 
647 \&\-mauto\-incdec  \-minmax  \-mlong\-calls  \-mshort 
648 \&\-msoft\-reg\-count=\fR\fIcount\fR
649 .Sp
650 \&\fIMCore Options\fR
651 \&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
652 \&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
653 \&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
654 \&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
655 \&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
656 .Sp
657 \&\fI\s-1MIPS\s0 Options\fR
658 \&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
659 \&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2 
660 \&\-mips64  \-mips64r2 
661 \&\-mips16  \-mno\-mips16  \-mflip\-mips16 
662 \&\-minterlink\-mips16  \-mno\-interlink\-mips16 
663 \&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
664 \&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
665 \&\-mgp32  \-mgp64  \-mfp32  \-mfp64  \-mhard\-float  \-msoft\-float 
666 \&\-msingle\-float  \-mdouble\-float  \-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
667 \&\-mfpu=\fR\fIfpu-type\fR 
668 \&\fB\-msmartmips  \-mno\-smartmips 
669 \&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
670 \&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
671 \&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
672 \&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
673 \&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
674 \&\-membedded\-data  \-mno\-embedded\-data 
675 \&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
676 \&\-mcode\-readable=\fR\fIsetting\fR 
677 \&\fB\-msplit\-addresses  \-mno\-split\-addresses 
678 \&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
679 \&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
680 \&\-mdivide\-traps  \-mdivide\-breaks 
681 \&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
682 \&\-mmad  \-mno\-mad  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
683 \&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
684 \&\-mfix\-r10000 \-mno\-fix\-r10000  \-mfix\-vr4120  \-mno\-fix\-vr4120 
685 \&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
686 \&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
687 \&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
688 \&\-mfp\-exceptions \-mno\-fp\-exceptions 
689 \&\-mvr4130\-align \-mno\-vr4130\-align\fR
690 .Sp
691 \&\fI\s-1MMIX\s0 Options\fR
692 \&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
693 \&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
694 \&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
695 \&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
696 .Sp
697 \&\fI\s-1MN10300\s0 Options\fR
698 \&\fB\-mmult\-bug  \-mno\-mult\-bug 
699 \&\-mam33  \-mno\-am33 
700 \&\-mam33\-2  \-mno\-am33\-2 
701 \&\-mreturn\-pointer\-on\-d0 
702 \&\-mno\-crt0  \-mrelax\fR
703 .Sp
704 \&\fI\s-1PDP\-11\s0 Options\fR
705 \&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
706 \&\-mbcopy  \-mbcopy\-builtin  \-mint32  \-mno\-int16 
707 \&\-mint16  \-mno\-int32  \-mfloat32  \-mno\-float64 
708 \&\-mfloat64  \-mno\-float32  \-mabshi  \-mno\-abshi 
709 \&\-mbranch\-expensive  \-mbranch\-cheap 
710 \&\-msplit  \-mno\-split  \-munix\-asm  \-mdec\-asm\fR
711 .Sp
712 \&\fIpicoChip Options\fR
713 \&\fB\-mae=\fR\fIae_type\fR \fB\-mvliw\-lookahead=\fR\fIN\fR
714 \&\fB\-msymbol\-as\-address \-mno\-inefficient\-warnings\fR
715 .Sp
716 \&\fIPowerPC Options\fR
717 See \s-1RS/6000\s0 and PowerPC Options.
718 .Sp
719 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
720 \&\fB\-mcpu=\fR\fIcpu-type\fR 
721 \&\fB\-mtune=\fR\fIcpu-type\fR 
722 \&\fB\-mpower  \-mno\-power  \-mpower2  \-mno\-power2 
723 \&\-mpowerpc  \-mpowerpc64  \-mno\-powerpc 
724 \&\-maltivec  \-mno\-altivec 
725 \&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
726 \&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
727 \&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mfprnd  \-mno\-fprnd 
728 \&\-mcmpb \-mno\-cmpb \-mmfpgpr \-mno\-mfpgpr \-mhard\-dfp \-mno\-hard\-dfp 
729 \&\-mnew\-mnemonics  \-mold\-mnemonics 
730 \&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
731 \&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
732 \&\-malign\-power  \-malign\-natural 
733 \&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
734 \&\-msingle\-float \-mdouble\-float \-msimple\-fpu 
735 \&\-mstring  \-mno\-string  \-mupdate  \-mno\-update 
736 \&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
737 \&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
738 \&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
739 \&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
740 \&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
741 \&\-mdynamic\-no\-pic  \-maltivec  \-mswdiv 
742 \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
743 \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
744 \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
745 \&\fB\-mcall\-sysv  \-mcall\-netbsd 
746 \&\-maix\-struct\-return  \-msvr4\-struct\-return 
747 \&\-mabi=\fR\fIabi-type\fR \fB\-msecure\-plt \-mbss\-plt 
748 \&\-misel \-mno\-isel 
749 \&\-misel=yes  \-misel=no 
750 \&\-mspe \-mno\-spe 
751 \&\-mspe=yes  \-mspe=no 
752 \&\-mpaired 
753 \&\-mgen\-cell\-microcode \-mwarn\-cell\-microcode 
754 \&\-mvrsave \-mno\-vrsave 
755 \&\-mmulhw \-mno\-mulhw 
756 \&\-mdlmzb \-mno\-dlmzb 
757 \&\-mfloat\-gprs=yes  \-mfloat\-gprs=no \-mfloat\-gprs=single \-mfloat\-gprs=double 
758 \&\-mprototype  \-mno\-prototype 
759 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
760 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks  \-G\fR \fInum\fR  \fB\-pthread\fR
761 .Sp
762 \&\fIS/390 and zSeries Options\fR
763 \&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
764 \&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp \-mno\-hard\-dfp 
765 \&\-mlong\-double\-64 \-mlong\-double\-128 
766 \&\-mbackchain  \-mno\-backchain \-mpacked\-stack  \-mno\-packed\-stack 
767 \&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle \-mno\-mvcle 
768 \&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
769 \&\-mtpf\-trace \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
770 \&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size \-mstack\-guard\fR
771 .Sp
772 \&\fIScore Options\fR
773 \&\fB\-meb \-mel 
774 \&\-mnhwloop 
775 \&\-muls 
776 \&\-mmac 
777 \&\-mscore5 \-mscore5u \-mscore7 \-mscore7d\fR
778 .Sp
779 \&\fI\s-1SH\s0 Options\fR
780 \&\fB\-m1  \-m2  \-m2e  \-m3  \-m3e 
781 \&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
782 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al 
783 \&\-m5\-64media  \-m5\-64media\-nofpu 
784 \&\-m5\-32media  \-m5\-32media\-nofpu 
785 \&\-m5\-compact  \-m5\-compact\-nofpu 
786 \&\-mb  \-ml  \-mdalign  \-mrelax 
787 \&\-mbigtable  \-mfmovd  \-mhitachi \-mrenesas \-mno\-renesas \-mnomacsave 
788 \&\-mieee  \-mbitops  \-misize  \-minline\-ic_invalidate \-mpadstruct  \-mspace 
789 \&\-mprefergot  \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR 
790 \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister-range\fR 
791 \&\fB\-madjust\-unroll \-mindexed\-addressing \-mgettrcost=\fR\fInumber\fR \fB\-mpt\-fixed 
792 \&\-minvalid\-symbols\fR
793 .Sp
794 \&\fI\s-1SPARC\s0 Options\fR
795 \&\fB\-mcpu=\fR\fIcpu-type\fR 
796 \&\fB\-mtune=\fR\fIcpu-type\fR 
797 \&\fB\-mcmodel=\fR\fIcode-model\fR 
798 \&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
799 \&\-mfaster\-structs  \-mno\-faster\-structs 
800 \&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
801 \&\-mhard\-quad\-float  \-msoft\-quad\-float 
802 \&\-mimpure\-text  \-mno\-impure\-text  \-mlittle\-endian 
803 \&\-mstack\-bias  \-mno\-stack\-bias 
804 \&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
805 \&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis
806 \&\-threads \-pthreads \-pthread\fR
807 .Sp
808 \&\fI\s-1SPU\s0 Options\fR
809 \&\fB\-mwarn\-reloc \-merror\-reloc 
810 \&\-msafe\-dma \-munsafe\-dma 
811 \&\-mbranch\-hints 
812 \&\-msmall\-mem \-mlarge\-mem \-mstdmain 
813 \&\-mfixed\-range=\fR\fIregister-range\fR
814 .Sp
815 \&\fISystem V Options\fR
816 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
817 .Sp
818 \&\fIV850 Options\fR
819 \&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
820 \&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
821 \&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
822 \&\fB\-mapp\-regs  \-mno\-app\-regs 
823 \&\-mdisable\-callt  \-mno\-disable\-callt 
824 \&\-mv850e1 
825 \&\-mv850e 
826 \&\-mv850  \-mbig\-switch\fR
827 .Sp
828 \&\fI\s-1VAX\s0 Options\fR
829 \&\fB\-mg  \-mgnu  \-munix\fR
830 .Sp
831 \&\fIVxWorks Options\fR
832 \&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
833 \&\-Xbind\-lazy  \-Xbind\-now\fR
834 .Sp
835 \&\fIx86\-64 Options\fR
836 See i386 and x86\-64 Options.
837 .Sp
838 \&\fIi386 and x86\-64 Windows Options\fR
839 \&\fB\-mconsole \-mcygwin \-mno\-cygwin \-mdll
840 \&\-mnop\-fun\-dllimport \-mthread \-mwin32 \-mwindows\fR
841 .Sp
842 \&\fIXstormy16 Options\fR
843 \&\fB\-msim\fR
844 .Sp
845 \&\fIXtensa Options\fR
846 \&\fB\-mconst16 \-mno\-const16 
847 \&\-mfused\-madd  \-mno\-fused\-madd 
848 \&\-mserialize\-volatile  \-mno\-serialize\-volatile 
849 \&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
850 \&\-mtarget\-align  \-mno\-target\-align 
851 \&\-mlongcalls  \-mno\-longcalls\fR
852 .Sp
853 \&\fIzSeries Options\fR
854 See S/390 and zSeries Options.
855 .IP "\fICode Generation Options\fR" 4
856 .IX Item "Code Generation Options"
857 \&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
858 \&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
859 \&\-fnon\-call\-exceptions  \-funwind\-tables 
860 \&\-fasynchronous\-unwind\-tables 
861 \&\-finhibit\-size\-directive  \-finstrument\-functions 
862 \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
863 \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... 
864 \&\-fno\-common  \-fno\-ident 
865 \&\-fpcc\-struct\-return  \-fpic  \-fPIC \-fpie \-fPIE 
866 \&\-fno\-jump\-tables 
867 \&\-frecord\-gcc\-switches 
868 \&\-freg\-struct\-return  \-fshort\-enums 
869 \&\-fshort\-double  \-fshort\-wchar 
870 \&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  \-fstack\-check 
871 \&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
872 \&\fB\-fno\-stack\-limit  \-fargument\-alias  \-fargument\-noalias 
873 \&\-fargument\-noalias\-global  \-fargument\-noalias\-anything 
874 \&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
875 \&\fB\-ftrapv  \-fwrapv  \-fbounds\-check 
876 \&\-fvisibility\fR
877 .Sh "Options Controlling the Kind of Output"
878 .IX Subsection "Options Controlling the Kind of Output"
879 Compilation can involve up to four stages: preprocessing, compilation
880 proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
881 preprocessing and compiling several files either into several
882 assembler input files, or into one assembler input file; then each
883 assembler input file produces an object file, and linking combines all
884 the object files (those newly compiled, and those specified as input)
885 into an executable file.
886 .PP
887 For any given input file, the file name suffix determines what kind of
888 compilation is done:
889 .IP "\fIfile\fR\fB.c\fR" 4
890 .IX Item "file.c"
891 C source code which must be preprocessed.
892 .IP "\fIfile\fR\fB.i\fR" 4
893 .IX Item "file.i"
894 C source code which should not be preprocessed.
895 .IP "\fIfile\fR\fB.ii\fR" 4
896 .IX Item "file.ii"
897 \&\*(C+ source code which should not be preprocessed.
898 .IP "\fIfile\fR\fB.m\fR" 4
899 .IX Item "file.m"
900 Objective-C source code.  Note that you must link with the \fIlibobjc\fR
901 library to make an Objective-C program work.
902 .IP "\fIfile\fR\fB.mi\fR" 4
903 .IX Item "file.mi"
904 Objective-C source code which should not be preprocessed.
905 .IP "\fIfile\fR\fB.mm\fR" 4
906 .IX Item "file.mm"
907 .PD 0
908 .IP "\fIfile\fR\fB.M\fR" 4
909 .IX Item "file.M"
910 .PD
911 Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
912 library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
913 to a literal capital M.
914 .IP "\fIfile\fR\fB.mii\fR" 4
915 .IX Item "file.mii"
916 Objective\-\*(C+ source code which should not be preprocessed.
917 .IP "\fIfile\fR\fB.h\fR" 4
918 .IX Item "file.h"
919 C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
920 precompiled header.
921 .IP "\fIfile\fR\fB.cc\fR" 4
922 .IX Item "file.cc"
923 .PD 0
924 .IP "\fIfile\fR\fB.cp\fR" 4
925 .IX Item "file.cp"
926 .IP "\fIfile\fR\fB.cxx\fR" 4
927 .IX Item "file.cxx"
928 .IP "\fIfile\fR\fB.cpp\fR" 4
929 .IX Item "file.cpp"
930 .IP "\fIfile\fR\fB.CPP\fR" 4
931 .IX Item "file.CPP"
932 .IP "\fIfile\fR\fB.c++\fR" 4
933 .IX Item "file.c++"
934 .IP "\fIfile\fR\fB.C\fR" 4
935 .IX Item "file.C"
936 .PD
937 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
938 the last two letters must both be literally \fBx\fR.  Likewise,
939 \&\fB.C\fR refers to a literal capital C.
940 .IP "\fIfile\fR\fB.mm\fR" 4
941 .IX Item "file.mm"
942 .PD 0
943 .IP "\fIfile\fR\fB.M\fR" 4
944 .IX Item "file.M"
945 .PD
946 Objective\-\*(C+ source code which must be preprocessed.
947 .IP "\fIfile\fR\fB.mii\fR" 4
948 .IX Item "file.mii"
949 Objective\-\*(C+ source code which should not be preprocessed.
950 .IP "\fIfile\fR\fB.hh\fR" 4
951 .IX Item "file.hh"
952 .PD 0
953 .IP "\fIfile\fR\fB.H\fR" 4
954 .IX Item "file.H"
955 .IP "\fIfile\fR\fB.hp\fR" 4
956 .IX Item "file.hp"
957 .IP "\fIfile\fR\fB.hxx\fR" 4
958 .IX Item "file.hxx"
959 .IP "\fIfile\fR\fB.hpp\fR" 4
960 .IX Item "file.hpp"
961 .IP "\fIfile\fR\fB.HPP\fR" 4
962 .IX Item "file.HPP"
963 .IP "\fIfile\fR\fB.h++\fR" 4
964 .IX Item "file.h++"
965 .IP "\fIfile\fR\fB.tcc\fR" 4
966 .IX Item "file.tcc"
967 .PD
968 \&\*(C+ header file to be turned into a precompiled header.
969 .IP "\fIfile\fR\fB.f\fR" 4
970 .IX Item "file.f"
971 .PD 0
972 .IP "\fIfile\fR\fB.for\fR" 4
973 .IX Item "file.for"
974 .IP "\fIfile\fR\fB.ftn\fR" 4
975 .IX Item "file.ftn"
976 .PD
977 Fixed form Fortran source code which should not be preprocessed.
978 .IP "\fIfile\fR\fB.F\fR" 4
979 .IX Item "file.F"
980 .PD 0
981 .IP "\fIfile\fR\fB.FOR\fR" 4
982 .IX Item "file.FOR"
983 .IP "\fIfile\fR\fB.fpp\fR" 4
984 .IX Item "file.fpp"
985 .IP "\fIfile\fR\fB.FPP\fR" 4
986 .IX Item "file.FPP"
987 .IP "\fIfile\fR\fB.FTN\fR" 4
988 .IX Item "file.FTN"
989 .PD
990 Fixed form Fortran source code which must be preprocessed (with the traditional
991 preprocessor).
992 .IP "\fIfile\fR\fB.f90\fR" 4
993 .IX Item "file.f90"
994 .PD 0
995 .IP "\fIfile\fR\fB.f95\fR" 4
996 .IX Item "file.f95"
997 .IP "\fIfile\fR\fB.f03\fR" 4
998 .IX Item "file.f03"
999 .IP "\fIfile\fR\fB.f08\fR" 4
1000 .IX Item "file.f08"
1001 .PD
1002 Free form Fortran source code which should not be preprocessed.
1003 .IP "\fIfile\fR\fB.F90\fR" 4
1004 .IX Item "file.F90"
1005 .PD 0
1006 .IP "\fIfile\fR\fB.F95\fR" 4
1007 .IX Item "file.F95"
1008 .IP "\fIfile\fR\fB.F03\fR" 4
1009 .IX Item "file.F03"
1010 .IP "\fIfile\fR\fB.F08\fR" 4
1011 .IX Item "file.F08"
1012 .PD
1013 Free form Fortran source code which must be preprocessed (with the
1014 traditional preprocessor).
1015 .IP "\fIfile\fR\fB.ads\fR" 4
1016 .IX Item "file.ads"
1017 Ada source code file which contains a library unit declaration (a
1018 declaration of a package, subprogram, or generic, or a generic
1019 instantiation), or a library unit renaming declaration (a package,
1020 generic, or subprogram renaming declaration).  Such files are also
1021 called \fIspecs\fR.
1022 .IP "\fIfile\fR\fB.adb\fR" 4
1023 .IX Item "file.adb"
1024 Ada source code file containing a library unit body (a subprogram or
1025 package body).  Such files are also called \fIbodies\fR.
1026 .IP "\fIfile\fR\fB.s\fR" 4
1027 .IX Item "file.s"
1028 Assembler code.
1029 .IP "\fIfile\fR\fB.S\fR" 4
1030 .IX Item "file.S"
1031 .PD 0
1032 .IP "\fIfile\fR\fB.sx\fR" 4
1033 .IX Item "file.sx"
1034 .PD
1035 Assembler code which must be preprocessed.
1036 .IP "\fIother\fR" 4
1037 .IX Item "other"
1038 An object file to be fed straight into linking.
1039 Any file name with no recognized suffix is treated this way.
1040 .PP
1041 You can specify the input language explicitly with the \fB\-x\fR option:
1042 .IP "\fB\-x\fR \fIlanguage\fR" 4
1043 .IX Item "-x language"
1044 Specify explicitly the \fIlanguage\fR for the following input files
1045 (rather than letting the compiler choose a default based on the file
1046 name suffix).  This option applies to all following input files until
1047 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
1048 .Sp
1049 .Vb 8
1050 \&        c  c\-header  c\-cpp\-output
1051 \&        c++  c++\-header  c++\-cpp\-output
1052 \&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
1053 \&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
1054 \&        assembler  assembler\-with\-cpp
1055 \&        ada
1056 \&        f77  f77\-cpp\-input f95  f95\-cpp\-input
1057 \&        java
1058 .Ve
1059 .IP "\fB\-x none\fR" 4
1060 .IX Item "-x none"
1061 Turn off any specification of a language, so that subsequent files are
1062 handled according to their file name suffixes (as they are if \fB\-x\fR
1063 has not been used at all).
1064 .IP "\fB\-pass\-exit\-codes\fR" 4
1065 .IX Item "-pass-exit-codes"
1066 Normally the \fBgcc\fR program will exit with the code of 1 if any
1067 phase of the compiler returns a non-success return code.  If you specify
1068 \&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program will instead return with
1069 numerically highest error produced by any phase that returned an error
1070 indication.  The C, \*(C+, and Fortran frontends return 4, if an internal
1071 compiler error is encountered.
1072 .PP
1073 If you only want some of the stages of compilation, you can use
1074 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
1075 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
1076 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
1077 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
1078 .IP "\fB\-c\fR" 4
1079 .IX Item "-c"
1080 Compile or assemble the source files, but do not link.  The linking
1081 stage simply is not done.  The ultimate output is in the form of an
1082 object file for each source file.
1083 .Sp
1084 By default, the object file name for a source file is made by replacing
1085 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
1086 .Sp
1087 Unrecognized input files, not requiring compilation or assembly, are
1088 ignored.
1089 .IP "\fB\-S\fR" 4
1090 .IX Item "-S"
1091 Stop after the stage of compilation proper; do not assemble.  The output
1092 is in the form of an assembler code file for each non-assembler input
1093 file specified.
1094 .Sp
1095 By default, the assembler file name for a source file is made by
1096 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
1097 .Sp
1098 Input files that don't require compilation are ignored.
1099 .IP "\fB\-E\fR" 4
1100 .IX Item "-E"
1101 Stop after the preprocessing stage; do not run the compiler proper.  The
1102 output is in the form of preprocessed source code, which is sent to the
1103 standard output.
1104 .Sp
1105 Input files which don't require preprocessing are ignored.
1106 .IP "\fB\-o\fR \fIfile\fR" 4
1107 .IX Item "-o file"
1108 Place output in file \fIfile\fR.  This applies regardless to whatever
1109 sort of output is being produced, whether it be an executable file,
1110 an object file, an assembler file or preprocessed C code.
1111 .Sp
1112 If \fB\-o\fR is not specified, the default is to put an executable
1113 file in \fIa.out\fR, the object file for
1114 \&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
1115 assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
1116 \&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
1117 standard output.
1118 .IP "\fB\-v\fR" 4
1119 .IX Item "-v"
1120 Print (on standard error output) the commands executed to run the stages
1121 of compilation.  Also print the version number of the compiler driver
1122 program and of the preprocessor and the compiler proper.
1123 .IP "\fB\-###\fR" 4
1124 .IX Item "-###"
1125 Like \fB\-v\fR except the commands are not executed and all command
1126 arguments are quoted.  This is useful for shell scripts to capture the
1127 driver-generated command lines.
1128 .IP "\fB\-pipe\fR" 4
1129 .IX Item "-pipe"
1130 Use pipes rather than temporary files for communication between the
1131 various stages of compilation.  This fails to work on some systems where
1132 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
1133 no trouble.
1134 .IP "\fB\-combine\fR" 4
1135 .IX Item "-combine"
1136 If you are compiling multiple source files, this option tells the driver
1137 to pass all the source files to the compiler at once (for those
1138 languages for which the compiler can handle this).  This will allow
1139 intermodule analysis (\s-1IMA\s0) to be performed by the compiler.  Currently the only
1140 language for which this is supported is C.  If you pass source files for
1141 multiple languages to the driver, using this option, the driver will invoke
1142 the compiler(s) that support \s-1IMA\s0 once each, passing each compiler all the
1143 source files appropriate for it.  For those languages that do not support
1144 \&\s-1IMA\s0 this option will be ignored, and the compiler will be invoked once for
1145 each source file in that language.  If you use this option in conjunction
1146 with \fB\-save\-temps\fR, the compiler will generate multiple
1147 pre-processed files
1148 (one for each source file), but only one (combined) \fI.o\fR or
1149 \&\fI.s\fR file.
1150 .IP "\fB\-\-help\fR" 4
1151 .IX Item "--help"
1152 Print (on the standard output) a description of the command line options
1153 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
1154 then \fB\-\-help\fR will also be passed on to the various processes
1155 invoked by \fBgcc\fR, so that they can display the command line options
1156 they accept.  If the \fB\-Wextra\fR option has also been specified
1157 (prior to the \fB\-\-help\fR option), then command line options which
1158 have no documentation associated with them will also be displayed.
1159 .IP "\fB\-\-target\-help\fR" 4
1160 .IX Item "--target-help"
1161 Print (on the standard output) a description of target-specific command
1162 line options for each tool.  For some targets extra target-specific
1163 information may also be printed.
1164 .IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
1165 .IX Item "--help={class|[^]qualifier}[,...]"
1166 Print (on the standard output) a description of the command line
1167 options understood by the compiler that fit into all specified classes
1168 and qualifiers.  These are the supported classes:
1169 .RS 4
1170 .IP "\fBoptimizers\fR" 4
1171 .IX Item "optimizers"
1172 This will display all of the optimization options supported by the
1173 compiler.
1174 .IP "\fBwarnings\fR" 4
1175 .IX Item "warnings"
1176 This will display all of the options controlling warning messages
1177 produced by the compiler.
1178 .IP "\fBtarget\fR" 4
1179 .IX Item "target"
1180 This will display target-specific options.  Unlike the
1181 \&\fB\-\-target\-help\fR option however, target-specific options of the
1182 linker and assembler will not be displayed.  This is because those
1183 tools do not currently support the extended \fB\-\-help=\fR syntax.
1184 .IP "\fBparams\fR" 4
1185 .IX Item "params"
1186 This will display the values recognized by the \fB\-\-param\fR
1187 option.
1188 .IP "\fIlanguage\fR" 4
1189 .IX Item "language"
1190 This will display the options supported for \fIlanguage\fR, where 
1191 \&\fIlanguage\fR is the name of one of the languages supported in this 
1192 version of \s-1GCC\s0.
1193 .IP "\fBcommon\fR" 4
1194 .IX Item "common"
1195 This will display the options that are common to all languages.
1196 .RE
1197 .RS 4
1198 .Sp
1199 These are the supported qualifiers:
1200 .IP "\fBundocumented\fR" 4
1201 .IX Item "undocumented"
1202 Display only those options which are undocumented.
1203 .IP "\fBjoined\fR" 4
1204 .IX Item "joined"
1205 Display options which take an argument that appears after an equal
1206 sign in the same continuous piece of text, such as:
1207 \&\fB\-\-help=target\fR.
1208 .IP "\fBseparate\fR" 4
1209 .IX Item "separate"
1210 Display options which take an argument that appears as a separate word
1211 following the original option, such as: \fB\-o output-file\fR.
1212 .RE
1213 .RS 4
1214 .Sp
1215 Thus for example to display all the undocumented target-specific
1216 switches supported by the compiler the following can be used:
1217 .Sp
1218 .Vb 1
1219 \&        \-\-help=target,undocumented
1220 .Ve
1221 .Sp
1222 The sense of a qualifier can be inverted by prefixing it with the
1223 \&\fB^\fR character, so for example to display all binary warning
1224 options (i.e., ones that are either on or off and that do not take an
1225 argument), which have a description the following can be used:
1226 .Sp
1227 .Vb 1
1228 \&        \-\-help=warnings,^joined,^undocumented
1229 .Ve
1230 .Sp
1231 The argument to \fB\-\-help=\fR should not consist solely of inverted
1232 qualifiers.
1233 .Sp
1234 Combining several classes is possible, although this usually
1235 restricts the output by so much that there is nothing to display.  One
1236 case where it does work however is when one of the classes is
1237 \&\fItarget\fR.  So for example to display all the target-specific
1238 optimization options the following can be used:
1239 .Sp
1240 .Vb 1
1241 \&        \-\-help=target,optimizers
1242 .Ve
1243 .Sp
1244 The \fB\-\-help=\fR option can be repeated on the command line.  Each
1245 successive use will display its requested class of options, skipping
1246 those that have already been displayed.
1247 .Sp
1248 If the \fB\-Q\fR option appears on the command line before the
1249 \&\fB\-\-help=\fR option, then the descriptive text displayed by
1250 \&\fB\-\-help=\fR is changed.  Instead of describing the displayed
1251 options, an indication is given as to whether the option is enabled,
1252 disabled or set to a specific value (assuming that the compiler
1253 knows this at the point where the \fB\-\-help=\fR option is used).
1254 .Sp
1255 Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
1256 .Sp
1257 .Vb 5
1258 \&          % gcc \-Q \-mabi=2 \-\-help=target \-c
1259 \&          The following options are target specific:
1260 \&          \-mabi=                                2
1261 \&          \-mabort\-on\-noreturn                   [disabled]
1262 \&          \-mapcs                                [disabled]
1263 .Ve
1264 .Sp
1265 The output is sensitive to the effects of previous command line
1266 options, so for example it is possible to find out which optimizations
1267 are enabled at \fB\-O2\fR by using:
1268 .Sp
1269 .Vb 1
1270 \&        \-Q \-O2 \-\-help=optimizers
1271 .Ve
1272 .Sp
1273 Alternatively you can discover which binary optimizations are enabled
1274 by \fB\-O3\fR by using:
1275 .Sp
1276 .Vb 3
1277 \&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
1278 \&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
1279 \&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
1280 .Ve
1281 .RE
1282 .IP "\fB\-no\-canonical\-prefixes\fR" 4
1283 .IX Item "-no-canonical-prefixes"
1284 Do not expand any symbolic links, resolve references to \fB/../\fR
1285 or \fB/./\fR, or make the path absolute when generating a relative
1286 prefix.
1287 .IP "\fB\-\-version\fR" 4
1288 .IX Item "--version"
1289 Display the version number and copyrights of the invoked \s-1GCC\s0.
1290 .IP "\fB\-wrapper\fR" 4
1291 .IX Item "-wrapper"
1292 Invoke all subcommands under a wrapper program. It takes a single
1293 comma separated list as an argument, which will be used to invoke
1294 the wrapper:
1295 .Sp
1296 .Vb 1
1297 \&        gcc \-c t.c \-wrapper gdb,\-\-args
1298 .Ve
1299 .Sp
1300 This will invoke all subprograms of gcc under \*(L"gdb \-\-args\*(R",
1301 thus cc1 invocation will be \*(L"gdb \-\-args cc1 ...\*(R".
1302 .IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
1303 .IX Item "-fplugin=name.so"
1304 Load the plugin code in file \fIname\fR.so, assumed to be a
1305 shared object to be dlopen'd by the compiler.  The base name of
1306 the shared object file is used to identify the plugin for the
1307 purposes of argument parsing (See
1308 \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
1309 Each plugin should define the callback functions specified in the
1310 Plugins \s-1API\s0.
1311 .IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
1312 .IX Item "-fplugin-arg-name-key=value"
1313 Define an argument called \fIkey\fR with a value of \fIvalue\fR
1314 for the plugin called \fIname\fR.
1315 .IP "\fB@\fR\fIfile\fR" 4
1316 .IX Item "@file"
1317 Read command-line options from \fIfile\fR.  The options read are
1318 inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
1319 does not exist, or cannot be read, then the option will be treated
1320 literally, and not removed.  
1321 .Sp
1322 Options in \fIfile\fR are separated by whitespace.  A whitespace
1323 character may be included in an option by surrounding the entire
1324 option in either single or double quotes.  Any character (including a
1325 backslash) may be included by prefixing the character to be included
1326 with a backslash.  The \fIfile\fR may itself contain additional
1327 @\fIfile\fR options; any such options will be processed recursively.
1328 .Sh "Compiling \*(C+ Programs"
1329 .IX Subsection "Compiling  Programs"
1330 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
1331 \&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
1332 \&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
1333 \&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
1334 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
1335 files with these names and compiles them as \*(C+ programs even if you
1336 call the compiler the same way as for compiling C programs (usually
1337 with the name \fBgcc\fR).
1338 .PP
1339 However, the use of \fBgcc\fR does not add the \*(C+ library.
1340 \&\fBg++\fR is a program that calls \s-1GCC\s0 and treats \fB.c\fR,
1341 \&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
1342 files unless \fB\-x\fR is used, and automatically specifies linking
1343 against the \*(C+ library.  This program is also useful when
1344 precompiling a C header file with a \fB.h\fR extension for use in \*(C+
1345 compilations.  On many systems, \fBg++\fR is also installed with
1346 the name \fBc++\fR.
1347 .PP
1348 When you compile \*(C+ programs, you may specify many of the same
1349 command-line options that you use for compiling programs in any
1350 language; or command-line options meaningful for C and related
1351 languages; or options that are meaningful only for \*(C+ programs.
1352 .Sh "Options Controlling C Dialect"
1353 .IX Subsection "Options Controlling C Dialect"
1354 The following options control the dialect of C (or languages derived
1355 from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
1356 accepts:
1357 .IP "\fB\-ansi\fR" 4
1358 .IX Item "-ansi"
1359 In C mode, this is equivalent to \fB\-std=c89\fR. In \*(C+ mode, it is
1360 equivalent to \fB\-std=c++98\fR.
1361 .Sp
1362 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
1363 C90 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
1364 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
1365 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
1366 type of system you are using.  It also enables the undesirable and
1367 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
1368 it disables recognition of \*(C+ style \fB//\fR comments as well as
1369 the \f(CW\*(C`inline\*(C'\fR keyword.
1370 .Sp
1371 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
1372 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
1373 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
1374 course, but it is useful to put them in header files that might be included
1375 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
1376 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
1377 without \fB\-ansi\fR.
1378 .Sp
1379 The \fB\-ansi\fR option does not cause non-ISO programs to be
1380 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
1381 addition to \fB\-ansi\fR.  
1382 .Sp
1383 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
1384 option is used.  Some header files may notice this macro and refrain
1385 from declaring certain functions or defining certain macros that the
1386 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
1387 programs that might use these names for other things.
1388 .Sp
1389 Functions that would normally be built in but do not have semantics
1390 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
1391 functions when \fB\-ansi\fR is used.  
1392 .IP "\fB\-std=\fR" 4
1393 .IX Item "-std="
1394 Determine the language standard.   This option
1395 is currently only supported when compiling C or \*(C+. 
1396 .Sp
1397 The compiler can accept several base standards, such as \fBc89\fR or
1398 \&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
1399 \&\fBgnu89\fR or \fBgnu++98\fR.  By specifying a base standard, the
1400 compiler will accept all programs following that standard and those
1401 using \s-1GNU\s0 extensions that do not contradict it.  For example,
1402 \&\fB\-std=c89\fR turns off certain features of \s-1GCC\s0 that are
1403 incompatible with \s-1ISO\s0 C90, such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
1404 keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
1405 \&\s-1ISO\s0 C90, such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
1406 expression. On the other hand, by specifying a \s-1GNU\s0 dialect of a
1407 standard, all features the compiler support are enabled, even when
1408 those features change the meaning of the base standard and some
1409 strict-conforming programs may be rejected.  The particular standard
1410 is used by \fB\-pedantic\fR to identify which features are \s-1GNU\s0
1411 extensions given that version of the standard. For example
1412 \&\fB\-std=gnu89 \-pedantic\fR would warn about \*(C+ style \fB//\fR
1413 comments, while \fB\-std=gnu99 \-pedantic\fR would not.
1414 .Sp
1415 A value for this option must be provided; possible values are
1416 .RS 4
1417 .IP "\fBc89\fR" 4
1418 .IX Item "c89"
1419 .PD 0
1420 .IP "\fBiso9899:1990\fR" 4
1421 .IX Item "iso9899:1990"
1422 .PD
1423 Support all \s-1ISO\s0 C90 programs (certain \s-1GNU\s0 extensions that conflict
1424 with \s-1ISO\s0 C90 are disabled). Same as \fB\-ansi\fR for C code.
1425 .IP "\fBiso9899:199409\fR" 4
1426 .IX Item "iso9899:199409"
1427 \&\s-1ISO\s0 C90 as modified in amendment 1.
1428 .IP "\fBc99\fR" 4
1429 .IX Item "c99"
1430 .PD 0
1431 .IP "\fBc9x\fR" 4
1432 .IX Item "c9x"
1433 .IP "\fBiso9899:1999\fR" 4
1434 .IX Item "iso9899:1999"
1435 .IP "\fBiso9899:199x\fR" 4
1436 .IX Item "iso9899:199x"
1437 .PD
1438 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
1439 <\fBhttp://gcc.gnu.org/gcc\-4.4/c99status.html\fR> for more information.  The
1440 names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
1441 .IP "\fBgnu89\fR" 4
1442 .IX Item "gnu89"
1443 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C90 (including some C99 features). This
1444 is the default for C code.
1445 .IP "\fBgnu99\fR" 4
1446 .IX Item "gnu99"
1447 .PD 0
1448 .IP "\fBgnu9x\fR" 4
1449 .IX Item "gnu9x"
1450 .PD
1451 \&\s-1GNU\s0 dialect of \s-1ISO\s0 C99.  When \s-1ISO\s0 C99 is fully implemented in \s-1GCC\s0,
1452 this will become the default.  The name \fBgnu9x\fR is deprecated.
1453 .IP "\fBc++98\fR" 4
1454 .IX Item "c++98"
1455 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments. Same as \fB\-ansi\fR for
1456 \&\*(C+ code.
1457 .IP "\fBgnu++98\fR" 4
1458 .IX Item "gnu++98"
1459 \&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.  This is the default for
1460 \&\*(C+ code.
1461 .IP "\fBc++0x\fR" 4
1462 .IX Item "c++0x"
1463 The working draft of the upcoming \s-1ISO\s0 \*(C+0x standard. This option
1464 enables experimental features that are likely to be included in
1465 \&\*(C+0x. The working draft is constantly changing, and any feature that is
1466 enabled by this flag may be removed from future versions of \s-1GCC\s0 if it is
1467 not part of the \*(C+0x standard.
1468 .IP "\fBgnu++0x\fR" 4
1469 .IX Item "gnu++0x"
1470 \&\s-1GNU\s0 dialect of \fB\-std=c++0x\fR. This option enables
1471 experimental features that may be removed in future versions of \s-1GCC\s0.
1472 .RE
1473 .RS 4
1474 .RE
1475 .IP "\fB\-fgnu89\-inline\fR" 4
1476 .IX Item "-fgnu89-inline"
1477 The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
1478 \&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
1479   This option
1480 is accepted and ignored by \s-1GCC\s0 versions 4.1.3 up to but not including
1481 4.3.  In \s-1GCC\s0 versions 4.3 and later it changes the behavior of \s-1GCC\s0 in
1482 C99 mode.  Using this option is roughly equivalent to adding the
1483 \&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
1484 .Sp
1485 The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
1486 C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
1487 specifies the default behavior).  This option was first supported in
1488 \&\s-1GCC\s0 4.3.  This option is not supported in C89 or gnu89 mode.
1489 .Sp
1490 The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
1491 \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
1492 in effect for \f(CW\*(C`inline\*(C'\fR functions.  
1493 .IP "\fB\-aux\-info\fR \fIfilename\fR" 4
1494 .IX Item "-aux-info filename"
1495 Output to the given filename prototyped declarations for all functions
1496 declared and/or defined in a translation unit, including those in header
1497 files.  This option is silently ignored in any language other than C.
1498 .Sp
1499 Besides declarations, the file indicates, in comments, the origin of
1500 each declaration (source file and line), whether the declaration was
1501 implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
1502 \&\fBO\fR for old, respectively, in the first character after the line
1503 number and the colon), and whether it came from a declaration or a
1504 definition (\fBC\fR or \fBF\fR, respectively, in the following
1505 character).  In the case of function definitions, a K&R\-style list of
1506 arguments followed by their declarations is also provided, inside
1507 comments, after the declaration.
1508 .IP "\fB\-fno\-asm\fR" 4
1509 .IX Item "-fno-asm"
1510 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
1511 keyword, so that code can use these words as identifiers.  You can use
1512 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
1513 instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
1514 .Sp
1515 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
1516 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
1517 use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
1518 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
1519 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
1520 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
1521 .IP "\fB\-fno\-builtin\fR" 4
1522 .IX Item "-fno-builtin"
1523 .PD 0
1524 .IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
1525 .IX Item "-fno-builtin-function"
1526 .PD
1527 Don't recognize built-in functions that do not begin with
1528 \&\fB_\|_builtin_\fR as prefix.  
1529 .Sp
1530 \&\s-1GCC\s0 normally generates special code to handle certain built-in functions
1531 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
1532 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
1533 may become inline copy loops.  The resulting code is often both smaller
1534 and faster, but since the function calls no longer appear as such, you
1535 cannot set a breakpoint on those calls, nor can you change the behavior
1536 of the functions by linking with a different library.  In addition,
1537 when a function is recognized as a built-in function, \s-1GCC\s0 may use
1538 information about that function to warn about problems with calls to
1539 that function, or to generate more efficient code, even if the
1540 resulting code still contains calls to that function.  For example,
1541 warnings are given with \fB\-Wformat\fR for bad calls to
1542 \&\f(CW\*(C`printf\*(C'\fR, when \f(CW\*(C`printf\*(C'\fR is built in, and \f(CW\*(C`strlen\*(C'\fR is
1543 known not to modify global memory.
1544 .Sp
1545 With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
1546 only the built-in function \fIfunction\fR is
1547 disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
1548 function is named that is not built-in in this version of \s-1GCC\s0, this
1549 option is ignored.  There is no corresponding
1550 \&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
1551 built-in functions selectively when using \fB\-fno\-builtin\fR or
1552 \&\fB\-ffreestanding\fR, you may define macros such as:
1553 .Sp
1554 .Vb 2
1555 \&        #define abs(n)          __builtin_abs ((n))
1556 \&        #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1557 .Ve
1558 .IP "\fB\-fhosted\fR" 4
1559 .IX Item "-fhosted"
1560 Assert that compilation takes place in a hosted environment.  This implies
1561 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
1562 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
1563 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
1564 This is equivalent to \fB\-fno\-freestanding\fR.
1565 .IP "\fB\-ffreestanding\fR" 4
1566 .IX Item "-ffreestanding"
1567 Assert that compilation takes place in a freestanding environment.  This
1568 implies \fB\-fno\-builtin\fR.  A freestanding environment
1569 is one in which the standard library may not exist, and program startup may
1570 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
1571 This is equivalent to \fB\-fno\-hosted\fR.
1572 .IP "\fB\-fopenmp\fR" 4
1573 .IX Item "-fopenmp"
1574 Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
1575 \&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
1576 compiler generates parallel code according to the OpenMP Application
1577 Program Interface v2.5 <\fBhttp://www.openmp.org/\fR>.  This option
1578 implies \fB\-pthread\fR, and thus is only supported on targets that
1579 have support for \fB\-pthread\fR.
1580 .IP "\fB\-fms\-extensions\fR" 4
1581 .IX Item "-fms-extensions"
1582 Accept some non-standard constructs used in Microsoft header files.
1583 .Sp
1584 Some cases of unnamed fields in structures and unions are only
1585 accepted with this option.  
1586 .IP "\fB\-trigraphs\fR" 4
1587 .IX Item "-trigraphs"
1588 Support \s-1ISO\s0 C trigraphs.  The \fB\-ansi\fR option (and \fB\-std\fR
1589 options for strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
1590 .IP "\fB\-no\-integrated\-cpp\fR" 4
1591 .IX Item "-no-integrated-cpp"
1592 Performs a compilation in two passes: preprocessing and compiling.  This
1593 option allows a user supplied \*(L"cc1\*(R", \*(L"cc1plus\*(R", or \*(L"cc1obj\*(R" via the
1594 \&\fB\-B\fR option.  The user supplied compilation step can then add in
1595 an additional preprocessing step after normal preprocessing but before
1596 compiling.  The default is to use the integrated cpp (internal cpp)
1597 .Sp
1598 The semantics of this option will change if \*(L"cc1\*(R", \*(L"cc1plus\*(R", and
1599 \&\*(L"cc1obj\*(R" are merged.
1600 .IP "\fB\-traditional\fR" 4
1601 .IX Item "-traditional"
1602 .PD 0
1603 .IP "\fB\-traditional\-cpp\fR" 4
1604 .IX Item "-traditional-cpp"
1605 .PD
1606 Formerly, these options caused \s-1GCC\s0 to attempt to emulate a pre-standard
1607 C compiler.  They are now only supported with the \fB\-E\fR switch.
1608 The preprocessor continues to support a pre-standard mode.  See the \s-1GNU\s0
1609 \&\s-1CPP\s0 manual for details.
1610 .IP "\fB\-fcond\-mismatch\fR" 4
1611 .IX Item "-fcond-mismatch"
1612 Allow conditional expressions with mismatched types in the second and
1613 third arguments.  The value of such an expression is void.  This option
1614 is not supported for \*(C+.
1615 .IP "\fB\-flax\-vector\-conversions\fR" 4
1616 .IX Item "-flax-vector-conversions"
1617 Allow implicit conversions between vectors with differing numbers of
1618 elements and/or incompatible element types.  This option should not be
1619 used for new code.
1620 .IP "\fB\-funsigned\-char\fR" 4
1621 .IX Item "-funsigned-char"
1622 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1623 .Sp
1624 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1625 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1626 \&\f(CW\*(C`signed char\*(C'\fR by default.
1627 .Sp
1628 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1629 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1630 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1631 expect it to be signed, or expect it to be unsigned, depending on the
1632 machines they were written for.  This option, and its inverse, let you
1633 make such a program work with the opposite default.
1634 .Sp
1635 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1636 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1637 is always just like one of those two.
1638 .IP "\fB\-fsigned\-char\fR" 4
1639 .IX Item "-fsigned-char"
1640 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1641 .Sp
1642 Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
1643 the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
1644 \&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
1645 .IP "\fB\-fsigned\-bitfields\fR" 4
1646 .IX Item "-fsigned-bitfields"
1647 .PD 0
1648 .IP "\fB\-funsigned\-bitfields\fR" 4
1649 .IX Item "-funsigned-bitfields"
1650 .IP "\fB\-fno\-signed\-bitfields\fR" 4
1651 .IX Item "-fno-signed-bitfields"
1652 .IP "\fB\-fno\-unsigned\-bitfields\fR" 4
1653 .IX Item "-fno-unsigned-bitfields"
1654 .PD
1655 These options control whether a bit-field is signed or unsigned, when the
1656 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1657 default, such a bit-field is signed, because this is consistent: the
1658 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1659 .Sh "Options Controlling \*(C+ Dialect"
1660 .IX Subsection "Options Controlling  Dialect"
1661 This section describes the command-line options that are only meaningful
1662 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1663 regardless of what language your program is in.  For example, you
1664 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1665 .PP
1666 .Vb 1
1667 \&        g++ \-g \-frepo \-O \-c firstClass.C
1668 .Ve
1669 .PP
1670 In this example, only \fB\-frepo\fR is an option meant
1671 only for \*(C+ programs; you can use the other options with any
1672 language supported by \s-1GCC\s0.
1673 .PP
1674 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1675 .IP "\fB\-fabi\-version=\fR\fIn\fR" 4
1676 .IX Item "-fabi-version=n"
1677 Use version \fIn\fR of the \*(C+ \s-1ABI\s0.  Version 2 is the version of the
1678 \&\*(C+ \s-1ABI\s0 that first appeared in G++ 3.4.  Version 1 is the version of
1679 the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.  Version 0 will always be
1680 the version that conforms most closely to the \*(C+ \s-1ABI\s0 specification.
1681 Therefore, the \s-1ABI\s0 obtained using version 0 will change as \s-1ABI\s0 bugs
1682 are fixed.
1683 .Sp
1684 The default is version 2.
1685 .IP "\fB\-fno\-access\-control\fR" 4
1686 .IX Item "-fno-access-control"
1687 Turn off all access checking.  This switch is mainly useful for working
1688 around bugs in the access control code.
1689 .IP "\fB\-fcheck\-new\fR" 4
1690 .IX Item "-fcheck-new"
1691 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1692 before attempting to modify the storage allocated.  This check is
1693 normally unnecessary because the \*(C+ standard specifies that
1694 \&\f(CW\*(C`operator new\*(C'\fR will only return \f(CW0\fR if it is declared
1695 \&\fB\f(BIthrow()\fB\fR, in which case the compiler will always check the
1696 return value even without this option.  In all other cases, when
1697 \&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
1698 exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
1699 \&\fBnew (nothrow)\fR.
1700 .IP "\fB\-fconserve\-space\fR" 4
1701 .IX Item "-fconserve-space"
1702 Put uninitialized or runtime-initialized global variables into the
1703 common segment, as C does.  This saves space in the executable at the
1704 cost of not diagnosing duplicate definitions.  If you compile with this
1705 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1706 completed, you may have an object that is being destroyed twice because
1707 two definitions were merged.
1708 .Sp
1709 This option is no longer useful on most targets, now that support has
1710 been added for putting variables into \s-1BSS\s0 without making them common.
1711 .IP "\fB\-ffriend\-injection\fR" 4
1712 .IX Item "-ffriend-injection"
1713 Inject friend functions into the enclosing namespace, so that they are
1714 visible outside the scope of the class in which they are declared.
1715 Friend functions were documented to work this way in the old Annotated
1716 \&\*(C+ Reference Manual, and versions of G++ before 4.1 always worked
1717 that way.  However, in \s-1ISO\s0 \*(C+ a friend function which is not declared
1718 in an enclosing scope can only be found using argument dependent
1719 lookup.  This option causes friends to be injected as they were in
1720 earlier releases.
1721 .Sp
1722 This option is for compatibility, and may be removed in a future
1723 release of G++.
1724 .IP "\fB\-fno\-elide\-constructors\fR" 4
1725 .IX Item "-fno-elide-constructors"
1726 The \*(C+ standard allows an implementation to omit creating a temporary
1727 which is only used to initialize another object of the same type.
1728 Specifying this option disables that optimization, and forces G++ to
1729 call the copy constructor in all cases.
1730 .IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
1731 .IX Item "-fno-enforce-eh-specs"
1732 Don't generate code to check for violation of exception specifications
1733 at runtime.  This option violates the \*(C+ standard, but may be useful
1734 for reducing code size in production builds, much like defining
1735 \&\fB\s-1NDEBUG\s0\fR.  This does not give user code permission to throw
1736 exceptions in violation of the exception specifications; the compiler
1737 will still optimize based on the specifications, so throwing an
1738 unexpected exception will result in undefined behavior.
1739 .IP "\fB\-ffor\-scope\fR" 4
1740 .IX Item "-ffor-scope"
1741 .PD 0
1742 .IP "\fB\-fno\-for\-scope\fR" 4
1743 .IX Item "-fno-for-scope"
1744 .PD
1745 If \fB\-ffor\-scope\fR is specified, the scope of variables declared in
1746 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1747 as specified by the \*(C+ standard.
1748 If \fB\-fno\-for\-scope\fR is specified, the scope of variables declared in
1749 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1750 as was the case in old versions of G++, and other (traditional)
1751 implementations of \*(C+.
1752 .Sp
1753 The default if neither flag is given to follow the standard,
1754 but to allow and give a warning for old-style code that would
1755 otherwise be invalid, or have different behavior.
1756 .IP "\fB\-fno\-gnu\-keywords\fR" 4
1757 .IX Item "-fno-gnu-keywords"
1758 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1759 word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
1760 \&\fB\-ansi\fR implies \fB\-fno\-gnu\-keywords\fR.
1761 .IP "\fB\-fno\-implicit\-templates\fR" 4
1762 .IX Item "-fno-implicit-templates"
1763 Never emit code for non-inline templates which are instantiated
1764 implicitly (i.e. by use); only emit code for explicit instantiations.
1765 .IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
1766 .IX Item "-fno-implicit-inline-templates"
1767 Don't emit code for implicit instantiations of inline templates, either.
1768 The default is to handle inlines differently so that compiles with and
1769 without optimization will need the same set of explicit instantiations.
1770 .IP "\fB\-fno\-implement\-inlines\fR" 4
1771 .IX Item "-fno-implement-inlines"
1772 To save space, do not emit out-of-line copies of inline functions
1773 controlled by \fB#pragma implementation\fR.  This will cause linker
1774 errors if these functions are not inlined everywhere they are called.
1775 .IP "\fB\-fms\-extensions\fR" 4
1776 .IX Item "-fms-extensions"
1777 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1778 int and getting a pointer to member function via non-standard syntax.
1779 .IP "\fB\-fno\-nonansi\-builtins\fR" 4
1780 .IX Item "-fno-nonansi-builtins"
1781 Disable built-in declarations of functions that are not mandated by
1782 \&\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,
1783 \&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
1784 .IP "\fB\-fno\-operator\-names\fR" 4
1785 .IX Item "-fno-operator-names"
1786 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1787 \&\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
1788 synonyms as keywords.
1789 .IP "\fB\-fno\-optional\-diags\fR" 4
1790 .IX Item "-fno-optional-diags"
1791 Disable diagnostics that the standard says a compiler does not need to
1792 issue.  Currently, the only such diagnostic issued by G++ is the one for
1793 a name having multiple meanings within a class.
1794 .IP "\fB\-fpermissive\fR" 4
1795 .IX Item "-fpermissive"
1796 Downgrade some diagnostics about nonconformant code from errors to
1797 warnings.  Thus, using \fB\-fpermissive\fR will allow some
1798 nonconforming code to compile.
1799 .IP "\fB\-frepo\fR" 4
1800 .IX Item "-frepo"
1801 Enable automatic template instantiation at link time.  This option also
1802 implies \fB\-fno\-implicit\-templates\fR.  
1803 .IP "\fB\-fno\-rtti\fR" 4
1804 .IX Item "-fno-rtti"
1805 Disable generation of information about every class with virtual
1806 functions for use by the \*(C+ runtime type identification features
1807 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1808 of the language, you can save some space by using this flag.  Note that
1809 exception handling uses the same information, but it will generate it as
1810 needed. The \fBdynamic_cast\fR operator can still be used for casts that
1811 do not require runtime type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
1812 unambiguous base classes.
1813 .IP "\fB\-fstats\fR" 4
1814 .IX Item "-fstats"
1815 Emit statistics about front-end processing at the end of the compilation.
1816 This information is generally only useful to the G++ development team.
1817 .IP "\fB\-ftemplate\-depth\-\fR\fIn\fR" 4
1818 .IX Item "-ftemplate-depth-n"
1819 Set the maximum instantiation depth for template classes to \fIn\fR.
1820 A limit on the template instantiation depth is needed to detect
1821 endless recursions during template class instantiation.  \s-1ANSI/ISO\s0 \*(C+
1822 conforming programs must not rely on a maximum depth greater than 17.
1823 .IP "\fB\-fno\-threadsafe\-statics\fR" 4
1824 .IX Item "-fno-threadsafe-statics"
1825 Do not emit the extra code to use the routines specified in the \*(C+
1826 \&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
1827 option to reduce code size slightly in code that doesn't need to be
1828 thread\-safe.
1829 .IP "\fB\-fuse\-cxa\-atexit\fR" 4
1830 .IX Item "-fuse-cxa-atexit"
1831 Register destructors for objects with static storage duration with the
1832 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1833 This option is required for fully standards-compliant handling of static
1834 destructors, but will only work if your C library supports
1835 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1836 .IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
1837 .IX Item "-fno-use-cxa-get-exception-ptr"
1838 Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
1839 will cause \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
1840 if the runtime routine is not available.
1841 .IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
1842 .IX Item "-fvisibility-inlines-hidden"
1843 This switch declares that the user does not attempt to compare
1844 pointers to inline methods where the addresses of the two functions
1845 were taken in different shared objects.
1846 .Sp
1847 The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
1848 \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
1849 appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
1850 when used within the \s-1DSO\s0.  Enabling this option can have a dramatic effect
1851 on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
1852 dynamic export table when the library makes heavy use of templates.
1853 .Sp
1854 The behavior of this switch is not quite the same as marking the
1855 methods as hidden directly, because it does not affect static variables
1856 local to the function or cause the compiler to deduce that
1857 the function is defined in only one shared object.
1858 .Sp
1859 You may mark a method as having a visibility explicitly to negate the
1860 effect of the switch for that method.  For example, if you do want to
1861 compare pointers to a particular inline method, you might mark it as
1862 having default visibility.  Marking the enclosing class with explicit
1863 visibility will have no effect.
1864 .Sp
1865 Explicitly instantiated inline methods are unaffected by this option
1866 as their linkage might otherwise cross a shared library boundary.
1867 .IP "\fB\-fvisibility\-ms\-compat\fR" 4
1868 .IX Item "-fvisibility-ms-compat"
1869 This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
1870 linkage model compatible with that of Microsoft Visual Studio.
1871 .Sp
1872 The flag makes these changes to \s-1GCC\s0's linkage model:
1873 .RS 4
1874 .IP "1." 4
1875 It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
1876 \&\fB\-fvisibility=hidden\fR.
1877 .IP "2." 4
1878 Types, but not their members, are not hidden by default.
1879 .IP "3." 4
1880 The One Definition Rule is relaxed for types without explicit
1881 visibility specifications which are defined in more than one different
1882 shared object: those declarations are permitted if they would have
1883 been permitted when this option was not used.
1884 .RE
1885 .RS 4
1886 .Sp
1887 In new code it is better to use \fB\-fvisibility=hidden\fR and
1888 export those classes which are intended to be externally visible.
1889 Unfortunately it is possible for code to rely, perhaps accidentally,
1890 on the Visual Studio behavior.
1891 .Sp
1892 Among the consequences of these changes are that static data members
1893 of the same type with the same name but defined in different shared
1894 objects will be different, so changing one will not change the other;
1895 and that pointers to function members defined in different shared
1896 objects may not compare equal.  When this flag is given, it is a
1897 violation of the \s-1ODR\s0 to define types with the same name differently.
1898 .RE
1899 .IP "\fB\-fno\-weak\fR" 4
1900 .IX Item "-fno-weak"
1901 Do not use weak symbol support, even if it is provided by the linker.
1902 By default, G++ will use weak symbols if they are available.  This
1903 option exists only for testing, and should not be used by end\-users;
1904 it will result in inferior code and has no benefits.  This option may
1905 be removed in a future release of G++.
1906 .IP "\fB\-nostdinc++\fR" 4
1907 .IX Item "-nostdinc++"
1908 Do not search for header files in the standard directories specific to
1909 \&\*(C+, but do still search the other standard directories.  (This option
1910 is used when building the \*(C+ library.)
1911 .PP
1912 In addition, these optimization, warning, and code generation options
1913 have meanings only for \*(C+ programs:
1914 .IP "\fB\-fno\-default\-inline\fR" 4
1915 .IX Item "-fno-default-inline"
1916 Do not assume \fBinline\fR for functions defined inside a class scope.
1917   Note that these
1918 functions will have linkage like inline functions; they just won't be
1919 inlined by default.
1920 .IP "\fB\-Wabi\fR (C, Objective\-C, \*(C+ and Objective\-\*(C+ only)" 4
1921 .IX Item "-Wabi (C, Objective-C,  and Objective- only)"
1922 Warn when G++ generates code that is probably not compatible with the
1923 vendor-neutral \*(C+ \s-1ABI\s0.  Although an effort has been made to warn about
1924 all such cases, there are probably some cases that are not warned about,
1925 even though G++ is generating incompatible code.  There may also be
1926 cases where warnings are emitted even though the code that is generated
1927 will be compatible.
1928 .Sp
1929 You should rewrite your code to avoid these warnings if you are
1930 concerned about the fact that code generated by G++ may not be binary
1931 compatible with code generated by other compilers.
1932 .Sp
1933 The known incompatibilities at this point include:
1934 .RS 4
1935 .IP "*" 4
1936 Incorrect handling of tail-padding for bit\-fields.  G++ may attempt to
1937 pack data into the same byte as a base class.  For example:
1938 .Sp
1939 .Vb 2
1940 \&        struct A { virtual void f(); int f1 : 1; };
1941 \&        struct B : public A { int f2 : 1; };
1942 .Ve
1943 .Sp
1944 In this case, G++ will place \f(CW\*(C`B::f2\*(C'\fR into the same byte
1945 as\f(CW\*(C`A::f1\*(C'\fR; other compilers will not.  You can avoid this problem
1946 by explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of the
1947 byte size on your platform; that will cause G++ and other compilers to
1948 layout \f(CW\*(C`B\*(C'\fR identically.
1949 .IP "*" 4
1950 Incorrect handling of tail-padding for virtual bases.  G++ does not use
1951 tail padding when laying out virtual bases.  For example:
1952 .Sp
1953 .Vb 3
1954 \&        struct A { virtual void f(); char c1; };
1955 \&        struct B { B(); char c2; };
1956 \&        struct C : public A, public virtual B {};
1957 .Ve
1958 .Sp
1959 In this case, G++ will not place \f(CW\*(C`B\*(C'\fR into the tail-padding for
1960 \&\f(CW\*(C`A\*(C'\fR; other compilers will.  You can avoid this problem by
1961 explicitly padding \f(CW\*(C`A\*(C'\fR so that its size is a multiple of its
1962 alignment (ignoring virtual base classes); that will cause G++ and other
1963 compilers to layout \f(CW\*(C`C\*(C'\fR identically.
1964 .IP "*" 4
1965 Incorrect handling of bit-fields with declared widths greater than that
1966 of their underlying types, when the bit-fields appear in a union.  For
1967 example:
1968 .Sp
1969 .Vb 1
1970 \&        union U { int i : 4096; };
1971 .Ve
1972 .Sp
1973 Assuming that an \f(CW\*(C`int\*(C'\fR does not have 4096 bits, G++ will make the
1974 union too small by the number of bits in an \f(CW\*(C`int\*(C'\fR.
1975 .IP "*" 4
1976 Empty classes can be placed at incorrect offsets.  For example:
1977 .Sp
1978 .Vb 1
1979 \&        struct A {};
1980 .Ve
1981 .Sp
1982 .Vb 4
1983 \&        struct B {
1984 \&          A a;
1985 \&          virtual void f ();
1986 \&        };
1987 .Ve
1988 .Sp
1989 .Vb 1
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 "*" 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 .Ve
2004 .Sp
2005 .Vb 2
2006 \&        template <template <typename> class Q>
2007 \&        void f(typename Q<int>::X) {}
2008 .Ve
2009 .Sp
2010 Instantiations of these templates may be mangled incorrectly.
2011 .RE
2012 .RS 4
2013 .Sp
2014 It also warns psABI related changes.  The known psABI changes at this
2015 point include:
2016 .IP "*" 4
2017 For SYSV/x86\-64, when passing union with long double, it is changed to
2018 pass in memory as specified in psABI.  For example:
2019 .Sp
2020 .Vb 4
2021 \&        union U {
2022 \&          long double ld;
2023 \&          int i;
2024 \&        };
2025 .Ve
2026 .Sp
2027 \&\f(CW\*(C`union U\*(C'\fR will always be passed in memory.
2028 .RE
2029 .RS 4
2030 .RE
2031 .IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
2032 .IX Item "-Wctor-dtor-privacy ( and Objective- only)"
2033 Warn when a class seems unusable because all the constructors or
2034 destructors in that class are private, and it has neither friends nor
2035 public static member functions.
2036 .IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
2037 .IX Item "-Wnon-virtual-dtor ( and Objective- only)"
2038 Warn when a class has virtual functions and accessible non-virtual
2039 destructor, in which case it would be possible but unsafe to delete
2040 an instance of a derived class through a pointer to the base class.
2041 This warning is also enabled if \-Weffc++ is specified.
2042 .IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
2043 .IX Item "-Wreorder ( and Objective- only)"
2044 Warn when the order of member initializers given in the code does not
2045 match the order in which they must be executed.  For instance:
2046 .Sp
2047 .Vb 5
2048 \&        struct A {
2049 \&          int i;
2050 \&          int j;
2051 \&          A(): j (0), i (1) { }
2052 \&        };
2053 .Ve
2054 .Sp
2055 The compiler will rearrange the member initializers for \fBi\fR
2056 and \fBj\fR to match the declaration order of the members, emitting
2057 a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
2058 .PP
2059 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
2060 .IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
2061 .IX Item "-Weffc++ ( and Objective- only)"
2062 Warn about violations of the following style guidelines from Scott Meyers'
2063 \&\fIEffective \*(C+\fR book:
2064 .RS 4
2065 .IP "*" 4
2066 Item 11:  Define a copy constructor and an assignment operator for classes
2067 with dynamically allocated memory.
2068 .IP "*" 4
2069 Item 12:  Prefer initialization to assignment in constructors.
2070 .IP "*" 4
2071 Item 14:  Make destructors virtual in base classes.
2072 .IP "*" 4
2073 Item 15:  Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
2074 .IP "*" 4
2075 Item 23:  Don't try to return a reference when you must return an object.
2076 .RE
2077 .RS 4
2078 .Sp
2079 Also warn about violations of the following style guidelines from
2080 Scott Meyers' \fIMore Effective \*(C+\fR book:
2081 .IP "*" 4
2082 Item 6:  Distinguish between prefix and postfix forms of increment and
2083 decrement operators.
2084 .IP "*" 4
2085 Item 7:  Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
2086 .RE
2087 .RS 4
2088 .Sp
2089 When selecting this option, be aware that the standard library
2090 headers do not obey all of these guidelines; use \fBgrep \-v\fR
2091 to filter out those warnings.
2092 .RE
2093 .IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
2094 .IX Item "-Wstrict-null-sentinel ( and Objective- only)"
2095 Warn also about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
2096 compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
2097 to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant not a null pointer,
2098 it is guaranteed to be of the same size as a pointer.  But this use is
2099 not portable across different compilers.
2100 .IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
2101 .IX Item "-Wno-non-template-friend ( and Objective- only)"
2102 Disable warnings when non-templatized friend functions are declared
2103 within a template.  Since the advent of explicit template specification
2104 support in G++, if the name of the friend is an unqualified-id (i.e.,
2105 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
2106 friend declare or define an ordinary, nontemplate function.  (Section
2107 14.5.3).  Before G++ implemented explicit specification, unqualified-ids
2108 could be interpreted as a particular specialization of a templatized
2109 function.  Because this non-conforming behavior is no longer the default
2110 behavior for G++, \fB\-Wnon\-template\-friend\fR allows the compiler to
2111 check existing code for potential trouble spots and is on by default.
2112 This new compiler behavior can be turned off with
2113 \&\fB\-Wno\-non\-template\-friend\fR which keeps the conformant compiler code
2114 but disables the helpful warning.
2115 .IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
2116 .IX Item "-Wold-style-cast ( and Objective- only)"
2117 Warn if an old-style (C\-style) cast to a non-void type is used within
2118 a \*(C+ program.  The new-style casts (\fBdynamic_cast\fR,
2119 \&\fBstatic_cast\fR, \fBreinterpret_cast\fR, and \fBconst_cast\fR) are
2120 less vulnerable to unintended effects and much easier to search for.
2121 .IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
2122 .IX Item "-Woverloaded-virtual ( and Objective- only)"
2123 Warn when a function declaration hides virtual functions from a
2124 base class.  For example, in:
2125 .Sp
2126 .Vb 3
2127 \&        struct A {
2128 \&          virtual void f();
2129 \&        };
2130 .Ve
2131 .Sp
2132 .Vb 3
2133 \&        struct B: public A {
2134 \&          void f(int);
2135 \&        };
2136 .Ve
2137 .Sp
2138 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
2139 like:
2140 .Sp
2141 .Vb 2
2142 \&        B* b;
2143 \&        b\->f();
2144 .Ve
2145 .Sp
2146 will fail to compile.
2147 .IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
2148 .IX Item "-Wno-pmf-conversions ( and Objective- only)"
2149 Disable the diagnostic for converting a bound pointer to member function
2150 to a plain pointer.
2151 .IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
2152 .IX Item "-Wsign-promo ( and Objective- only)"
2153 Warn when overload resolution chooses a promotion from unsigned or
2154 enumerated type to a signed type, over a conversion to an unsigned type of
2155 the same size.  Previous versions of G++ would try to preserve
2156 unsignedness, but the standard mandates the current behavior.
2157 .Sp
2158 .Vb 4
2159 \&        struct A {
2160 \&          operator int ();
2161 \&          A& operator = (int);
2162 \&        };
2163 .Ve
2164 .Sp
2165 .Vb 5
2166 \&        main ()
2167 \&        {
2168 \&          A a,b;
2169 \&          a = b;
2170 \&        }
2171 .Ve
2172 .Sp
2173 In this example, G++ will synthesize a default \fBA& operator =
2174 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
2175 .Sh "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
2176 .IX Subsection "Options Controlling Objective-C and Objective- Dialects"
2177 (\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
2178 languages themselves.  See 
2179 .PP
2180 This section describes the command-line options that are only meaningful
2181 for Objective-C and Objective\-\*(C+ programs, but you can also use most of
2182 the language-independent \s-1GNU\s0 compiler options.
2183 For example, you might compile a file \f(CW\*(C`some_class.m\*(C'\fR like this:
2184 .PP
2185 .Vb 1
2186 \&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
2187 .Ve
2188 .PP
2189 In this example, \fB\-fgnu\-runtime\fR is an option meant only for
2190 Objective-C and Objective\-\*(C+ programs; you can use the other options with
2191 any language supported by \s-1GCC\s0.
2192 .PP
2193 Note that since Objective-C is an extension of the C language, Objective-C
2194 compilations may also use options specific to the C front-end (e.g.,
2195 \&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
2196 \&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
2197 .PP
2198 Here is a list of options that are \fIonly\fR for compiling Objective-C
2199 and Objective\-\*(C+ programs:
2200 .IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
2201 .IX Item "-fconstant-string-class=class-name"
2202 Use \fIclass-name\fR as the name of the class to instantiate for each
2203 literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
2204 class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
2205 \&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
2206 \&\fB\-fconstant\-cfstrings\fR option, if also present, will override the
2207 \&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
2208 to be laid out as constant CoreFoundation strings.
2209 .IP "\fB\-fgnu\-runtime\fR" 4
2210 .IX Item "-fgnu-runtime"
2211 Generate object code compatible with the standard \s-1GNU\s0 Objective-C
2212 runtime.  This is the default for most types of systems.
2213 .IP "\fB\-fnext\-runtime\fR" 4
2214 .IX Item "-fnext-runtime"
2215 Generate output compatible with the NeXT runtime.  This is the default
2216 for NeXT-based systems, including Darwin and Mac \s-1OS\s0 X.  The macro
2217 \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
2218 used.
2219 .IP "\fB\-fno\-nil\-receivers\fR" 4
2220 .IX Item "-fno-nil-receivers"
2221 Assume that all Objective-C message dispatches (e.g.,
2222 \&\f(CW\*(C`[receiver message:arg]\*(C'\fR) in this translation unit ensure that the receiver
2223 is not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the runtime
2224 to be used.  Currently, this option is only available in conjunction with
2225 the NeXT runtime on Mac \s-1OS\s0 X 10.3 and later.
2226 .IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
2227 .IX Item "-fobjc-call-cxx-cdtors"
2228 For each Objective-C class, check if any of its instance variables is a
2229 \&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
2230 special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method that will run
2231 non-trivial default constructors on any such instance variables, in order,
2232 and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
2233 is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
2234 special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method that will run
2235 all such default destructors, in reverse order.
2236 .Sp
2237 The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and/or \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods
2238 thusly generated will only operate on instance variables declared in the
2239 current Objective-C class, and not those inherited from superclasses.  It
2240 is the responsibility of the Objective-C runtime to invoke all such methods
2241 in an object's inheritance hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods
2242 will be invoked by the runtime immediately after a new object
2243 instance is allocated; the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods will
2244 be invoked immediately before the runtime deallocates an object instance.
2245 .Sp
2246 As of this writing, only the NeXT runtime on Mac \s-1OS\s0 X 10.4 and later has
2247 support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
2248 \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
2249 .IP "\fB\-fobjc\-direct\-dispatch\fR" 4
2250 .IX Item "-fobjc-direct-dispatch"
2251 Allow fast jumps to the message dispatcher.  On Darwin this is
2252 accomplished via the comm page.
2253 .IP "\fB\-fobjc\-exceptions\fR" 4
2254 .IX Item "-fobjc-exceptions"
2255 Enable syntactic support for structured exception handling in Objective\-C,
2256 similar to what is offered by \*(C+ and Java.  This option is
2257 unavailable in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.2 and
2258 earlier.
2259 .Sp
2260 .Vb 23
2261 \&          @try {
2262 \&            ...
2263 \&               @throw expr;
2264 \&            ...
2265 \&          }
2266 \&          @catch (AnObjCClass *exc) {
2267 \&            ...
2268 \&              @throw expr;
2269 \&            ...
2270 \&              @throw;
2271 \&            ...
2272 \&          }
2273 \&          @catch (AnotherClass *exc) {
2274 \&            ...
2275 \&          }
2276 \&          @catch (id allOthers) {
2277 \&            ...
2278 \&          }
2279 \&          @finally {
2280 \&            ...
2281 \&              @throw expr;
2282 \&            ...
2283 \&          }
2284 .Ve
2285 .Sp
2286 The \f(CW@throw\fR statement may appear anywhere in an Objective-C or
2287 Objective\-\*(C+ program; when used inside of a \f(CW@catch\fR block, the
2288 \&\f(CW@throw\fR may appear without an argument (as shown above), in which case
2289 the object caught by the \f(CW@catch\fR will be rethrown.
2290 .Sp
2291 Note that only (pointers to) Objective-C objects may be thrown and
2292 caught using this scheme.  When an object is thrown, it will be caught
2293 by the nearest \f(CW@catch\fR clause capable of handling objects of that type,
2294 analogously to how \f(CW\*(C`catch\*(C'\fR blocks work in \*(C+ and Java.  A
2295 \&\f(CW\*(C`@catch(id ...)\*(C'\fR clause (as shown above) may also be provided to catch
2296 any and all Objective-C exceptions not caught by previous \f(CW@catch\fR
2297 clauses (if any).
2298 .Sp
2299 The \f(CW@finally\fR clause, if present, will be executed upon exit from the
2300 immediately preceding \f(CW\*(C`@try ... @catch\*(C'\fR section.  This will happen
2301 regardless of whether any exceptions are thrown, caught or rethrown
2302 inside the \f(CW\*(C`@try ... @catch\*(C'\fR section, analogously to the behavior
2303 of the \f(CW\*(C`finally\*(C'\fR clause in Java.
2304 .Sp
2305 There are several caveats to using the new exception mechanism:
2306 .RS 4
2307 .IP "*" 4
2308 Although currently designed to be binary compatible with \f(CW\*(C`NS_HANDLER\*(C'\fR\-style
2309 idioms provided by the \f(CW\*(C`NSException\*(C'\fR class, the new
2310 exceptions can only be used on Mac \s-1OS\s0 X 10.3 (Panther) and later
2311 systems, due to additional functionality needed in the (NeXT) Objective-C
2312 runtime.
2313 .IP "*" 4
2314 As mentioned above, the new exceptions do not support handling
2315 types other than Objective-C objects.   Furthermore, when used from
2316 Objective\-\*(C+, the Objective-C exception model does not interoperate with \*(C+
2317 exceptions at this time.  This means you cannot \f(CW@throw\fR an exception
2318 from Objective-C and \f(CW\*(C`catch\*(C'\fR it in \*(C+, or vice versa
2319 (i.e., \f(CW\*(C`throw ... @catch\*(C'\fR).
2320 .RE
2321 .RS 4
2322 .Sp
2323 The \fB\-fobjc\-exceptions\fR switch also enables the use of synchronization
2324 blocks for thread-safe execution:
2325 .Sp
2326 .Vb 3
2327 \&          @synchronized (ObjCClass *guard) {
2328 \&            ...
2329 \&          }
2330 .Ve
2331 .Sp
2332 Upon entering the \f(CW@synchronized\fR block, a thread of execution shall
2333 first check whether a lock has been placed on the corresponding \f(CW\*(C`guard\*(C'\fR
2334 object by another thread.  If it has, the current thread shall wait until
2335 the other thread relinquishes its lock.  Once \f(CW\*(C`guard\*(C'\fR becomes available,
2336 the current thread will place its own lock on it, execute the code contained in
2337 the \f(CW@synchronized\fR block, and finally relinquish the lock (thereby
2338 making \f(CW\*(C`guard\*(C'\fR available to other threads).
2339 .Sp
2340 Unlike Java, Objective-C does not allow for entire methods to be marked
2341 \&\f(CW@synchronized\fR.  Note that throwing exceptions out of
2342 \&\f(CW@synchronized\fR blocks is allowed, and will cause the guarding object
2343 to be unlocked properly.
2344 .RE
2345 .IP "\fB\-fobjc\-gc\fR" 4
2346 .IX Item "-fobjc-gc"
2347 Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+ programs.
2348 .IP "\fB\-freplace\-objc\-classes\fR" 4
2349 .IX Item "-freplace-objc-classes"
2350 Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
2351 the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
2352 run time instead.  This is used in conjunction with the Fix-and-Continue
2353 debugging mode, where the object file in question may be recompiled and
2354 dynamically reloaded in the course of program execution, without the need
2355 to restart the program itself.  Currently, Fix-and-Continue functionality
2356 is only available in conjunction with the NeXT runtime on Mac \s-1OS\s0 X 10.3
2357 and later.
2358 .IP "\fB\-fzero\-link\fR" 4
2359 .IX Item "-fzero-link"
2360 When compiling for the NeXT runtime, the compiler ordinarily replaces calls
2361 to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
2362 compile time) with static class references that get initialized at load time,
2363 which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
2364 suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
2365 to be retained.  This is useful in Zero-Link debugging mode, since it allows
2366 for individual class implementations to be modified during program execution.
2367 .IP "\fB\-gen\-decls\fR" 4
2368 .IX Item "-gen-decls"
2369 Dump interface declarations for all classes seen in the source file to a
2370 file named \fI\fIsourcename\fI.decl\fR.
2371 .IP "\fB\-Wassign\-intercept\fR (Objective\-C and Objective\-\*(C+ only)" 4
2372 .IX Item "-Wassign-intercept (Objective-C and Objective- only)"
2373 Warn whenever an Objective-C assignment is being intercepted by the
2374 garbage collector.
2375 .IP "\fB\-Wno\-protocol\fR (Objective\-C and Objective\-\*(C+ only)" 4
2376 .IX Item "-Wno-protocol (Objective-C and Objective- only)"
2377 If a class is declared to implement a protocol, a warning is issued for
2378 every method in the protocol that is not implemented by the class.  The
2379 default behavior is to issue a warning for every method not explicitly
2380 implemented in the class, even if a method implementation is inherited
2381 from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
2382 methods inherited from the superclass are considered to be implemented,
2383 and no warning is issued for them.
2384 .IP "\fB\-Wselector\fR (Objective\-C and Objective\-\*(C+ only)" 4
2385 .IX Item "-Wselector (Objective-C and Objective- only)"
2386 Warn if multiple methods of different types for the same selector are
2387 found during compilation.  The check is performed on the list of methods
2388 in the final stage of compilation.  Additionally, a check is performed
2389 for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
2390 expression, and a corresponding method for that selector has been found
2391 during compilation.  Because these checks scan the method table only at
2392 the end of compilation, these warnings are not produced if the final
2393 stage of compilation is not reached, for example because an error is
2394 found during compilation, or because the \fB\-fsyntax\-only\fR option is
2395 being used.
2396 .IP "\fB\-Wstrict\-selector\-match\fR (Objective\-C and Objective\-\*(C+ only)" 4
2397 .IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
2398 Warn if multiple methods with differing argument and/or return types are
2399 found for a given selector when attempting to send a message using this
2400 selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
2401 is off (which is the default behavior), the compiler will omit such warnings
2402 if any differences found are confined to types which share the same size
2403 and alignment.
2404 .IP "\fB\-Wundeclared\-selector\fR (Objective\-C and Objective\-\*(C+ only)" 4
2405 .IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
2406 Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
2407 undeclared selector is found.  A selector is considered undeclared if no
2408 method with that name has been declared before the
2409 \&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
2410 \&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
2411 an \f(CW@implementation\fR section.  This option always performs its
2412 checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
2413 while \fB\-Wselector\fR only performs its checks in the final stage of
2414 compilation.  This also enforces the coding style convention
2415 that methods and selectors must be declared before being used.
2416 .IP "\fB\-print\-objc\-runtime\-info\fR" 4
2417 .IX Item "-print-objc-runtime-info"
2418 Generate C header describing the largest structure that is passed by
2419 value, if any.
2420 .Sh "Options to Control Diagnostic Messages Formatting"
2421 .IX Subsection "Options to Control Diagnostic Messages Formatting"
2422 Traditionally, diagnostic messages have been formatted irrespective of
2423 the output device's aspect (e.g. its width, ...).  The options described
2424 below can be used to control the diagnostic messages formatting
2425 algorithm, e.g. how many characters per line, how often source location
2426 information should be reported.  Right now, only the \*(C+ front end can
2427 honor these options.  However it is expected, in the near future, that
2428 the remaining front ends would be able to digest them correctly.
2429 .IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
2430 .IX Item "-fmessage-length=n"
2431 Try to format error messages so that they fit on lines of about \fIn\fR
2432 characters.  The default is 72 characters for \fBg++\fR and 0 for the rest of
2433 the front ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
2434 line-wrapping will be done; each error message will appear on a single
2435 line.
2436 .IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
2437 .IX Item "-fdiagnostics-show-location=once"
2438 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
2439 reporter to emit \fIonce\fR source location information; that is, in
2440 case the message is too long to fit on a single physical line and has to
2441 be wrapped, the source location won't be emitted (as prefix) again,
2442 over and over, in subsequent continuation lines.  This is the default
2443 behavior.
2444 .IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
2445 .IX Item "-fdiagnostics-show-location=every-line"
2446 Only meaningful in line-wrapping mode.  Instructs the diagnostic
2447 messages reporter to emit the same source location information (as
2448 prefix) for physical lines that result from the process of breaking
2449 a message which is too long to fit on a single line.
2450 .IP "\fB\-fdiagnostics\-show\-option\fR" 4
2451 .IX Item "-fdiagnostics-show-option"
2452 This option instructs the diagnostic machinery to add text to each
2453 diagnostic emitted, which indicates which command line option directly
2454 controls that diagnostic, when such an option is known to the
2455 diagnostic machinery.
2456 .IP "\fB\-Wcoverage\-mismatch\fR" 4
2457 .IX Item "-Wcoverage-mismatch"
2458 Warn if feedback profiles do not match when using the
2459 \&\fB\-fprofile\-use\fR option.
2460 If a source file was changed between \fB\-fprofile\-gen\fR and
2461 \&\fB\-fprofile\-use\fR, the files with the profile feedback can fail
2462 to match the source file and \s-1GCC\s0 can not use the profile feedback
2463 information.  By default, \s-1GCC\s0 emits an error message in this case.
2464 The option \fB\-Wcoverage\-mismatch\fR emits a warning instead of an
2465 error.  \s-1GCC\s0 does not use appropriate feedback profiles, so using this
2466 option can result in poorly optimized code.  This option is useful
2467 only in the case of very minor changes such as bug fixes to an
2468 existing code\-base.
2469 .Sh "Options to Request or Suppress Warnings"
2470 .IX Subsection "Options to Request or Suppress Warnings"
2471 Warnings are diagnostic messages that report constructions which
2472 are not inherently erroneous but which are risky or suggest there
2473 may have been an error.
2474 .PP
2475 The following language-independent options do not enable specific
2476 warnings but control the kinds of diagnostics produced by \s-1GCC\s0.
2477 .IP "\fB\-fsyntax\-only\fR" 4
2478 .IX Item "-fsyntax-only"
2479 Check the code for syntax errors, but don't do anything beyond that.
2480 .IP "\fB\-w\fR" 4
2481 .IX Item "-w"
2482 Inhibit all warning messages.
2483 .IP "\fB\-Werror\fR" 4
2484 .IX Item "-Werror"
2485 Make all warnings into errors.
2486 .IP "\fB\-Werror=\fR" 4
2487 .IX Item "-Werror="
2488 Make the specified warning into an error.  The specifier for a warning
2489 is appended, for example \fB\-Werror=switch\fR turns the warnings
2490 controlled by \fB\-Wswitch\fR into errors.  This switch takes a
2491 negative form, to be used to negate \fB\-Werror\fR for specific
2492 warnings, for example \fB\-Wno\-error=switch\fR makes
2493 \&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
2494 is in effect.  You can use the \fB\-fdiagnostics\-show\-option\fR
2495 option to have each controllable warning amended with the option which
2496 controls it, to determine what to use with this option.
2497 .Sp
2498 Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
2499 \&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
2500 imply anything.
2501 .IP "\fB\-Wfatal\-errors\fR" 4
2502 .IX Item "-Wfatal-errors"
2503 This option causes the compiler to abort compilation on the first error
2504 occurred rather than trying to keep going and printing further error
2505 messages.
2506 .PP
2507 You can request many specific warnings with options beginning
2508 \&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
2509 implicit declarations.  Each of these specific warning options also
2510 has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
2511 example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
2512 two forms, whichever is not the default.  For further,
2513 language-specific options also refer to \fB\*(C+ Dialect Options\fR and
2514 \&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2515 .IP "\fB\-pedantic\fR" 4
2516 .IX Item "-pedantic"
2517 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
2518 reject all programs that use forbidden extensions, and some other
2519 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
2520 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
2521 .Sp
2522 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
2523 this option (though a rare few will require \fB\-ansi\fR or a
2524 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
2525 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
2526 features are supported as well.  With this option, they are rejected.
2527 .Sp
2528 \&\fB\-pedantic\fR does not cause warning messages for use of the
2529 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
2530 warnings are also disabled in the expression that follows
2531 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
2532 these escape routes; application programs should avoid them.
2533 .Sp
2534 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
2535 C conformance.  They soon find that it does not do quite what they want:
2536 it finds some non-ISO practices, but not all\-\-\-only those for which
2537 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
2538 diagnostics have been added.
2539 .Sp
2540 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
2541 some instances, but would require considerable additional work and would
2542 be quite different from \fB\-pedantic\fR.  We don't have plans to
2543 support such a feature in the near future.
2544 .Sp
2545 Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
2546 extended dialect of C, such as \fBgnu89\fR or \fBgnu99\fR, there is a
2547 corresponding \fIbase standard\fR, the version of \s-1ISO\s0 C on which the \s-1GNU\s0
2548 extended dialect is based.  Warnings from \fB\-pedantic\fR are given
2549 where they are required by the base standard.  (It would not make sense
2550 for such warnings to be given only for features not in the specified \s-1GNU\s0
2551 C dialect, since by definition the \s-1GNU\s0 dialects of C include all
2552 features the compiler supports with the given option, and there would be
2553 nothing to warn about.)
2554 .IP "\fB\-pedantic\-errors\fR" 4
2555 .IX Item "-pedantic-errors"
2556 Like \fB\-pedantic\fR, except that errors are produced rather than
2557 warnings.
2558 .IP "\fB\-Wall\fR" 4
2559 .IX Item "-Wall"
2560 This enables all the warnings about constructions that some users
2561 consider questionable, and that are easy to avoid (or modify to
2562 prevent the warning), even in conjunction with macros.  This also
2563 enables some language-specific warnings described in \fB\*(C+ Dialect
2564 Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
2565 .Sp
2566 \&\fB\-Wall\fR turns on the following warning flags:
2567 .Sp
2568 \&\fB\-Waddress   
2569 \&\-Warray\-bounds\fR (only with\fB \fR\fB\-O2\fR)  
2570 \&\fB\-Wc++0x\-compat  
2571 \&\-Wchar\-subscripts  
2572 \&\-Wimplicit\-int  
2573 \&\-Wimplicit\-function\-declaration  
2574 \&\-Wcomment  
2575 \&\-Wformat   
2576 \&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
2577 \&\fB\-Wmissing\-braces  
2578 \&\-Wnonnull  
2579 \&\-Wparentheses  
2580 \&\-Wpointer\-sign  
2581 \&\-Wreorder   
2582 \&\-Wreturn\-type  
2583 \&\-Wripa\-opt\-mismatch 
2584 \&\-Wsequence\-point  
2585 \&\-Wsign\-compare\fR (only in \*(C+)  
2586 \&\fB\-Wstrict\-aliasing  
2587 \&\-Wstrict\-overflow=1  
2588 \&\-Wswitch  
2589 \&\-Wtrigraphs  
2590 \&\-Wuninitialized  
2591 \&\-Wunknown\-pragmas  
2592 \&\-Wunused\-function  
2593 \&\-Wunused\-label     
2594 \&\-Wunused\-value     
2595 \&\-Wunused\-variable  
2596 \&\-Wvolatile\-register\-var\fR 
2597 .Sp
2598 Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
2599 them warn about constructions that users generally do not consider
2600 questionable, but which occasionally you might wish to check for;
2601 others warn about constructions that are necessary or hard to avoid in
2602 some cases, and there is no simple way to modify the code to suppress
2603 the warning. Some of them are enabled by \fB\-Wextra\fR but many of
2604 them must be enabled individually.
2605 .IP "\fB\-Wextra\fR" 4
2606 .IX Item "-Wextra"
2607 This enables some extra warning flags that are not enabled by
2608 \&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
2609 name is still supported, but the newer name is more descriptive.)
2610 .Sp
2611 \&\fB\-Wclobbered  
2612 \&\-Wempty\-body  
2613 \&\-Wignored\-qualifiers 
2614 \&\-Wmissing\-field\-initializers  
2615 \&\-Wmissing\-parameter\-type\fR (C only)  
2616 \&\fB\-Wold\-style\-declaration\fR (C only)  
2617 \&\fB\-Woverride\-init  
2618 \&\-Wsign\-compare  
2619 \&\-Wtype\-limits  
2620 \&\-Wuninitialized  
2621 \&\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)  \fB
2622 \&\fR
2623 .Sp
2624 The option \fB\-Wextra\fR also prints warning messages for the
2625 following cases:
2626 .RS 4
2627 .IP "*" 4
2628 A pointer is compared against integer zero with \fB<\fR, \fB<=\fR,
2629 \&\fB>\fR, or \fB>=\fR.
2630 .IP "*" 4
2631 (\*(C+ only) An enumerator and a non-enumerator both appear in a
2632 conditional expression.
2633 .IP "*" 4
2634 (\*(C+ only) Ambiguous virtual bases.
2635 .IP "*" 4
2636 (\*(C+ only) Subscripting an array which has been declared \fBregister\fR.
2637 .IP "*" 4
2638 (\*(C+ only) Taking the address of a variable which has been declared
2639 \&\fBregister\fR.
2640 .IP "*" 4
2641 (\*(C+ only) A base class is not initialized in a derived class' copy
2642 constructor.
2643 .RE
2644 .RS 4
2645 .RE
2646 .IP "\fB\-Wchar\-subscripts\fR" 4
2647 .IX Item "-Wchar-subscripts"
2648 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
2649 of error, as programmers often forget that this type is signed on some
2650 machines.
2651 This warning is enabled by \fB\-Wall\fR.
2652 .IP "\fB\-Wcomment\fR" 4
2653 .IX Item "-Wcomment"
2654 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
2655 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
2656 This warning is enabled by \fB\-Wall\fR.
2657 .IP "\fB\-Wformat\fR" 4
2658 .IX Item "-Wformat"
2659 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
2660 the arguments supplied have types appropriate to the format string
2661 specified, and that the conversions specified in the format string make
2662 sense.  This includes standard functions, and others specified by format
2663 attributes, in the \f(CW\*(C`printf\*(C'\fR,
2664 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
2665 not in the C standard) families (or other target-specific families).
2666 Which functions are checked without format attributes having been
2667 specified depends on the standard version selected, and such checks of
2668 functions without the attribute specified are disabled by
2669 \&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
2670 .Sp
2671 The formats are checked against the format features supported by \s-1GNU\s0
2672 libc version 2.2.  These include all \s-1ISO\s0 C90 and C99 features, as well
2673 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
2674 extensions.  Other library implementations may not support all these
2675 features; \s-1GCC\s0 does not support warning about features that go beyond a
2676 particular library's limitations.  However, if \fB\-pedantic\fR is used
2677 with \fB\-Wformat\fR, warnings will be given about format features not
2678 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
2679 since those are not in any version of the C standard).  
2680 .Sp
2681 Since \fB\-Wformat\fR also checks for null format arguments for
2682 several functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.
2683 .Sp
2684 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
2685 aspects of format checking, the options \fB\-Wformat\-y2k\fR,
2686 \&\fB\-Wno\-format\-extra\-args\fR, \fB\-Wno\-format\-zero\-length\fR,
2687 \&\fB\-Wformat\-nonliteral\fR, \fB\-Wformat\-security\fR, and
2688 \&\fB\-Wformat=2\fR are available, but are not included in \fB\-Wall\fR.
2689 .IP "\fB\-Wformat\-y2k\fR" 4
2690 .IX Item "-Wformat-y2k"
2691 If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
2692 formats which may yield only a two-digit year.
2693 .IP "\fB\-Wno\-format\-contains\-nul\fR" 4
2694 .IX Item "-Wno-format-contains-nul"
2695 If \fB\-Wformat\fR is specified, do not warn about format strings that
2696 contain \s-1NUL\s0 bytes.
2697 .IP "\fB\-Wno\-format\-extra\-args\fR" 4
2698 .IX Item "-Wno-format-extra-args"
2699 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
2700 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
2701 that such arguments are ignored.
2702 .Sp
2703 Where the unused arguments lie between used arguments that are
2704 specified with \fB$\fR operand number specifications, normally
2705 warnings are still given, since the implementation could not know what
2706 type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
2707 in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option will suppress the
2708 warning if the unused arguments are all pointers, since the Single
2709 Unix Specification says that such unused arguments are allowed.
2710 .IP "\fB\-Wno\-format\-zero\-length\fR (C and Objective-C only)" 4
2711 .IX Item "-Wno-format-zero-length (C and Objective-C only)"
2712 If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
2713 The C standard specifies that zero-length formats are allowed.
2714 .IP "\fB\-Wformat\-nonliteral\fR" 4
2715 .IX Item "-Wformat-nonliteral"
2716 If \fB\-Wformat\fR is specified, also warn if the format string is not a
2717 string literal and so cannot be checked, unless the format function
2718 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
2719 .IP "\fB\-Wformat\-security\fR" 4
2720 .IX Item "-Wformat-security"
2721 If \fB\-Wformat\fR is specified, also warn about uses of format
2722 functions that represent possible security problems.  At present, this
2723 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
2724 format string is not a string literal and there are no format arguments,
2725 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
2726 string came from untrusted input and contains \fB%n\fR.  (This is
2727 currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
2728 in future warnings may be added to \fB\-Wformat\-security\fR that are not
2729 included in \fB\-Wformat\-nonliteral\fR.)
2730 .IP "\fB\-Wformat=2\fR" 4
2731 .IX Item "-Wformat=2"
2732 Enable \fB\-Wformat\fR plus format checks not included in
2733 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
2734 \&\-Wformat\-nonliteral \-Wformat\-security \-Wformat\-y2k\fR.
2735 .IP "\fB\-Wnonnull\fR (C and Objective-C only)" 4
2736 .IX Item "-Wnonnull (C and Objective-C only)"
2737 Warn about passing a null pointer for arguments marked as
2738 requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
2739 .Sp
2740 \&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
2741 can be disabled with the \fB\-Wno\-nonnull\fR option.
2742 .IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2743 .IX Item "-Winit-self (C, , Objective-C and Objective- only)"
2744 Warn about uninitialized variables which are initialized with themselves.
2745 Note this option can only be used with the \fB\-Wuninitialized\fR option.
2746 .Sp
2747 For example, \s-1GCC\s0 will warn about \f(CW\*(C`i\*(C'\fR being uninitialized in the
2748 following snippet only when \fB\-Winit\-self\fR has been specified:
2749 .Sp
2750 .Vb 5
2751 \&        int f()
2752 \&        {
2753 \&          int i = i;
2754 \&          return i;
2755 \&        }
2756 .Ve
2757 .IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
2758 .IX Item "-Wimplicit-int (C and Objective-C only)"
2759 Warn when a declaration does not specify a type.
2760 This warning is enabled by \fB\-Wall\fR.
2761 .IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
2762 .IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
2763 Give a warning whenever a function is used before being declared. In
2764 C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
2765 enabled by default and it is made into an error by
2766 \&\fB\-pedantic\-errors\fR. This warning is also enabled by
2767 \&\fB\-Wall\fR.
2768 .IP "\fB\-Wimplicit\fR" 4
2769 .IX Item "-Wimplicit"
2770 Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
2771 This warning is enabled by \fB\-Wall\fR.
2772 .IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
2773 .IX Item "-Wignored-qualifiers (C and  only)"
2774 Warn if the return type of a function has a type qualifier
2775 such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO\s0 C such a type qualifier has no effect,
2776 since the value returned by a function is not an lvalue.
2777 For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
2778 \&\s-1ISO\s0 C prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
2779 definitions, so such return types always receive a warning
2780 even without this option.
2781 .Sp
2782 This warning is also enabled by \fB\-Wextra\fR.
2783 .IP "\fB\-Wmain\fR" 4
2784 .IX Item "-Wmain"
2785 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be
2786 a function with external linkage, returning int, taking either zero
2787 arguments, two, or three arguments of appropriate types.  This warning
2788 is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
2789 or \fB\-pedantic\fR.
2790 .IP "\fB\-Wmissing\-braces\fR" 4
2791 .IX Item "-Wmissing-braces"
2792 Warn if an aggregate or union initializer is not fully bracketed.  In
2793 the following example, the initializer for \fBa\fR is not fully
2794 bracketed, but that for \fBb\fR is fully bracketed.
2795 .Sp
2796 .Vb 2
2797 \&        int a[2][2] = { 0, 1, 2, 3 };
2798 \&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
2799 .Ve
2800 .Sp
2801 This warning is enabled by \fB\-Wall\fR.
2802 .IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
2803 .IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
2804 Warn if a user-supplied include directory does not exist.
2805 .IP "\fB\-Wparentheses\fR" 4
2806 .IX Item "-Wparentheses"
2807 Warn if parentheses are omitted in certain contexts, such
2808 as when there is an assignment in a context where a truth value
2809 is expected, or when operators are nested whose precedence people
2810 often get confused about.
2811 .Sp
2812 Also warn if a comparison like \fBx<=y<=z\fR appears; this is
2813 equivalent to \fB(x<=y ? 1 : 0) <= z\fR, which is a different
2814 interpretation from that of ordinary mathematical notation.
2815 .Sp
2816 Also warn about constructions where there may be confusion to which
2817 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
2818 such a case:
2819 .Sp
2820 .Vb 7
2821 \&        {
2822 \&          if (a)
2823 \&            if (b)
2824 \&              foo ();
2825 \&          else
2826 \&            bar ();
2827 \&        }
2828 .Ve
2829 .Sp
2830 In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
2831 \&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
2832 often not what the programmer expected, as illustrated in the above
2833 example by indentation the programmer chose.  When there is the
2834 potential for this confusion, \s-1GCC\s0 will issue a warning when this flag
2835 is specified.  To eliminate the warning, add explicit braces around
2836 the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
2837 could belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would
2838 look like this:
2839 .Sp
2840 .Vb 9
2841 \&        {
2842 \&          if (a)
2843 \&            {
2844 \&              if (b)
2845 \&                foo ();
2846 \&              else
2847 \&                bar ();
2848 \&            }
2849 \&        }
2850 .Ve
2851 .Sp
2852 This warning is enabled by \fB\-Wall\fR.
2853 .IP "\fB\-Wsequence\-point\fR" 4
2854 .IX Item "-Wsequence-point"
2855 Warn about code that may have undefined semantics because of violations
2856 of sequence point rules in the C and \*(C+ standards.
2857 .Sp
2858 The C and \*(C+ standards defines the order in which expressions in a C/\*(C+
2859 program are evaluated in terms of \fIsequence points\fR, which represent
2860 a partial ordering between the execution of parts of the program: those
2861 executed before the sequence point, and those executed after it.  These
2862 occur after the evaluation of a full expression (one which is not part
2863 of a larger expression), after the evaluation of the first operand of a
2864 \&\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
2865 function is called (but after the evaluation of its arguments and the
2866 expression denoting the called function), and in certain other places.
2867 Other than as expressed by the sequence point rules, the order of
2868 evaluation of subexpressions of an expression is not specified.  All
2869 these rules describe only a partial order rather than a total order,
2870 since, for example, if two functions are called within one expression
2871 with no sequence point between them, the order in which the functions
2872 are called is not specified.  However, the standards committee have
2873 ruled that function calls do not overlap.
2874 .Sp
2875 It is not specified when between sequence points modifications to the
2876 values of objects take effect.  Programs whose behavior depends on this
2877 have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
2878 the previous and next sequence point an object shall have its stored
2879 value modified at most once by the evaluation of an expression.
2880 Furthermore, the prior value shall be read only to determine the value
2881 to be stored.\*(R".  If a program breaks these rules, the results on any
2882 particular implementation are entirely unpredictable.
2883 .Sp
2884 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
2885 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
2886 diagnosed by this option, and it may give an occasional false positive
2887 result, but in general it has been found fairly effective at detecting
2888 this sort of problem in programs.
2889 .Sp
2890 The standard is worded confusingly, therefore there is some debate
2891 over the precise meaning of the sequence point rules in subtle cases.
2892 Links to discussions of the problem, including proposed formal
2893 definitions, may be found on the \s-1GCC\s0 readings page, at
2894 <\fBhttp://gcc.gnu.org/readings.html\fR>.
2895 .Sp
2896 This warning is enabled by \fB\-Wall\fR for C and \*(C+.
2897 .IP "\fB\-Wreturn\-type\fR" 4
2898 .IX Item "-Wreturn-type"
2899 Warn whenever a function is defined with a return-type that defaults
2900 to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
2901 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR
2902 (falling off the end of the function body is considered returning
2903 without a value), and about a \f(CW\*(C`return\*(C'\fR statement with a
2904 expression in a function whose return-type is \f(CW\*(C`void\*(C'\fR.
2905 .Sp
2906 For \*(C+, a function without return type always produces a diagnostic
2907 message, even when \fB\-Wno\-return\-type\fR is specified.  The only
2908 exceptions are \fBmain\fR and functions defined in system headers.
2909 .Sp
2910 This warning is enabled by \fB\-Wall\fR.
2911 .IP "\fB\-Wripa\-opt\-mismatch\fR" 4
2912 .IX Item "-Wripa-opt-mismatch"
2913 When doing an \s-1FDO\s0 build with \fB\-fprofile\-use\fR and \fB\-fripa\fR,
2914 warn if importing an axuiliary module that was built with a different
2915 \&\s-1GCC\s0 command line during the profile-generate phase than the primary
2916 module.
2917 .Sp
2918 This warning is enabled by \fB\-Wall\fR.
2919 .IP "\fB\-Wswitch\fR" 4
2920 .IX Item "-Wswitch"
2921 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2922 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2923 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
2924 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2925 provoke warnings when this option is used.
2926 This warning is enabled by \fB\-Wall\fR.
2927 .IP "\fB\-Wswitch\-default\fR" 4
2928 .IX Item "-Wswitch-default"
2929 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
2930 case.
2931 .IP "\fB\-Wswitch\-enum\fR" 4
2932 .IX Item "-Wswitch-enum"
2933 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
2934 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
2935 enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
2936 provoke warnings when this option is used.
2937 .IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
2938 .IX Item "-Wsync-nand (C and  only)"
2939 Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
2940 built-in functions are used.  These functions changed semantics in \s-1GCC\s0 4.4.
2941 .IP "\fB\-Wtrigraphs\fR" 4
2942 .IX Item "-Wtrigraphs"
2943 Warn if any trigraphs are encountered that might change the meaning of
2944 the program (trigraphs within comments are not warned about).
2945 This warning is enabled by \fB\-Wall\fR.
2946 .IP "\fB\-Wunused\-function\fR" 4
2947 .IX Item "-Wunused-function"
2948 Warn whenever a static function is declared but not defined or a
2949 non-inline static function is unused.
2950 This warning is enabled by \fB\-Wall\fR.
2951 .IP "\fB\-Wunused\-label\fR" 4
2952 .IX Item "-Wunused-label"
2953 Warn whenever a label is declared but not used.
2954 This warning is enabled by \fB\-Wall\fR.
2955 .Sp
2956 To suppress this warning use the \fBunused\fR attribute.
2957 .IP "\fB\-Wunused\-parameter\fR" 4
2958 .IX Item "-Wunused-parameter"
2959 Warn whenever a function parameter is unused aside from its declaration.
2960 .Sp
2961 To suppress this warning use the \fBunused\fR attribute.
2962 .IP "\fB\-Wunused\-variable\fR" 4
2963 .IX Item "-Wunused-variable"
2964 Warn whenever a local variable or non-constant static variable is unused
2965 aside from its declaration.
2966 This warning is enabled by \fB\-Wall\fR.
2967 .Sp
2968 To suppress this warning use the \fBunused\fR attribute.
2969 .IP "\fB\-Wunused\-value\fR" 4
2970 .IX Item "-Wunused-value"
2971 Warn whenever a statement computes a result that is explicitly not
2972 used. To suppress this warning cast the unused expression to
2973 \&\fBvoid\fR. This includes an expression-statement or the left-hand
2974 side of a comma expression that contains no side effects. For example,
2975 an expression such as \fBx[i,j]\fR will cause a warning, while
2976 \&\fBx[(void)i,j]\fR will not.
2977 .Sp
2978 This warning is enabled by \fB\-Wall\fR.
2979 .IP "\fB\-Wunused\fR" 4
2980 .IX Item "-Wunused"
2981 All the above \fB\-Wunused\fR options combined.
2982 .Sp
2983 In order to get a warning about an unused function parameter, you must
2984 either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
2985 \&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
2986 .IP "\fB\-Wuninitialized\fR" 4
2987 .IX Item "-Wuninitialized"
2988 Warn if an automatic variable is used without first being initialized
2989 or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
2990 warn if a non-static reference or non-static \fBconst\fR member
2991 appears in a class without constructors.
2992 .Sp
2993 If you want to warn about code which uses the uninitialized value of the
2994 variable in its own initializer, use the \fB\-Winit\-self\fR option.
2995 .Sp
2996 These warnings occur for individual uninitialized or clobbered
2997 elements of structure, union or array variables as well as for
2998 variables which are uninitialized or clobbered as a whole.  They do
2999 not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
3000 these warnings depend on optimization, the exact variables or elements
3001 for which there are warnings will depend on the precise optimization
3002 options and version of \s-1GCC\s0 used.
3003 .Sp
3004 Note that there may be no warning about a variable that is used only
3005 to compute a value that itself is never used, because such
3006 computations may be deleted by data flow analysis before the warnings
3007 are printed.
3008 .Sp
3009 These warnings are made optional because \s-1GCC\s0 is not smart
3010 enough to see all the reasons why the code might be correct
3011 despite appearing to have an error.  Here is one example of how
3012 this can happen:
3013 .Sp
3014 .Vb 12
3015 \&        {
3016 \&          int x;
3017 \&          switch (y)
3018 \&            {
3019 \&            case 1: x = 1;
3020 \&              break;
3021 \&            case 2: x = 4;
3022 \&              break;
3023 \&            case 3: x = 5;
3024 \&            }
3025 \&          foo (x);
3026 \&        }
3027 .Ve
3028 .Sp
3029 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
3030 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
3031 another common case:
3032 .Sp
3033 .Vb 6
3034 \&        {
3035 \&          int save_y;
3036 \&          if (change_y) save_y = y, y = new_y;
3037 \&          ...
3038 \&          if (change_y) y = save_y;
3039 \&        }
3040 .Ve
3041 .Sp
3042 This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
3043 .Sp
3044 This option also warns when a non-volatile automatic variable might be
3045 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
3046 only in optimizing compilation.
3047 .Sp
3048 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
3049 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
3050 call it at any point in the code.  As a result, you may get a warning
3051 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
3052 in fact be called at the place which would cause a problem.
3053 .Sp
3054 Some spurious warnings can be avoided if you declare all the functions
3055 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.  
3056 .Sp
3057 This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
3058 .IP "\fB\-Wunknown\-pragmas\fR" 4
3059 .IX Item "-Wunknown-pragmas"
3060 Warn when a #pragma directive is encountered which is not understood by
3061 \&\s-1GCC\s0.  If this command line option is used, warnings will even be issued
3062 for unknown pragmas in system header files.  This is not the case if
3063 the warnings were only enabled by the \fB\-Wall\fR command line option.
3064 .IP "\fB\-Wno\-pragmas\fR" 4
3065 .IX Item "-Wno-pragmas"
3066 Do not warn about misuses of pragmas, such as incorrect parameters,
3067 invalid syntax, or conflicts between pragmas.  See also
3068 \&\fB\-Wunknown\-pragmas\fR.
3069 .IP "\fB\-Wstrict\-aliasing\fR" 4
3070 .IX Item "-Wstrict-aliasing"
3071 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3072 It warns about code which might break the strict aliasing rules that the
3073 compiler is using for optimization.  The warning does not catch all
3074 cases, but does attempt to catch the more common pitfalls.  It is
3075 included in \fB\-Wall\fR.
3076 It is equivalent to \fB\-Wstrict\-aliasing=3\fR
3077 .IP "\fB\-Wstrict\-aliasing=n\fR" 4
3078 .IX Item "-Wstrict-aliasing=n"
3079 This option is only active when \fB\-fstrict\-aliasing\fR is active.
3080 It warns about code which might break the strict aliasing rules that the
3081 compiler is using for optimization.
3082 Higher levels correspond to higher accuracy (fewer false positives).
3083 Higher levels also correspond to more effort, similar to the way \-O works.
3084 \&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=n\fR,
3085 with n=3.
3086 .Sp
3087 Level 1: Most aggressive, quick, least accurate.
3088 Possibly useful when higher levels
3089 do not warn but \-fstrict\-aliasing still breaks the code, as it has very few 
3090 false negatives.  However, it has many false positives.
3091 Warns for all pointer conversions between possibly incompatible types, 
3092 even if never dereferenced.  Runs in the frontend only.
3093 .Sp
3094 Level 2: Aggressive, quick, not too precise.
3095 May still have many false positives (not as many as level 1 though),
3096 and few false negatives (but possibly more than level 1).
3097 Unlike level 1, it only warns when an address is taken.  Warns about
3098 incomplete types.  Runs in the frontend only.
3099 .Sp
3100 Level 3 (default for \fB\-Wstrict\-aliasing\fR): 
3101 Should have very few false positives and few false 
3102 negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
3103 Takes care of the common punn+dereference pattern in the frontend:
3104 \&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
3105 If optimization is enabled, it also runs in the backend, where it deals 
3106 with multiple statement cases using flow-sensitive points-to information.
3107 Only warns when the converted pointer is dereferenced.
3108 Does not warn about incomplete types.
3109 .IP "\fB\-Wstrict\-overflow\fR" 4
3110 .IX Item "-Wstrict-overflow"
3111 .PD 0
3112 .IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
3113 .IX Item "-Wstrict-overflow=n"
3114 .PD
3115 This option is only active when \fB\-fstrict\-overflow\fR is active.
3116 It warns about cases where the compiler optimizes based on the
3117 assumption that signed overflow does not occur.  Note that it does not
3118 warn about all cases where the code might overflow: it only warns
3119 about cases where the compiler implements some optimization.  Thus
3120 this warning depends on the optimization level.
3121 .Sp
3122 An optimization which assumes that signed overflow does not occur is
3123 perfectly safe if the values of the variables involved are such that
3124 overflow never does, in fact, occur.  Therefore this warning can
3125 easily give a false positive: a warning about code which is not
3126 actually a problem.  To help focus on important issues, several
3127 warning levels are defined.  No warnings are issued for the use of
3128 undefined signed overflow when estimating how many iterations a loop
3129 will require, in particular when determining whether a loop will be
3130 executed at all.
3131 .RS 4
3132 .IP "\fB\-Wstrict\-overflow=1\fR" 4
3133 .IX Item "-Wstrict-overflow=1"
3134 Warn about cases which are both questionable and easy to avoid.  For
3135 example: \f(CW\*(C`x + 1 > x\*(C'\fR; with \fB\-fstrict\-overflow\fR, the
3136 compiler will simplify this to \f(CW1\fR.  This level of
3137 \&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
3138 are not, and must be explicitly requested.
3139 .IP "\fB\-Wstrict\-overflow=2\fR" 4
3140 .IX Item "-Wstrict-overflow=2"
3141 Also warn about other cases where a comparison is simplified to a
3142 constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
3143 simplified when \fB\-fstrict\-overflow\fR is in effect, because
3144 \&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
3145 zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
3146 \&\fB\-Wstrict\-overflow=2\fR.
3147 .IP "\fB\-Wstrict\-overflow=3\fR" 4
3148 .IX Item "-Wstrict-overflow=3"
3149 Also warn about other cases where a comparison is simplified.  For
3150 example: \f(CW\*(C`x + 1 > 1\*(C'\fR will be simplified to \f(CW\*(C`x > 0\*(C'\fR.
3151 .IP "\fB\-Wstrict\-overflow=4\fR" 4
3152 .IX Item "-Wstrict-overflow=4"
3153 Also warn about other simplifications not covered by the above cases.
3154 For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR will be simplified to \f(CW\*(C`x * 2\*(C'\fR.
3155 .IP "\fB\-Wstrict\-overflow=5\fR" 4
3156 .IX Item "-Wstrict-overflow=5"
3157 Also warn about cases where the compiler reduces the magnitude of a
3158 constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR will
3159 be simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
3160 highest warning level because this simplification applies to many
3161 comparisons, so this warning level will give a very large number of
3162 false positives.
3163 .RE
3164 .RS 4
3165 .RE
3166 .IP "\fB\-Warray\-bounds\fR" 4
3167 .IX Item "-Warray-bounds"
3168 This option is only active when \fB\-ftree\-vrp\fR is active
3169 (default for \-O2 and above). It warns about subscripts to arrays
3170 that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
3171 .IP "\fB\-Wno\-div\-by\-zero\fR" 4
3172 .IX Item "-Wno-div-by-zero"
3173 Do not warn about compile-time integer division by zero.  Floating point
3174 division by zero is not warned about, as it can be a legitimate way of
3175 obtaining infinities and NaNs.
3176 .IP "\fB\-Wsystem\-headers\fR" 4
3177 .IX Item "-Wsystem-headers"
3178 Print warning messages for constructs found in system header files.
3179 Warnings from system headers are normally suppressed, on the assumption
3180 that they usually do not indicate real problems and would only make the
3181 compiler output harder to read.  Using this command line option tells
3182 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
3183 code.  However, note that using \fB\-Wall\fR in conjunction with this
3184 option will \fInot\fR warn about unknown pragmas in system
3185 headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
3186 .IP "\fB\-Wfloat\-equal\fR" 4
3187 .IX Item "-Wfloat-equal"
3188 Warn if floating point values are used in equality comparisons.
3189 .Sp
3190 The idea behind this is that sometimes it is convenient (for the
3191 programmer) to consider floating-point values as approximations to
3192 infinitely precise real numbers.  If you are doing this, then you need
3193 to compute (by analyzing the code, or in some other way) the maximum or
3194 likely maximum error that the computation introduces, and allow for it
3195 when performing comparisons (and when producing output, but that's a
3196 different problem).  In particular, instead of testing for equality, you
3197 would check to see whether the two values have ranges that overlap; and
3198 this is done with the relational operators, so equality comparisons are
3199 probably mistaken.
3200 .IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
3201 .IX Item "-Wtraditional (C and Objective-C only)"
3202 Warn about certain constructs that behave differently in traditional and
3203 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
3204 equivalent, and/or problematic constructs which should be avoided.
3205 .RS 4
3206 .IP "*" 4
3207 Macro parameters that appear within string literals in the macro body.
3208 In traditional C macro replacement takes place within string literals,
3209 but does not in \s-1ISO\s0 C.
3210 .IP "*" 4
3211 In traditional C, some preprocessor directives did not exist.
3212 Traditional preprocessors would only consider a line to be a directive
3213 if the \fB#\fR appeared in column 1 on the line.  Therefore
3214 \&\fB\-Wtraditional\fR warns about directives that traditional C
3215 understands but would ignore because the \fB#\fR does not appear as the
3216 first character on the line.  It also suggests you hide directives like
3217 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
3218 traditional implementations would not recognize \fB#elif\fR, so it
3219 suggests avoiding it altogether.
3220 .IP "*" 4
3221 A function-like macro that appears without arguments.
3222 .IP "*" 4
3223 The unary plus operator.
3224 .IP "*" 4
3225 The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating point
3226 constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
3227 constants.)  Note, these suffixes appear in macros defined in the system
3228 headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
3229 Use of these macros in user code might normally lead to spurious
3230 warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
3231 avoid warning in these cases.
3232 .IP "*" 4
3233 A function declared external in one block and then used after the end of
3234 the block.
3235 .IP "*" 4
3236 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
3237 .IP "*" 4
3238 A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
3239 This construct is not accepted by some traditional C compilers.
3240 .IP "*" 4
3241 The \s-1ISO\s0 type of an integer constant has a different width or
3242 signedness from its traditional type.  This warning is only issued if
3243 the base of the constant is ten.  I.e. hexadecimal or octal values, which
3244 typically represent bit patterns, are not warned about.
3245 .IP "*" 4
3246 Usage of \s-1ISO\s0 string concatenation is detected.
3247 .IP "*" 4
3248 Initialization of automatic aggregates.
3249 .IP "*" 4
3250 Identifier conflicts with labels.  Traditional C lacks a separate
3251 namespace for labels.
3252 .IP "*" 4
3253 Initialization of unions.  If the initializer is zero, the warning is
3254 omitted.  This is done under the assumption that the zero initializer in
3255 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
3256 initializer warnings and relies on default initialization to zero in the
3257 traditional C case.
3258 .IP "*" 4
3259 Conversions by prototypes between fixed/floating point values and vice
3260 versa.  The absence of these prototypes when compiling with traditional
3261 C would cause serious problems.  This is a subset of the possible
3262 conversion warnings, for the full set use \fB\-Wtraditional\-conversion\fR.
3263 .IP "*" 4
3264 Use of \s-1ISO\s0 C style function definitions.  This warning intentionally is
3265 \&\fInot\fR issued for prototype declarations or variadic functions
3266 because these \s-1ISO\s0 C features will appear in your code when using
3267 libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
3268 \&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
3269 because that feature is already a \s-1GCC\s0 extension and thus not relevant to
3270 traditional C compatibility.
3271 .RE
3272 .RS 4
3273 .RE
3274 .IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
3275 .IX Item "-Wtraditional-conversion (C and Objective-C only)"
3276 Warn if a prototype causes a type conversion that is different from what
3277 would happen to the same argument in the absence of a prototype.  This
3278 includes conversions of fixed point to floating and vice versa, and
3279 conversions changing the width or signedness of a fixed point argument
3280 except when the same as the default promotion.
3281 .IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
3282 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
3283 Warn when a declaration is found after a statement in a block.  This
3284 construct, known from \*(C+, was introduced with \s-1ISO\s0 C99 and is by default
3285 allowed in \s-1GCC\s0.  It is not supported by \s-1ISO\s0 C90 and was not supported by
3286 \&\s-1GCC\s0 versions before \s-1GCC\s0 3.0.  
3287 .IP "\fB\-Wundef\fR" 4
3288 .IX Item "-Wundef"
3289 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
3290 .IP "\fB\-Wno\-endif\-labels\fR" 4
3291 .IX Item "-Wno-endif-labels"
3292 Do not warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
3293 .IP "\fB\-Wshadow\fR" 4
3294 .IX Item "-Wshadow"
3295 Warn whenever a local variable shadows another local variable, parameter or
3296 global variable or whenever a built-in function is shadowed.
3297 .IP "\fB\-Wlarger\-than=\fR\fIlen\fR" 4
3298 .IX Item "-Wlarger-than=len"
3299 Warn whenever an object of larger than \fIlen\fR bytes is defined.
3300 .IP "\fB\-Wframe\-larger\-than=\fR\fIlen\fR" 4
3301 .IX Item "-Wframe-larger-than=len"
3302 Warn if the size of a function frame is larger than \fIlen\fR bytes.
3303 The computation done to determine the stack frame size is approximate
3304 and not conservative.
3305 The actual requirements may be somewhat greater than \fIlen\fR
3306 even if you do not get a warning.  In addition, any space allocated
3307 via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
3308 is not included by the compiler when determining
3309 whether or not to issue a warning.
3310 .IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
3311 .IX Item "-Wunsafe-loop-optimizations"
3312 Warn if the loop cannot be optimized because the compiler could not
3313 assume anything on the bounds of the loop indices.  With
3314 \&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler made
3315 such assumptions.
3316 .IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
3317 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
3318 Disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
3319 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
3320 depending on the \s-1MS\s0 runtime, when you are using the options \fB\-Wformat\fR
3321 and \fB\-pedantic\fR without gnu\-extensions.
3322 .IP "\fB\-Wpointer\-arith\fR" 4
3323 .IX Item "-Wpointer-arith"
3324 Warn about anything that depends on the \*(L"size of\*(R" a function type or
3325 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
3326 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
3327 to functions.  In \*(C+, warn also when an arithmetic operation involves
3328 \&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-pedantic\fR.
3329 .IP "\fB\-Wtype\-limits\fR" 4
3330 .IX Item "-Wtype-limits"
3331 Warn if a comparison is always true or always false due to the limited
3332 range of the data type, but do not warn for constant expressions.  For
3333 example, warn if an unsigned variable is compared against zero with
3334 \&\fB<\fR or \fB>=\fR.  This warning is also enabled by
3335 \&\fB\-Wextra\fR.
3336 .IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
3337 .IX Item "-Wbad-function-cast (C and Objective-C only)"
3338 Warn whenever a function call is cast to a non-matching type.
3339 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
3340 .IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
3341 .IX Item "-Wc++-compat (C and Objective-C only)"
3342 Warn about \s-1ISO\s0 C constructs that are outside of the common subset of
3343 \&\s-1ISO\s0 C and \s-1ISO\s0 \*(C+, e.g. request for implicit conversion from
3344 \&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
3345 .IP "\fB\-Wc++0x\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
3346 .IX Item "-Wc++0x-compat ( and Objective- only)"
3347 Warn about \*(C+ constructs whose meaning differs between \s-1ISO\s0 \*(C+ 1998 and
3348 \&\s-1ISO\s0 \*(C+ 200x, e.g., identifiers in \s-1ISO\s0 \*(C+ 1998 that will become keywords
3349 in \s-1ISO\s0 \*(C+ 200x.  This warning is enabled by \fB\-Wall\fR.
3350 .IP "\fB\-Wcast\-qual\fR" 4
3351 .IX Item "-Wcast-qual"
3352 Warn whenever a pointer is cast so as to remove a type qualifier from
3353 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
3354 to an ordinary \f(CW\*(C`char *\*(C'\fR.
3355 .IP "\fB\-Wcast\-align\fR" 4
3356 .IX Item "-Wcast-align"
3357 Warn whenever a pointer is cast such that the required alignment of the
3358 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
3359 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
3360 two\- or four-byte boundaries.
3361 .IP "\fB\-Wwrite\-strings\fR" 4
3362 .IX Item "-Wwrite-strings"
3363 When compiling C, give string constants the type \f(CW\*(C`const
3364 char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
3365 non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer will get a warning.  These
3366 warnings will help you find at compile time code that can try to write
3367 into a string constant, but only if you have been very careful about
3368 using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it will
3369 just be a nuisance. This is why we did not make \fB\-Wall\fR request
3370 these warnings.
3371 .Sp
3372 When compiling \*(C+, warn about the deprecated conversion from string
3373 literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
3374 programs.
3375 .IP "\fB\-Wclobbered\fR" 4
3376 .IX Item "-Wclobbered"
3377 Warn for variables that might be changed by \fBlongjmp\fR or
3378 \&\fBvfork\fR.  This warning is also enabled by \fB\-Wextra\fR.
3379 .IP "\fB\-Wconversion\fR" 4
3380 .IX Item "-Wconversion"
3381 Warn for implicit conversions that may alter a value. This includes
3382 conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
3383 \&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
3384 like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
3385 \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
3386 ((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
3387 changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
3388 conversions between signed and unsigned integers can be disabled by
3389 using \fB\-Wno\-sign\-conversion\fR.
3390 .Sp
3391 For \*(C+, also warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
3392 types; confusing overload resolution for user-defined conversions; and
3393 conversions that will never use a type conversion operator:
3394 conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a reference
3395 to them. Warnings about conversions between signed and unsigned
3396 integers are disabled by default in \*(C+ unless
3397 \&\fB\-Wsign\-conversion\fR is explicitly enabled.
3398 .IP "\fB\-Wempty\-body\fR" 4
3399 .IX Item "-Wempty-body"
3400 Warn if an empty body occurs in an \fBif\fR, \fBelse\fR or \fBdo
3401 while\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
3402 .IP "\fB\-Wenum\-compare\fR (\*(C+ and Objective\-\*(C+ only)" 4
3403 .IX Item "-Wenum-compare ( and Objective- only)"
3404 Warn about a comparison between values of different enum types. This
3405 warning is enabled by default.
3406 .IP "\fB\-Wsign\-compare\fR" 4
3407 .IX Item "-Wsign-compare"
3408 Warn when a comparison between signed and unsigned values could produce
3409 an incorrect result when the signed value is converted to unsigned.
3410 This warning is also enabled by \fB\-Wextra\fR; to get the other warnings
3411 of \fB\-Wextra\fR without this warning, use \fB\-Wextra \-Wno\-sign\-compare\fR.
3412 .IP "\fB\-Wsign\-conversion\fR" 4
3413 .IX Item "-Wsign-conversion"
3414 Warn for implicit conversions that may change the sign of an integer
3415 value, like assigning a signed integer expression to an unsigned
3416 integer variable. An explicit cast silences the warning. In C, this
3417 option is enabled also by \fB\-Wconversion\fR.
3418 .IP "\fB\-Waddress\fR" 4
3419 .IX Item "-Waddress"
3420 Warn about suspicious uses of memory addresses. These include using
3421 the address of a function in a conditional expression, such as
3422 \&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
3423 address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
3424 uses typically indicate a programmer error: the address of a function
3425 always evaluates to true, so their use in a conditional usually
3426 indicate that the programmer forgot the parentheses in a function
3427 call; and comparisons against string literals result in unspecified
3428 behavior and are not portable in C, so they usually indicate that the
3429 programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
3430 \&\fB\-Wall\fR.
3431 .IP "\fB\-Wlogical\-op\fR" 4
3432 .IX Item "-Wlogical-op"
3433 Warn about suspicious uses of logical operators in expressions.
3434 This includes using logical operators in contexts where a
3435 bit-wise operator is likely to be expected.
3436 .IP "\fB\-Waggregate\-return\fR" 4
3437 .IX Item "-Waggregate-return"
3438 Warn if any functions that return structures or unions are defined or
3439 called.  (In languages where you can return an array, this also elicits
3440 a warning.)
3441 .IP "\fB\-Wno\-attributes\fR" 4
3442 .IX Item "-Wno-attributes"
3443 Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
3444 unrecognized attributes, function attributes applied to variables,
3445 etc.  This will not stop errors for incorrect use of supported
3446 attributes.
3447 .IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
3448 .IX Item "-Wno-builtin-macro-redefined"
3449 Do not warn if certain built-in macros are redefined.  This suppresses
3450 warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
3451 \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
3452 .IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
3453 .IX Item "-Wstrict-prototypes (C and Objective-C only)"
3454 Warn if a function is declared or defined without specifying the
3455 argument types.  (An old-style function definition is permitted without
3456 a warning if preceded by a declaration which specifies the argument
3457 types.)
3458 .IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
3459 .IX Item "-Wold-style-declaration (C and Objective-C only)"
3460 Warn for obsolescent usages, according to the C Standard, in a
3461 declaration. For example, warn if storage-class specifiers like
3462 \&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
3463 is also enabled by \fB\-Wextra\fR.
3464 .IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
3465 .IX Item "-Wold-style-definition (C and Objective-C only)"
3466 Warn if an old-style function definition is used.  A warning is given
3467 even if there is a previous prototype.
3468 .IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
3469 .IX Item "-Wmissing-parameter-type (C and Objective-C only)"
3470 A function parameter is declared without a type specifier in K&R\-style
3471 functions:
3472 .Sp
3473 .Vb 1
3474 \&        void foo(bar) { }
3475 .Ve
3476 .Sp
3477 This warning is also enabled by \fB\-Wextra\fR.
3478 .IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
3479 .IX Item "-Wmissing-prototypes (C and Objective-C only)"
3480 Warn if a global function is defined without a previous prototype
3481 declaration.  This warning is issued even if the definition itself
3482 provides a prototype.  The aim is to detect global functions that fail
3483 to be declared in header files.
3484 .IP "\fB\-Wmissing\-declarations\fR" 4
3485 .IX Item "-Wmissing-declarations"
3486 Warn if a global function is defined without a previous declaration.
3487 Do so even if the definition itself provides a prototype.
3488 Use this option to detect global functions that are not declared in
3489 header files.  In \*(C+, no warnings are issued for function templates,
3490 or for inline functions, or for functions in anonymous namespaces.
3491 .IP "\fB\-Wmissing\-field\-initializers\fR" 4
3492 .IX Item "-Wmissing-field-initializers"
3493 Warn if a structure's initializer has some fields missing.  For
3494 example, the following code would cause such a warning, because
3495 \&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
3496 .Sp
3497 .Vb 2
3498 \&        struct s { int f, g, h; };
3499 \&        struct s x = { 3, 4 };
3500 .Ve
3501 .Sp
3502 This option does not warn about designated initializers, so the following
3503 modification would not trigger a warning:
3504 .Sp
3505 .Vb 2
3506 \&        struct s { int f, g, h; };
3507 \&        struct s x = { .f = 3, .g = 4 };
3508 .Ve
3509 .Sp
3510 This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
3511 warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
3512 .IP "\fB\-Wmissing\-noreturn\fR" 4
3513 .IX Item "-Wmissing-noreturn"
3514 Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
3515 Note these are only possible candidates, not absolute ones.  Care should
3516 be taken to manually verify functions actually do not ever return before
3517 adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
3518 bugs could be introduced.  You will not get a warning for \f(CW\*(C`main\*(C'\fR in
3519 hosted C environments.
3520 .IP "\fB\-Wmissing\-format\-attribute\fR" 4
3521 .IX Item "-Wmissing-format-attribute"
3522 Warn about function pointers which might be candidates for \f(CW\*(C`format\*(C'\fR
3523 attributes.  Note these are only possible candidates, not absolute ones.
3524 \&\s-1GCC\s0 will guess that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
3525 are used in assignment, initialization, parameter passing or return
3526 statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
3527 resulting type.  I.e. the left-hand side of the assignment or
3528 initialization, the type of the parameter variable, or the return type
3529 of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
3530 attribute to avoid the warning.
3531 .Sp
3532 \&\s-1GCC\s0 will also warn about function definitions which might be
3533 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
3534 possible candidates.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR attributes
3535 might be appropriate for any function that calls a function like
3536 \&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
3537 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
3538 appropriate may not be detected.
3539 .IP "\fB\-Wno\-multichar\fR" 4
3540 .IX Item "-Wno-multichar"
3541 Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
3542 Usually they indicate a typo in the user's code, as they have
3543 implementation-defined values, and should not be used in portable code.
3544 .IP "\fB\-Wnormalized=<none|id|nfc|nfkc>\fR" 4
3545 .IX Item "-Wnormalized=<none|id|nfc|nfkc>"
3546 In \s-1ISO\s0 C and \s-1ISO\s0 \*(C+, two identifiers are different if they are
3547 different sequences of characters.  However, sometimes when characters
3548 outside the basic \s-1ASCII\s0 character set are used, you can have two
3549 different character sequences that look the same.  To avoid confusion,
3550 the \s-1ISO\s0 10646 standard sets out some \fInormalization rules\fR which
3551 when applied ensure that two sequences that look the same are turned into
3552 the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers which
3553 have not been normalized; this option controls that warning.
3554 .Sp
3555 There are four levels of warning that \s-1GCC\s0 supports.  The default is
3556 \&\fB\-Wnormalized=nfc\fR, which warns about any identifier which is
3557 not in the \s-1ISO\s0 10646 \*(L"C\*(R" normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
3558 recommended form for most uses.
3559 .Sp
3560 Unfortunately, there are some characters which \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ allow
3561 in identifiers that when turned into \s-1NFC\s0 aren't allowable as
3562 identifiers.  That is, there's no way to use these symbols in portable
3563 \&\s-1ISO\s0 C or \*(C+ and have all your identifiers in \s-1NFC\s0.
3564 \&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
3565 It is hoped that future versions of the standards involved will correct
3566 this, which is why this option is not the default.
3567 .Sp
3568 You can switch the warning off for all characters by writing
3569 \&\fB\-Wnormalized=none\fR.  You would only want to do this if you
3570 were using some other normalization scheme (like \*(L"D\*(R"), because
3571 otherwise you can easily create bugs that are literally impossible to see.
3572 .Sp
3573 Some characters in \s-1ISO\s0 10646 have distinct meanings but look identical
3574 in some fonts or display methodologies, especially once formatting has
3575 been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT\s0 \s-1LATIN\s0 \s-1SMALL\s0
3576 \&\s-1LETTER\s0 N\*(R", will display just like a regular \f(CW\*(C`n\*(C'\fR which has been
3577 placed in a superscript.  \s-1ISO\s0 10646 defines the \fI\s-1NFKC\s0\fR
3578 normalization scheme to convert all these into a standard form as
3579 well, and \s-1GCC\s0 will warn if your code is not in \s-1NFKC\s0 if you use
3580 \&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
3581 about every identifier that contains the letter O because it might be
3582 confused with the digit 0, and so is not the default, but may be
3583 useful as a local coding convention if the programming environment is
3584 unable to be fixed to display these characters distinctly.
3585 .IP "\fB\-Wno\-deprecated\fR" 4
3586 .IX Item "-Wno-deprecated"
3587 Do not warn about usage of deprecated features.  
3588 .IP "\fB\-Wno\-deprecated\-declarations\fR" 4
3589 .IX Item "-Wno-deprecated-declarations"
3590 Do not warn about uses of functions,
3591 variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
3592 attribute.
3593 .IP "\fB\-Wno\-overflow\fR" 4
3594 .IX Item "-Wno-overflow"
3595 Do not warn about compile-time overflow in constant expressions.
3596 .IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
3597 .IX Item "-Woverride-init (C and Objective-C only)"
3598 Warn if an initialized field without side effects is overridden when
3599 using designated initializers.
3600 .Sp
3601 This warning is included in \fB\-Wextra\fR.  To get other
3602 \&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
3603 \&\-Wno\-override\-init\fR.
3604 .IP "\fB\-Wpacked\fR" 4
3605 .IX Item "-Wpacked"
3606 Warn if a structure is given the packed attribute, but the packed
3607 attribute has no effect on the layout or size of the structure.
3608 Such structures may be mis-aligned for little benefit.  For
3609 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
3610 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
3611 have the packed attribute:
3612 .Sp
3613 .Vb 8
3614 \&        struct foo {
3615 \&          int x;
3616 \&          char a, b, c, d;
3617 \&        } __attribute__((packed));
3618 \&        struct bar {
3619 \&          char z;
3620 \&          struct foo f;
3621 \&        };
3622 .Ve
3623 .IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
3624 .IX Item "-Wpacked-bitfield-compat"
3625 The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
3626 on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC\s0 4.4 but
3627 the change can lead to differences in the structure layout.  \s-1GCC\s0
3628 informs you when the offset of such a field has changed in \s-1GCC\s0 4.4.
3629 For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
3630 and \f(CW\*(C`b\*(C'\fR in this structure:
3631 .Sp
3632 .Vb 5
3633 \&        struct foo
3634 \&        {
3635 \&          char a:4;
3636 \&          char b:8;
3637 \&        } __attribute__ ((packed));
3638 .Ve
3639 .Sp
3640 This warning is enabled by default.  Use
3641 \&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
3642 .IP "\fB\-Wpadded\fR" 4
3643 .IX Item "-Wpadded"
3644 Warn if padding is included in a structure, either to align an element
3645 of the structure or to align the whole structure.  Sometimes when this
3646 happens it is possible to rearrange the fields of the structure to
3647 reduce the padding and so make the structure smaller.
3648 .IP "\fB\-Wredundant\-decls\fR" 4
3649 .IX Item "-Wredundant-decls"
3650 Warn if anything is declared more than once in the same scope, even in
3651 cases where multiple declaration is valid and changes nothing.
3652 .IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
3653 .IX Item "-Wnested-externs (C and Objective-C only)"
3654 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
3655 .IP "\fB\-Wunreachable\-code\fR" 4
3656 .IX Item "-Wunreachable-code"
3657 Warn if the compiler detects that code will never be executed.
3658 .Sp
3659 This option is intended to warn when the compiler detects that at
3660 least a whole line of source code will never be executed, because
3661 some condition is never satisfied or because it is after a
3662 procedure that never returns.
3663 .Sp
3664 It is possible for this option to produce a warning even though there
3665 are circumstances under which part of the affected line can be executed,
3666 so care should be taken when removing apparently-unreachable code.
3667 .Sp
3668 For instance, when a function is inlined, a warning may mean that the
3669 line is unreachable in only one inlined copy of the function.
3670 .Sp
3671 This option is not made part of \fB\-Wall\fR because in a debugging
3672 version of a program there is often substantial code which checks
3673 correct functioning of the program and is, hopefully, unreachable
3674 because the program does work.  Another common use of unreachable
3675 code is to provide behavior which is selectable at compile\-time.
3676 .IP "\fB\-Winline\fR" 4
3677 .IX Item "-Winline"
3678 Warn if a function can not be inlined and it was declared as inline.
3679 Even with this option, the compiler will not warn about failures to
3680 inline functions declared in system headers.
3681 .Sp
3682 The compiler uses a variety of heuristics to determine whether or not
3683 to inline a function.  For example, the compiler takes into account
3684 the size of the function being inlined and the amount of inlining
3685 that has already been done in the current function.  Therefore,
3686 seemingly insignificant changes in the source program can cause the
3687 warnings produced by \fB\-Winline\fR to appear or disappear.
3688 .IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
3689 .IX Item "-Wno-invalid-offsetof ( and Objective- only)"
3690 Suppress warnings from applying the \fBoffsetof\fR macro to a non-POD
3691 type.  According to the 1998 \s-1ISO\s0 \*(C+ standard, applying \fBoffsetof\fR
3692 to a non-POD type is undefined.  In existing \*(C+ implementations,
3693 however, \fBoffsetof\fR typically gives meaningful results even when
3694 applied to certain kinds of non-POD types. (Such as a simple
3695 \&\fBstruct\fR that fails to be a \s-1POD\s0 type only by virtue of having a
3696 constructor.)  This flag is for users who are aware that they are
3697 writing nonportable code and who have deliberately chosen to ignore the
3698 warning about it.
3699 .Sp
3700 The restrictions on \fBoffsetof\fR may be relaxed in a future version
3701 of the \*(C+ standard.
3702 .IP "\fB\-Wno\-int\-to\-pointer\-cast\fR (C and Objective-C only)" 4
3703 .IX Item "-Wno-int-to-pointer-cast (C and Objective-C only)"
3704 Suppress warnings from casts to pointer type of an integer of a
3705 different size.
3706 .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
3707 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
3708 Suppress warnings from casts from a pointer to an integer type of a
3709 different size.
3710 .IP "\fB\-Winvalid\-pch\fR" 4
3711 .IX Item "-Winvalid-pch"
3712 Warn if a precompiled header is found in
3713 the search path but can't be used.
3714 .IP "\fB\-Wlong\-long\fR" 4
3715 .IX Item "-Wlong-long"
3716 Warn if \fBlong long\fR type is used.  This is default.  To inhibit
3717 the warning messages, use \fB\-Wno\-long\-long\fR.  Flags
3718 \&\fB\-Wlong\-long\fR and \fB\-Wno\-long\-long\fR are taken into account
3719 only when \fB\-pedantic\fR flag is used.
3720 .IP "\fB\-Wvariadic\-macros\fR" 4
3721 .IX Item "-Wvariadic-macros"
3722 Warn if variadic macros are used in pedantic \s-1ISO\s0 C90 mode, or the \s-1GNU\s0
3723 alternate syntax when in pedantic \s-1ISO\s0 C99 mode.  This is default.
3724 To inhibit the warning messages, use \fB\-Wno\-variadic\-macros\fR.
3725 .IP "\fB\-Wvla\fR" 4
3726 .IX Item "-Wvla"
3727 Warn if variable length array is used in the code.
3728 \&\fB\-Wno\-vla\fR will prevent the \fB\-pedantic\fR warning of
3729 the variable length array.
3730 .IP "\fB\-Wvolatile\-register\-var\fR" 4
3731 .IX Item "-Wvolatile-register-var"
3732 Warn if a register variable is declared volatile.  The volatile
3733 modifier does not inhibit all optimizations that may eliminate reads
3734 and/or writes to register variables.  This warning is enabled by
3735 \&\fB\-Wall\fR.
3736 .IP "\fB\-Wdisabled\-optimization\fR" 4
3737 .IX Item "-Wdisabled-optimization"
3738 Warn if a requested optimization pass is disabled.  This warning does
3739 not generally indicate that there is anything wrong with your code; it
3740 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
3741 effectively.  Often, the problem is that your code is too big or too
3742 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
3743 itself is likely to take inordinate amounts of time.
3744 .IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
3745 .IX Item "-Wpointer-sign (C and Objective-C only)"
3746 Warn for pointer argument passing or assignment with different signedness.
3747 This option is only supported for C and Objective\-C.  It is implied by
3748 \&\fB\-Wall\fR and by \fB\-pedantic\fR, which can be disabled with
3749 \&\fB\-Wno\-pointer\-sign\fR.
3750 .IP "\fB\-Wstack\-protector\fR" 4
3751 .IX Item "-Wstack-protector"
3752 This option is only active when \fB\-fstack\-protector\fR is active.  It
3753 warns about functions that will not be protected against stack smashing.
3754 .IP "\fB\-Wno\-mudflap\fR" 4
3755 .IX Item "-Wno-mudflap"
3756 Suppress warnings about constructs that cannot be instrumented by
3757 \&\fB\-fmudflap\fR.
3758 .IP "\fB\-Woverlength\-strings\fR" 4
3759 .IX Item "-Woverlength-strings"
3760 Warn about string constants which are longer than the \*(L"minimum
3761 maximum\*(R" length specified in the C standard.  Modern compilers
3762 generally allow string constants which are much longer than the
3763 standard's minimum limit, but very portable programs should avoid
3764 using longer strings.
3765 .Sp
3766 The limit applies \fIafter\fR string constant concatenation, and does
3767 not count the trailing \s-1NUL\s0.  In C89, the limit was 509 characters; in
3768 C99, it was raised to 4095.  \*(C+98 does not specify a normative
3769 minimum maximum, so we do not diagnose overlength strings in \*(C+.
3770 .Sp
3771 This option is implied by \fB\-pedantic\fR, and can be disabled with
3772 \&\fB\-Wno\-overlength\-strings\fR.
3773 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
3774 .IX Subsection "Options for Debugging Your Program or GCC"
3775 \&\s-1GCC\s0 has various special options that are used for debugging
3776 either your program or \s-1GCC:\s0
3777 .IP "\fB\-g\fR" 4
3778 .IX Item "-g"
3779 Produce debugging information in the operating system's native format
3780 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0 2).  \s-1GDB\s0 can work with this debugging
3781 information.
3782 .Sp
3783 On most systems that use stabs format, \fB\-g\fR enables use of extra
3784 debugging information that only \s-1GDB\s0 can use; this extra information
3785 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
3786 crash or
3787 refuse to read the program.  If you want to control for certain whether
3788 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
3789 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
3790 .Sp
3791 \&\s-1GCC\s0 allows you to use \fB\-g\fR with
3792 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
3793 produce surprising results: some variables you declared may not exist
3794 at all; flow of control may briefly move where you did not expect it;
3795 some statements may not be executed because they compute constant
3796 results or their values were already at hand; some statements may
3797 execute in different places because they were moved out of loops.
3798 .Sp
3799 Nevertheless it proves possible to debug optimized output.  This makes
3800 it reasonable to use the optimizer for programs that might have bugs.
3801 .Sp
3802 The following options are useful when \s-1GCC\s0 is generated with the
3803 capability for more than one debugging format.
3804 .IP "\fB\-ggdb\fR" 4
3805 .IX Item "-ggdb"
3806 Produce debugging information for use by \s-1GDB\s0.  This means to use the
3807 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
3808 if neither of those are supported), including \s-1GDB\s0 extensions if at all
3809 possible.
3810 .IP "\fB\-gstabs\fR" 4
3811 .IX Item "-gstabs"
3812 Produce debugging information in stabs format (if that is supported),
3813 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
3814 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
3815 produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
3816 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
3817 .IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
3818 .IX Item "-feliminate-unused-debug-symbols"
3819 Produce debugging information in stabs format (if that is supported),
3820 for only symbols that are actually used.
3821 .IP "\fB\-femit\-class\-debug\-always\fR" 4
3822 .IX Item "-femit-class-debug-always"
3823 Instead of emitting debugging information for a \*(C+ class in only one
3824 object file, emit it in all object files using the class.  This option
3825 should be used only with debuggers that are unable to handle the way \s-1GCC\s0
3826 normally emits debugging information for classes because using this
3827 option will increase the size of debugging information by as much as a
3828 factor of two.
3829 .IP "\fB\-gstabs+\fR" 4
3830 .IX Item "-gstabs+"
3831 Produce debugging information in stabs format (if that is supported),
3832 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3833 use of these extensions is likely to make other debuggers crash or
3834 refuse to read the program.
3835 .IP "\fB\-gcoff\fR" 4
3836 .IX Item "-gcoff"
3837 Produce debugging information in \s-1COFF\s0 format (if that is supported).
3838 This is the format used by \s-1SDB\s0 on most System V systems prior to
3839 System V Release 4.
3840 .IP "\fB\-gxcoff\fR" 4
3841 .IX Item "-gxcoff"
3842 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
3843 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
3844 .IP "\fB\-gxcoff+\fR" 4
3845 .IX Item "-gxcoff+"
3846 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
3847 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
3848 use of these extensions is likely to make other debuggers crash or
3849 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
3850 assembler (\s-1GAS\s0) to fail with an error.
3851 .IP "\fB\-gdwarf\-2\fR" 4
3852 .IX Item "-gdwarf-2"
3853 Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
3854 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.  With this
3855 option, \s-1GCC\s0 uses features of \s-1DWARF\s0 version 3 when they are useful;
3856 version 3 is upward compatible with version 2, but may still cause
3857 problems for older debuggers.
3858 .IP "\fB\-gdwarf\-4\fR" 4
3859 .IX Item "-gdwarf-4"
3860 Produce debugging information in \s-1DWARF\s0 version 4 format (if that is
3861 supported).  With this option, \s-1GCC\s0 uses features of \s-1DWARF\s0 version 4
3862 when they are useful, including the placement of most type information
3863 in separate comdat sections.  The \s-1DWARF\s0 version 4 format is still a
3864 draft specification, and this option is currently experimental.
3865 .IP "\fB\-gvms\fR" 4
3866 .IX Item "-gvms"
3867 Produce debugging information in \s-1VMS\s0 debug format (if that is
3868 supported).  This is the format used by \s-1DEBUG\s0 on \s-1VMS\s0 systems.
3869 .IP "\fB\-g\fR\fIlevel\fR" 4
3870 .IX Item "-glevel"
3871 .PD 0
3872 .IP "\fB\-ggdb\fR\fIlevel\fR" 4
3873 .IX Item "-ggdblevel"
3874 .IP "\fB\-gstabs\fR\fIlevel\fR" 4
3875 .IX Item "-gstabslevel"
3876 .IP "\fB\-gcoff\fR\fIlevel\fR" 4
3877 .IX Item "-gcofflevel"
3878 .IP "\fB\-gxcoff\fR\fIlevel\fR" 4
3879 .IX Item "-gxcofflevel"
3880 .IP "\fB\-gvms\fR\fIlevel\fR" 4
3881 .IX Item "-gvmslevel"
3882 .PD
3883 Request debugging information and also use \fIlevel\fR to specify how
3884 much information.  The default level is 2.
3885 .Sp
3886 Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
3887 \&\fB\-g\fR.
3888 .Sp
3889 Level 1 produces minimal information, enough for making backtraces in
3890 parts of the program that you don't plan to debug.  This includes
3891 descriptions of functions and external variables, but no information
3892 about local variables and no line numbers.
3893 .Sp
3894 Level 3 includes extra information, such as all the macro definitions
3895 present in the program.  Some debuggers support macro expansion when
3896 you use \fB\-g3\fR.
3897 .Sp
3898 \&\fB\-gdwarf\-2\fR does not accept a concatenated debug level, because
3899 \&\s-1GCC\s0 used to support an option \fB\-gdwarf\fR that meant to generate
3900 debug information in version 1 of the \s-1DWARF\s0 format (which is very
3901 different from version 2), and it would have been too confusing.  That
3902 debug format is long obsolete, but the option cannot be changed now.
3903 Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
3904 debug level for \s-1DWARF2\s0.
3905 .IP "\fB\-gmlt\fR" 4
3906 .IX Item "-gmlt"
3907 Produce a minimal line table, with level 1 debugging information plus
3908 information about inlined functions and line numbers.
3909 .IP "\fB\-feliminate\-dwarf2\-dups\fR" 4
3910 .IX Item "-feliminate-dwarf2-dups"
3911 Compress \s-1DWARF2\s0 debugging information by eliminating duplicated
3912 information about each symbol.  This option only makes sense when
3913 generating \s-1DWARF2\s0 debugging information with \fB\-gdwarf\-2\fR.
3914 .IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
3915 .IX Item "-femit-struct-debug-baseonly"
3916 Emit debug information for struct-like types
3917 only when the base name of the compilation source file
3918 matches the base name of file in which the struct was defined.
3919 .Sp
3920 This option substantially reduces the size of debugging information,
3921 but at significant potential loss in type information to the debugger.
3922 See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
3923 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3924 .Sp
3925 This option works only with \s-1DWARF\s0 2.
3926 .IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
3927 .IX Item "-femit-struct-debug-reduced"
3928 Emit debug information for struct-like types
3929 only when the base name of the compilation source file
3930 matches the base name of file in which the type was defined,
3931 unless the struct is a template or defined in a system header.
3932 .Sp
3933 This option significantly reduces the size of debugging information,
3934 with some potential loss in type information to the debugger.
3935 See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
3936 See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
3937 .Sp
3938 This option works only with \s-1DWARF\s0 2.
3939 .IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
3940 .IX Item "-femit-struct-debug-detailed[=spec-list]"
3941 Specify the struct-like types
3942 for which the compiler will generate debug information.
3943 The intent is to reduce duplicate struct debug information
3944 between different object files within the same program.
3945 .Sp
3946 This option is a detailed version of
3947 \&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
3948 which will serve for most needs.
3949 .Sp
3950 A specification has the syntax
3951 [\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
3952 .Sp
3953 The optional first word limits the specification to
3954 structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
3955 A struct type is used directly when it is the type of a variable, member.
3956 Indirect uses arise through pointers to structs.
3957 That is, when use of an incomplete struct would be legal, the use is indirect.
3958 An example is
3959 \&\fBstruct one direct; struct two * indirect;\fR.
3960 .Sp
3961 The optional second word limits the specification to
3962 ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
3963 Generic structs are a bit complicated to explain.
3964 For \*(C+, these are non-explicit specializations of template classes,
3965 or non-template classes within the above.
3966 Other programming languages have generics,
3967 but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
3968 .Sp
3969 The third word specifies the source files for those
3970 structs for which the compiler will emit debug information.
3971 The values \fBnone\fR and \fBany\fR have the normal meaning.
3972 The value \fBbase\fR means that
3973 the base of name of the file in which the type declaration appears
3974 must match the base of the name of the main compilation file.
3975 In practice, this means that
3976 types declared in \fIfoo.c\fR and \fIfoo.h\fR will have debug information,
3977 but types declared in other header will not.
3978 The value \fBsys\fR means those types satisfying \fBbase\fR
3979 or declared in system or compiler headers.
3980 .Sp
3981 You may need to experiment to determine the best settings for your application.
3982 .Sp
3983 The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
3984 .Sp
3985 This option works only with \s-1DWARF\s0 2.
3986 .IP "\fB\-fenable\-icf\-debug\fR" 4
3987 .IX Item "-fenable-icf-debug"
3988 Generate additional debug information to support identical code folding (\s-1ICF\s0).
3989 This option only works with \s-1DWARF\s0 version 2 or higher.
3990 .IP "\fB\-fno\-merge\-debug\-strings\fR" 4
3991 .IX Item "-fno-merge-debug-strings"
3992 Direct the linker to not merge together strings in the debugging
3993 information which are identical in different object files.  Merging is
3994 not supported by all assemblers or linkers.  Merging decreases the size
3995 of the debug information in the output file at the cost of increasing
3996 link processing time.  Merging is enabled by default.
3997 .IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
3998 .IX Item "-fdebug-prefix-map=old=new"
3999 When compiling files in directory \fI\fIold\fI\fR, record debugging
4000 information describing them as in \fI\fInew\fI\fR instead.
4001 .IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
4002 .IX Item "-fno-dwarf2-cfi-asm"
4003 Emit \s-1DWARF\s0 2 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
4004 instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
4005 .IP "\fB\-p\fR" 4
4006 .IX Item "-p"
4007 Generate extra code to write profile information suitable for the
4008 analysis program \fBprof\fR.  You must use this option when compiling
4009 the source files you want data about, and you must also use it when
4010 linking.
4011 .IP "\fB\-pg\fR" 4
4012 .IX Item "-pg"
4013 Generate extra code to write profile information suitable for the
4014 analysis program \fBgprof\fR.  You must use this option when compiling
4015 the source files you want data about, and you must also use it when
4016 linking.
4017 .IP "\fB\-Q\fR" 4
4018 .IX Item "-Q"
4019 Makes the compiler print out each function name as it is compiled, and
4020 print some statistics about each pass when it finishes.
4021 .IP "\fB\-ftime\-report\fR" 4
4022 .IX Item "-ftime-report"
4023 Makes the compiler print some statistics about the time consumed by each
4024 pass when it finishes.
4025 .IP "\fB\-fmem\-report\fR" 4
4026 .IX Item "-fmem-report"
4027 Makes the compiler print some statistics about permanent memory
4028 allocation when it finishes.
4029 .IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
4030 .IX Item "-fpre-ipa-mem-report"
4031 .PD 0
4032 .IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
4033 .IX Item "-fpost-ipa-mem-report"
4034 .PD
4035 Makes the compiler print some statistics about permanent memory
4036 allocation before or after interprocedural optimization.
4037 .IP "\fB\-fprofile\-arcs\fR" 4
4038 .IX Item "-fprofile-arcs"
4039 Add code so that program flow \fIarcs\fR are instrumented.  During
4040 execution the program records how many times each branch and call is
4041 executed and how many times it is taken or returns.  When the compiled
4042 program exits it saves this data to a file called
4043 \&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
4044 profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
4045 test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
4046 \&\fIauxname\fR is generated from the name of the output file, if
4047 explicitly specified and it is not the final executable, otherwise it is
4048 the basename of the source file.  In both cases any suffix is removed
4049 (e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
4050 \&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
4051 .IP "\fB\-\-coverage\fR" 4
4052 .IX Item "--coverage"
4053 This option is used to compile and link code instrumented for coverage
4054 analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
4055 \&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
4056 linking).  See the documentation for those options for more details.
4057 .RS 4
4058 .IP "*" 4
4059 Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
4060 and code generation options.  For test coverage analysis, use the
4061 additional \fB\-ftest\-coverage\fR option.  You do not need to profile
4062 every source file in a program.
4063 .IP "*" 4
4064 Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
4065 (the latter implies the former).
4066 .IP "*" 4
4067 Run the program on a representative workload to generate the arc profile
4068 information.  This may be repeated any number of times.  You can run
4069 concurrent instances of your program, and provided that the file system
4070 supports locking, the data files will be correctly updated.  Also
4071 \&\f(CW\*(C`fork\*(C'\fR calls are detected and correctly handled (double counting
4072 will not happen).
4073 .IP "*" 4
4074 For profile-directed optimizations, compile the source files again with
4075 the same optimization and code generation options plus
4076 \&\fB\-fbranch\-probabilities\fR.
4077 .IP "*" 4
4078 For test coverage analysis, use \fBgcov\fR to produce human readable
4079 information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
4080 \&\fBgcov\fR documentation for further information.
4081 .RE
4082 .RS 4
4083 .Sp
4084 With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
4085 creates a program flow graph, then finds a spanning tree for the graph.
4086 Only arcs that are not on the spanning tree have to be instrumented: the
4087 compiler adds code to count the number of times that these arcs are
4088 executed.  When an arc is the only exit or only entrance to a block, the
4089 instrumentation code can be added to the block; otherwise, a new basic
4090 block must be created to hold the instrumentation code.
4091 .RE
4092 .IP "\fB\-ftest\-coverage\fR" 4
4093 .IX Item "-ftest-coverage"
4094 Produce a notes file that the \fBgcov\fR code-coverage utility can use to
4095 show program coverage.  Each source file's note file is called
4096 \&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
4097 above for a description of \fIauxname\fR and instructions on how to
4098 generate test coverage data.  Coverage data will match the source files
4099 more closely, if you do not optimize.
4100 .IP "\fB\-fdbg\-cnt\-list\fR" 4
4101 .IX Item "-fdbg-cnt-list"
4102 Print the name and the counter upperbound for all debug counters.
4103 .IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
4104 .IX Item "-fdbg-cnt=counter-value-list"
4105 Set the internal debug counter upperbound. \fIcounter-value-list\fR 
4106 is a comma-separated list of \fIname\fR:\fIvalue\fR pairs
4107 which sets the upperbound of each debug counter \fIname\fR to \fIvalue\fR.
4108 All debug counters have the initial upperbound of \fI\s-1UINT_MAX\s0\fR,
4109 thus \fIdbg_cnt()\fR returns true always unless the upperbound is set by this option.
4110 e.g. With \-fdbg\-cnt=dce:10,tail_call:0
4111 dbg_cnt(dce) will return true only for first 10 invocations
4112 and dbg_cnt(tail_call) will return false always.
4113 .IP "\fB\-d\fR\fIletters\fR" 4
4114 .IX Item "-dletters"
4115 .PD 0
4116 .IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
4117 .IX Item "-fdump-rtl-pass"
4118 .PD
4119 Says to make debugging dumps during compilation at times specified by
4120 \&\fIletters\fR.  This is used for debugging the RTL-based passes of the
4121 compiler.  The file names for most of the dumps are made by appending
4122 a pass number and a word to the \fIdumpname\fR, and the files are
4123 created in the directory of the output file.  \fIdumpname\fR is
4124 generated from the name of the output file, if explicitly specified
4125 and it is not an executable, otherwise it is the basename of the
4126 source file. These switches may have different effects when
4127 \&\fB\-E\fR is used for preprocessing.
4128 .Sp
4129 Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
4130 \&\fB\-d\fR option \fIletters\fR.  Here are the possible
4131 letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
4132 .RS 4
4133 .IP "\fB\-fdump\-rtl\-alignments\fR" 4
4134 .IX Item "-fdump-rtl-alignments"
4135 Dump after branch alignments have been computed.
4136 .IP "\fB\-fdump\-rtl\-asmcons\fR" 4
4137 .IX Item "-fdump-rtl-asmcons"
4138 Dump after fixing rtl statements that have unsatisfied in/out constraints.
4139 .IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
4140 .IX Item "-fdump-rtl-auto_inc_dec"
4141 Dump after auto-inc-dec discovery.  This pass is only run on
4142 architectures that have auto inc or auto dec instructions.
4143 .IP "\fB\-fdump\-rtl\-barriers\fR" 4
4144 .IX Item "-fdump-rtl-barriers"
4145 Dump after cleaning up the barrier instructions.
4146 .IP "\fB\-fdump\-rtl\-bbpart\fR" 4
4147 .IX Item "-fdump-rtl-bbpart"
4148 Dump after partitioning hot and cold basic blocks.
4149 .IP "\fB\-fdump\-rtl\-bbro\fR" 4
4150 .IX Item "-fdump-rtl-bbro"
4151 Dump after block reordering.
4152 .IP "\fB\-fdump\-rtl\-btl1\fR" 4
4153 .IX Item "-fdump-rtl-btl1"
4154 .PD 0
4155 .IP "\fB\-fdump\-rtl\-btl2\fR" 4
4156 .IX Item "-fdump-rtl-btl2"
4157 .PD
4158 \&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
4159 after the two branch
4160 target load optimization passes.
4161 .IP "\fB\-fdump\-rtl\-bypass\fR" 4
4162 .IX Item "-fdump-rtl-bypass"
4163 Dump after jump bypassing and control flow optimizations.
4164 .IP "\fB\-fdump\-rtl\-combine\fR" 4
4165 .IX Item "-fdump-rtl-combine"
4166 Dump after the \s-1RTL\s0 instruction combination pass.
4167 .IP "\fB\-fdump\-rtl\-compgotos\fR" 4
4168 .IX Item "-fdump-rtl-compgotos"
4169 Dump after duplicating the computed gotos.
4170 .IP "\fB\-fdump\-rtl\-ce1\fR" 4
4171 .IX Item "-fdump-rtl-ce1"
4172 .PD 0
4173 .IP "\fB\-fdump\-rtl\-ce2\fR" 4
4174 .IX Item "-fdump-rtl-ce2"
4175 .IP "\fB\-fdump\-rtl\-ce3\fR" 4
4176 .IX Item "-fdump-rtl-ce3"
4177 .PD
4178 \&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
4179 \&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
4180 if conversion passes. 
4181 .IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
4182 .IX Item "-fdump-rtl-cprop_hardreg"
4183 Dump after hard register copy propagation.
4184 .IP "\fB\-fdump\-rtl\-csa\fR" 4
4185 .IX Item "-fdump-rtl-csa"
4186 Dump after combining stack adjustments.
4187 .IP "\fB\-fdump\-rtl\-cse1\fR" 4
4188 .IX Item "-fdump-rtl-cse1"
4189 .PD 0
4190 .IP "\fB\-fdump\-rtl\-cse2\fR" 4
4191 .IX Item "-fdump-rtl-cse2"
4192 .PD
4193 \&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
4194 the two common sub-expression elimination passes.
4195 .IP "\fB\-fdump\-rtl\-dce\fR" 4
4196 .IX Item "-fdump-rtl-dce"
4197 Dump after the standalone dead code elimination passes.
4198 .IP "\fB\-fdump\-rtl\-dbr\fR" 4
4199 .IX Item "-fdump-rtl-dbr"
4200 Dump after delayed branch scheduling.
4201 .IP "\fB\-fdump\-rtl\-dce1\fR" 4
4202 .IX Item "-fdump-rtl-dce1"
4203 .PD 0
4204 .IP "\fB\-fdump\-rtl\-dce2\fR" 4
4205 .IX Item "-fdump-rtl-dce2"
4206 .PD
4207 \&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
4208 the two dead store elimination passes.
4209 .IP "\fB\-fdump\-rtl\-eh\fR" 4
4210 .IX Item "-fdump-rtl-eh"
4211 Dump after finalization of \s-1EH\s0 handling code.
4212 .IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
4213 .IX Item "-fdump-rtl-eh_ranges"
4214 Dump after conversion of \s-1EH\s0 handling range regions.
4215 .IP "\fB\-fdump\-rtl\-expand\fR" 4
4216 .IX Item "-fdump-rtl-expand"
4217 Dump after \s-1RTL\s0 generation.
4218 .IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
4219 .IX Item "-fdump-rtl-fwprop1"
4220 .PD 0
4221 .IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
4222 .IX Item "-fdump-rtl-fwprop2"
4223 .PD
4224 \&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
4225 dumping after the two forward propagation passes.
4226 .IP "\fB\-fdump\-rtl\-gcse1\fR" 4
4227 .IX Item "-fdump-rtl-gcse1"
4228 .PD 0
4229 .IP "\fB\-fdump\-rtl\-gcse2\fR" 4
4230 .IX Item "-fdump-rtl-gcse2"
4231 .PD
4232 \&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
4233 after global common subexpression elimination.
4234 .IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
4235 .IX Item "-fdump-rtl-init-regs"
4236 Dump after the initialization of the registers.
4237 .IP "\fB\-fdump\-rtl\-initvals\fR" 4
4238 .IX Item "-fdump-rtl-initvals"
4239 Dump after the computation of the initial value sets.
4240 .IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
4241 .IX Item "-fdump-rtl-into_cfglayout"
4242 Dump after converting to cfglayout mode.
4243 .IP "\fB\-fdump\-rtl\-ira\fR" 4
4244 .IX Item "-fdump-rtl-ira"
4245 Dump after iterated register allocation.
4246 .IP "\fB\-fdump\-rtl\-jump\fR" 4
4247 .IX Item "-fdump-rtl-jump"
4248 Dump after the second jump optimization.
4249 .IP "\fB\-fdump\-rtl\-loop2\fR" 4
4250 .IX Item "-fdump-rtl-loop2"
4251 \&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
4252 loop optimization passes.
4253 .IP "\fB\-fdump\-rtl\-mach\fR" 4
4254 .IX Item "-fdump-rtl-mach"
4255 Dump after performing the machine dependent reorganization pass, if that
4256 pass exists.
4257 .IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
4258 .IX Item "-fdump-rtl-mode_sw"
4259 Dump after removing redundant mode switches.
4260 .IP "\fB\-fdump\-rtl\-rnreg\fR" 4
4261 .IX Item "-fdump-rtl-rnreg"
4262 Dump after register renumbering.
4263 .IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
4264 .IX Item "-fdump-rtl-outof_cfglayout"
4265 Dump after converting from cfglayout mode.
4266 .IP "\fB\-fdump\-rtl\-peephole2\fR" 4
4267 .IX Item "-fdump-rtl-peephole2"
4268 Dump after the peephole pass.
4269 .IP "\fB\-fdump\-rtl\-postreload\fR" 4
4270 .IX Item "-fdump-rtl-postreload"
4271 Dump after post-reload optimizations.
4272 .IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
4273 .IX Item "-fdump-rtl-pro_and_epilogue"
4274 Dump after generating the function pro and epilogues.
4275 .IP "\fB\-fdump\-rtl\-regmove\fR" 4
4276 .IX Item "-fdump-rtl-regmove"
4277 Dump after the register move pass.
4278 .IP "\fB\-fdump\-rtl\-sched1\fR" 4
4279 .IX Item "-fdump-rtl-sched1"
4280 .PD 0
4281 .IP "\fB\-fdump\-rtl\-sched2\fR" 4
4282 .IX Item "-fdump-rtl-sched2"
4283 .PD
4284 \&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
4285 after the basic block scheduling passes.
4286 .IP "\fB\-fdump\-rtl\-see\fR" 4
4287 .IX Item "-fdump-rtl-see"
4288 Dump after sign extension elimination.
4289 .IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
4290 .IX Item "-fdump-rtl-seqabstr"
4291 Dump after common sequence discovery. 
4292 .IP "\fB\-fdump\-rtl\-shorten\fR" 4
4293 .IX Item "-fdump-rtl-shorten"
4294 Dump after shortening branches.
4295 .IP "\fB\-fdump\-rtl\-sibling\fR" 4
4296 .IX Item "-fdump-rtl-sibling"
4297 Dump after sibling call optimizations.
4298 .IP "\fB\-fdump\-rtl\-split1\fR" 4
4299 .IX Item "-fdump-rtl-split1"
4300 .PD 0
4301 .IP "\fB\-fdump\-rtl\-split2\fR" 4
4302 .IX Item "-fdump-rtl-split2"
4303 .IP "\fB\-fdump\-rtl\-split3\fR" 4
4304 .IX Item "-fdump-rtl-split3"
4305 .IP "\fB\-fdump\-rtl\-split4\fR" 4
4306 .IX Item "-fdump-rtl-split4"
4307 .IP "\fB\-fdump\-rtl\-split5\fR" 4
4308 .IX Item "-fdump-rtl-split5"
4309 .PD
4310 \&\fB\-fdump\-rtl\-split1\fR, \fB\-fdump\-rtl\-split2\fR,
4311 \&\fB\-fdump\-rtl\-split3\fR, \fB\-fdump\-rtl\-split4\fR and
4312 \&\fB\-fdump\-rtl\-split5\fR enable dumping after five rounds of
4313 instruction splitting.
4314 .IP "\fB\-fdump\-rtl\-sms\fR" 4
4315 .IX Item "-fdump-rtl-sms"
4316 Dump after modulo scheduling.  This pass is only run on some
4317 architectures.
4318 .IP "\fB\-fdump\-rtl\-stack\fR" 4
4319 .IX Item "-fdump-rtl-stack"
4320 Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
4321 x87's stack-like registers.  This pass is only run on x86 variants.
4322 .IP "\fB\-fdump\-rtl\-subreg1\fR" 4
4323 .IX Item "-fdump-rtl-subreg1"
4324 .PD 0
4325 .IP "\fB\-fdump\-rtl\-subreg2\fR" 4
4326 .IX Item "-fdump-rtl-subreg2"
4327 .PD
4328 \&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
4329 the two subreg expansion passes.
4330 .IP "\fB\-fdump\-rtl\-unshare\fR" 4
4331 .IX Item "-fdump-rtl-unshare"
4332 Dump after all rtl has been unshared.
4333 .IP "\fB\-fdump\-rtl\-vartrack\fR" 4
4334 .IX Item "-fdump-rtl-vartrack"
4335 Dump after variable tracking.
4336 .IP "\fB\-fdump\-rtl\-vregs\fR" 4
4337 .IX Item "-fdump-rtl-vregs"
4338 Dump after converting virtual registers to hard registers.
4339 .IP "\fB\-fdump\-rtl\-web\fR" 4
4340 .IX Item "-fdump-rtl-web"
4341 Dump after live range splitting.
4342 .IP "\fB\-fdump\-rtl\-regclass\fR" 4
4343 .IX Item "-fdump-rtl-regclass"
4344 .PD 0
4345 .IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
4346 .IX Item "-fdump-rtl-subregs_of_mode_init"
4347 .IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
4348 .IX Item "-fdump-rtl-subregs_of_mode_finish"
4349 .IP "\fB\-fdump\-rtl\-dfinit\fR" 4
4350 .IX Item "-fdump-rtl-dfinit"
4351 .IP "\fB\-fdump\-rtl\-dfinish\fR" 4
4352 .IX Item "-fdump-rtl-dfinish"
4353 .PD
4354 These dumps are defined but always produce empty files.
4355 .IP "\fB\-fdump\-rtl\-all\fR" 4
4356 .IX Item "-fdump-rtl-all"
4357 Produce all the dumps listed above.
4358 .IP "\fB\-dA\fR" 4
4359 .IX Item "-dA"
4360 Annotate the assembler output with miscellaneous debugging information.
4361 .IP "\fB\-dD\fR" 4
4362 .IX Item "-dD"
4363 Dump all macro definitions, at the end of preprocessing, in addition to
4364 normal output.
4365 .IP "\fB\-dH\fR" 4
4366 .IX Item "-dH"
4367 Produce a core dump whenever an error occurs.
4368 .IP "\fB\-dm\fR" 4
4369 .IX Item "-dm"
4370 Print statistics on memory usage, at the end of the run, to
4371 standard error.
4372 .IP "\fB\-dp\fR" 4
4373 .IX Item "-dp"
4374 Annotate the assembler output with a comment indicating which
4375 pattern and alternative was used.  The length of each instruction is
4376 also printed.
4377 .IP "\fB\-dP\fR" 4
4378 .IX Item "-dP"
4379 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
4380 Also turns on \fB\-dp\fR annotation.
4381 .IP "\fB\-dv\fR" 4
4382 .IX Item "-dv"
4383 For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
4384 dump a representation of the control flow graph suitable for viewing with \s-1VCG\s0
4385 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
4386 .IP "\fB\-dx\fR" 4
4387 .IX Item "-dx"
4388 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
4389 with \fB\-fdump\-rtl\-expand\fR.
4390 .IP "\fB\-dy\fR" 4
4391 .IX Item "-dy"
4392 Dump debugging information during parsing, to standard error.
4393 .RE
4394 .RS 4
4395 .RE
4396 .IP "\fB\-fdump\-noaddr\fR" 4
4397 .IX Item "-fdump-noaddr"
4398 When doing debugging dumps, suppress address output.  This makes it more
4399 feasible to use diff on debugging dumps for compiler invocations with
4400 different compiler binaries and/or different
4401 text / bss / data / heap / stack / dso start locations.
4402 .IP "\fB\-fdump\-unnumbered\fR" 4
4403 .IX Item "-fdump-unnumbered"
4404 When doing debugging dumps, suppress instruction numbers and address output.
4405 This makes it more feasible to use diff on debugging dumps for compiler
4406 invocations with different options, in particular with and without
4407 \&\fB\-g\fR.
4408 .IP "\fB\-fdump\-translation\-unit\fR (\*(C+ only)" 4
4409 .IX Item "-fdump-translation-unit ( only)"
4410 .PD 0
4411 .IP "\fB\-fdump\-translation\-unit\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4412 .IX Item "-fdump-translation-unit-options ( only)"
4413 .PD
4414 Dump a representation of the tree structure for the entire translation
4415 unit to a file.  The file name is made by appending \fI.tu\fR to the
4416 source file name, and the file is created in the same directory as the
4417 output file.  If the \fB\-\fR\fIoptions\fR form is used, \fIoptions\fR
4418 controls the details of the dump as described for the
4419 \&\fB\-fdump\-tree\fR options.
4420 .IP "\fB\-fdump\-class\-hierarchy\fR (\*(C+ only)" 4
4421 .IX Item "-fdump-class-hierarchy ( only)"
4422 .PD 0
4423 .IP "\fB\-fdump\-class\-hierarchy\-\fR\fIoptions\fR\fB \fR(\*(C+ only)" 4
4424 .IX Item "-fdump-class-hierarchy-options ( only)"
4425 .PD
4426 Dump a representation of each class's hierarchy and virtual function
4427 table layout to a file.  The file name is made by appending
4428 \&\fI.class\fR to the source file name, and the file is created in the
4429 same directory as the output file.  If the \fB\-\fR\fIoptions\fR form
4430 is used, \fIoptions\fR controls the details of the dump as described
4431 for the \fB\-fdump\-tree\fR options.
4432 .IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
4433 .IX Item "-fdump-ipa-switch"
4434 Control the dumping at various stages of inter-procedural analysis
4435 language tree to a file.  The file name is generated by appending a
4436 switch specific suffix to the source file name, and the file is created
4437 in the same directory as the output file.  The following dumps are
4438 possible:
4439 .RS 4
4440 .IP "\fBall\fR" 4
4441 .IX Item "all"
4442 Enables all inter-procedural analysis dumps.
4443 .IP "\fBcgraph\fR" 4
4444 .IX Item "cgraph"
4445 Dumps information about call-graph optimization, unused function removal,
4446 and inlining decisions.
4447 .IP "\fBinline\fR" 4
4448 .IX Item "inline"
4449 Dump after function inlining.
4450 .RE
4451 .RS 4
4452 .RE
4453 .IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
4454 .IX Item "-fdump-statistics-option"
4455 Enable and control dumping of pass statistics in a separate file.  The
4456 file name is generated by appending a suffix ending in
4457 \&\fB.statistics\fR to the source file name, and the file is created in
4458 the same directory as the output file.  If the \fB\-\fR\fIoption\fR
4459 form is used, \fB\-stats\fR will cause counters to be summed over the
4460 whole compilation unit while \fB\-details\fR will dump every event as
4461 the passes generate them.  The default with no option is to sum
4462 counters for each function compiled.
4463 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
4464 .IX Item "-fdump-tree-switch"
4465 .PD 0
4466 .IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
4467 .IX Item "-fdump-tree-switch-options"
4468 .PD
4469 Control the dumping at various stages of processing the intermediate
4470 language tree to a file.  The file name is generated by appending a
4471 switch specific suffix to the source file name, and the file is
4472 created in the same directory as the output file.  If the
4473 \&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
4474 \&\fB\-\fR separated options that control the details of the dump.  Not
4475 all options are applicable to all dumps, those which are not
4476 meaningful will be ignored.  The following options are available
4477 .RS 4
4478 .IP "\fBaddress\fR" 4
4479 .IX Item "address"
4480 Print the address of each node.  Usually this is not meaningful as it
4481 changes according to the environment and source file.  Its primary use
4482 is for tying up a dump file with a debug environment.
4483 .IP "\fBslim\fR" 4
4484 .IX Item "slim"
4485 Inhibit dumping of members of a scope or body of a function merely
4486 because that scope has been reached.  Only dump such items when they
4487 are directly reachable by some other path.  When dumping pretty-printed
4488 trees, this option inhibits dumping the bodies of control structures.
4489 .IP "\fBraw\fR" 4
4490 .IX Item "raw"
4491 Print a raw representation of the tree.  By default, trees are
4492 pretty-printed into a C\-like representation.
4493 .IP "\fBdetails\fR" 4
4494 .IX Item "details"
4495 Enable more detailed dumps (not honored by every dump option).
4496 .IP "\fBstats\fR" 4
4497 .IX Item "stats"
4498 Enable dumping various statistics about the pass (not honored by every dump
4499 option).
4500 .IP "\fBblocks\fR" 4
4501 .IX Item "blocks"
4502 Enable showing basic block boundaries (disabled in raw dumps).
4503 .IP "\fBvops\fR" 4
4504 .IX Item "vops"
4505 Enable showing virtual operands for every statement.
4506 .IP "\fBlineno\fR" 4
4507 .IX Item "lineno"
4508 Enable showing line numbers for statements.
4509 .IP "\fBuid\fR" 4
4510 .IX Item "uid"
4511 Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
4512 .IP "\fBverbose\fR" 4
4513 .IX Item "verbose"
4514 Enable showing the tree dump for each statement.
4515 .IP "\fBall\fR" 4
4516 .IX Item "all"
4517 Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
4518 and \fBlineno\fR.
4519 .RE
4520 .RS 4
4521 .Sp
4522 The following tree dumps are possible:
4523 .IP "\fBoriginal\fR" 4
4524 .IX Item "original"
4525 Dump before any tree based optimization, to \fI\fIfile\fI.original\fR.
4526 .IP "\fBoptimized\fR" 4
4527 .IX Item "optimized"
4528 Dump after all tree based optimization, to \fI\fIfile\fI.optimized\fR.
4529 .IP "\fBgimple\fR" 4
4530 .IX Item "gimple"
4531 Dump each function before and after the gimplification pass to a file.  The
4532 file name is made by appending \fI.gimple\fR to the source file name.
4533 .IP "\fBcfg\fR" 4
4534 .IX Item "cfg"
4535 Dump the control flow graph of each function to a file.  The file name is
4536 made by appending \fI.cfg\fR to the source file name.
4537 .IP "\fBvcg\fR" 4
4538 .IX Item "vcg"
4539 Dump the control flow graph of each function to a file in \s-1VCG\s0 format.  The
4540 file name is made by appending \fI.vcg\fR to the source file name.  Note
4541 that if the file contains more than one function, the generated file cannot
4542 be used directly by \s-1VCG\s0.  You will need to cut and paste each function's
4543 graph into its own separate file first.
4544 .IP "\fBch\fR" 4
4545 .IX Item "ch"
4546 Dump each function after copying loop headers.  The file name is made by
4547 appending \fI.ch\fR to the source file name.
4548 .IP "\fBssa\fR" 4
4549 .IX Item "ssa"
4550 Dump \s-1SSA\s0 related information to a file.  The file name is made by appending
4551 \&\fI.ssa\fR to the source file name.
4552 .IP "\fBalias\fR" 4
4553 .IX Item "alias"
4554 Dump aliasing information for each function.  The file name is made by
4555 appending \fI.alias\fR to the source file name.
4556 .IP "\fBccp\fR" 4
4557 .IX Item "ccp"
4558 Dump each function after \s-1CCP\s0.  The file name is made by appending
4559 \&\fI.ccp\fR to the source file name.
4560 .IP "\fBstoreccp\fR" 4
4561 .IX Item "storeccp"
4562 Dump each function after \s-1STORE\-CCP\s0.  The file name is made by appending
4563 \&\fI.storeccp\fR to the source file name.
4564 .IP "\fBpre\fR" 4
4565 .IX Item "pre"
4566 Dump trees after partial redundancy elimination.  The file name is made
4567 by appending \fI.pre\fR to the source file name.
4568 .IP "\fBfre\fR" 4
4569 .IX Item "fre"
4570 Dump trees after full redundancy elimination.  The file name is made
4571 by appending \fI.fre\fR to the source file name.
4572 .IP "\fBcopyprop\fR" 4
4573 .IX Item "copyprop"
4574 Dump trees after copy propagation.  The file name is made
4575 by appending \fI.copyprop\fR to the source file name.
4576 .IP "\fBstore_copyprop\fR" 4
4577 .IX Item "store_copyprop"
4578 Dump trees after store copy\-propagation.  The file name is made
4579 by appending \fI.store_copyprop\fR to the source file name.
4580 .IP "\fBdce\fR" 4
4581 .IX Item "dce"
4582 Dump each function after dead code elimination.  The file name is made by
4583 appending \fI.dce\fR to the source file name.
4584 .IP "\fBmudflap\fR" 4
4585 .IX Item "mudflap"
4586 Dump each function after adding mudflap instrumentation.  The file name is
4587 made by appending \fI.mudflap\fR to the source file name.
4588 .IP "\fBsra\fR" 4
4589 .IX Item "sra"
4590 Dump each function after performing scalar replacement of aggregates.  The
4591 file name is made by appending \fI.sra\fR to the source file name.
4592 .IP "\fBsink\fR" 4
4593 .IX Item "sink"
4594 Dump each function after performing code sinking.  The file name is made
4595 by appending \fI.sink\fR to the source file name.
4596 .IP "\fBdom\fR" 4
4597 .IX Item "dom"
4598 Dump each function after applying dominator tree optimizations.  The file
4599 name is made by appending \fI.dom\fR to the source file name.
4600 .IP "\fBdse\fR" 4
4601 .IX Item "dse"
4602 Dump each function after applying dead store elimination.  The file
4603 name is made by appending \fI.dse\fR to the source file name.
4604 .IP "\fBphiopt\fR" 4
4605 .IX Item "phiopt"
4606 Dump each function after optimizing \s-1PHI\s0 nodes into straightline code.  The file
4607 name is made by appending \fI.phiopt\fR to the source file name.
4608 .IP "\fBforwprop\fR" 4
4609 .IX Item "forwprop"
4610 Dump each function after forward propagating single use variables.  The file
4611 name is made by appending \fI.forwprop\fR to the source file name.
4612 .IP "\fBcopyrename\fR" 4
4613 .IX Item "copyrename"
4614 Dump each function after applying the copy rename optimization.  The file
4615 name is made by appending \fI.copyrename\fR to the source file name.
4616 .IP "\fBnrv\fR" 4
4617 .IX Item "nrv"
4618 Dump each function after applying the named return value optimization on
4619 generic trees.  The file name is made by appending \fI.nrv\fR to the source
4620 file name.
4621 .IP "\fBvect\fR" 4
4622 .IX Item "vect"
4623 Dump each function after applying vectorization of loops.  The file name is
4624 made by appending \fI.vect\fR to the source file name.
4625 .IP "\fBvrp\fR" 4
4626 .IX Item "vrp"
4627 Dump each function after Value Range Propagation (\s-1VRP\s0).  The file name
4628 is made by appending \fI.vrp\fR to the source file name.
4629 .IP "\fBall\fR" 4
4630 .IX Item "all"
4631 Enable all the available tree dumps with the flags provided in this option.
4632 .RE
4633 .RS 4
4634 .RE
4635 .IP "\fB\-ftree\-vectorizer\-verbose=\fR\fIn\fR" 4
4636 .IX Item "-ftree-vectorizer-verbose=n"
4637 This option controls the amount of debugging output the vectorizer prints.
4638 This information is written to standard error, unless
4639 \&\fB\-fdump\-tree\-all\fR or \fB\-fdump\-tree\-vect\fR is specified,
4640 in which case it is output to the usual dump listing file, \fI.vect\fR.
4641 For \fIn\fR=0 no diagnostic information is reported.
4642 If \fIn\fR=1 the vectorizer reports each loop that got vectorized,
4643 and the total number of loops that got vectorized.
4644 If \fIn\fR=2 the vectorizer also reports non-vectorized loops that passed
4645 the first analysis phase (vect_analyze_loop_form) \- i.e. countable,
4646 inner\-most, single\-bb, single\-entry/exit loops.  This is the same verbosity
4647 level that \fB\-fdump\-tree\-vect\-stats\fR uses.
4648 Higher verbosity levels mean either more information dumped for each
4649 reported loop, or same amount of information reported for more loops:
4650 If \fIn\fR=3, alignment related information is added to the reports.
4651 If \fIn\fR=4, data-references related information (e.g. memory dependences,
4652 memory access\-patterns) is added to the reports.
4653 If \fIn\fR=5, the vectorizer reports also non-vectorized inner-most loops
4654 that did not pass the first analysis phase (i.e., may not be countable, or
4655 may have complicated control\-flow).
4656 If \fIn\fR=6, the vectorizer reports also non-vectorized nested loops.
4657 For \fIn\fR=7, all the information the vectorizer generates during its
4658 analysis and transformation is reported.  This is the same verbosity level
4659 that \fB\-fdump\-tree\-vect\-details\fR uses.
4660 .IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
4661 .IX Item "-frandom-seed=string"
4662 This option provides a seed that \s-1GCC\s0 uses when it would otherwise use
4663 random numbers.  It is used to generate certain symbol names
4664 that have to be different in every compiled file.  It is also used to
4665 place unique stamps in coverage data files and the object files that
4666 produce them.  You can use the \fB\-frandom\-seed\fR option to produce
4667 reproducibly identical object files.
4668 .Sp
4669 The \fIstring\fR should be different for every file you compile.
4670 .IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
4671 .IX Item "-fsched-verbose=n"
4672 On targets that use instruction scheduling, this option controls the
4673 amount of debugging output the scheduler prints.  This information is
4674 written to standard error, unless \fB\-fdump\-rtl\-sched1\fR or
4675 \&\fB\-fdump\-rtl\-sched2\fR is specified, in which case it is output
4676 to the usual dump listing file, \fI.sched\fR or \fI.sched2\fR
4677 respectively.  However for \fIn\fR greater than nine, the output is
4678 always printed to standard error.
4679 .Sp
4680 For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
4681 same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
4682 For \fIn\fR greater than one, it also output basic block probabilities,
4683 detailed ready list information and unit/insn info.  For \fIn\fR greater
4684 than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
4685 And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
4686 dependence info.
4687 .IP "\fB\-save\-temps\fR" 4
4688 .IX Item "-save-temps"
4689 Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
4690 in the current directory and name them based on the source file.  Thus,
4691 compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR would produce files
4692 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
4693 preprocessed \fIfoo.i\fR output file even though the compiler now
4694 normally uses an integrated preprocessor.
4695 .Sp
4696 When used in combination with the \fB\-x\fR command line option,
4697 \&\fB\-save\-temps\fR is sensible enough to avoid over writing an
4698 input source file with the same extension as an intermediate file.
4699 The corresponding intermediate file may be obtained by renaming the
4700 source file before using \fB\-save\-temps\fR.
4701 .IP "\fB\-time\fR" 4
4702 .IX Item "-time"
4703 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
4704 sequence.  For C source files, this is the compiler proper and assembler
4705 (plus the linker if linking is done).  The output looks like this:
4706 .Sp
4707 .Vb 2
4708 \&        # cc1 0.12 0.01
4709 \&        # as 0.00 0.01
4710 .Ve
4711 .Sp
4712 The first number on each line is the \*(L"user time\*(R", that is time spent
4713 executing the program itself.  The second number is \*(L"system time\*(R",
4714 time spent executing operating system routines on behalf of the program.
4715 Both numbers are in seconds.
4716 .IP "\fB\-fvar\-tracking\fR" 4
4717 .IX Item "-fvar-tracking"
4718 Run variable tracking pass.  It computes where variables are stored at each
4719 position in code.  Better debugging information is then generated
4720 (if the debugging information format supports this information).
4721 .Sp
4722 It is enabled by default when compiling with optimization (\fB\-Os\fR,
4723 \&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
4724 the debug info format supports it.
4725 .IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
4726 .IX Item "-print-file-name=library"
4727 Print the full absolute name of the library file \fIlibrary\fR that
4728 would be used when linking\-\-\-and don't do anything else.  With this
4729 option, \s-1GCC\s0 does not compile or link anything; it just prints the
4730 file name.
4731 .IP "\fB\-print\-multi\-directory\fR" 4
4732 .IX Item "-print-multi-directory"
4733 Print the directory name corresponding to the multilib selected by any
4734 other switches present in the command line.  This directory is supposed
4735 to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
4736 .IP "\fB\-print\-multi\-lib\fR" 4
4737 .IX Item "-print-multi-lib"
4738 Print the mapping from multilib directory names to compiler switches
4739 that enable them.  The directory name is separated from the switches by
4740 \&\fB;\fR, and each switch starts with an \fB@} instead of the
4741 \&\f(CB@samp\fB{\-\fR, without spaces between multiple switches.  This is supposed to
4742 ease shell\-processing.
4743 .IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
4744 .IX Item "-print-prog-name=program"
4745 Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
4746 .IP "\fB\-print\-libgcc\-file\-name\fR" 4
4747 .IX Item "-print-libgcc-file-name"
4748 Same as \fB\-print\-file\-name=libgcc.a\fR.
4749 .Sp
4750 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
4751 but you do want to link with \fIlibgcc.a\fR.  You can do
4752 .Sp
4753 .Vb 1
4754 \&        gcc \-nostdlib <files>... `gcc \-print\-libgcc\-file\-name`
4755 .Ve
4756 .IP "\fB\-print\-search\-dirs\fR" 4
4757 .IX Item "-print-search-dirs"
4758 Print the name of the configured installation directory and a list of
4759 program and library directories \fBgcc\fR will search\-\-\-and don't do anything else.
4760 .Sp
4761 This is useful when \fBgcc\fR prints the error message
4762 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
4763 To resolve this you either need to put \fIcpp0\fR and the other compiler
4764 components where \fBgcc\fR expects to find them, or you can set the environment
4765 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
4766 Don't forget the trailing \fB/\fR.
4767 .IP "\fB\-print\-sysroot\fR" 4
4768 .IX Item "-print-sysroot"
4769 Print the target sysroot directory that will be used during
4770 compilation.  This is the target sysroot specified either at configure
4771 time or using the \fB\-\-sysroot\fR option, possibly with an extra
4772 suffix that depends on compilation options.  If no target sysroot is
4773 specified, the option prints nothing.
4774 .IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
4775 .IX Item "-print-sysroot-headers-suffix"
4776 Print the suffix added to the target sysroot when searching for
4777 headers, or give an error if the compiler is not configured with such
4778 a suffix\-\-\-and don't do anything else.
4779 .IP "\fB\-dumpmachine\fR" 4
4780 .IX Item "-dumpmachine"
4781 Print the compiler's target machine (for example,
4782 \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
4783 .IP "\fB\-dumpversion\fR" 4
4784 .IX Item "-dumpversion"
4785 Print the compiler version (for example, \fB3.0\fR)\-\-\-and don't do
4786 anything else.
4787 .IP "\fB\-dumpspecs\fR" 4
4788 .IX Item "-dumpspecs"
4789 Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
4790 is used when \s-1GCC\s0 itself is being built.)  
4791 .IP "\fB\-feliminate\-unused\-debug\-types\fR" 4
4792 .IX Item "-feliminate-unused-debug-types"
4793 Normally, when producing \s-1DWARF2\s0 output, \s-1GCC\s0 will emit debugging
4794 information for all types declared in a compilation
4795 unit, regardless of whether or not they are actually used
4796 in that compilation unit.  Sometimes this is useful, such as
4797 if, in the debugger, you want to cast a value to a type that is
4798 not actually used in your program (but is declared).  More often,
4799 however, this results in a significant amount of wasted space.
4800 With this option, \s-1GCC\s0 will avoid producing debug symbol output
4801 for types that are nowhere used in the source file being compiled.
4802 .Sh "Options That Control Optimization"
4803 .IX Subsection "Options That Control Optimization"
4804 These options control various sorts of optimizations.
4805 .PP
4806 Without any optimization option, the compiler's goal is to reduce the
4807 cost of compilation and to make debugging produce the expected
4808 results.  Statements are independent: if you stop the program with a
4809 breakpoint between statements, you can then assign a new value to any
4810 variable or change the program counter to any other statement in the
4811 function and get exactly the results you would expect from the source
4812 code.
4813 .PP
4814 Turning on optimization flags makes the compiler attempt to improve
4815 the performance and/or code size at the expense of compilation time
4816 and possibly the ability to debug the program.
4817 .PP
4818 The compiler performs optimization based on the knowledge it has of the
4819 program.  Compiling multiple files at once to a single output file mode allows
4820 the compiler to use information gained from all of the files when compiling
4821 each of them.
4822 .PP
4823 Not all optimizations are controlled directly by a flag.  Only
4824 optimizations that have a flag are listed.
4825 .IP "\fB\-O\fR" 4
4826 .IX Item "-O"
4827 .PD 0
4828 .IP "\fB\-O1\fR" 4
4829 .IX Item "-O1"
4830 .PD
4831 Optimize.  Optimizing compilation takes somewhat more time, and a lot
4832 more memory for a large function.
4833 .Sp
4834 With \fB\-O\fR, the compiler tries to reduce code size and execution
4835 time, without performing any optimizations that take a great deal of
4836 compilation time.
4837 .Sp
4838 \&\fB\-O\fR turns on the following optimization flags:
4839 .Sp
4840 \&\fB\-fauto\-inc\-dec 
4841 \&\-fcprop\-registers 
4842 \&\-fdce 
4843 \&\-fdefer\-pop 
4844 \&\-fdelayed\-branch 
4845 \&\-fdse 
4846 \&\-fguess\-branch\-probability 
4847 \&\-fif\-conversion2 
4848 \&\-fif\-conversion 
4849 \&\-finline\-small\-functions 
4850 \&\-fipa\-pure\-const 
4851 \&\-fipa\-reference 
4852 \&\-fmerge\-constants
4853 \&\-fsplit\-wide\-types 
4854 \&\-ftree\-builtin\-call\-dce 
4855 \&\-ftree\-ccp 
4856 \&\-ftree\-ch 
4857 \&\-ftree\-copyrename 
4858 \&\-ftree\-dce 
4859 \&\-ftree\-dominator\-opts 
4860 \&\-ftree\-dse 
4861 \&\-ftree\-fre 
4862 \&\-ftree\-sra 
4863 \&\-ftree\-ter 
4864 \&\-funit\-at\-a\-time\fR
4865 .Sp
4866 \&\fB\-O\fR also turns on \fB\-fomit\-frame\-pointer\fR on machines
4867 where doing so does not interfere with debugging.
4868 .IP "\fB\-O2\fR" 4
4869 .IX Item "-O2"
4870 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
4871 that do not involve a space-speed tradeoff.
4872 As compared to \fB\-O\fR, this option increases both compilation time
4873 and the performance of the generated code.
4874 .Sp
4875 \&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
4876 also turns on the following optimization flags:
4877 \&\fB\-fthread\-jumps 
4878 \&\-falign\-functions  \-falign\-jumps 
4879 \&\-falign\-loops  \-falign\-labels 
4880 \&\-fcaller\-saves 
4881 \&\-fcrossjumping 
4882 \&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
4883 \&\-fdelete\-null\-pointer\-checks 
4884 \&\-fexpensive\-optimizations 
4885 \&\-fgcse  \-fgcse\-lm  
4886 \&\-findirect\-inlining 
4887 \&\-foptimize\-sibling\-calls 
4888 \&\-fpeephole2 
4889 \&\-fregmove 
4890 \&\-freorder\-blocks  \-freorder\-functions 
4891 \&\-frerun\-cse\-after\-loop  
4892 \&\-fsched\-interblock  \-fsched\-spec 
4893 \&\-fschedule\-insns  \-fschedule\-insns2 
4894 \&\-fstrict\-aliasing \-fstrict\-overflow 
4895 \&\-ftree\-switch\-conversion 
4896 \&\-ftree\-pre 
4897 \&\-ftree\-vrp\fR
4898 .Sp
4899 Please note the warning under \fB\-fgcse\fR about
4900 invoking \fB\-O2\fR on programs that use computed gotos.
4901 .IP "\fB\-O3\fR" 4
4902 .IX Item "-O3"
4903 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
4904 by \fB\-O2\fR and also turns on the \fB\-finline\-functions\fR,
4905 \&\fB\-funswitch\-loops\fR, \fB\-fpredictive\-commoning\fR,
4906 \&\fB\-fgcse\-after\-reload\fR and \fB\-ftree\-vectorize\fR options.
4907 .IP "\fB\-O0\fR" 4
4908 .IX Item "-O0"
4909 Reduce compilation time and make debugging produce the expected
4910 results.  This is the default.
4911 .IP "\fB\-Os\fR" 4
4912 .IX Item "-Os"
4913 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
4914 do not typically increase code size.  It also performs further
4915 optimizations designed to reduce code size.
4916 .Sp
4917 \&\fB\-Os\fR disables the following optimization flags:
4918 \&\fB\-falign\-functions  \-falign\-jumps  \-falign\-loops 
4919 \&\-falign\-labels  \-freorder\-blocks  \-freorder\-blocks\-and\-partition 
4920 \&\-fprefetch\-loop\-arrays  \-ftree\-vect\-loop\-version\fR
4921 .Sp
4922 If you use multiple \fB\-O\fR options, with or without level numbers,
4923 the last such option is the one that is effective.
4924 .PP
4925 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
4926 flags.  Most flags have both positive and negative forms; the negative
4927 form of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table
4928 below, only one of the forms is listed\-\-\-the one you typically will
4929 use.  You can figure out the other form by either removing \fBno\-\fR
4930 or adding it.
4931 .PP
4932 The following options control specific optimizations.  They are either
4933 activated by \fB\-O\fR options or are related to ones that are.  You
4934 can use the following flags in the rare cases when \*(L"fine\-tuning\*(R" of
4935 optimizations to be performed is desired.
4936 .IP "\fB\-fno\-default\-inline\fR" 4
4937 .IX Item "-fno-default-inline"
4938 Do not make member functions inline by default merely because they are
4939 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
4940 \&\fB\-O\fR, member functions defined inside class scope are compiled
4941 inline by default; i.e., you don't need to add \fBinline\fR in front of
4942 the member function name.
4943 .IP "\fB\-fno\-defer\-pop\fR" 4
4944 .IX Item "-fno-defer-pop"
4945 Always pop the arguments to each function call as soon as that function
4946 returns.  For machines which must pop arguments after a function call,
4947 the compiler normally lets arguments accumulate on the stack for several
4948 function calls and pops them all at once.
4949 .Sp
4950 Disabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4951 .IP "\fB\-fforward\-propagate\fR" 4
4952 .IX Item "-fforward-propagate"
4953 Perform a forward propagation pass on \s-1RTL\s0.  The pass tries to combine two
4954 instructions and checks if the result can be simplified.  If loop unrolling
4955 is active, two passes are performed and the second is scheduled after
4956 loop unrolling.
4957 .Sp
4958 This option is enabled by default at optimization levels \fB\-O2\fR,
4959 \&\fB\-O3\fR, \fB\-Os\fR.
4960 .IP "\fB\-fomit\-frame\-pointer\fR" 4
4961 .IX Item "-fomit-frame-pointer"
4962 Don't keep the frame pointer in a register for functions that
4963 don't need one.  This avoids the instructions to save, set up and
4964 restore frame pointers; it also makes an extra register available
4965 in many functions.  \fBIt also makes debugging impossible on
4966 some machines.\fR
4967 .Sp
4968 On some machines, such as the \s-1VAX\s0, this flag has no effect, because
4969 the standard calling sequence automatically handles the frame pointer
4970 and nothing is saved by pretending it doesn't exist.  The
4971 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
4972 whether a target machine supports this flag.  
4973 .Sp
4974 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4975 .IP "\fB\-foptimize\-sibling\-calls\fR" 4
4976 .IX Item "-foptimize-sibling-calls"
4977 Optimize sibling and tail recursive calls.
4978 .Sp
4979 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
4980 .IP "\fB\-fno\-inline\fR" 4
4981 .IX Item "-fno-inline"
4982 Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword.  Normally this option
4983 is used to keep the compiler from expanding any functions inline.
4984 Note that if you are not optimizing, no functions can be expanded inline.
4985 .IP "\fB\-finline\-small\-functions\fR" 4
4986 .IX Item "-finline-small-functions"
4987 Integrate functions into their callers when their body is smaller than expected
4988 function call code (so overall size of program gets smaller).  The compiler
4989 heuristically decides which functions are simple enough to be worth integrating
4990 in this way.
4991 .Sp
4992 Enabled at level \fB\-O2\fR.
4993 .IP "\fB\-findirect\-inlining\fR" 4
4994 .IX Item "-findirect-inlining"
4995 Inline also indirect calls that are discovered to be known at compile
4996 time thanks to previous inlining.  This option has any effect only
4997 when inlining itself is turned on by the \fB\-finline\-functions\fR
4998 or \fB\-finline\-small\-functions\fR options.
4999 .Sp
5000 Enabled at level \fB\-O2\fR.
5001 .IP "\fB\-finline\-functions\fR" 4
5002 .IX Item "-finline-functions"
5003 Integrate all simple functions into their callers.  The compiler
5004 heuristically decides which functions are simple enough to be worth
5005 integrating in this way.
5006 .Sp
5007 If all calls to a given function are integrated, and the function is
5008 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
5009 assembler code in its own right.
5010 .Sp
5011 Enabled at level \fB\-O3\fR.
5012 .IP "\fB\-finline\-functions\-called\-once\fR" 4
5013 .IX Item "-finline-functions-called-once"
5014 Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
5015 caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
5016 function is integrated, then the function is not output as assembler code
5017 in its own right.
5018 .Sp
5019 Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
5020 .IP "\fB\-fearly\-inlining\fR" 4
5021 .IX Item "-fearly-inlining"
5022 Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
5023 smaller than the function call overhead early before doing
5024 \&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
5025 makes profiling significantly cheaper and usually inlining faster on programs
5026 having large chains of nested wrapper functions.
5027 .Sp
5028 Enabled by default.
5029 .IP "\fB\-finline\-limit=\fR\fIn\fR" 4
5030 .IX Item "-finline-limit=n"
5031 By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
5032 allows coarse control of this limit.  \fIn\fR is the size of functions that
5033 can be inlined in number of pseudo instructions.
5034 .Sp
5035 Inlining is actually controlled by a number of parameters, which may be
5036 specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
5037 The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
5038 as follows:
5039 .RS 4
5040 .IP "\fBmax-inline-insns-single\fR" 4
5041 .IX Item "max-inline-insns-single"
5042 is set to \fIn\fR/2.
5043 .IP "\fBmax-inline-insns-auto\fR" 4
5044 .IX Item "max-inline-insns-auto"
5045 is set to \fIn\fR/2.
5046 .RE
5047 .RS 4
5048 .Sp
5049 See below for a documentation of the individual
5050 parameters controlling inlining and for the defaults of these parameters.
5051 .Sp
5052 \&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
5053 in default behavior.
5054 .Sp
5055 \&\fINote:\fR pseudo instruction represents, in this particular context, an
5056 abstract measurement of function's size.  In no way does it represent a count
5057 of assembly instructions and as such its exact meaning might change from one
5058 release to an another.
5059 .RE
5060 .IP "\fB\-fkeep\-inline\-functions\fR" 4
5061 .IX Item "-fkeep-inline-functions"
5062 In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
5063 into the object file, even if the function has been inlined into all
5064 of its callers.  This switch does not affect functions using the
5065 \&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU\s0 C89.  In \*(C+, emit any and all
5066 inline functions into the object file.
5067 .IP "\fB\-fkeep\-static\-consts\fR" 4
5068 .IX Item "-fkeep-static-consts"
5069 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
5070 on, even if the variables aren't referenced.
5071 .Sp
5072 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
5073 check if the variable was referenced, regardless of whether or not
5074 optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
5075 .IP "\fB\-fmerge\-constants\fR" 4
5076 .IX Item "-fmerge-constants"
5077 Attempt to merge identical constants (string constants and floating point
5078 constants) across compilation units.
5079 .Sp
5080 This option is the default for optimized compilation if the assembler and
5081 linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
5082 behavior.
5083 .Sp
5084 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5085 .IP "\fB\-fmerge\-all\-constants\fR" 4
5086 .IX Item "-fmerge-all-constants"
5087 Attempt to merge identical constants and identical variables.
5088 .Sp
5089 This option implies \fB\-fmerge\-constants\fR.  In addition to
5090 \&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
5091 arrays or initialized constant variables with integral or floating point
5092 types.  Languages like C or \*(C+ require each variable, including multiple
5093 instances of the same variable in recursive calls, to have distinct locations,
5094 so using this option will result in non-conforming
5095 behavior.
5096 .IP "\fB\-fmodulo\-sched\fR" 4
5097 .IX Item "-fmodulo-sched"
5098 Perform swing modulo scheduling immediately before the first scheduling
5099 pass.  This pass looks at innermost loops and reorders their
5100 instructions by overlapping different iterations.
5101 .IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
5102 .IX Item "-fmodulo-sched-allow-regmoves"
5103 Perform more aggressive \s-1SMS\s0 based modulo scheduling with register moves
5104 allowed.  By setting this flag certain anti-dependences edges will be
5105 deleted which will trigger the generation of reg-moves based on the
5106 life-range analysis.  This option is effective only with
5107 \&\fB\-fmodulo\-sched\fR enabled.
5108 .IP "\fB\-fno\-branch\-count\-reg\fR" 4
5109 .IX Item "-fno-branch-count-reg"
5110 Do not use \*(L"decrement and branch\*(R" instructions on a count register,
5111 but instead generate a sequence of instructions that decrement a
5112 register, compare it against zero, then branch based upon the result.
5113 This option is only meaningful on architectures that support such
5114 instructions, which include x86, PowerPC, \s-1IA\-64\s0 and S/390.
5115 .Sp
5116 The default is \fB\-fbranch\-count\-reg\fR.
5117 .IP "\fB\-fno\-function\-cse\fR" 4
5118 .IX Item "-fno-function-cse"
5119 Do not put function addresses in registers; make each instruction that
5120 calls a constant function contain the function's address explicitly.
5121 .Sp
5122 This option results in less efficient code, but some strange hacks
5123 that alter the assembler output may be confused by the optimizations
5124 performed when this option is not used.
5125 .Sp
5126 The default is \fB\-ffunction\-cse\fR
5127 .IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
5128 .IX Item "-fno-zero-initialized-in-bss"
5129 If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
5130 are initialized to zero into \s-1BSS\s0.  This can save space in the resulting
5131 code.
5132 .Sp
5133 This option turns off this behavior because some programs explicitly
5134 rely on variables going to the data section.  E.g., so that the
5135 resulting executable can find the beginning of that section and/or make
5136 assumptions based on that.
5137 .Sp
5138 The default is \fB\-fzero\-initialized\-in\-bss\fR.
5139 .IP "\fB\-fmudflap \-fmudflapth \-fmudflapir\fR" 4
5140 .IX Item "-fmudflap -fmudflapth -fmudflapir"
5141 For front-ends that support it (C and \*(C+), instrument all risky
5142 pointer/array dereferencing operations, some standard library
5143 string/heap functions, and some other associated constructs with
5144 range/validity tests.  Modules so instrumented should be immune to
5145 buffer overflows, invalid heap use, and some other classes of C/\*(C+
5146 programming errors.  The instrumentation relies on a separate runtime
5147 library (\fIlibmudflap\fR), which will be linked into a program if
5148 \&\fB\-fmudflap\fR is given at link time.  Run-time behavior of the
5149 instrumented program is controlled by the \fB\s-1MUDFLAP_OPTIONS\s0\fR
5150 environment variable.  See \f(CW\*(C`env MUDFLAP_OPTIONS=\-help a.out\*(C'\fR
5151 for its options.
5152 .Sp
5153 Use \fB\-fmudflapth\fR instead of \fB\-fmudflap\fR to compile and to
5154 link if your program is multi\-threaded.  Use \fB\-fmudflapir\fR, in
5155 addition to \fB\-fmudflap\fR or \fB\-fmudflapth\fR, if
5156 instrumentation should ignore pointer reads.  This produces less
5157 instrumentation (and therefore faster execution) and still provides
5158 some protection against outright memory corrupting writes, but allows
5159 erroneously read data to propagate within a program.
5160 .IP "\fB\-fthread\-jumps\fR" 4
5161 .IX Item "-fthread-jumps"
5162 Perform optimizations where we check to see if a jump branches to a
5163 location where another comparison subsumed by the first is found.  If
5164 so, the first branch is redirected to either the destination of the
5165 second branch or a point immediately following it, depending on whether
5166 the condition is known to be true or false.
5167 .Sp
5168 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5169 .IP "\fB\-fsplit\-wide\-types\fR" 4
5170 .IX Item "-fsplit-wide-types"
5171 When using a type that occupies multiple registers, such as \f(CW\*(C`long
5172 long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
5173 independently.  This normally generates better code for those types,
5174 but may make debugging more difficult.
5175 .Sp
5176 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
5177 \&\fB\-Os\fR.
5178 .IP "\fB\-fcse\-follow\-jumps\fR" 4
5179 .IX Item "-fcse-follow-jumps"
5180 In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
5181 when the target of the jump is not reached by any other path.  For
5182 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
5183 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
5184 tested is false.
5185 .Sp
5186 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5187 .IP "\fB\-fcse\-skip\-blocks\fR" 4
5188 .IX Item "-fcse-skip-blocks"
5189 This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
5190 follow jumps which conditionally skip over blocks.  When \s-1CSE\s0
5191 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
5192 \&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
5193 body of the \f(CW\*(C`if\*(C'\fR.
5194 .Sp
5195 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5196 .IP "\fB\-frerun\-cse\-after\-loop\fR" 4
5197 .IX Item "-frerun-cse-after-loop"
5198 Re-run common subexpression elimination after loop optimizations has been
5199 performed.
5200 .Sp
5201 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5202 .IP "\fB\-fgcse\fR" 4
5203 .IX Item "-fgcse"
5204 Perform a global common subexpression elimination pass.
5205 This pass also performs global constant and copy propagation.
5206 .Sp
5207 \&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
5208 extension, you may get better runtime performance if you disable
5209 the global common subexpression elimination pass by adding
5210 \&\fB\-fno\-gcse\fR to the command line.
5211 .Sp
5212 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5213 .IP "\fB\-fgcse\-lm\fR" 4
5214 .IX Item "-fgcse-lm"
5215 When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination will
5216 attempt to move loads which are only killed by stores into themselves.  This
5217 allows a loop containing a load/store sequence to be changed to a load outside
5218 the loop, and a copy/store within the loop.
5219 .Sp
5220 Enabled by default when gcse is enabled.
5221 .IP "\fB\-fgcse\-sm\fR" 4
5222 .IX Item "-fgcse-sm"
5223 When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
5224 global common subexpression elimination.  This pass will attempt to move
5225 stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
5226 loops containing a load/store sequence can be changed to a load before
5227 the loop and a store after the loop.
5228 .Sp
5229 Not enabled at any optimization level.
5230 .IP "\fB\-fgcse\-las\fR" 4
5231 .IX Item "-fgcse-las"
5232 When \fB\-fgcse\-las\fR is enabled, the global common subexpression
5233 elimination pass eliminates redundant loads that come after stores to the
5234 same memory location (both partial and full redundancies).
5235 .Sp
5236 Not enabled at any optimization level.
5237 .IP "\fB\-fgcse\-after\-reload\fR" 4
5238 .IX Item "-fgcse-after-reload"
5239 When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
5240 pass is performed after reload.  The purpose of this pass is to cleanup
5241 redundant spilling.
5242 .IP "\fB\-funsafe\-loop\-optimizations\fR" 4
5243 .IX Item "-funsafe-loop-optimizations"
5244 If given, the loop optimizer will assume that loop indices do not
5245 overflow, and that the loops with nontrivial exit condition are not
5246 infinite.  This enables a wider range of loop optimizations even if
5247 the loop optimizer itself cannot prove that these assumptions are valid.
5248 Using \fB\-Wunsafe\-loop\-optimizations\fR, the compiler will warn you
5249 if it finds this kind of loop.
5250 .IP "\fB\-fcrossjumping\fR" 4
5251 .IX Item "-fcrossjumping"
5252 Perform cross-jumping transformation.  This transformation unifies equivalent code and save code size.  The
5253 resulting code may or may not perform better than without cross\-jumping.
5254 .Sp
5255 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5256 .IP "\fB\-fauto\-inc\-dec\fR" 4
5257 .IX Item "-fauto-inc-dec"
5258 Combine increments or decrements of addresses with memory accesses.
5259 This pass is always skipped on architectures that do not have
5260 instructions to support this.  Enabled by default at \fB\-O\fR and
5261 higher on architectures that support this.
5262 .IP "\fB\-fdce\fR" 4
5263 .IX Item "-fdce"
5264 Perform dead code elimination (\s-1DCE\s0) on \s-1RTL\s0.
5265 Enabled by default at \fB\-O\fR and higher.
5266 .IP "\fB\-fdse\fR" 4
5267 .IX Item "-fdse"
5268 Perform dead store elimination (\s-1DSE\s0) on \s-1RTL\s0.
5269 Enabled by default at \fB\-O\fR and higher.
5270 .IP "\fB\-fif\-conversion\fR" 4
5271 .IX Item "-fif-conversion"
5272 Attempt to transform conditional jumps into branch-less equivalents.  This
5273 include use of conditional moves, min, max, set flags and abs instructions, and
5274 some tricks doable by standard arithmetics.  The use of conditional execution
5275 on chips where it is available is controlled by \f(CW\*(C`if\-conversion2\*(C'\fR.
5276 .Sp
5277 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5278 .IP "\fB\-fif\-conversion2\fR" 4
5279 .IX Item "-fif-conversion2"
5280 Use conditional execution (where available) to transform conditional jumps into
5281 branch-less equivalents.
5282 .Sp
5283 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5284 .IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
5285 .IX Item "-fdelete-null-pointer-checks"
5286 Use global dataflow analysis to identify and eliminate useless checks
5287 for null pointers.  The compiler assumes that dereferencing a null
5288 pointer would have halted the program.  If a pointer is checked after
5289 it has already been dereferenced, it cannot be null.
5290 .Sp
5291 In some environments, this assumption is not true, and programs can
5292 safely dereference null pointers.  Use
5293 \&\fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
5294 for programs which depend on that behavior.
5295 .Sp
5296 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5297 .IP "\fB\-fexpensive\-optimizations\fR" 4
5298 .IX Item "-fexpensive-optimizations"
5299 Perform a number of minor optimizations that are relatively expensive.
5300 .Sp
5301 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5302 .IP "\fB\-foptimize\-register\-move\fR" 4
5303 .IX Item "-foptimize-register-move"
5304 .PD 0
5305 .IP "\fB\-fregmove\fR" 4
5306 .IX Item "-fregmove"
5307 .PD
5308 Attempt to reassign register numbers in move instructions and as
5309 operands of other simple instructions in order to maximize the amount of
5310 register tying.  This is especially helpful on machines with two-operand
5311 instructions.
5312 .Sp
5313 Note \fB\-fregmove\fR and \fB\-foptimize\-register\-move\fR are the same
5314 optimization.
5315 .Sp
5316 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5317 .IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
5318 .IX Item "-fira-algorithm=algorithm"
5319 Use specified coloring algorithm for the integrated register
5320 allocator.  The \fIalgorithm\fR argument should be \f(CW\*(C`priority\*(C'\fR or
5321 \&\f(CW\*(C`CB\*(C'\fR.  The first algorithm specifies Chow's priority coloring,
5322 the second one specifies Chaitin-Briggs coloring.  The second
5323 algorithm can be unimplemented for some architectures.  If it is
5324 implemented, it is the default because Chaitin-Briggs coloring as a
5325 rule generates a better code.
5326 .IP "\fB\-fira\-region=\fR\fIregion\fR" 4
5327 .IX Item "-fira-region=region"
5328 Use specified regions for the integrated register allocator.  The
5329 \&\fIregion\fR argument should be one of \f(CW\*(C`all\*(C'\fR, \f(CW\*(C`mixed\*(C'\fR, or
5330 \&\f(CW\*(C`one\*(C'\fR.  The first value means using all loops as register
5331 allocation regions, the second value which is the default means using
5332 all loops except for loops with small register pressure as the
5333 regions, and third one means using all function as a single region.
5334 The first value can give best result for machines with small size and
5335 irregular register set, the third one results in faster and generates
5336 decent code and the smallest size code, and the default value usually
5337 give the best results in most cases and for most architectures.
5338 .IP "\fB\-fira\-coalesce\fR" 4
5339 .IX Item "-fira-coalesce"
5340 Do optimistic register coalescing.  This option might be profitable for
5341 architectures with big regular register files.
5342 .IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
5343 .IX Item "-fno-ira-share-save-slots"
5344 Switch off sharing stack slots used for saving call used hard
5345 registers living through a call.  Each hard register will get a
5346 separate stack slot and as a result function stack frame will be
5347 bigger.
5348 .IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
5349 .IX Item "-fno-ira-share-spill-slots"
5350 Switch off sharing stack slots allocated for pseudo\-registers.  Each
5351 pseudo-register which did not get a hard register will get a separate
5352 stack slot and as a result function stack frame will be bigger.
5353 .IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
5354 .IX Item "-fira-verbose=n"
5355 Set up how verbose dump file for the integrated register allocator
5356 will be.  Default value is 5.  If the value is greater or equal to 10,
5357 the dump file will be stderr as if the value were \fIn\fR minus 10.
5358 .IP "\fB\-fdelayed\-branch\fR" 4
5359 .IX Item "-fdelayed-branch"
5360 If supported for the target machine, attempt to reorder instructions
5361 to exploit instruction slots available after delayed branch
5362 instructions.
5363 .Sp
5364 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5365 .IP "\fB\-fschedule\-insns\fR" 4
5366 .IX Item "-fschedule-insns"
5367 If supported for the target machine, attempt to reorder instructions to
5368 eliminate execution stalls due to required data being unavailable.  This
5369 helps machines that have slow floating point or memory load instructions
5370 by allowing other instructions to be issued until the result of the load
5371 or floating point instruction is required.
5372 .Sp
5373 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5374 .IP "\fB\-fschedule\-insns2\fR" 4
5375 .IX Item "-fschedule-insns2"
5376 Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
5377 instruction scheduling after register allocation has been done.  This is
5378 especially useful on machines with a relatively small number of
5379 registers and where memory load instructions take more than one cycle.
5380 .Sp
5381 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5382 .IP "\fB\-fno\-sched\-interblock\fR" 4
5383 .IX Item "-fno-sched-interblock"
5384 Don't schedule instructions across basic blocks.  This is normally
5385 enabled by default when scheduling before register allocation, i.e.
5386 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5387 .IP "\fB\-fno\-sched\-spec\fR" 4
5388 .IX Item "-fno-sched-spec"
5389 Don't allow speculative motion of non-load instructions.  This is normally
5390 enabled by default when scheduling before register allocation, i.e.
5391 with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5392 .IP "\fB\-fsched\-spec\-load\fR" 4
5393 .IX Item "-fsched-spec-load"
5394 Allow speculative motion of some load instructions.  This only makes
5395 sense when scheduling before register allocation, i.e. with
5396 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5397 .IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
5398 .IX Item "-fsched-spec-load-dangerous"
5399 Allow speculative motion of more load instructions.  This only makes
5400 sense when scheduling before register allocation, i.e. with
5401 \&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
5402 .IP "\fB\-fsched\-stalled\-insns\fR" 4
5403 .IX Item "-fsched-stalled-insns"
5404 .PD 0
5405 .IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
5406 .IX Item "-fsched-stalled-insns=n"
5407 .PD
5408 Define how many insns (if any) can be moved prematurely from the queue
5409 of stalled insns into the ready list, during the second scheduling pass.
5410 \&\fB\-fno\-sched\-stalled\-insns\fR means that no insns will be moved
5411 prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
5412 on how many queued insns can be moved prematurely.
5413 \&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
5414 \&\fB\-fsched\-stalled\-insns=1\fR.
5415 .IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
5416 .IX Item "-fsched-stalled-insns-dep"
5417 .PD 0
5418 .IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
5419 .IX Item "-fsched-stalled-insns-dep=n"
5420 .PD
5421 Define how many insn groups (cycles) will be examined for a dependency
5422 on a stalled insn that is candidate for premature removal from the queue
5423 of stalled insns.  This has an effect only during the second scheduling pass,
5424 and only if \fB\-fsched\-stalled\-insns\fR is used.
5425 \&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
5426 \&\fB\-fsched\-stalled\-insns\-dep=0\fR.
5427 \&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
5428 \&\fB\-fsched\-stalled\-insns\-dep=1\fR.
5429 .IP "\fB\-fsched2\-use\-superblocks\fR" 4
5430 .IX Item "-fsched2-use-superblocks"
5431 When scheduling after register allocation, do use superblock scheduling
5432 algorithm.  Superblock scheduling allows motion across basic block boundaries
5433 resulting on faster schedules.  This option is experimental, as not all machine
5434 descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
5435 results from the algorithm.
5436 .Sp
5437 This only makes sense when scheduling after register allocation, i.e. with
5438 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5439 .IP "\fB\-fsched2\-use\-traces\fR" 4
5440 .IX Item "-fsched2-use-traces"
5441 Use \fB\-fsched2\-use\-superblocks\fR algorithm when scheduling after register
5442 allocation and additionally perform code duplication in order to increase the
5443 size of superblocks using tracer pass.  See \fB\-ftracer\fR for details on
5444 trace formation.
5445 .Sp
5446 This mode should produce faster but significantly longer programs.  Also
5447 without \fB\-fbranch\-probabilities\fR the traces constructed may not
5448 match the reality and hurt the performance.  This only makes
5449 sense when scheduling after register allocation, i.e. with
5450 \&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
5451 .IP "\fB\-fsee\fR" 4
5452 .IX Item "-fsee"
5453 Eliminate redundant sign extension instructions and move the non-redundant
5454 ones to optimal placement using lazy code motion (\s-1LCM\s0).
5455 .IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
5456 .IX Item "-freschedule-modulo-scheduled-loops"
5457 The modulo scheduling comes before the traditional scheduling, if a loop
5458 was modulo scheduled we may want to prevent the later scheduling passes
5459 from changing its schedule, we use this option to control that.
5460 .IP "\fB\-fselective\-scheduling\fR" 4
5461 .IX Item "-fselective-scheduling"
5462 Schedule instructions using selective scheduling algorithm.  Selective
5463 scheduling runs instead of the first scheduler pass.
5464 .IP "\fB\-fselective\-scheduling2\fR" 4
5465 .IX Item "-fselective-scheduling2"
5466 Schedule instructions using selective scheduling algorithm.  Selective
5467 scheduling runs instead of the second scheduler pass.
5468 .IP "\fB\-fsel\-sched\-pipelining\fR" 4
5469 .IX Item "-fsel-sched-pipelining"
5470 Enable software pipelining of innermost loops during selective scheduling.  
5471 This option has no effect until one of \fB\-fselective\-scheduling\fR or 
5472 \&\fB\-fselective\-scheduling2\fR is turned on.
5473 .IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
5474 .IX Item "-fsel-sched-pipelining-outer-loops"
5475 When pipelining loops during selective scheduling, also pipeline outer loops.
5476 This option has no effect until \fB\-fsel\-sched\-pipelining\fR is turned on.
5477 .IP "\fB\-fcaller\-saves\fR" 4
5478 .IX Item "-fcaller-saves"
5479 Enable values to be allocated in registers that will be clobbered by
5480 function calls, by emitting extra instructions to save and restore the
5481 registers around such calls.  Such allocation is done only when it
5482 seems to result in better code than would otherwise be produced.
5483 .Sp
5484 This option is always enabled by default on certain machines, usually
5485 those which have no call-preserved registers to use instead.
5486 .Sp
5487 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5488 .IP "\fB\-fconserve\-stack\fR" 4
5489 .IX Item "-fconserve-stack"
5490 Attempt to minimize stack usage.  The compiler will attempt to use less
5491 stack space, even if that makes the program slower.  This option
5492 implies setting the \fBlarge-stack-frame\fR parameter to 100
5493 and the \fBlarge-stack-frame-growth\fR parameter to 400.
5494 .IP "\fB\-ftree\-reassoc\fR" 4
5495 .IX Item "-ftree-reassoc"
5496 Perform reassociation on trees.  This flag is enabled by default
5497 at \fB\-O\fR and higher.
5498 .IP "\fB\-ftree\-pre\fR" 4
5499 .IX Item "-ftree-pre"
5500 Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
5501 enabled by default at \fB\-O2\fR and \fB\-O3\fR.
5502 .IP "\fB\-ftree\-fre\fR" 4
5503 .IX Item "-ftree-fre"
5504 Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
5505 between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
5506 that are computed on all paths leading to the redundant computation.
5507 This analysis is faster than \s-1PRE\s0, though it exposes fewer redundancies.
5508 This flag is enabled by default at \fB\-O\fR and higher.
5509 .IP "\fB\-ftree\-copy\-prop\fR" 4
5510 .IX Item "-ftree-copy-prop"
5511 Perform copy propagation on trees.  This pass eliminates unnecessary
5512 copy operations.  This flag is enabled by default at \fB\-O\fR and
5513 higher.
5514 .IP "\fB\-fipa\-pure\-const\fR" 4
5515 .IX Item "-fipa-pure-const"
5516 Discover which functions are pure or constant.
5517 Enabled by default at \fB\-O\fR and higher.
5518 .IP "\fB\-fipa\-reference\fR" 4
5519 .IX Item "-fipa-reference"
5520 Discover which static variables do not escape cannot escape the
5521 compilation unit.
5522 Enabled by default at \fB\-O\fR and higher.
5523 .IP "\fB\-fipa\-struct\-reorg\fR" 4
5524 .IX Item "-fipa-struct-reorg"
5525 Perform structure reorganization optimization, that change C\-like structures 
5526 layout in order to better utilize spatial locality.  This transformation is 
5527 affective for programs containing arrays of structures.  Available in two 
5528 compilation modes: profile-based (enabled with \fB\-fprofile\-generate\fR)
5529 or static (which uses built-in heuristics).  Require \fB\-fipa\-type\-escape\fR
5530 to provide the safety of this transformation.  It works only in whole program
5531 mode, so it requires \fB\-fwhole\-program\fR and \fB\-combine\fR to be
5532 enabled.  Structures considered \fBcold\fR by this transformation are not
5533 affected (see \fB\-\-param struct\-reorg\-cold\-struct\-ratio=\fR\fIvalue\fR).
5534 .Sp
5535 With this flag, the program debug info reflects a new structure layout.
5536 .IP "\fB\-fipa\-pta\fR" 4
5537 .IX Item "-fipa-pta"
5538 Perform interprocedural pointer analysis.  This option is experimental
5539 and does not affect generated code.
5540 .IP "\fB\-fipa\-cp\fR" 4
5541 .IX Item "-fipa-cp"
5542 Perform interprocedural constant propagation.
5543 This optimization analyzes the program to determine when values passed
5544 to functions are constants and then optimizes accordingly.  
5545 This optimization can substantially increase performance
5546 if the application has constants passed to functions.
5547 This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
5548 .IP "\fB\-fipa\-cp\-clone\fR" 4
5549 .IX Item "-fipa-cp-clone"
5550 Perform function cloning to make interprocedural constant propagation stronger.
5551 When enabled, interprocedural constant propagation will perform function cloning
5552 when externally visible function can be called with constant arguments.
5553 Because this optimization can create multiple copies of functions,
5554 it may significantly increase code size
5555 (see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
5556 This flag is enabled by default at \fB\-O3\fR.
5557 .IP "\fB\-fipa\-matrix\-reorg\fR" 4
5558 .IX Item "-fipa-matrix-reorg"
5559 Perform matrix flattening and transposing.
5560 Matrix flattening tries to replace a m\-dimensional matrix 
5561 with its equivalent n\-dimensional matrix, where n < m.
5562 This reduces the level of indirection needed for accessing the elements
5563 of the matrix. The second optimization is matrix transposing that
5564 attempts to change the order of the matrix's dimensions in order to
5565 improve cache locality.
5566 Both optimizations need the \fB\-fwhole\-program\fR flag. 
5567 Transposing is enabled only if profiling information is available.
5568 .IP "\fB\-ftree\-sink\fR" 4
5569 .IX Item "-ftree-sink"
5570 Perform forward store motion  on trees.  This flag is
5571 enabled by default at \fB\-O\fR and higher.
5572 .IP "\fB\-ftree\-ccp\fR" 4
5573 .IX Item "-ftree-ccp"
5574 Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
5575 pass only operates on local scalar variables and is enabled by default
5576 at \fB\-O\fR and higher.
5577 .IP "\fB\-ftree\-switch\-conversion\fR" 4
5578 .IX Item "-ftree-switch-conversion"
5579 Perform conversion of simple initializations in a switch to
5580 initializations from a scalar array.  This flag is enabled by default
5581 at \fB\-O2\fR and higher.
5582 .IP "\fB\-ftree\-dce\fR" 4
5583 .IX Item "-ftree-dce"
5584 Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
5585 default at \fB\-O\fR and higher.
5586 .IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
5587 .IX Item "-ftree-builtin-call-dce"
5588 Perform conditional dead code elimination (\s-1DCE\s0) for calls to builtin functions 
5589 that may set \f(CW\*(C`errno\*(C'\fR but are otherwise side-effect free.  This flag is 
5590 enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also 
5591 specified.
5592 .IP "\fB\-ftree\-dominator\-opts\fR" 4
5593 .IX Item "-ftree-dominator-opts"
5594 Perform a variety of simple scalar cleanups (constant/copy
5595 propagation, redundancy elimination, range propagation and expression
5596 simplification) based on a dominator tree traversal.  This also
5597 performs jump threading (to reduce jumps to jumps). This flag is
5598 enabled by default at \fB\-O\fR and higher.
5599 .IP "\fB\-ftree\-dse\fR" 4
5600 .IX Item "-ftree-dse"
5601 Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
5602 a memory location which will later be overwritten by another store without
5603 any intervening loads.  In this case the earlier store can be deleted.  This
5604 flag is enabled by default at \fB\-O\fR and higher.
5605 .IP "\fB\-ftree\-ch\fR" 4
5606 .IX Item "-ftree-ch"
5607 Perform loop header copying on trees.  This is beneficial since it increases
5608 effectiveness of code motion optimizations.  It also saves one jump.  This flag
5609 is enabled by default at \fB\-O\fR and higher.  It is not enabled
5610 for \fB\-Os\fR, since it usually increases code size.
5611 .IP "\fB\-ftree\-lr\-shrinking\fR" 4
5612 .IX Item "-ftree-lr-shrinking"
5613 Enable live range shrinking optimization on trees. This optimization is used
5614 to help reducing register pressure.
5615 .IP "\fB\-ftree\-loop\-optimize\fR" 4
5616 .IX Item "-ftree-loop-optimize"
5617 Perform loop optimizations on trees.  This flag is enabled by default
5618 at \fB\-O\fR and higher.
5619 .IP "\fB\-ftree\-loop\-linear\fR" 4
5620 .IX Item "-ftree-loop-linear"
5621 Perform linear loop transformations on tree.  This flag can improve cache
5622 performance and allow further loop optimizations to take place.
5623 .IP "\fB\-floop\-interchange\fR" 4
5624 .IX Item "-floop-interchange"
5625 Perform loop interchange transformations on loops.  Interchanging two
5626 nested loops switches the inner and outer loops.  For example, given a
5627 loop like:
5628 .Sp
5629 .Vb 5
5630 \&        DO J = 1, M
5631 \&          DO I = 1, N
5632 \&            A(J, I) = A(J, I) * C
5633 \&          ENDDO
5634 \&        ENDDO
5635 .Ve
5636 .Sp
5637 loop interchange will transform the loop as if the user had written:
5638 .Sp
5639 .Vb 5
5640 \&        DO I = 1, N
5641 \&          DO J = 1, M
5642 \&            A(J, I) = A(J, I) * C
5643 \&          ENDDO
5644 \&        ENDDO
5645 .Ve
5646 .Sp
5647 which can be beneficial when \f(CW\*(C`N\*(C'\fR is larger than the caches,
5648 because in Fortran, the elements of an array are stored in memory
5649 contiguously by column, and the original loop iterates over rows,
5650 potentially creating at each access a cache miss.  This optimization
5651 applies to all the languages supported by \s-1GCC\s0 and is not limited to
5652 Fortran.  To use this code transformation, \s-1GCC\s0 has to be configured
5653 with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to enable the
5654 Graphite loop transformation infrastructure.
5655 .IP "\fB\-floop\-strip\-mine\fR" 4
5656 .IX Item "-floop-strip-mine"
5657 Perform loop strip mining transformations on loops.  Strip mining
5658 splits a loop into two nested loops.  The outer loop has strides 
5659 equal to the strip size and the inner loop has strides of the 
5660 original loop within a strip.  For example, given a loop like:
5661 .Sp
5662 .Vb 3
5663 \&        DO I = 1, N
5664 \&          A(I) = A(I) + C
5665 \&        ENDDO
5666 .Ve
5667 .Sp
5668 loop strip mining will transform the loop as if the user had written:
5669 .Sp
5670 .Vb 5
5671 \&        DO II = 1, N, 4
5672 \&          DO I = II, min (II + 3, N)
5673 \&            A(I) = A(I) + C
5674 \&          ENDDO
5675 \&        ENDDO
5676 .Ve
5677 .Sp
5678 This optimization applies to all the languages supported by \s-1GCC\s0 and is
5679 not limited to Fortran.  To use this code transformation, \s-1GCC\s0 has to
5680 be configured with \fB\-\-with\-ppl\fR and \fB\-\-with\-cloog\fR to
5681 enable the Graphite loop transformation infrastructure.
5682 .IP "\fB\-floop\-block\fR" 4
5683 .IX Item "-floop-block"
5684 Perform loop blocking transformations on loops.  Blocking strip mines
5685 each loop in the loop nest such that the memory accesses of the
5686 element loops fit inside caches.  For example, given a loop like:
5687 .Sp
5688 .Vb 5
5689 \&        DO I = 1, N
5690 \&          DO J = 1, M
5691 \&            A(J, I) = B(I) + C(J)
5692 \&          ENDDO
5693 \&        ENDDO
5694 .Ve
5695 .Sp
5696 loop blocking will transform the loop as if the user had written:
5697 .Sp
5698 .Vb 9
5699 \&        DO II = 1, N, 64
5700 \&          DO JJ = 1, M, 64
5701 \&            DO I = II, min (II + 63, N)
5702 \&              DO J = JJ, min (JJ + 63, M)
5703 \&                A(J, I) = B(I) + C(J)
5704 \&              ENDDO
5705 \&            ENDDO
5706 \&          ENDDO
5707 \&        ENDDO
5708 .Ve
5709 .Sp
5710 which can be beneficial when \f(CW\*(C`M\*(C'\fR is larger than the caches,
5711 because the innermost loop will iterate over a smaller amount of data
5712 that can be kept in the caches.  This optimization applies to all the
5713 languages supported by \s-1GCC\s0 and is not limited to Fortran.  To use this
5714 code transformation, \s-1GCC\s0 has to be configured with \fB\-\-with\-ppl\fR
5715 and \fB\-\-with\-cloog\fR to enable the Graphite loop transformation
5716 infrastructure.
5717 .IP "\fB\-fcheck\-data\-deps\fR" 4
5718 .IX Item "-fcheck-data-deps"
5719 Compare the results of several data dependence analyzers.  This option
5720 is used for debugging the data dependence analyzers.
5721 .IP "\fB\-ftree\-loop\-distribution\fR" 4
5722 .IX Item "-ftree-loop-distribution"
5723 Perform loop distribution.  This flag can improve cache performance on
5724 big loop bodies and allow further loop optimizations, like
5725 parallelization or vectorization, to take place.  For example, the loop
5726 .Sp
5727 .Vb 4
5728 \&        DO I = 1, N
5729 \&          A(I) = B(I) + C
5730 \&          D(I) = E(I) * F
5731 \&        ENDDO
5732 .Ve
5733 .Sp
5734 is transformed to
5735 .Sp
5736 .Vb 6
5737 \&        DO I = 1, N
5738 \&           A(I) = B(I) + C
5739 \&        ENDDO
5740 \&        DO I = 1, N
5741 \&           D(I) = E(I) * F
5742 \&        ENDDO
5743 .Ve
5744 .IP "\fB\-ftree\-loop\-im\fR" 4
5745 .IX Item "-ftree-loop-im"
5746 Perform loop invariant motion on trees.  This pass moves only invariants that
5747 would be hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
5748 nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
5749 operands of conditions that are invariant out of the loop, so that we can use
5750 just trivial invariantness analysis in loop unswitching.  The pass also includes
5751 store motion.
5752 .IP "\fB\-ftree\-loop\-ivcanon\fR" 4
5753 .IX Item "-ftree-loop-ivcanon"
5754 Create a canonical counter for number of iterations in the loop for that
5755 determining number of iterations requires complicated analysis.  Later
5756 optimizations then may determine the number easily.  Useful especially
5757 in connection with unrolling.
5758 .IP "\fB\-fivopts\fR" 4
5759 .IX Item "-fivopts"
5760 Perform induction variable optimizations (strength reduction, induction
5761 variable merging and induction variable elimination) on trees.
5762 .IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
5763 .IX Item "-ftree-parallelize-loops=n"
5764 Parallelize loops, i.e., split their iteration space to run in n threads.
5765 This is only possible for loops whose iterations are independent
5766 and can be arbitrarily reordered.  The optimization is only
5767 profitable on multiprocessor machines, for loops that are CPU\-intensive,
5768 rather than constrained e.g. by memory bandwidth.  This option
5769 implies \fB\-pthread\fR, and thus is only supported on targets
5770 that have support for \fB\-pthread\fR.
5771 .IP "\fB\-ftree\-sra\fR" 4
5772 .IX Item "-ftree-sra"
5773 Perform scalar replacement of aggregates.  This pass replaces structure
5774 references with scalars to prevent committing structures to memory too
5775 early.  This flag is enabled by default at \fB\-O\fR and higher.
5776 .IP "\fB\-ftree\-copyrename\fR" 4
5777 .IX Item "-ftree-copyrename"
5778 Perform copy renaming on trees.  This pass attempts to rename compiler
5779 temporaries to other variables at copy locations, usually resulting in
5780 variable names which more closely resemble the original variables.  This flag
5781 is enabled by default at \fB\-O\fR and higher.
5782 .IP "\fB\-ftree\-ter\fR" 4
5783 .IX Item "-ftree-ter"
5784 Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
5785 use/single def temporaries are replaced at their use location with their
5786 defining expression.  This results in non-GIMPLE code, but gives the expanders
5787 much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
5788 enabled by default at \fB\-O\fR and higher.
5789 .IP "\fB\-ftree\-vectorize\fR" 4
5790 .IX Item "-ftree-vectorize"
5791 Perform loop vectorization on trees. This flag is enabled by default at
5792 \&\fB\-O3\fR.
5793 .IP "\fB\-ftree\-vect\-loop\-version\fR" 4
5794 .IX Item "-ftree-vect-loop-version"
5795 Perform loop versioning when doing loop vectorization on trees.  When a loop
5796 appears to be vectorizable except that data alignment or data dependence cannot
5797 be determined at compile time then vectorized and non-vectorized versions of
5798 the loop are generated along with runtime checks for alignment or dependence
5799 to control which version is executed.  This option is enabled by default
5800 except at level \fB\-Os\fR where it is disabled.
5801 .IP "\fB\-fvect\-cost\-model\fR" 4
5802 .IX Item "-fvect-cost-model"
5803 Enable cost model for vectorization.
5804 .IP "\fB\-ftree\-vrp\fR" 4
5805 .IX Item "-ftree-vrp"
5806 Perform Value Range Propagation on trees.  This is similar to the
5807 constant propagation pass, but instead of values, ranges of values are
5808 propagated.  This allows the optimizers to remove unnecessary range
5809 checks like array bound checks and null pointer checks.  This is
5810 enabled by default at \fB\-O2\fR and higher.  Null pointer check
5811 elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
5812 enabled.
5813 .IP "\fB\-ftracer\fR" 4
5814 .IX Item "-ftracer"
5815 Perform tail duplication to enlarge superblock size.  This transformation
5816 simplifies the control flow of the function allowing other optimizations to do
5817 better job.
5818 .IP "\fB\-funroll\-loops\fR" 4
5819 .IX Item "-funroll-loops"
5820 Unroll loops whose number of iterations can be determined at compile
5821 time or upon entry to the loop.  \fB\-funroll\-loops\fR implies
5822 \&\fB\-frerun\-cse\-after\-loop\fR.  This option makes code larger,
5823 and may or may not make it run faster.
5824 .IP "\fB\-funroll\-all\-loops\fR" 4
5825 .IX Item "-funroll-all-loops"
5826 Unroll all loops, even if their number of iterations is uncertain when
5827 the loop is entered.  This usually makes programs run more slowly.
5828 \&\fB\-funroll\-all\-loops\fR implies the same options as
5829 \&\fB\-funroll\-loops\fR,
5830 .IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
5831 .IX Item "-fsplit-ivs-in-unroller"
5832 Enables expressing of values of induction variables in later iterations
5833 of the unrolled loop using the value in the first iteration.  This breaks
5834 long dependency chains, thus improving efficiency of the scheduling passes.
5835 .Sp
5836 Combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
5837 same effect.  However in cases the loop body is more complicated than
5838 a single basic block, this is not reliable.  It also does not work at all
5839 on some of the architectures due to restrictions in the \s-1CSE\s0 pass.
5840 .Sp
5841 This optimization is enabled by default.
5842 .IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
5843 .IX Item "-fvariable-expansion-in-unroller"
5844 With this option, the compiler will create multiple copies of some
5845 local variables when unrolling a loop which can result in superior code.
5846 .IP "\fB\-fpredictive\-commoning\fR" 4
5847 .IX Item "-fpredictive-commoning"
5848 Perform predictive commoning optimization, i.e., reusing computations
5849 (especially memory loads and stores) performed in previous
5850 iterations of loops.
5851 .Sp
5852 This option is enabled at level \fB\-O3\fR.
5853 .IP "\fB\-fprefetch\-loop\-arrays\fR" 4
5854 .IX Item "-fprefetch-loop-arrays"
5855 If supported by the target machine, generate instructions to prefetch
5856 memory to improve the performance of loops that access large arrays.
5857 .Sp
5858 This option may generate better or worse code; results are highly
5859 dependent on the structure of loops within the source code.
5860 .Sp
5861 Disabled at level \fB\-Os\fR.
5862 .IP "\fB\-fno\-peephole\fR" 4
5863 .IX Item "-fno-peephole"
5864 .PD 0
5865 .IP "\fB\-fno\-peephole2\fR" 4
5866 .IX Item "-fno-peephole2"
5867 .PD
5868 Disable any machine-specific peephole optimizations.  The difference
5869 between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
5870 are implemented in the compiler; some targets use one, some use the
5871 other, a few use both.
5872 .Sp
5873 \&\fB\-fpeephole\fR is enabled by default.
5874 \&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5875 .IP "\fB\-fno\-guess\-branch\-probability\fR" 4
5876 .IX Item "-fno-guess-branch-probability"
5877 Do not guess branch probabilities using heuristics.
5878 .Sp
5879 \&\s-1GCC\s0 will use heuristics to guess branch probabilities if they are
5880 not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
5881 heuristics are based on the control flow graph.  If some branch probabilities
5882 are specified by \fB_\|_builtin_expect\fR, then the heuristics will be
5883 used to guess branch probabilities for the rest of the control flow graph,
5884 taking the \fB_\|_builtin_expect\fR info into account.  The interactions
5885 between the heuristics and \fB_\|_builtin_expect\fR can be complex, and in
5886 some cases, it may be useful to disable the heuristics so that the effects
5887 of \fB_\|_builtin_expect\fR are easier to understand.
5888 .Sp
5889 The default is \fB\-fguess\-branch\-probability\fR at levels
5890 \&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5891 .IP "\fB\-freorder\-blocks\fR" 4
5892 .IX Item "-freorder-blocks"
5893 Reorder basic blocks in the compiled function in order to reduce number of
5894 taken branches and improve code locality.
5895 .Sp
5896 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
5897 .IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
5898 .IX Item "-freorder-blocks-and-partition"
5899 In addition to reordering basic blocks in the compiled function, in order
5900 to reduce number of taken branches, partitions hot and cold basic blocks
5901 into separate sections of the assembly and .o files, to improve
5902 paging and cache locality performance.
5903 .Sp
5904 This optimization is automatically turned off in the presence of
5905 exception handling, for linkonce sections, for functions with a user-defined
5906 section attribute and on any architecture that does not support named
5907 sections.
5908 .IP "\fB\-freorder\-functions\fR" 4
5909 .IX Item "-freorder-functions"
5910 Reorder functions in the object file in order to
5911 improve code locality.  This is implemented by using special
5912 subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
5913 \&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
5914 the linker so object file format must support named sections and linker must
5915 place them in a reasonable way.
5916 .Sp
5917 Also profile feedback must be available in to make this option effective.  See
5918 \&\fB\-fprofile\-arcs\fR for details.
5919 .Sp
5920 Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5921 .IP "\fB\-fstrict\-aliasing\fR" 4
5922 .IX Item "-fstrict-aliasing"
5923 Allows the compiler to assume the strictest aliasing rules applicable to
5924 the language being compiled.  For C (and \*(C+), this activates
5925 optimizations based on the type of expressions.  In particular, an
5926 object of one type is assumed never to reside at the same address as an
5927 object of a different type, unless the types are almost the same.  For
5928 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
5929 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
5930 type.
5931 .Sp
5932 Pay special attention to code like this:
5933 .Sp
5934 .Vb 4
5935 \&        union a_union {
5936 \&          int i;
5937 \&          double d;
5938 \&        };
5939 .Ve
5940 .Sp
5941 .Vb 5
5942 \&        int f() {
5943 \&          a_union t;
5944 \&          t.d = 3.0;
5945 \&          return t.i;
5946 \&        }
5947 .Ve
5948 .Sp
5949 The practice of reading from a different union member than the one most
5950 recently written to (called \*(L"type\-punning\*(R") is common.  Even with
5951 \&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
5952 is accessed through the union type.  So, the code above will work as
5953 expected.    However, this code might not:
5954 .Sp
5955 .Vb 7
5956 \&        int f() {
5957 \&          a_union t;
5958 \&          int* ip;
5959 \&          t.d = 3.0;
5960 \&          ip = &t.i;
5961 \&          return *ip;
5962 \&        }
5963 .Ve
5964 .Sp
5965 Similarly, access by taking the address, casting the resulting pointer
5966 and dereferencing the result has undefined behavior, even if the cast
5967 uses a union type, e.g.:
5968 .Sp
5969 .Vb 4
5970 \&        int f() {
5971 \&          double d = 3.0;
5972 \&          return ((union a_union *) &d)\->i;
5973 \&        }
5974 .Ve
5975 .Sp
5976 The \fB\-fstrict\-aliasing\fR option is enabled at levels
5977 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
5978 .IP "\fB\-fstrict\-overflow\fR" 4
5979 .IX Item "-fstrict-overflow"
5980 Allow the compiler to assume strict signed overflow rules, depending
5981 on the language being compiled.  For C (and \*(C+) this means that
5982 overflow when doing arithmetic with signed numbers is undefined, which
5983 means that the compiler may assume that it will not happen.  This
5984 permits various optimizations.  For example, the compiler will assume
5985 that an expression like \f(CW\*(C`i + 10 > i\*(C'\fR will always be true for
5986 signed \f(CW\*(C`i\*(C'\fR.  This assumption is only valid if signed overflow is
5987 undefined, as the expression is false if \f(CW\*(C`i + 10\*(C'\fR overflows when
5988 using twos complement arithmetic.  When this option is in effect any
5989 attempt to determine whether an operation on signed numbers will
5990 overflow must be written carefully to not actually involve overflow.
5991 .Sp
5992 This option also allows the compiler to assume strict pointer
5993 semantics: given a pointer to an object, if adding an offset to that
5994 pointer does not produce a pointer to the same object, the addition is
5995 undefined.  This permits the compiler to conclude that \f(CW\*(C`p + u >
5996 p\*(C'\fR is always true for a pointer \f(CW\*(C`p\*(C'\fR and unsigned integer
5997 \&\f(CW\*(C`u\*(C'\fR.  This assumption is only valid because pointer wraparound is
5998 undefined, as the expression is false if \f(CW\*(C`p + u\*(C'\fR overflows using
5999 twos complement arithmetic.
6000 .Sp
6001 See also the \fB\-fwrapv\fR option.  Using \fB\-fwrapv\fR means
6002 that integer signed overflow is fully defined: it wraps.  When
6003 \&\fB\-fwrapv\fR is used, there is no difference between
6004 \&\fB\-fstrict\-overflow\fR and \fB\-fno\-strict\-overflow\fR for
6005 integers.  With \fB\-fwrapv\fR certain types of overflow are
6006 permitted.  For example, if the compiler gets an overflow when doing
6007 arithmetic on constants, the overflowed value can still be used with
6008 \&\fB\-fwrapv\fR, but not otherwise.
6009 .Sp
6010 The \fB\-fstrict\-overflow\fR option is enabled at levels
6011 \&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6012 .IP "\fB\-falign\-functions\fR" 4
6013 .IX Item "-falign-functions"
6014 .PD 0
6015 .IP "\fB\-falign\-functions=\fR\fIn\fR" 4
6016 .IX Item "-falign-functions=n"
6017 .PD
6018 Align the start of functions to the next power-of-two greater than
6019 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
6020 \&\fB\-falign\-functions=32\fR aligns functions to the next 32\-byte
6021 boundary, but \fB\-falign\-functions=24\fR would align to the next
6022 32\-byte boundary only if this can be done by skipping 23 bytes or less.
6023 .Sp
6024 \&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
6025 equivalent and mean that functions will not be aligned.
6026 .Sp
6027 Some assemblers only support this flag when \fIn\fR is a power of two;
6028 in that case, it is rounded up.
6029 .Sp
6030 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6031 .Sp
6032 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6033 .IP "\fB\-falign\-labels\fR" 4
6034 .IX Item "-falign-labels"
6035 .PD 0
6036 .IP "\fB\-falign\-labels=\fR\fIn\fR" 4
6037 .IX Item "-falign-labels=n"
6038 .PD
6039 Align all branch targets to a power-of-two boundary, skipping up to
6040 \&\fIn\fR bytes like \fB\-falign\-functions\fR.  This option can easily
6041 make code slower, because it must insert dummy operations for when the
6042 branch target is reached in the usual flow of the code.
6043 .Sp
6044 \&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
6045 equivalent and mean that labels will not be aligned.
6046 .Sp
6047 If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
6048 are greater than this value, then their values are used instead.
6049 .Sp
6050 If \fIn\fR is not specified or is zero, use a machine-dependent default
6051 which is very likely to be \fB1\fR, meaning no alignment.
6052 .Sp
6053 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6054 .IP "\fB\-falign\-loops\fR" 4
6055 .IX Item "-falign-loops"
6056 .PD 0
6057 .IP "\fB\-falign\-loops=\fR\fIn\fR" 4
6058 .IX Item "-falign-loops=n"
6059 .PD
6060 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
6061 like \fB\-falign\-functions\fR.  The hope is that the loop will be
6062 executed many times, which will make up for any execution of the dummy
6063 operations.
6064 .Sp
6065 \&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
6066 equivalent and mean that loops will not be aligned.
6067 .Sp
6068 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6069 .Sp
6070 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6071 .IP "\fB\-falign\-jumps\fR" 4
6072 .IX Item "-falign-jumps"
6073 .PD 0
6074 .IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
6075 .IX Item "-falign-jumps=n"
6076 .PD
6077 Align branch targets to a power-of-two boundary, for branch targets
6078 where the targets can only be reached by jumping, skipping up to \fIn\fR
6079 bytes like \fB\-falign\-functions\fR.  In this case, no dummy operations
6080 need be executed.
6081 .Sp
6082 \&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
6083 equivalent and mean that loops will not be aligned.
6084 .Sp
6085 If \fIn\fR is not specified or is zero, use a machine-dependent default.
6086 .Sp
6087 Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
6088 .IP "\fB\-funit\-at\-a\-time\fR" 4
6089 .IX Item "-funit-at-a-time"
6090 This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
6091 has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
6092 \&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
6093 .Sp
6094 Enabled by default.
6095 .IP "\fB\-fno\-toplevel\-reorder\fR" 4
6096 .IX Item "-fno-toplevel-reorder"
6097 Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
6098 statements.  Output them in the same order that they appear in the
6099 input file.  When this option is used, unreferenced static variables
6100 will not be removed.  This option is intended to support existing code
6101 which relies on a particular ordering.  For new code, it is better to
6102 use attributes.
6103 .Sp
6104 Enabled at level \fB\-O0\fR.  When disabled explicitly, it also imply
6105 \&\fB\-fno\-section\-anchors\fR that is otherwise enabled at \fB\-O0\fR on some
6106 targets.
6107 .IP "\fB\-fweb\fR" 4
6108 .IX Item "-fweb"
6109 Constructs webs as commonly used for register allocation purposes and assign
6110 each web individual pseudo register.  This allows the register allocation pass
6111 to operate on pseudos directly, but also strengthens several other optimization
6112 passes, such as \s-1CSE\s0, loop optimizer and trivial dead code remover.  It can,
6113 however, make debugging impossible, since variables will no longer stay in a
6114 \&\*(L"home register\*(R".
6115 .Sp
6116 Enabled by default with \fB\-funroll\-loops\fR.
6117 .IP "\fB\-fwhole\-program\fR" 4
6118 .IX Item "-fwhole-program"
6119 Assume that the current compilation unit represents whole program being
6120 compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
6121 and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
6122 and in a affect gets more aggressively optimized by interprocedural optimizers.
6123 While this option is equivalent to proper use of \f(CW\*(C`static\*(C'\fR keyword for
6124 programs consisting of single file, in combination with option
6125 \&\fB\-\-combine\fR this flag can be used to compile most of smaller scale C
6126 programs since the functions and variables become local for the whole combined
6127 compilation unit, not for the single source file itself.
6128 .Sp
6129 This option is not supported for Fortran programs.
6130 .IP "\fB\-fcprop\-registers\fR" 4
6131 .IX Item "-fcprop-registers"
6132 After register allocation and post-register allocation instruction splitting,
6133 we perform a copy-propagation pass to try to reduce scheduling dependencies
6134 and occasionally eliminate the copy.
6135 .Sp
6136 Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
6137 .IP "\fB\-fprofile\-correction\fR" 4
6138 .IX Item "-fprofile-correction"
6139 Profiles collected using an instrumented binary for multi-threaded programs may
6140 be inconsistent due to missed counter updates. When this option is specified,
6141 \&\s-1GCC\s0 will use heuristics to correct or smooth out such inconsistencies. By
6142 default, \s-1GCC\s0 will emit an error message when an inconsistent profile is detected.
6143 .IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
6144 .IX Item "-fprofile-dir=path"
6145 Set the directory to search the profile data files in to \fIpath\fR.
6146 This option affects only the profile data generated by
6147 \&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
6148 and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR 
6149 and its related options.
6150 By default, \s-1GCC\s0 will use the current directory as \fIpath\fR
6151 thus the profile data file will appear in the same directory as the object file.
6152 .IP "\fB\-fprofile\-generate\fR" 4
6153 .IX Item "-fprofile-generate"
6154 .PD 0
6155 .IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
6156 .IX Item "-fprofile-generate=path"
6157 .PD
6158 Enable options usually used for instrumenting application to produce
6159 profile useful for later recompilation with profile feedback based
6160 optimization.  You must use \fB\-fprofile\-generate\fR both when
6161 compiling and when linking your program.
6162 .Sp
6163 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.
6164 .Sp
6165 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6166 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6167 .IP "\fB\-fprofile\-use\fR" 4
6168 .IX Item "-fprofile-use"
6169 .PD 0
6170 .IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
6171 .IX Item "-fprofile-use=path"
6172 .PD
6173 Enable profile feedback directed optimizations, and optimizations
6174 generally profitable only with profile feedback available.
6175 .Sp
6176 The following options are enabled: \f(CW\*(C`\-fbranch\-probabilities\*(C'\fR, \f(CW\*(C`\-fvpt\*(C'\fR,
6177 \&\f(CW\*(C`\-funroll\-loops\*(C'\fR, \f(CW\*(C`\-fpeel\-loops\*(C'\fR
6178 .Sp
6179 By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
6180 match the source code.  This error can be turned into a warning by using
6181 \&\fB\-Wcoverage\-mismatch\fR.  Note this may result in poorly optimized
6182 code.
6183 .Sp
6184 If \fIpath\fR is specified, \s-1GCC\s0 will look at the \fIpath\fR to find
6185 the profile feedback data files. See \fB\-fprofile\-dir\fR.
6186 .IP "\fB\-fripa\fR" 4
6187 .IX Item "-fripa"
6188 Perform dynamic inter-procedural analysis. This is used in conjunction with
6189 the \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR options.
6190 During the \fB\-fprofile\-generate\fR phase, this flag turns on some additional
6191 instrumentation code that enables dynamic call-graph analysis.
6192 During the \fB\-fprofile\-use\fR phase, this flag enables cross-module
6193 optimizations such as inlining.
6194 .IP "\fB\-fripa\-disallow\-opt\-mismatch\fR" 4
6195 .IX Item "-fripa-disallow-opt-mismatch"
6196 Don't import an auxiliary module, if the \s-1GCC\s0 command line options used for this
6197 auxiliary module during the profile-generate stage were different from those used
6198 for the primary module. Note that any mismatches in warning-related options are
6199 ignored for this comparison.
6200 .IP "\fB\-fripa\-verbose\fR" 4
6201 .IX Item "-fripa-verbose"
6202 Enable printing of verbose information about dynamic inter-procedural optimizations.
6203 This is used in conjunction with the \fB\-fripa\fR.
6204 .IP "\fB\-fsample\-profile\fR" 4
6205 .IX Item "-fsample-profile"
6206 .PD 0
6207 .IP "\fB\-fsample\-profile=\fR\fIpath\fR" 4
6208 .IX Item "-fsample-profile=path"
6209 .PD
6210 Enable profile feedback directed optimizations using profiles obtained
6211 via sampling, and optimizations generally profitable only with profile
6212 feedback available.
6213 .IP "\fB\-fsample\-profile\-aggregate\-using=\fR\fImethod\fR" 4
6214 .IX Item "-fsample-profile-aggregate-using=method"
6215 Select the method for (average or maximum) for converting
6216 instruction-level profiles into basic block level profiles.
6217 .PP
6218 The following options control compiler behavior regarding floating
6219 point arithmetic.  These options trade off between speed and
6220 correctness.  All must be specifically enabled.
6221 .IP "\fB\-ffloat\-store\fR" 4
6222 .IX Item "-ffloat-store"
6223 Do not store floating point variables in registers, and inhibit other
6224 options that might change whether a floating point value is taken from a
6225 register or memory.
6226 .Sp
6227 This option prevents undesirable excess precision on machines such as
6228 the 68000 where the floating registers (of the 68881) keep more
6229 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
6230 x86 architecture.  For most programs, the excess precision does only
6231 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
6232 point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
6233 them to store all pertinent intermediate computations into variables.
6234 .IP "\fB\-ffast\-math\fR" 4
6235 .IX Item "-ffast-math"
6236 Sets \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
6237 \&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
6238 \&\fB\-fno\-signaling\-nans\fR and \fB\-fcx\-limited\-range\fR.
6239 .Sp
6240 This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
6241 .Sp
6242 This option is not turned on by any \fB\-O\fR option since
6243 it can result in incorrect output for programs which depend on
6244 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6245 math functions. It may, however, yield faster code for programs
6246 that do not require the guarantees of these specifications.
6247 .IP "\fB\-fno\-math\-errno\fR" 4
6248 .IX Item "-fno-math-errno"
6249 Do not set \s-1ERRNO\s0 after calling math functions that are executed
6250 with a single instruction, e.g., sqrt.  A program that relies on
6251 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
6252 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
6253 .Sp
6254 This option is not turned on by any \fB\-O\fR option since
6255 it can result in incorrect output for programs which depend on
6256 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6257 math functions. It may, however, yield faster code for programs
6258 that do not require the guarantees of these specifications.
6259 .Sp
6260 The default is \fB\-fmath\-errno\fR.
6261 .Sp
6262 On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
6263 therefore no reason for the compiler to consider the possibility that
6264 it might, and \fB\-fno\-math\-errno\fR is the default.
6265 .IP "\fB\-funsafe\-math\-optimizations\fR" 4
6266 .IX Item "-funsafe-math-optimizations"
6267 Allow optimizations for floating-point arithmetic that (a) assume
6268 that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
6269 \&\s-1ANSI\s0 standards.  When used at link\-time, it may include libraries
6270 or startup files that change the default \s-1FPU\s0 control word or other
6271 similar optimizations.
6272 .Sp
6273 This option is not turned on by any \fB\-O\fR option since
6274 it can result in incorrect output for programs which depend on
6275 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6276 math functions. It may, however, yield faster code for programs
6277 that do not require the guarantees of these specifications.
6278 Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
6279 \&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
6280 .Sp
6281 The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
6282 .IP "\fB\-fassociative\-math\fR" 4
6283 .IX Item "-fassociative-math"
6284 Allow re-association of operands in series of floating-point operations.
6285 This violates the \s-1ISO\s0 C and \*(C+ language standard by possibly changing
6286 computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
6287 well as ignore NaNs and inhibit or create underflow or overflow (and
6288 thus cannot be used on a code which relies on rounding behavior like
6289 \&\f(CW\*(C`(x + 2**52) \- 2**52)\*(C'\fR.  May also reorder floating-point comparisons
6290 and thus may not be used when ordered comparisons are required.
6291 This option requires that both \fB\-fno\-signed\-zeros\fR and
6292 \&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
6293 much sense with \fB\-frounding\-math\fR.
6294 .Sp
6295 The default is \fB\-fno\-associative\-math\fR.
6296 .IP "\fB\-freciprocal\-math\fR" 4
6297 .IX Item "-freciprocal-math"
6298 Allow the reciprocal of a value to be used instead of dividing by
6299 the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
6300 can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR which is useful if \f(CW\*(C`(1/y)\*(C'\fR
6301 is subject to common subexpression elimination.  Note that this loses
6302 precision and increases the number of flops operating on the value.
6303 .Sp
6304 The default is \fB\-fno\-reciprocal\-math\fR.
6305 .IP "\fB\-ffinite\-math\-only\fR" 4
6306 .IX Item "-ffinite-math-only"
6307 Allow optimizations for floating-point arithmetic that assume
6308 that arguments and results are not NaNs or +\-Infs.
6309 .Sp
6310 This option is not turned on by any \fB\-O\fR option since
6311 it can result in incorrect output for programs which depend on
6312 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6313 math functions. It may, however, yield faster code for programs
6314 that do not require the guarantees of these specifications.
6315 .Sp
6316 The default is \fB\-fno\-finite\-math\-only\fR.
6317 .IP "\fB\-fno\-signed\-zeros\fR" 4
6318 .IX Item "-fno-signed-zeros"
6319 Allow optimizations for floating point arithmetic that ignore the
6320 signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
6321 distinct +0.0 and \-0.0 values, which then prohibits simplification
6322 of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
6323 This option implies that the sign of a zero result isn't significant.
6324 .Sp
6325 The default is \fB\-fsigned\-zeros\fR.
6326 .IP "\fB\-fno\-trapping\-math\fR" 4
6327 .IX Item "-fno-trapping-math"
6328 Compile code assuming that floating-point operations cannot generate
6329 user-visible traps.  These traps include division by zero, overflow,
6330 underflow, inexact result and invalid operation.  This option requires
6331 that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
6332 allow faster code if one relies on \*(L"non\-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
6333 .Sp
6334 This option should never be turned on by any \fB\-O\fR option since
6335 it can result in incorrect output for programs which depend on
6336 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
6337 math functions.
6338 .Sp
6339 The default is \fB\-ftrapping\-math\fR.
6340 .IP "\fB\-frounding\-math\fR" 4
6341 .IX Item "-frounding-math"
6342 Disable transformations and optimizations that assume default floating
6343 point rounding behavior.  This is round-to-zero for all floating point
6344 to integer conversions, and round-to-nearest for all other arithmetic
6345 truncations.  This option should be specified for programs that change
6346 the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
6347 non-default rounding mode.  This option disables constant folding of
6348 floating point expressions at compile-time (which may be affected by
6349 rounding mode) and arithmetic transformations that are unsafe in the
6350 presence of sign-dependent rounding modes.
6351 .Sp
6352 The default is \fB\-fno\-rounding\-math\fR.
6353 .Sp
6354 This option is experimental and does not currently guarantee to
6355 disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
6356 Future versions of \s-1GCC\s0 may provide finer control of this setting
6357 using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command line option
6358 will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
6359 .IP "\fB\-fsignaling\-nans\fR" 4
6360 .IX Item "-fsignaling-nans"
6361 Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
6362 traps during floating-point operations.  Setting this option disables
6363 optimizations that may change the number of exceptions visible with
6364 signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
6365 .Sp
6366 This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
6367 be defined.
6368 .Sp
6369 The default is \fB\-fno\-signaling\-nans\fR.
6370 .Sp
6371 This option is experimental and does not currently guarantee to
6372 disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
6373 .IP "\fB\-fsingle\-precision\-constant\fR" 4
6374 .IX Item "-fsingle-precision-constant"
6375 Treat floating point constant as single precision constant instead of
6376 implicitly converting it to double precision constant.
6377 .IP "\fB\-fcx\-limited\-range\fR" 4
6378 .IX Item "-fcx-limited-range"
6379 When enabled, this option states that a range reduction step is not
6380 needed when performing complex division.  Also, there is no checking
6381 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6382 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
6383 default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
6384 \&\fB\-ffast\-math\fR.
6385 .Sp
6386 This option controls the default setting of the \s-1ISO\s0 C99
6387 \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
6388 all languages.
6389 .IP "\fB\-fcx\-fortran\-rules\fR" 4
6390 .IX Item "-fcx-fortran-rules"
6391 Complex multiplication and division follow Fortran rules.  Range
6392 reduction is done as part of complex division, but there is no checking
6393 whether the result of a complex multiplication or division is \f(CW\*(C`NaN
6394 + I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
6395 .Sp
6396 The default is \fB\-fno\-cx\-fortran\-rules\fR.
6397 .PP
6398 The following options control optimizations that may improve
6399 performance, but are not enabled by any \fB\-O\fR options.  This
6400 section includes experimental options that may produce broken code.
6401 .IP "\fB\-fbranch\-probabilities\fR" 4
6402 .IX Item "-fbranch-probabilities"
6403 After running a program compiled with \fB\-fprofile\-arcs\fR, you can compile it a second time using
6404 \&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
6405 the number of times each branch was taken.  When the program
6406 compiled with \fB\-fprofile\-arcs\fR exits it saves arc execution
6407 counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
6408 file.  The information in this data file is very dependent on the
6409 structure of the generated code, so you must use the same source code
6410 and the same optimization options for both compilations.
6411 .Sp
6412 With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
6413 \&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
6414 These can be used to improve optimization.  Currently, they are only
6415 used in one place: in \fIreorg.c\fR, instead of guessing which path a
6416 branch is mostly to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
6417 exactly determine which path is taken more often.
6418 .IP "\fB\-fprofile\-values\fR" 4
6419 .IX Item "-fprofile-values"
6420 If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
6421 data about values of expressions in the program is gathered.
6422 .Sp
6423 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6424 from profiling values of expressions and adds \fB\s-1REG_VALUE_PROFILE\s0\fR
6425 notes to instructions for their later usage in optimizations.
6426 .Sp
6427 Enabled with \fB\-fprofile\-generate\fR and \fB\-fprofile\-use\fR.
6428 .IP "\fB\-fvpt\fR" 4
6429 .IX Item "-fvpt"
6430 If combined with \fB\-fprofile\-arcs\fR, it instructs the compiler to add
6431 a code to gather information about values of expressions.
6432 .Sp
6433 With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
6434 and actually performs the optimizations based on them.
6435 Currently the optimizations include specialization of division operation
6436 using the knowledge about the value of the denominator.
6437 .IP "\fB\-frename\-registers\fR" 4
6438 .IX Item "-frename-registers"
6439 Attempt to avoid false dependencies in scheduled code by making use
6440 of registers left over after register allocation.  This optimization
6441 will most benefit processors with lots of registers.  Depending on the
6442 debug information format adopted by the target, however, it can
6443 make debugging impossible, since variables will no longer stay in
6444 a \*(L"home register\*(R".
6445 .Sp
6446 Enabled by default with \fB\-funroll\-loops\fR.
6447 .IP "\fB\-ftracer\fR" 4
6448 .IX Item "-ftracer"
6449 Perform tail duplication to enlarge superblock size.  This transformation
6450 simplifies the control flow of the function allowing other optimizations to do
6451 better job.
6452 .Sp
6453 Enabled with \fB\-fprofile\-use\fR.
6454 .IP "\fB\-funroll\-loops\fR" 4
6455 .IX Item "-funroll-loops"
6456 Unroll loops whose number of iterations can be determined at compile time or
6457 upon entry to the loop.  \fB\-funroll\-loops\fR implies
6458 \&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
6459 It also turns on complete loop peeling (i.e. complete removal of loops with
6460 small constant number of iterations).  This option makes code larger, and may
6461 or may not make it run faster.
6462 .Sp
6463 Enabled with \fB\-fprofile\-use\fR.
6464 .IP "\fB\-funroll\-all\-loops\fR" 4
6465 .IX Item "-funroll-all-loops"
6466 Unroll all loops, even if their number of iterations is uncertain when
6467 the loop is entered.  This usually makes programs run more slowly.
6468 \&\fB\-funroll\-all\-loops\fR implies the same options as
6469 \&\fB\-funroll\-loops\fR.
6470 .IP "\fB\-fpeel\-loops\fR" 4
6471 .IX Item "-fpeel-loops"
6472 Peels the loops for that there is enough information that they do not
6473 roll much (from profile feedback).  It also turns on complete loop peeling
6474 (i.e. complete removal of loops with small constant number of iterations).
6475 .Sp
6476 Enabled with \fB\-fprofile\-use\fR.
6477 .IP "\fB\-fmove\-loop\-invariants\fR" 4
6478 .IX Item "-fmove-loop-invariants"
6479 Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
6480 at level \fB\-O1\fR
6481 .IP "\fB\-funswitch\-loops\fR" 4
6482 .IX Item "-funswitch-loops"
6483 Move branches with loop invariant conditions out of the loop, with duplicates
6484 of the loop on both branches (modified according to result of the condition).
6485 .IP "\fB\-ffunction\-sections\fR" 4
6486 .IX Item "-ffunction-sections"
6487 .PD 0
6488 .IP "\fB\-fdata\-sections\fR" 4
6489 .IX Item "-fdata-sections"
6490 .PD
6491 Place each function or data item into its own section in the output
6492 file if the target supports arbitrary sections.  The name of the
6493 function or the name of the data item determines the section's name
6494 in the output file.
6495 .Sp
6496 Use these options on systems where the linker can perform optimizations
6497 to improve locality of reference in the instruction space.  Most systems
6498 using the \s-1ELF\s0 object format and \s-1SPARC\s0 processors running Solaris 2 have
6499 linkers with such optimizations.  \s-1AIX\s0 may have these optimizations in
6500 the future.
6501 .Sp
6502 Only use these options when there are significant benefits from doing
6503 so.  When you specify these options, the assembler and linker will
6504 create larger object and executable files and will also be slower.
6505 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
6506 specify this option and you may have problems with debugging if
6507 you specify both this option and \fB\-g\fR.
6508 .IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
6509 .IX Item "-fbranch-target-load-optimize"
6510 Perform branch target register load optimization before prologue / epilogue
6511 threading.
6512 The use of target registers can typically be exposed only during reload,
6513 thus hoisting loads out of loops and doing inter-block scheduling needs
6514 a separate optimization pass.
6515 .IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
6516 .IX Item "-fbranch-target-load-optimize2"
6517 Perform branch target register load optimization after prologue / epilogue
6518 threading.
6519 .IP "\fB\-fbtr\-bb\-exclusive\fR" 4
6520 .IX Item "-fbtr-bb-exclusive"
6521 When performing branch target register load optimization, don't reuse
6522 branch target registers in within any basic block.
6523 .IP "\fB\-fstack\-protector\fR" 4
6524 .IX Item "-fstack-protector"
6525 Emit extra code to check for buffer overflows, such as stack smashing
6526 attacks.  This is done by adding a guard variable to functions with
6527 vulnerable objects.  This includes functions that call alloca, and
6528 functions with buffers larger than 8 bytes.  The guards are initialized
6529 when a function is entered and then checked when the function exits.
6530 If a guard check fails, an error message is printed and the program exits.
6531 .IP "\fB\-fstack\-protector\-all\fR" 4
6532 .IX Item "-fstack-protector-all"
6533 Like \fB\-fstack\-protector\fR except that all functions are protected.
6534 .IP "\fB\-fsection\-anchors\fR" 4
6535 .IX Item "-fsection-anchors"
6536 Try to reduce the number of symbolic address calculations by using
6537 shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
6538 can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
6539 targets.
6540 .Sp
6541 For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
6542 .Sp
6543 .Vb 2
6544 \&        static int a, b, c;
6545 \&        int foo (void) { return a + b + c; }
6546 .Ve
6547 .Sp
6548 would usually calculate the addresses of all three variables, but if you
6549 compile it with \fB\-fsection\-anchors\fR, it will access the variables
6550 from a common anchor point instead.  The effect is similar to the
6551 following pseudocode (which isn't valid C):
6552 .Sp
6553 .Vb 5
6554 \&        int foo (void)
6555 \&        {
6556 \&          register int *xr = &x;
6557 \&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
6558 \&        }
6559 .Ve
6560 .Sp
6561 Not all targets support this option.
6562 .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
6563 .IX Item "--param name=value"
6564 In some places, \s-1GCC\s0 uses various constants to control the amount of
6565 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
6566 that contain more that a certain number of instructions.  You can
6567 control some of these constants on the command-line using the
6568 \&\fB\-\-param\fR option.
6569 .Sp
6570 The names of specific parameters, and the meaning of the values, are
6571 tied to the internals of the compiler, and are subject to change
6572 without notice in future releases.
6573 .Sp
6574 In each case, the \fIvalue\fR is an integer.  The allowable choices for
6575 \&\fIname\fR are given in the following table:
6576 .RS 4
6577 .IP "\fBsra-max-structure-size\fR" 4
6578 .IX Item "sra-max-structure-size"
6579 The maximum structure size, in bytes, at which the scalar replacement
6580 of aggregates (\s-1SRA\s0) optimization will perform block copies.  The
6581 default value, 0, implies that \s-1GCC\s0 will select the most appropriate
6582 size itself.
6583 .IP "\fBsra-field-structure-ratio\fR" 4
6584 .IX Item "sra-field-structure-ratio"
6585 The threshold ratio (as a percentage) between instantiated fields and
6586 the complete structure size.  We say that if the ratio of the number
6587 of bytes in instantiated fields to the number of bytes in the complete
6588 structure exceeds this parameter, then block copies are not used.  The
6589 default is 75.
6590 .IP "\fBstruct-reorg-cold-struct-ratio\fR" 4
6591 .IX Item "struct-reorg-cold-struct-ratio"
6592 The threshold ratio (as a percentage) between a structure frequency
6593 and the frequency of the hottest structure in the program.  This parameter
6594 is used by struct-reorg optimization enabled by \fB\-fipa\-struct\-reorg\fR.
6595 We say that if the ratio of a structure frequency, calculated by profiling, 
6596 to the hottest structure frequency in the program is less than this 
6597 parameter, then structure reorganization is not applied to this structure.
6598 The default is 10.
6599 .IP "\fBpredictable-branch-cost-outcome\fR" 4
6600 .IX Item "predictable-branch-cost-outcome"
6601 When branch is predicted to be taken with probability lower than this threshold
6602 (in percent), then it is considered well predictable. The default is 10.
6603 .IP "\fBmax-crossjump-edges\fR" 4
6604 .IX Item "max-crossjump-edges"
6605 The maximum number of incoming edges to consider for crossjumping.
6606 The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
6607 the number of edges incoming to each block.  Increasing values mean
6608 more aggressive optimization, making the compile time increase with
6609 probably small improvement in executable size.
6610 .IP "\fBmin-crossjump-insns\fR" 4
6611 .IX Item "min-crossjump-insns"
6612 The minimum number of instructions which must be matched at the end
6613 of two blocks before crossjumping will be performed on them.  This
6614 value is ignored in the case where all instructions in the block being
6615 crossjumped from are matched.  The default value is 5.
6616 .IP "\fBmax-grow-copy-bb-insns\fR" 4
6617 .IX Item "max-grow-copy-bb-insns"
6618 The maximum code size expansion factor when copying basic blocks
6619 instead of jumping.  The expansion is relative to a jump instruction.
6620 The default value is 8.
6621 .IP "\fBmax-goto-duplication-insns\fR" 4
6622 .IX Item "max-goto-duplication-insns"
6623 The maximum number of instructions to duplicate to a block that jumps
6624 to a computed goto.  To avoid O(N^2) behavior in a number of
6625 passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
6626 and unfactors them as late as possible.  Only computed jumps at the
6627 end of a basic blocks with no more than max-goto-duplication-insns are
6628 unfactored.  The default value is 8.
6629 .IP "\fBmax-delay-slot-insn-search\fR" 4
6630 .IX Item "max-delay-slot-insn-search"
6631 The maximum number of instructions to consider when looking for an
6632 instruction to fill a delay slot.  If more than this arbitrary number of
6633 instructions is searched, the time savings from filling the delay slot
6634 will be minimal so stop searching.  Increasing values mean more
6635 aggressive optimization, making the compile time increase with probably
6636 small improvement in executable run time.
6637 .IP "\fBmax-delay-slot-live-search\fR" 4
6638 .IX Item "max-delay-slot-live-search"
6639 When trying to fill delay slots, the maximum number of instructions to
6640 consider when searching for a block with valid live register
6641 information.  Increasing this arbitrarily chosen value means more
6642 aggressive optimization, increasing the compile time.  This parameter
6643 should be removed when the delay slot code is rewritten to maintain the
6644 control-flow graph.
6645 .IP "\fBmax-gcse-memory\fR" 4
6646 .IX Item "max-gcse-memory"
6647 The approximate maximum amount of memory that will be allocated in
6648 order to perform the global common subexpression elimination
6649 optimization.  If more memory than specified is required, the
6650 optimization will not be done.
6651 .IP "\fBmax-gcse-passes\fR" 4
6652 .IX Item "max-gcse-passes"
6653 The maximum number of passes of \s-1GCSE\s0 to run.  The default is 1.
6654 .IP "\fBmax-pending-list-length\fR" 4
6655 .IX Item "max-pending-list-length"
6656 The maximum number of pending dependencies scheduling will allow
6657 before flushing the current state and starting over.  Large functions
6658 with few branches or calls can create excessively large lists which
6659 needlessly consume memory and resources.
6660 .IP "\fBmax-inline-insns-single\fR" 4
6661 .IX Item "max-inline-insns-single"
6662 Several parameters control the tree inliner used in gcc.
6663 This number sets the maximum number of instructions (counted in \s-1GCC\s0's
6664 internal representation) in a single function that the tree inliner
6665 will consider for inlining.  This only affects functions declared
6666 inline and methods implemented in a class declaration (\*(C+).
6667 The default value is 450.
6668 .IP "\fBmax-inline-insns-auto\fR" 4
6669 .IX Item "max-inline-insns-auto"
6670 When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
6671 a lot of functions that would otherwise not be considered for inlining
6672 by the compiler will be investigated.  To those functions, a different
6673 (potentially more restrictive) limit compared to functions declared inline can
6674 be applied.
6675 The default value is 450.
6676 .IP "\fBinline-limit-increase-with-profile\fR" 4
6677 .IX Item "inline-limit-increase-with-profile"
6678 When profile information is available, such as when compiling
6679 with \fB\-fprofile\-use\fR, the maximum function size
6680 limits \fB\-\-param max-inline-insns-single\fR
6681 and \fB\-\-param max-inline-insns-auto\fR are increased by this percentage
6682 amount.  Profile information increases the selectivity and quality of the
6683 inlining decisions, so having a larger set of candidate functions available
6684 for inlining can improve performance.
6685 The default value is 100.
6686 .IP "\fBlarge-function-insns\fR" 4
6687 .IX Item "large-function-insns"
6688 The limit specifying really large functions.  For functions larger than this
6689 limit after inlining, inlining is constrained by
6690 \&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
6691 to avoid extreme compilation time caused by non-linear algorithms used by the
6692 backend.
6693 The default value is 2700.
6694 .IP "\fBlarge-function-growth\fR" 4
6695 .IX Item "large-function-growth"
6696 Specifies maximal growth of large function caused by inlining in percents.
6697 The default value is 100 which limits large function growth to 2.0 times
6698 the original size.
6699 .IP "\fBlarge-unit-insns\fR" 4
6700 .IX Item "large-unit-insns"
6701 The limit specifying large translation unit.  Growth caused by inlining of
6702 units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
6703 For small units this might be too tight (consider unit consisting of function A
6704 that is inline and B that just calls A three time.  If B is small relative to
6705 A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
6706 large units consisting of small inlineable functions however the overall unit
6707 growth limit is needed to avoid exponential explosion of code size.  Thus for
6708 smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
6709 before applying \fB\-\-param inline-unit-growth\fR.  The default is 10000
6710 .IP "\fBinline-unit-growth\fR" 4
6711 .IX Item "inline-unit-growth"
6712 Specifies maximal overall growth of the compilation unit caused by inlining.
6713 The default value is 30 which limits unit growth to 1.3 times the original
6714 size.
6715 .IP "\fBipcp-unit-growth\fR" 4
6716 .IX Item "ipcp-unit-growth"
6717 Specifies maximal overall growth of the compilation unit caused by
6718 interprocedural constant propagation.  The default value is 10 which limits
6719 unit growth to 1.1 times the original size.
6720 .IP "\fBlarge-stack-frame\fR" 4
6721 .IX Item "large-stack-frame"
6722 The limit specifying large stack frames.  While inlining the algorithm is trying
6723 to not grow past this limit too much.  Default value is 256 bytes.
6724 .IP "\fBlarge-stack-frame-growth\fR" 4
6725 .IX Item "large-stack-frame-growth"
6726 Specifies maximal growth of large stack frames caused by inlining in percents.
6727 The default value is 1000 which limits large stack frame growth to 11 times
6728 the original size.
6729 .IP "\fBmax-inline-insns-recursive\fR" 4
6730 .IX Item "max-inline-insns-recursive"
6731 .PD 0
6732 .IP "\fBmax-inline-insns-recursive-auto\fR" 4
6733 .IX Item "max-inline-insns-recursive-auto"
6734 .PD
6735 Specifies maximum number of instructions out-of-line copy of self recursive inline
6736 function can grow into by performing recursive inlining.
6737 .Sp
6738 For functions declared inline \fB\-\-param max-inline-insns-recursive\fR is
6739 taken into account.  For function not declared inline, recursive inlining
6740 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6741 enabled and \fB\-\-param max-inline-insns-recursive-auto\fR is used.  The
6742 default value is 450.
6743 .IP "\fBmax-inline-recursive-depth\fR" 4
6744 .IX Item "max-inline-recursive-depth"
6745 .PD 0
6746 .IP "\fBmax-inline-recursive-depth-auto\fR" 4
6747 .IX Item "max-inline-recursive-depth-auto"
6748 .PD
6749 Specifies maximum recursion depth used by the recursive inlining.
6750 .Sp
6751 For functions declared inline \fB\-\-param max-inline-recursive-depth\fR is
6752 taken into account.  For function not declared inline, recursive inlining
6753 happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
6754 enabled and \fB\-\-param max-inline-recursive-depth-auto\fR is used.  The
6755 default value is 8.
6756 .IP "\fBmin-inline-recursive-probability\fR" 4
6757 .IX Item "min-inline-recursive-probability"
6758 Recursive inlining is profitable only for function having deep recursion
6759 in average and can hurt for function having little recursion depth by
6760 increasing the prologue size or complexity of function body to other
6761 optimizers.
6762 .Sp
6763 When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
6764 recursion depth can be guessed from probability that function will recurse via
6765 given call expression.  This parameter limits inlining only to call expression
6766 whose probability exceeds given threshold (in percents).  The default value is
6767 10.
6768 .IP "\fBinline-call-cost\fR" 4
6769 .IX Item "inline-call-cost"
6770 Specify cost of call instruction relative to simple arithmetics operations
6771 (having cost of 1).  Increasing this cost disqualifies inlining of non-leaf
6772 functions and at the same time increases size of leaf function that is believed to
6773 reduce function size by being inlined.  In effect it increases amount of
6774 inlining for code having large abstraction penalty (many functions that just
6775 pass the arguments to other functions) and decrease inlining for code with low
6776 abstraction penalty.  The default value is 12.
6777 .IP "\fBmin-vect-loop-bound\fR" 4
6778 .IX Item "min-vect-loop-bound"
6779 The minimum number of iterations under which a loop will not get vectorized
6780 when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
6781 vectorization needs to be greater than the value specified by this option
6782 to allow vectorization.  The default value is 0.
6783 .IP "\fBmax-unrolled-insns\fR" 4
6784 .IX Item "max-unrolled-insns"
6785 The maximum number of instructions that a loop should have if that loop
6786 is unrolled, and if the loop is unrolled, it determines how many times
6787 the loop code is unrolled.
6788 .IP "\fBmax-average-unrolled-insns\fR" 4
6789 .IX Item "max-average-unrolled-insns"
6790 The maximum number of instructions biased by probabilities of their execution
6791 that a loop should have if that loop is unrolled, and if the loop is unrolled,
6792 it determines how many times the loop code is unrolled.
6793 .IP "\fBmax-unroll-times\fR" 4
6794 .IX Item "max-unroll-times"
6795 The maximum number of unrollings of a single loop.
6796 .IP "\fBmax-peeled-insns\fR" 4
6797 .IX Item "max-peeled-insns"
6798 The maximum number of instructions that a loop should have if that loop
6799 is peeled, and if the loop is peeled, it determines how many times
6800 the loop code is peeled.
6801 .IP "\fBmax-peel-times\fR" 4
6802 .IX Item "max-peel-times"
6803 The maximum number of peelings of a single loop.
6804 .IP "\fBmax-completely-peeled-insns\fR" 4
6805 .IX Item "max-completely-peeled-insns"
6806 .PD 0
6807 .IP "\fBmax-completely-peeled-insns-feedback\fR" 4
6808 .IX Item "max-completely-peeled-insns-feedback"
6809 .PD
6810 The maximum number of insns of a completely peeled loop.
6811 .Sp
6812 The \fBmax-completely-peeled-insns-feedback\fR is used only when profile
6813 feedback is available and the loop is hot. Because of the real profiles, this
6814 value may set to be larger for hot loops.
6815 .IP "\fBmax-once-peeled-insns\fR" 4
6816 .IX Item "max-once-peeled-insns"
6817 .PD 0
6818 .IP "\fBmax-once-peeled-insns-feedback\fR" 4
6819 .IX Item "max-once-peeled-insns-feedback"
6820 .PD
6821 The maximum number of insns of a peeled loop that rolls only once.
6822 The \fBmax-once-peeled-insns-feedback\fR  is used only when profile feedback
6823 is available and the loop is hot. Because of the real profiles, this value
6824 may set to be larger for hot loops.
6825 .IP "\fBmax-completely-peel-times\fR" 4
6826 .IX Item "max-completely-peel-times"
6827 .PD 0
6828 .IP "\fBmax-completely-peel-times-feedback\fR" 4
6829 .IX Item "max-completely-peel-times-feedback"
6830 .PD
6831 The maximum number of iterations of a loop to be suitable for complete peeling.
6832 .Sp
6833 The \fBmax-completely-peel-times-feedback\fR is used only when profile feedback
6834 is available and the loop is hot. Because of the real profiles, this value may
6835 set to be larger for hot loops.
6836 .IP "\fBmax-unswitch-insns\fR" 4
6837 .IX Item "max-unswitch-insns"
6838 The maximum number of insns of an unswitched loop.
6839 .IP "\fBmax-unswitch-level\fR" 4
6840 .IX Item "max-unswitch-level"
6841 The maximum number of branches unswitched in a single loop.
6842 .IP "\fBlim-expensive\fR" 4
6843 .IX Item "lim-expensive"
6844 The minimum cost of an expensive expression in the loop invariant motion.
6845 .IP "\fBiv-consider-all-candidates-bound\fR" 4
6846 .IX Item "iv-consider-all-candidates-bound"
6847 Bound on number of candidates for induction variables below that
6848 all candidates are considered for each use in induction variable
6849 optimizations.  Only the most relevant candidates are considered
6850 if there are more candidates, to avoid quadratic time complexity.
6851 .IP "\fBiv-max-considered-uses\fR" 4
6852 .IX Item "iv-max-considered-uses"
6853 The induction variable optimizations give up on loops that contain more
6854 induction variable uses.
6855 .IP "\fBiv-always-prune-cand-set-bound\fR" 4
6856 .IX Item "iv-always-prune-cand-set-bound"
6857 If number of candidates in the set is smaller than this value,
6858 we always try to remove unnecessary ivs from the set during its
6859 optimization when a new iv is added to the set.
6860 .IP "\fBscev-max-expr-size\fR" 4
6861 .IX Item "scev-max-expr-size"
6862 Bound on size of expressions used in the scalar evolutions analyzer.
6863 Large expressions slow the analyzer.
6864 .IP "\fBomega-max-vars\fR" 4
6865 .IX Item "omega-max-vars"
6866 The maximum number of variables in an Omega constraint system.
6867 The default value is 128.
6868 .IP "\fBomega-max-geqs\fR" 4
6869 .IX Item "omega-max-geqs"
6870 The maximum number of inequalities in an Omega constraint system.
6871 The default value is 256.
6872 .IP "\fBomega-max-eqs\fR" 4
6873 .IX Item "omega-max-eqs"
6874 The maximum number of equalities in an Omega constraint system.
6875 The default value is 128.
6876 .IP "\fBomega-max-wild-cards\fR" 4
6877 .IX Item "omega-max-wild-cards"
6878 The maximum number of wildcard variables that the Omega solver will
6879 be able to insert.  The default value is 18.
6880 .IP "\fBomega-hash-table-size\fR" 4
6881 .IX Item "omega-hash-table-size"
6882 The size of the hash table in the Omega solver.  The default value is
6883 550.
6884 .IP "\fBomega-max-keys\fR" 4
6885 .IX Item "omega-max-keys"
6886 The maximal number of keys used by the Omega solver.  The default
6887 value is 500.
6888 .IP "\fBomega-eliminate-redundant-constraints\fR" 4
6889 .IX Item "omega-eliminate-redundant-constraints"
6890 When set to 1, use expensive methods to eliminate all redundant
6891 constraints.  The default value is 0.
6892 .IP "\fBvect-max-version-for-alignment-checks\fR" 4
6893 .IX Item "vect-max-version-for-alignment-checks"
6894 The maximum number of runtime checks that can be performed when
6895 doing loop versioning for alignment in the vectorizer.  See option
6896 ftree-vect-loop-version for more information.
6897 .IP "\fBvect-max-version-for-alias-checks\fR" 4
6898 .IX Item "vect-max-version-for-alias-checks"
6899 The maximum number of runtime checks that can be performed when
6900 doing loop versioning for alias in the vectorizer.  See option
6901 ftree-vect-loop-version for more information.
6902 .IP "\fBmax-iterations-to-track\fR" 4
6903 .IX Item "max-iterations-to-track"
6904 The maximum number of iterations of a loop the brute force algorithm
6905 for analysis of # of iterations of the loop tries to evaluate.
6906 .IP "\fBhot-bb-count-fraction\fR" 4
6907 .IX Item "hot-bb-count-fraction"
6908 Select fraction of the maximal count of repetitions of basic block in program
6909 given basic block needs to have to be considered hot.
6910 .IP "\fBhot-bb-frequency-fraction\fR" 4
6911 .IX Item "hot-bb-frequency-fraction"
6912 Select fraction of the maximal frequency of executions of basic block in
6913 function given basic block needs to have to be considered hot
6914 .IP "\fBmax-predicted-iterations\fR" 4
6915 .IX Item "max-predicted-iterations"
6916 The maximum number of loop iterations we predict statically.  This is useful
6917 in cases where function contain single loop with known bound and other loop
6918 with unknown.  We predict the known number of iterations correctly, while
6919 the unknown number of iterations average to roughly 10.  This means that the
6920 loop without bounds would appear artificially cold relative to the other one.
6921 .IP "\fBalign-threshold\fR" 4
6922 .IX Item "align-threshold"
6923 Select fraction of the maximal frequency of executions of basic block in
6924 function given basic block will get aligned.
6925 .IP "\fBalign-loop-iterations\fR" 4
6926 .IX Item "align-loop-iterations"
6927 A loop expected to iterate at lest the selected number of iterations will get
6928 aligned.
6929 .IP "\fBtracer-dynamic-coverage\fR" 4
6930 .IX Item "tracer-dynamic-coverage"
6931 .PD 0
6932 .IP "\fBtracer-dynamic-coverage-feedback\fR" 4
6933 .IX Item "tracer-dynamic-coverage-feedback"
6934 .PD
6935 This value is used to limit superblock formation once the given percentage of
6936 executed instructions is covered.  This limits unnecessary code size
6937 expansion.
6938 .Sp
6939 The \fBtracer-dynamic-coverage-feedback\fR is used only when profile
6940 feedback is available.  The real profiles (as opposed to statically estimated
6941 ones) are much less balanced allowing the threshold to be larger value.
6942 .IP "\fBtracer-max-code-growth\fR" 4
6943 .IX Item "tracer-max-code-growth"
6944 Stop tail duplication once code growth has reached given percentage.  This is
6945 rather hokey argument, as most of the duplicates will be eliminated later in
6946 cross jumping, so it may be set to much higher values than is the desired code
6947 growth.
6948 .IP "\fBtracer-min-branch-ratio\fR" 4
6949 .IX Item "tracer-min-branch-ratio"
6950 Stop reverse growth when the reverse probability of best edge is less than this
6951 threshold (in percent).
6952 .IP "\fBtracer-min-branch-ratio\fR" 4
6953 .IX Item "tracer-min-branch-ratio"
6954 .PD 0
6955 .IP "\fBtracer-min-branch-ratio-feedback\fR" 4
6956 .IX Item "tracer-min-branch-ratio-feedback"
6957 .PD
6958 Stop forward growth if the best edge do have probability lower than this
6959 threshold.
6960 .Sp
6961 Similarly to \fBtracer-dynamic-coverage\fR two values are present, one for
6962 compilation for profile feedback and one for compilation without.  The value
6963 for compilation with profile feedback needs to be more conservative (higher) in
6964 order to make tracer effective.
6965 .IP "\fBmax-cse-path-length\fR" 4
6966 .IX Item "max-cse-path-length"
6967 Maximum number of basic blocks on path that cse considers.  The default is 10.
6968 .IP "\fBmax-cse-insns\fR" 4
6969 .IX Item "max-cse-insns"
6970 The maximum instructions \s-1CSE\s0 process before flushing. The default is 1000.
6971 .IP "\fBmax-aliased-vops\fR" 4
6972 .IX Item "max-aliased-vops"
6973 Maximum number of virtual operands per function allowed to represent
6974 aliases before triggering the alias partitioning heuristic.  Alias
6975 partitioning reduces compile times and memory consumption needed for
6976 aliasing at the expense of precision loss in alias information.  The
6977 default value for this parameter is 100 for \-O1, 500 for \-O2 and 1000
6978 for \-O3.
6979 .Sp
6980 Notice that if a function contains more memory statements than the
6981 value of this parameter, it is not really possible to achieve this
6982 reduction.  In this case, the compiler will use the number of memory
6983 statements as the value for \fBmax-aliased-vops\fR.
6984 .IP "\fBavg-aliased-vops\fR" 4
6985 .IX Item "avg-aliased-vops"
6986 Average number of virtual operands per statement allowed to represent
6987 aliases before triggering the alias partitioning heuristic.  This
6988 works in conjunction with \fBmax-aliased-vops\fR.  If a function
6989 contains more than \fBmax-aliased-vops\fR virtual operators, then
6990 memory symbols will be grouped into memory partitions until either the
6991 total number of virtual operators is below \fBmax-aliased-vops\fR
6992 or the average number of virtual operators per memory statement is
6993 below \fBavg-aliased-vops\fR.  The default value for this parameter
6994 is 1 for \-O1 and \-O2, and 3 for \-O3.
6995 .IP "\fBggc-min-expand\fR" 4
6996 .IX Item "ggc-min-expand"
6997 \&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
6998 parameter specifies the minimum percentage by which the garbage
6999 collector's heap should be allowed to expand between collections.
7000 Tuning this may improve compilation speed; it has no effect on code
7001 generation.
7002 .Sp
7003 The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
7004 \&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\s0\*(R" is
7005 the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
7006 \&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
7007 bound of 30% is used.  Setting this parameter and
7008 \&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
7009 every opportunity.  This is extremely slow, but can be useful for
7010 debugging.
7011 .IP "\fBggc-min-heapsize\fR" 4
7012 .IX Item "ggc-min-heapsize"
7013 Minimum size of the garbage collector's heap before it begins bothering
7014 to collect garbage.  The first collection occurs after the heap expands
7015 by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
7016 tuning this may improve compilation speed, and has no effect on code
7017 generation.
7018 .Sp
7019 The default is the smaller of \s-1RAM/8\s0, \s-1RLIMIT_RSS\s0, or a limit which
7020 tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
7021 with a lower bound of 4096 (four megabytes) and an upper bound of
7022 131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
7023 particular platform, the lower bound is used.  Setting this parameter
7024 very large effectively disables garbage collection.  Setting this
7025 parameter and \fBggc-min-expand\fR to zero causes a full collection
7026 to occur at every opportunity.
7027 .IP "\fBmax-reload-search-insns\fR" 4
7028 .IX Item "max-reload-search-insns"
7029 The maximum number of instruction reload should look backward for equivalent
7030 register.  Increasing values mean more aggressive optimization, making the
7031 compile time increase with probably slightly better performance.  The default
7032 value is 100.
7033 .IP "\fBmax-cselib-memory-locations\fR" 4
7034 .IX Item "max-cselib-memory-locations"
7035 The maximum number of memory locations cselib should take into account.
7036 Increasing values mean more aggressive optimization, making the compile time
7037 increase with probably slightly better performance.  The default value is 500.
7038 .IP "\fBreorder-blocks-duplicate\fR" 4
7039 .IX Item "reorder-blocks-duplicate"
7040 .PD 0
7041 .IP "\fBreorder-blocks-duplicate-feedback\fR" 4
7042 .IX Item "reorder-blocks-duplicate-feedback"
7043 .PD
7044 Used by basic block reordering pass to decide whether to use unconditional
7045 branch or duplicate the code on its destination.  Code is duplicated when its
7046 estimated size is smaller than this value multiplied by the estimated size of
7047 unconditional jump in the hot spots of the program.
7048 .Sp
7049 The \fBreorder-block-duplicate-feedback\fR is used only when profile
7050 feedback is available and may be set to higher values than
7051 \&\fBreorder-block-duplicate\fR since information about the hot spots is more
7052 accurate.
7053 .IP "\fBmax-sched-ready-insns\fR" 4
7054 .IX Item "max-sched-ready-insns"
7055 The maximum number of instructions ready to be issued the scheduler should
7056 consider at any given time during the first scheduling pass.  Increasing
7057 values mean more thorough searches, making the compilation time increase
7058 with probably little benefit.  The default value is 100.
7059 .IP "\fBmax-sched-region-blocks\fR" 4
7060 .IX Item "max-sched-region-blocks"
7061 The maximum number of blocks in a region to be considered for
7062 interblock scheduling.  The default value is 10.
7063 .IP "\fBmax-pipeline-region-blocks\fR" 4
7064 .IX Item "max-pipeline-region-blocks"
7065 The maximum number of blocks in a region to be considered for
7066 pipelining in the selective scheduler.  The default value is 15.
7067 .IP "\fBmax-sched-region-insns\fR" 4
7068 .IX Item "max-sched-region-insns"
7069 The maximum number of insns in a region to be considered for
7070 interblock scheduling.  The default value is 100.
7071 .IP "\fBmax-pipeline-region-insns\fR" 4
7072 .IX Item "max-pipeline-region-insns"
7073 The maximum number of insns in a region to be considered for
7074 pipelining in the selective scheduler.  The default value is 200.
7075 .IP "\fBmin-spec-prob\fR" 4
7076 .IX Item "min-spec-prob"
7077 The minimum probability (in percents) of reaching a source block
7078 for interblock speculative scheduling.  The default value is 40.
7079 .IP "\fBmax-sched-extend-regions-iters\fR" 4
7080 .IX Item "max-sched-extend-regions-iters"
7081 The maximum number of iterations through \s-1CFG\s0 to extend regions.
7082 0 \- disable region extension,
7083 N \- do at most N iterations.
7084 The default value is 0.
7085 .IP "\fBmax-sched-insn-conflict-delay\fR" 4
7086 .IX Item "max-sched-insn-conflict-delay"
7087 The maximum conflict delay for an insn to be considered for speculative motion.
7088 The default value is 3.
7089 .IP "\fBsched-spec-prob-cutoff\fR" 4
7090 .IX Item "sched-spec-prob-cutoff"
7091 The minimal probability of speculation success (in percents), so that
7092 speculative insn will be scheduled.
7093 The default value is 40.
7094 .IP "\fBsched-mem-true-dep-cost\fR" 4
7095 .IX Item "sched-mem-true-dep-cost"
7096 Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
7097 memory locations.  The default value is 1.
7098 .IP "\fBselsched-max-lookahead\fR" 4
7099 .IX Item "selsched-max-lookahead"
7100 The maximum size of the lookahead window of selective scheduling.  It is a
7101 depth of search for available instructions.
7102 The default value is 50.
7103 .IP "\fBselsched-max-sched-times\fR" 4
7104 .IX Item "selsched-max-sched-times"
7105 The maximum number of times that an instruction will be scheduled during 
7106 selective scheduling.  This is the limit on the number of iterations 
7107 through which the instruction may be pipelined.  The default value is 2.
7108 .IP "\fBselsched-max-insns-to-rename\fR" 4
7109 .IX Item "selsched-max-insns-to-rename"
7110 The maximum number of best instructions in the ready list that are considered
7111 for renaming in the selective scheduler.  The default value is 2.
7112 .IP "\fBmax-last-value-rtl\fR" 4
7113 .IX Item "max-last-value-rtl"
7114 The maximum size measured as number of RTLs that can be recorded in an expression
7115 in combiner for a pseudo register as last known value of that register.  The default
7116 is 10000.
7117 .IP "\fBinteger-share-limit\fR" 4
7118 .IX Item "integer-share-limit"
7119 Small integer constants can use a shared data structure, reducing the
7120 compiler's memory usage and increasing its speed.  This sets the maximum
7121 value of a shared integer constant.  The default value is 256.
7122 .IP "\fBmin-virtual-mappings\fR" 4
7123 .IX Item "min-virtual-mappings"
7124 Specifies the minimum number of virtual mappings in the incremental
7125 \&\s-1SSA\s0 updater that should be registered to trigger the virtual mappings
7126 heuristic defined by virtual\-mappings\-ratio.  The default value is
7127 100.
7128 .IP "\fBvirtual-mappings-ratio\fR" 4
7129 .IX Item "virtual-mappings-ratio"
7130 If the number of virtual mappings is virtual-mappings-ratio bigger
7131 than the number of virtual symbols to be updated, then the incremental
7132 \&\s-1SSA\s0 updater switches to a full update for those symbols.  The default
7133 ratio is 3.
7134 .IP "\fBssp-buffer-size\fR" 4
7135 .IX Item "ssp-buffer-size"
7136 The minimum size of buffers (i.e. arrays) that will receive stack smashing
7137 protection when \fB\-fstack\-protection\fR is used.
7138 .IP "\fBmax-jump-thread-duplication-stmts\fR" 4
7139 .IX Item "max-jump-thread-duplication-stmts"
7140 Maximum number of statements allowed in a block that needs to be
7141 duplicated when threading jumps.
7142 .IP "\fBmax-fields-for-field-sensitive\fR" 4
7143 .IX Item "max-fields-for-field-sensitive"
7144 Maximum number of fields in a structure we will treat in
7145 a field sensitive manner during pointer analysis.  The default is zero
7146 for \-O0, and \-O1 and 100 for \-Os, \-O2, and \-O3.
7147 .IP "\fBprefetch-latency\fR" 4
7148 .IX Item "prefetch-latency"
7149 Estimate on average number of instructions that are executed before
7150 prefetch finishes.  The distance we prefetch ahead is proportional
7151 to this constant.  Increasing this number may also lead to less
7152 streams being prefetched (see \fBsimultaneous-prefetches\fR).
7153 .IP "\fBsimultaneous-prefetches\fR" 4
7154 .IX Item "simultaneous-prefetches"
7155 Maximum number of prefetches that can run at the same time.
7156 .IP "\fBl1\-cache\-line\-size\fR" 4
7157 .IX Item "l1-cache-line-size"
7158 The size of cache line in L1 cache, in bytes.
7159 .IP "\fBl1\-cache\-size\fR" 4
7160 .IX Item "l1-cache-size"
7161 The size of L1 cache, in kilobytes.
7162 .IP "\fBl2\-cache\-size\fR" 4
7163 .IX Item "l2-cache-size"
7164 The size of L2 cache, in kilobytes.
7165 .IP "\fBuse-canonical-types\fR" 4
7166 .IX Item "use-canonical-types"
7167 Whether the compiler should use the \*(L"canonical\*(R" type system.  By
7168 default, this should always be 1, which uses a more efficient internal
7169 mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
7170 bugs in the canonical type system are causing compilation failures,
7171 set this value to 0 to disable canonical types.
7172 .IP "\fBswitch-conversion-max-branch-ratio\fR" 4
7173 .IX Item "switch-conversion-max-branch-ratio"
7174 Switch initialization conversion will refuse to create arrays that are
7175 bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
7176 branches in the switch.
7177 .IP "\fBmax-partial-antic-length\fR" 4
7178 .IX Item "max-partial-antic-length"
7179 Maximum length of the partial antic set computed during the tree
7180 partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
7181 optimizing at \fB\-O3\fR and above.  For some sorts of source code
7182 the enhanced partial redundancy elimination optimization can run away,
7183 consuming all of the memory available on the host machine.  This
7184 parameter sets a limit on the length of the sets that are computed,
7185 which prevents the runaway behavior.  Setting a value of 0 for
7186 this parameter will allow an unlimited set length.
7187 .IP "\fBsccvn-max-scc-size\fR" 4
7188 .IX Item "sccvn-max-scc-size"
7189 Maximum size of a strongly connected component (\s-1SCC\s0) during \s-1SCCVN\s0
7190 processing.  If this limit is hit, \s-1SCCVN\s0 processing for the whole
7191 function will not be done and optimizations depending on it will
7192 be disabled.  The default maximum \s-1SCC\s0 size is 10000.
7193 .IP "\fBira-max-loops-num\fR" 4
7194 .IX Item "ira-max-loops-num"
7195 \&\s-1IRA\s0 uses a regional register allocation by default.  If a function
7196 contains loops more than number given by the parameter, only at most
7197 given number of the most frequently executed loops will form regions
7198 for the regional register allocation.  The default value of the
7199 parameter is 100.
7200 .IP "\fBira-max-conflict-table-size\fR" 4
7201 .IX Item "ira-max-conflict-table-size"
7202 Although \s-1IRA\s0 uses a sophisticated algorithm of compression conflict
7203 table, the table can be still big for huge functions.  If the conflict
7204 table for a function could be more than size in \s-1MB\s0 given by the
7205 parameter, the conflict table is not built and faster, simpler, and
7206 lower quality register allocation algorithm will be used.  The
7207 algorithm do not use pseudo-register conflicts.  The default value of
7208 the parameter is 2000.
7209 .IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
7210 .IX Item "loop-invariant-max-bbs-in-loop"
7211 Loop invariant motion can be very expensive, both in compile time and
7212 in amount of needed compile time memory, with very large loops.  Loops
7213 with more basic blocks than this parameter won't have loop invariant
7214 motion optimization performed on them.  The default value of the
7215 parameter is 1000 for \-O1 and 10000 for \-O2 and above.
7216 .IP "\fBctrl-regpre\fR" 4
7217 .IX Item "ctrl-regpre"
7218 This is a switch to turn on live range shrinking optimization.
7219 .IP "\fBctrl-regpre-mode\fR" 4
7220 .IX Item "ctrl-regpre-mode"
7221 This is used as a control knob to enable different transformations in
7222 the live range shrinking phase. Values of 1, 2, and 4 are used to enable
7223 upward motion, downward motion, and tree reshaping transformations
7224  respectively. The values can be bitwise ORed.
7225 .IP "\fBreg-pressure-min-bb-factor\fR" 4
7226 .IX Item "reg-pressure-min-bb-factor"
7227 A performance tuning knob to control register pressure. When the size
7228 (in the number of gimple statements) of a basic block in a loop is
7229 larger than the threshold specified by this parameter multiplied by the
7230 number of available registers, live range shrinking optimization is enabled.
7231 .IP "\fBreg-pressure-min-tree\fR" 4
7232 .IX Item "reg-pressure-min-tree"
7233 The minimal size (number of leaves) of a tree to be reshaped in the Live
7234 Range Shrinking optimization. 
7235 .IP "\fBmin-mcf-cancel-iters\fR" 4
7236 .IX Item "min-mcf-cancel-iters"
7237 The minimum number of iterations of negative cycle cancellation during
7238 \&\s-1MCF\s0 profile correction before early termination.  This parameter is
7239 only useful when using \fB\-fprofile\-correction\fR.
7240 .IP "\fBsamplefdo-mcf-high-confidence-cost-mult\fR" 4
7241 .IX Item "samplefdo-mcf-high-confidence-cost-mult"
7242 Multiply the cost used by \s-1MCF\s0 during profile correction by this factor
7243 for all input profile data that is determined to be high confidence.
7244 This parameter is only useful when using \fB\-fsample\-profile\fR and
7245 \&\fB\-fprofile\-correction\fR.
7246 .IP "\fBsamplefdo-use-discrim\fR" 4
7247 .IX Item "samplefdo-use-discrim"
7248 When attributing samples to the \s-1CFG\s0, use discriminators to identify
7249 which \s-1CFG\s0 nodes correspond to which samples.  This parameter is only
7250 useful when using \fB\-fsample\-profile\fR.
7251 .IP "\fBsamplefdo-large-block-thresh\fR" 4
7252 .IX Item "samplefdo-large-block-thresh"
7253 Consider a basic block large if it has more than this many gimple
7254 statements in it.  If a block is large and has no profile samples
7255 attributed to it, it will be assigned a weight of 0 with high
7256 confidence.  This parameter is only useful when using
7257 \&\fB\-fsample\-profile\fR.
7258 .RE
7259 .RS 4
7260 .RE
7261 .Sh "Options Controlling the Preprocessor"
7262 .IX Subsection "Options Controlling the Preprocessor"
7263 These options control the C preprocessor, which is run on each C source
7264 file before actual compilation.
7265 .PP
7266 If you use the \fB\-E\fR option, nothing is done except preprocessing.
7267 Some of these options make sense only together with \fB\-E\fR because
7268 they cause the preprocessor output to be unsuitable for actual
7269 compilation.
7270 .Sp
7271 .RS 4
7272 You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
7273 and pass \fIoption\fR directly through to the preprocessor.  If
7274 \&\fIoption\fR contains commas, it is split into multiple options at the
7275 commas.  However, many options are modified, translated or interpreted
7276 by the compiler driver before being passed to the preprocessor, and
7277 \&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
7278 interface is undocumented and subject to change, so whenever possible
7279 you should avoid using \fB\-Wp\fR and let the driver handle the
7280 options instead.
7281 .RE
7282 .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
7283 .IX Item "-Xpreprocessor option"
7284 Pass \fIoption\fR as an option to the preprocessor.  You can use this to
7285 supply system-specific preprocessor options which \s-1GCC\s0 does not know how to
7286 recognize.
7287 .Sp
7288 If you want to pass an option that takes an argument, you must use
7289 \&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
7290 .IP "\fB\-D\fR \fIname\fR" 4
7291 .IX Item "-D name"
7292 Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
7293 .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
7294 .IX Item "-D name=definition"
7295 The contents of \fIdefinition\fR are tokenized and processed as if
7296 they appeared during translation phase three in a \fB#define\fR
7297 directive.  In particular, the definition will be truncated by
7298 embedded newline characters.
7299 .Sp
7300 If you are invoking the preprocessor from a shell or shell-like
7301 program you may need to use the shell's quoting syntax to protect
7302 characters such as spaces that have a meaning in the shell syntax.
7303 .Sp
7304 If you wish to define a function-like macro on the command line, write
7305 its argument list with surrounding parentheses before the equals sign
7306 (if any).  Parentheses are meaningful to most shells, so you will need
7307 to quote the option.  With \fBsh\fR and \fBcsh\fR,
7308 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
7309 .Sp
7310 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
7311 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
7312 \&\fB\-include\fR \fIfile\fR options are processed after all
7313 \&\fB\-D\fR and \fB\-U\fR options.
7314 .IP "\fB\-U\fR \fIname\fR" 4
7315 .IX Item "-U name"
7316 Cancel any previous definition of \fIname\fR, either built in or
7317 provided with a \fB\-D\fR option.
7318 .IP "\fB\-undef\fR" 4
7319 .IX Item "-undef"
7320 Do not predefine any system-specific or GCC-specific macros.  The
7321 standard predefined macros remain defined.
7322 .IP "\fB\-I\fR \fIdir\fR" 4
7323 .IX Item "-I dir"
7324 Add the directory \fIdir\fR to the list of directories to be searched
7325 for header files.
7326 Directories named by \fB\-I\fR are searched before the standard
7327 system include directories.  If the directory \fIdir\fR is a standard
7328 system include directory, the option is ignored to ensure that the
7329 default search order for system directories and the special treatment
7330 of system headers are not defeated
7331 \&.
7332 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7333 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7334 .IP "\fB\-o\fR \fIfile\fR" 4
7335 .IX Item "-o file"
7336 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
7337 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
7338 different interpretation of a second non-option argument, so you must
7339 use \fB\-o\fR to specify the output file.
7340 .IP "\fB\-Wall\fR" 4
7341 .IX Item "-Wall"
7342 Turns on all optional warnings which are desirable for normal code.
7343 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
7344 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
7345 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
7346 preprocessor's warnings are on by default and have no options to
7347 control them.
7348 .IP "\fB\-Wcomment\fR" 4
7349 .IX Item "-Wcomment"
7350 .PD 0
7351 .IP "\fB\-Wcomments\fR" 4
7352 .IX Item "-Wcomments"
7353 .PD
7354 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
7355 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
7356 (Both forms have the same effect.)
7357 .IP "\fB\-Wtrigraphs\fR" 4
7358 .IX Item "-Wtrigraphs"
7359 Most trigraphs in comments cannot affect the meaning of the program.
7360 However, a trigraph that would form an escaped newline (\fB??/\fR at
7361 the end of a line) can, by changing where the comment begins or ends.
7362 Therefore, only trigraphs that would form escaped newlines produce
7363 warnings inside a comment.
7364 .Sp
7365 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
7366 given, this option is still enabled unless trigraphs are enabled.  To
7367 get trigraph conversion without warnings, but get the other
7368 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
7369 .IP "\fB\-Wtraditional\fR" 4
7370 .IX Item "-Wtraditional"
7371 Warn about certain constructs that behave differently in traditional and
7372 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
7373 equivalent, and problematic constructs which should be avoided.
7374 .IP "\fB\-Wundef\fR" 4
7375 .IX Item "-Wundef"
7376 Warn whenever an identifier which is not a macro is encountered in an
7377 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
7378 replaced with zero.
7379 .IP "\fB\-Wunused\-macros\fR" 4
7380 .IX Item "-Wunused-macros"
7381 Warn about macros defined in the main file that are unused.  A macro
7382 is \fIused\fR if it is expanded or tested for existence at least once.
7383 The preprocessor will also warn if the macro has not been used at the
7384 time it is redefined or undefined.
7385 .Sp
7386 Built-in macros, macros defined on the command line, and macros
7387 defined in include files are not warned about.
7388 .Sp
7389 \&\fINote:\fR If a macro is actually used, but only used in skipped
7390 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
7391 warning in such a case, you might improve the scope of the macro's
7392 definition by, for example, moving it into the first skipped block.
7393 Alternatively, you could provide a dummy use with something like:
7394 .Sp
7395 .Vb 2
7396 \&        #if defined the_macro_causing_the_warning
7397 \&        #endif
7398 .Ve
7399 .IP "\fB\-Wendif\-labels\fR" 4
7400 .IX Item "-Wendif-labels"
7401 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
7402 This usually happens in code of the form
7403 .Sp
7404 .Vb 5
7405 \&        #if FOO
7406 \&        ...
7407 \&        #else FOO
7408 \&        ...
7409 \&        #endif FOO
7410 .Ve
7411 .Sp
7412 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
7413 in older programs.  This warning is on by default.
7414 .IP "\fB\-Werror\fR" 4
7415 .IX Item "-Werror"
7416 Make all warnings into hard errors.  Source code which triggers warnings
7417 will be rejected.
7418 .IP "\fB\-Wsystem\-headers\fR" 4
7419 .IX Item "-Wsystem-headers"
7420 Issue warnings for code in system headers.  These are normally unhelpful
7421 in finding bugs in your own code, therefore suppressed.  If you are
7422 responsible for the system library, you may want to see them.
7423 .IP "\fB\-w\fR" 4
7424 .IX Item "-w"
7425 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
7426 .IP "\fB\-pedantic\fR" 4
7427 .IX Item "-pedantic"
7428 Issue all the mandatory diagnostics listed in the C standard.  Some of
7429 them are left out by default, since they trigger frequently on harmless
7430 code.
7431 .IP "\fB\-pedantic\-errors\fR" 4
7432 .IX Item "-pedantic-errors"
7433 Issue all the mandatory diagnostics, and make all mandatory diagnostics
7434 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
7435 without \fB\-pedantic\fR but treats as warnings.
7436 .IP "\fB\-M\fR" 4
7437 .IX Item "-M"
7438 Instead of outputting the result of preprocessing, output a rule
7439 suitable for \fBmake\fR describing the dependencies of the main
7440 source file.  The preprocessor outputs one \fBmake\fR rule containing
7441 the object file name for that source file, a colon, and the names of all
7442 the included files, including those coming from \fB\-include\fR or
7443 \&\fB\-imacros\fR command line options.
7444 .Sp
7445 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
7446 object file name consists of the name of the source file with any
7447 suffix replaced with object file suffix and with any leading directory
7448 parts removed.  If there are many included files then the rule is
7449 split into several lines using \fB\e\fR\-newline.  The rule has no
7450 commands.
7451 .Sp
7452 This option does not suppress the preprocessor's debug output, such as
7453 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
7454 rules you should explicitly specify the dependency output file with
7455 \&\fB\-MF\fR, or use an environment variable like
7456 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
7457 will still be sent to the regular output stream as normal.
7458 .Sp
7459 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
7460 warnings with an implicit \fB\-w\fR.
7461 .IP "\fB\-MM\fR" 4
7462 .IX Item "-MM"
7463 Like \fB\-M\fR but do not mention header files that are found in
7464 system header directories, nor header files that are included,
7465 directly or indirectly, from such a header.
7466 .Sp
7467 This implies that the choice of angle brackets or double quotes in an
7468 \&\fB#include\fR directive does not in itself determine whether that
7469 header will appear in \fB\-MM\fR dependency output.  This is a
7470 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
7471 .IP "\fB\-MF\fR \fIfile\fR" 4
7472 .IX Item "-MF file"
7473 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
7474 file to write the dependencies to.  If no \fB\-MF\fR switch is given
7475 the preprocessor sends the rules to the same place it would have sent
7476 preprocessed output.
7477 .Sp
7478 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
7479 \&\fB\-MF\fR overrides the default dependency output file.
7480 .IP "\fB\-MG\fR" 4
7481 .IX Item "-MG"
7482 In conjunction with an option such as \fB\-M\fR requesting
7483 dependency generation, \fB\-MG\fR assumes missing header files are
7484 generated files and adds them to the dependency list without raising
7485 an error.  The dependency filename is taken directly from the
7486 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
7487 also suppresses preprocessed output, as a missing header file renders
7488 this useless.
7489 .Sp
7490 This feature is used in automatic updating of makefiles.
7491 .IP "\fB\-MP\fR" 4
7492 .IX Item "-MP"
7493 This option instructs \s-1CPP\s0 to add a phony target for each dependency
7494 other than the main file, causing each to depend on nothing.  These
7495 dummy rules work around errors \fBmake\fR gives if you remove header
7496 files without updating the \fIMakefile\fR to match.
7497 .Sp
7498 This is typical output:
7499 .Sp
7500 .Vb 1
7501 \&        test.o: test.c test.h
7502 .Ve
7503 .Sp
7504 .Vb 1
7505 \&        test.h:
7506 .Ve
7507 .IP "\fB\-MT\fR \fItarget\fR" 4
7508 .IX Item "-MT target"
7509 Change the target of the rule emitted by dependency generation.  By
7510 default \s-1CPP\s0 takes the name of the main input file, deletes any
7511 directory components and any file suffix such as \fB.c\fR, and
7512 appends the platform's usual object suffix.  The result is the target.
7513 .Sp
7514 An \fB\-MT\fR option will set the target to be exactly the string you
7515 specify.  If you want multiple targets, you can specify them as a single
7516 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
7517 .Sp
7518 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
7519 .Sp
7520 .Vb 1
7521 \&        $(objpfx)foo.o: foo.c
7522 .Ve
7523 .IP "\fB\-MQ\fR \fItarget\fR" 4
7524 .IX Item "-MQ target"
7525 Same as \fB\-MT\fR, but it quotes any characters which are special to
7526 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
7527 .Sp
7528 .Vb 1
7529 \&        $$(objpfx)foo.o: foo.c
7530 .Ve
7531 .Sp
7532 The default target is automatically quoted, as if it were given with
7533 \&\fB\-MQ\fR.
7534 .IP "\fB\-MD\fR" 4
7535 .IX Item "-MD"
7536 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
7537 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
7538 whether an \fB\-o\fR option is given.  If it is, the driver uses its
7539 argument but with a suffix of \fI.d\fR, otherwise it takes the name
7540 of the input file, removes any directory components and suffix, and
7541 applies a \fI.d\fR suffix.
7542 .Sp
7543 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
7544 \&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
7545 is understood to specify a target object file.
7546 .Sp
7547 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
7548 a dependency output file as a side-effect of the compilation process.
7549 .IP "\fB\-MMD\fR" 4
7550 .IX Item "-MMD"
7551 Like \fB\-MD\fR except mention only user header files, not system
7552 header files.
7553 .IP "\fB\-fpch\-deps\fR" 4
7554 .IX Item "-fpch-deps"
7555 When using precompiled headers, this flag
7556 will cause the dependency-output flags to also list the files from the
7557 precompiled header's dependencies.  If not specified only the
7558 precompiled header would be listed and not the files that were used to
7559 create it because those files are not consulted when a precompiled
7560 header is used.
7561 .IP "\fB\-fpch\-preprocess\fR" 4
7562 .IX Item "-fpch-preprocess"
7563 This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
7564 \&\f(CW\*(C`#pragma GCC pch_preprocess "<filename>"\*(C'\fR in the output to mark
7565 the place where the precompiled header was found, and its filename.  When
7566 \&\fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR and
7567 loads the \s-1PCH\s0.
7568 .Sp
7569 This option is off by default, because the resulting preprocessed output
7570 is only really suitable as input to \s-1GCC\s0.  It is switched on by
7571 \&\fB\-save\-temps\fR.
7572 .Sp
7573 You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
7574 safe to edit the filename if the \s-1PCH\s0 file is available in a different
7575 location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
7576 current directory.
7577 .IP "\fB\-x c\fR" 4
7578 .IX Item "-x c"
7579 .PD 0
7580 .IP "\fB\-x c++\fR" 4
7581 .IX Item "-x c++"
7582 .IP "\fB\-x objective-c\fR" 4
7583 .IX Item "-x objective-c"
7584 .IP "\fB\-x assembler-with-cpp\fR" 4
7585 .IX Item "-x assembler-with-cpp"
7586 .PD
7587 Specify the source language: C, \*(C+, Objective\-C, or assembly.  This has
7588 nothing to do with standards conformance or extensions; it merely
7589 selects which base syntax to expect.  If you give none of these options,
7590 cpp will deduce the language from the extension of the source file:
7591 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
7592 extensions for \*(C+ and assembly are also recognized.  If cpp does not
7593 recognize the extension, it will treat the file as C; this is the most
7594 generic mode.
7595 .Sp
7596 \&\fINote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
7597 which selected both the language and the standards conformance level.
7598 This option has been removed, because it conflicts with the \fB\-l\fR
7599 option.
7600 .IP "\fB\-std=\fR\fIstandard\fR" 4
7601 .IX Item "-std=standard"
7602 .PD 0
7603 .IP "\fB\-ansi\fR" 4
7604 .IX Item "-ansi"
7605 .PD
7606 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
7607 knows about C and \*(C+ standards; others may be added in the future.
7608 .Sp
7609 \&\fIstandard\fR
7610 may be one of:
7611 .RS 4
7612 .ie n .IP """iso9899:1990""" 4
7613 .el .IP "\f(CWiso9899:1990\fR" 4
7614 .IX Item "iso9899:1990"
7615 .PD 0
7616 .ie n .IP """c89""" 4
7617 .el .IP "\f(CWc89\fR" 4
7618 .IX Item "c89"
7619 .PD
7620 The \s-1ISO\s0 C standard from 1990.  \fBc89\fR is the customary shorthand for
7621 this version of the standard.
7622 .Sp
7623 The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
7624 .ie n .IP """iso9899:199409""" 4
7625 .el .IP "\f(CWiso9899:199409\fR" 4
7626 .IX Item "iso9899:199409"
7627 The 1990 C standard, as amended in 1994.
7628 .ie n .IP """iso9899:1999""" 4
7629 .el .IP "\f(CWiso9899:1999\fR" 4
7630 .IX Item "iso9899:1999"
7631 .PD 0
7632 .ie n .IP """c99""" 4
7633 .el .IP "\f(CWc99\fR" 4
7634 .IX Item "c99"
7635 .ie n .IP """iso9899:199x""" 4
7636 .el .IP "\f(CWiso9899:199x\fR" 4
7637 .IX Item "iso9899:199x"
7638 .ie n .IP """c9x""" 4
7639 .el .IP "\f(CWc9x\fR" 4
7640 .IX Item "c9x"
7641 .PD
7642 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
7643 publication, this was known as C9X.
7644 .ie n .IP """gnu89""" 4
7645 .el .IP "\f(CWgnu89\fR" 4
7646 .IX Item "gnu89"
7647 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
7648 .ie n .IP """gnu99""" 4
7649 .el .IP "\f(CWgnu99\fR" 4
7650 .IX Item "gnu99"
7651 .PD 0
7652 .ie n .IP """gnu9x""" 4
7653 .el .IP "\f(CWgnu9x\fR" 4
7654 .IX Item "gnu9x"
7655 .PD
7656 The 1999 C standard plus \s-1GNU\s0 extensions.
7657 .ie n .IP """c++98""" 4
7658 .el .IP "\f(CWc++98\fR" 4
7659 .IX Item "c++98"
7660 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
7661 .ie n .IP """gnu++98""" 4
7662 .el .IP "\f(CWgnu++98\fR" 4
7663 .IX Item "gnu++98"
7664 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
7665 default for \*(C+ code.
7666 .RE
7667 .RS 4
7668 .RE
7669 .IP "\fB\-I\-\fR" 4
7670 .IX Item "-I-"
7671 Split the include path.  Any directories specified with \fB\-I\fR
7672 options before \fB\-I\-\fR are searched only for headers requested with
7673 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7674 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
7675 specified with \fB\-I\fR options after the \fB\-I\-\fR, those
7676 directories are searched for all \fB#include\fR directives.
7677 .Sp
7678 In addition, \fB\-I\-\fR inhibits the use of the directory of the current
7679 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
7680 This option has been deprecated.
7681 .IP "\fB\-nostdinc\fR" 4
7682 .IX Item "-nostdinc"
7683 Do not search the standard system directories for header files.
7684 Only the directories you have specified with \fB\-I\fR options
7685 (and the directory of the current file, if appropriate) are searched.
7686 .IP "\fB\-nostdinc++\fR" 4
7687 .IX Item "-nostdinc++"
7688 Do not search for header files in the \*(C+\-specific standard directories,
7689 but do still search the other standard directories.  (This option is
7690 used when building the \*(C+ library.)
7691 .IP "\fB\-include\fR \fIfile\fR" 4
7692 .IX Item "-include file"
7693 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
7694 line of the primary source file.  However, the first directory searched
7695 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
7696 the directory containing the main source file.  If not found there, it
7697 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
7698 chain as normal.
7699 .Sp
7700 If multiple \fB\-include\fR options are given, the files are included
7701 in the order they appear on the command line.
7702 .IP "\fB\-imacros\fR \fIfile\fR" 4
7703 .IX Item "-imacros file"
7704 Exactly like \fB\-include\fR, except that any output produced by
7705 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
7706 This allows you to acquire all the macros from a header without also
7707 processing its declarations.
7708 .Sp
7709 All files specified by \fB\-imacros\fR are processed before all files
7710 specified by \fB\-include\fR.
7711 .IP "\fB\-idirafter\fR \fIdir\fR" 4
7712 .IX Item "-idirafter dir"
7713 Search \fIdir\fR for header files, but do it \fIafter\fR all
7714 directories specified with \fB\-I\fR and the standard system directories
7715 have been exhausted.  \fIdir\fR is treated as a system include directory.
7716 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7717 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7718 .IP "\fB\-iprefix\fR \fIprefix\fR" 4
7719 .IX Item "-iprefix prefix"
7720 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
7721 options.  If the prefix represents a directory, you should include the
7722 final \fB/\fR.
7723 .IP "\fB\-iwithprefix\fR \fIdir\fR" 4
7724 .IX Item "-iwithprefix dir"
7725 .PD 0
7726 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
7727 .IX Item "-iwithprefixbefore dir"
7728 .PD
7729 Append \fIdir\fR to the prefix specified previously with
7730 \&\fB\-iprefix\fR, and add the resulting directory to the include search
7731 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
7732 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
7733 .IP "\fB\-isysroot\fR \fIdir\fR" 4
7734 .IX Item "-isysroot dir"
7735 This option is like the \fB\-\-sysroot\fR option, but applies only to
7736 header files.  See the \fB\-\-sysroot\fR option for more information.
7737 .IP "\fB\-imultilib\fR \fIdir\fR" 4
7738 .IX Item "-imultilib dir"
7739 Use \fIdir\fR as a subdirectory of the directory containing
7740 target-specific \*(C+ headers.
7741 .IP "\fB\-isystem\fR \fIdir\fR" 4
7742 .IX Item "-isystem dir"
7743 Search \fIdir\fR for header files, after all directories specified by
7744 \&\fB\-I\fR but before the standard system directories.  Mark it
7745 as a system directory, so that it gets the same special treatment as
7746 is applied to the standard system directories.
7747 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7748 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7749 .IP "\fB\-iquote\fR \fIdir\fR" 4
7750 .IX Item "-iquote dir"
7751 Search \fIdir\fR only for header files requested with
7752 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
7753 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR, before all directories specified by
7754 \&\fB\-I\fR and before the standard system directories.
7755 If \fIdir\fR begins with \f(CW\*(C`=\*(C'\fR, then the \f(CW\*(C`=\*(C'\fR will be replaced
7756 by the sysroot prefix; see \fB\-\-sysroot\fR and \fB\-isysroot\fR.
7757 .IP "\fB\-fdirectives\-only\fR" 4
7758 .IX Item "-fdirectives-only"
7759 When preprocessing, handle directives, but do not expand macros.
7760 .Sp
7761 The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
7762 options.
7763 .Sp
7764 With \fB\-E\fR, preprocessing is limited to the handling of directives
7765 such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
7766 preprocessor operations, such as macro expansion and trigraph
7767 conversion are not performed.  In addition, the \fB\-dD\fR option is
7768 implicitly enabled.
7769 .Sp
7770 With \fB\-fpreprocessed\fR, predefinition of command line and most
7771 builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
7772 contextually dependent, are handled normally.  This enables compilation of
7773 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7774 .Sp
7775 With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
7776 \&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
7777 files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
7778 .IP "\fB\-fdollars\-in\-identifiers\fR" 4
7779 .IX Item "-fdollars-in-identifiers"
7780 Accept \fB$\fR in identifiers.
7781 .IP "\fB\-fextended\-identifiers\fR" 4
7782 .IX Item "-fextended-identifiers"
7783 Accept universal character names in identifiers.  This option is
7784 experimental; in a future version of \s-1GCC\s0, it will be enabled by
7785 default for C99 and \*(C+.
7786 .IP "\fB\-fpreprocessed\fR" 4
7787 .IX Item "-fpreprocessed"
7788 Indicate to the preprocessor that the input file has already been
7789 preprocessed.  This suppresses things like macro expansion, trigraph
7790 conversion, escaped newline splicing, and processing of most directives.
7791 The preprocessor still recognizes and removes comments, so that you can
7792 pass a file preprocessed with \fB\-C\fR to the compiler without
7793 problems.  In this mode the integrated preprocessor is little more than
7794 a tokenizer for the front ends.
7795 .Sp
7796 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
7797 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
7798 extensions that \s-1GCC\s0 uses for preprocessed files created by
7799 \&\fB\-save\-temps\fR.
7800 .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
7801 .IX Item "-ftabstop=width"
7802 Set the distance between tab stops.  This helps the preprocessor report
7803 correct column numbers in warnings or errors, even if tabs appear on the
7804 line.  If the value is less than 1 or greater than 100, the option is
7805 ignored.  The default is 8.
7806 .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
7807 .IX Item "-fexec-charset=charset"
7808 Set the execution character set, used for string and character
7809 constants.  The default is \s-1UTF\-8\s0.  \fIcharset\fR can be any encoding
7810 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7811 .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
7812 .IX Item "-fwide-exec-charset=charset"
7813 Set the wide execution character set, used for wide string and
7814 character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16\s0, whichever
7815 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
7816 \&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
7817 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
7818 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
7819 .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
7820 .IX Item "-finput-charset=charset"
7821 Set the input character set, used for translation from the character
7822 set of the input file to the source character set used by \s-1GCC\s0.  If the
7823 locale does not specify, or \s-1GCC\s0 cannot get this information from the
7824 locale, the default is \s-1UTF\-8\s0.  This can be overridden by either the locale
7825 or this command line option.  Currently the command line option takes
7826 precedence if there's a conflict.  \fIcharset\fR can be any encoding
7827 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
7828 .IP "\fB\-fworking\-directory\fR" 4
7829 .IX Item "-fworking-directory"
7830 Enable generation of linemarkers in the preprocessor output that will
7831 let the compiler know the current working directory at the time of
7832 preprocessing.  When this option is enabled, the preprocessor will
7833 emit, after the initial linemarker, a second linemarker with the
7834 current working directory followed by two slashes.  \s-1GCC\s0 will use this
7835 directory, when it's present in the preprocessed input, as the
7836 directory emitted as the current working directory in some debugging
7837 information formats.  This option is implicitly enabled if debugging
7838 information is enabled, but this can be inhibited with the negated
7839 form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
7840 present in the command line, this option has no effect, since no
7841 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
7842 .IP "\fB\-fno\-show\-column\fR" 4
7843 .IX Item "-fno-show-column"
7844 Do not print column numbers in diagnostics.  This may be necessary if
7845 diagnostics are being scanned by a program that does not understand the
7846 column numbers, such as \fBdejagnu\fR.
7847 .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7848 .IX Item "-A predicate=answer"
7849 Make an assertion with the predicate \fIpredicate\fR and answer
7850 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
7851 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
7852 it does not use shell special characters.
7853 .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
7854 .IX Item "-A -predicate=answer"
7855 Cancel an assertion with the predicate \fIpredicate\fR and answer
7856 \&\fIanswer\fR.
7857 .IP "\fB\-dCHARS\fR" 4
7858 .IX Item "-dCHARS"
7859 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
7860 and must not be preceded by a space.  Other characters are interpreted
7861 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
7862 are silently ignored.  If you specify characters whose behavior
7863 conflicts, the result is undefined.
7864 .RS 4
7865 .IP "\fBM\fR" 4
7866 .IX Item "M"
7867 Instead of the normal output, generate a list of \fB#define\fR
7868 directives for all the macros defined during the execution of the
7869 preprocessor, including predefined macros.  This gives you a way of
7870 finding out what is predefined in your version of the preprocessor.
7871 Assuming you have no file \fIfoo.h\fR, the command
7872 .Sp
7873 .Vb 1
7874 \&        touch foo.h; cpp \-dM foo.h
7875 .Ve
7876 .Sp
7877 will show all the predefined macros.
7878 .Sp
7879 If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
7880 interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
7881 .IP "\fBD\fR" 4
7882 .IX Item "D"
7883 Like \fBM\fR except in two respects: it does \fInot\fR include the
7884 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
7885 directives and the result of preprocessing.  Both kinds of output go to
7886 the standard output file.
7887 .IP "\fBN\fR" 4
7888 .IX Item "N"
7889 Like \fBD\fR, but emit only the macro names, not their expansions.
7890 .IP "\fBI\fR" 4
7891 .IX Item "I"
7892 Output \fB#include\fR directives in addition to the result of
7893 preprocessing.
7894 .IP "\fBU\fR" 4
7895 .IX Item "U"
7896 Like \fBD\fR except that only macros that are expanded, or whose
7897 definedness is tested in preprocessor directives, are output; the
7898 output is delayed until the use or test of the macro; and
7899 \&\fB#undef\fR directives are also output for macros tested but
7900 undefined at the time.
7901 .RE
7902 .RS 4
7903 .RE
7904 .IP "\fB\-P\fR" 4
7905 .IX Item "-P"
7906 Inhibit generation of linemarkers in the output from the preprocessor.
7907 This might be useful when running the preprocessor on something that is
7908 not C code, and will be sent to a program which might be confused by the
7909 linemarkers.
7910 .IP "\fB\-C\fR" 4
7911 .IX Item "-C"
7912 Do not discard comments.  All comments are passed through to the output
7913 file, except for comments in processed directives, which are deleted
7914 along with the directive.
7915 .Sp
7916 You should be prepared for side effects when using \fB\-C\fR; it
7917 causes the preprocessor to treat comments as tokens in their own right.
7918 For example, comments appearing at the start of what would be a
7919 directive line have the effect of turning that line into an ordinary
7920 source line, since the first token on the line is no longer a \fB#\fR.
7921 .IP "\fB\-CC\fR" 4
7922 .IX Item "-CC"
7923 Do not discard comments, including during macro expansion.  This is
7924 like \fB\-C\fR, except that comments contained within macros are
7925 also passed through to the output file where the macro is expanded.
7926 .Sp
7927 In addition to the side-effects of the \fB\-C\fR option, the
7928 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
7929 to be converted to C\-style comments.  This is to prevent later use
7930 of that macro from inadvertently commenting out the remainder of
7931 the source line.
7932 .Sp
7933 The \fB\-CC\fR option is generally used to support lint comments.
7934 .IP "\fB\-traditional\-cpp\fR" 4
7935 .IX Item "-traditional-cpp"
7936 Try to imitate the behavior of old-fashioned C preprocessors, as
7937 opposed to \s-1ISO\s0 C preprocessors.
7938 .IP "\fB\-trigraphs\fR" 4
7939 .IX Item "-trigraphs"
7940 Process trigraph sequences.
7941 These are three-character sequences, all starting with \fB??\fR, that
7942 are defined by \s-1ISO\s0 C to stand for single characters.  For example,
7943 \&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
7944 constant for a newline.  By default, \s-1GCC\s0 ignores trigraphs, but in
7945 standard-conforming modes it converts them.  See the \fB\-std\fR and
7946 \&\fB\-ansi\fR options.
7947 .Sp
7948 The nine trigraphs and their replacements are
7949 .Sp
7950 .Vb 2
7951 \&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??\-
7952 \&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
7953 .Ve
7954 .IP "\fB\-remap\fR" 4
7955 .IX Item "-remap"
7956 Enable special code to work around file systems which only permit very
7957 short file names, such as \s-1MS\-DOS\s0.
7958 .IP "\fB\-\-help\fR" 4
7959 .IX Item "--help"
7960 .PD 0
7961 .IP "\fB\-\-target\-help\fR" 4
7962 .IX Item "--target-help"
7963 .PD
7964 Print text describing all the command line options instead of
7965 preprocessing anything.
7966 .IP "\fB\-v\fR" 4
7967 .IX Item "-v"
7968 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
7969 execution, and report the final form of the include path.
7970 .IP "\fB\-H\fR" 4
7971 .IX Item "-H"
7972 Print the name of each header file used, in addition to other normal
7973 activities.  Each name is indented to show how deep in the
7974 \&\fB#include\fR stack it is.  Precompiled header files are also
7975 printed, even if they are found to be invalid; an invalid precompiled
7976 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
7977 .IP "\fB\-version\fR" 4
7978 .IX Item "-version"
7979 .PD 0
7980 .IP "\fB\-\-version\fR" 4
7981 .IX Item "--version"
7982 .PD
7983 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
7984 preprocess as normal.  With two dashes, exit immediately.
7985 .Sh "Passing Options to the Assembler"
7986 .IX Subsection "Passing Options to the Assembler"
7987 You can pass options to the assembler.
7988 .IP "\fB\-Wa,\fR\fIoption\fR" 4
7989 .IX Item "-Wa,option"
7990 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
7991 contains commas, it is split into multiple options at the commas.
7992 .IP "\fB\-Xassembler\fR \fIoption\fR" 4
7993 .IX Item "-Xassembler option"
7994 Pass \fIoption\fR as an option to the assembler.  You can use this to
7995 supply system-specific assembler options which \s-1GCC\s0 does not know how to
7996 recognize.
7997 .Sp
7998 If you want to pass an option that takes an argument, you must use
7999 \&\fB\-Xassembler\fR twice, once for the option and once for the argument.
8000 .Sh "Options for Linking"
8001 .IX Subsection "Options for Linking"
8002 These options come into play when the compiler links object files into
8003 an executable output file.  They are meaningless if the compiler is
8004 not doing a link step.
8005 .IP "\fIobject-file-name\fR" 4
8006 .IX Item "object-file-name"
8007 A file name that does not end in a special recognized suffix is
8008 considered to name an object file or library.  (Object files are
8009 distinguished from libraries by the linker according to the file
8010 contents.)  If linking is done, these object files are used as input
8011 to the linker.
8012 .IP "\fB\-c\fR" 4
8013 .IX Item "-c"
8014 .PD 0
8015 .IP "\fB\-S\fR" 4
8016 .IX Item "-S"
8017 .IP "\fB\-E\fR" 4
8018 .IX Item "-E"
8019 .PD
8020 If any of these options is used, then the linker is not run, and
8021 object file names should not be used as arguments.  
8022 .IP "\fB\-l\fR\fIlibrary\fR" 4
8023 .IX Item "-llibrary"
8024 .PD 0
8025 .IP "\fB\-l\fR \fIlibrary\fR" 4
8026 .IX Item "-l library"
8027 .PD
8028 Search the library named \fIlibrary\fR when linking.  (The second
8029 alternative with the library as a separate argument is only for
8030 \&\s-1POSIX\s0 compliance and is not recommended.)
8031 .Sp
8032 It makes a difference where in the command you write this option; the
8033 linker searches and processes libraries and object files in the order they
8034 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
8035 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
8036 to functions in \fBz\fR, those functions may not be loaded.
8037 .Sp
8038 The linker searches a standard list of directories for the library,
8039 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
8040 then uses this file as if it had been specified precisely by name.
8041 .Sp
8042 The directories searched include several standard system directories
8043 plus any that you specify with \fB\-L\fR.
8044 .Sp
8045 Normally the files found this way are library files\-\-\-archive files
8046 whose members are object files.  The linker handles an archive file by
8047 scanning through it for members which define symbols that have so far
8048 been referenced but not defined.  But if the file that is found is an
8049 ordinary object file, it is linked in the usual fashion.  The only
8050 difference between using an \fB\-l\fR option and specifying a file name
8051 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
8052 and searches several directories.
8053 .IP "\fB\-lobjc\fR" 4
8054 .IX Item "-lobjc"
8055 You need this special case of the \fB\-l\fR option in order to
8056 link an Objective-C or Objective\-\*(C+ program.
8057 .IP "\fB\-nostartfiles\fR" 4
8058 .IX Item "-nostartfiles"
8059 Do not use the standard system startup files when linking.
8060 The standard system libraries are used normally, unless \fB\-nostdlib\fR
8061 or \fB\-nodefaultlibs\fR is used.
8062 .IP "\fB\-nodefaultlibs\fR" 4
8063 .IX Item "-nodefaultlibs"
8064 Do not use the standard system libraries when linking.
8065 Only the libraries you specify will be passed to the linker.
8066 The standard startup files are used normally, unless \fB\-nostartfiles\fR
8067 is used.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
8068 \&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
8069 These entries are usually resolved by entries in
8070 libc.  These entry points should be supplied through some other
8071 mechanism when this option is specified.
8072 .IP "\fB\-nostdlib\fR" 4
8073 .IX Item "-nostdlib"
8074 Do not use the standard system startup files or libraries when linking.
8075 No startup files and only the libraries you specify will be passed to
8076 the linker.  The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
8077 \&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
8078 These entries are usually resolved by entries in
8079 libc.  These entry points should be supplied through some other
8080 mechanism when this option is specified.
8081 .Sp
8082 One of the standard libraries bypassed by \fB\-nostdlib\fR and
8083 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
8084 that \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
8085 needs for some languages.
8086 .Sp
8087 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
8088 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
8089 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
8090 This ensures that you have no unresolved references to internal \s-1GCC\s0
8091 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
8092 constructors will be called.)
8093 .IP "\fB\-pie\fR" 4
8094 .IX Item "-pie"
8095 Produce a position independent executable on targets which support it.
8096 For predictable results, you must also specify the same set of options
8097 that were used to generate code (\fB\-fpie\fR, \fB\-fPIE\fR,
8098 or model suboptions) when you specify this option.
8099 .IP "\fB\-rdynamic\fR" 4
8100 .IX Item "-rdynamic"
8101 Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
8102 that support it. This instructs the linker to add all symbols, not
8103 only used ones, to the dynamic symbol table. This option is needed
8104 for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
8105 from within a program.
8106 .IP "\fB\-s\fR" 4
8107 .IX Item "-s"
8108 Remove all symbol table and relocation information from the executable.
8109 .IP "\fB\-static\fR" 4
8110 .IX Item "-static"
8111 On systems that support dynamic linking, this prevents linking with the shared
8112 libraries.  On other systems, this option has no effect.
8113 .IP "\fB\-shared\fR" 4
8114 .IX Item "-shared"
8115 Produce a shared object which can then be linked with other objects to
8116 form an executable.  Not all systems support this option.  For predictable
8117 results, you must also specify the same set of options that were used to
8118 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
8119 when you specify this option.[1]
8120 .IP "\fB\-shared\-libgcc\fR" 4
8121 .IX Item "-shared-libgcc"
8122 .PD 0
8123 .IP "\fB\-static\-libgcc\fR" 4
8124 .IX Item "-static-libgcc"
8125 .PD
8126 On systems that provide \fIlibgcc\fR as a shared library, these options
8127 force the use of either the shared or static version respectively.
8128 If no shared version of \fIlibgcc\fR was built when the compiler was
8129 configured, these options have no effect.
8130 .Sp
8131 There are several situations in which an application should use the
8132 shared \fIlibgcc\fR instead of the static version.  The most common
8133 of these is when the application wishes to throw and catch exceptions
8134 across different shared libraries.  In that case, each of the libraries
8135 as well as the application itself should use the shared \fIlibgcc\fR.
8136 .Sp
8137 Therefore, the G++ and \s-1GCJ\s0 drivers automatically add
8138 \&\fB\-shared\-libgcc\fR whenever you build a shared library or a main
8139 executable, because \*(C+ and Java programs typically use exceptions, so
8140 this is the right thing to do.
8141 .Sp
8142 If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
8143 find that they will not always be linked with the shared \fIlibgcc\fR.
8144 If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
8145 or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
8146 it will link the shared version of \fIlibgcc\fR into shared libraries
8147 by default.  Otherwise, it will take advantage of the linker and optimize
8148 away the linking with the shared version of \fIlibgcc\fR, linking with
8149 the static version of libgcc by default.  This allows exceptions to
8150 propagate through such shared libraries, without incurring relocation
8151 costs at library load time.
8152 .Sp
8153 However, if a library or main executable is supposed to throw or catch
8154 exceptions, you must link it using the G++ or \s-1GCJ\s0 driver, as appropriate
8155 for the languages used in the program, or using the option
8156 \&\fB\-shared\-libgcc\fR, such that it is linked with the shared
8157 \&\fIlibgcc\fR.
8158 .IP "\fB\-symbolic\fR" 4
8159 .IX Item "-symbolic"
8160 Bind references to global symbols when building a shared object.  Warn
8161 about any unresolved references (unless overridden by the link editor
8162 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
8163 this option.
8164 .IP "\fB\-T\fR \fIscript\fR" 4
8165 .IX Item "-T script"
8166 Use \fIscript\fR as the linker script.  This option is supported by most
8167 systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
8168 targets without an operating system, the \fB\-T\fR option may be required 
8169 when linking to avoid references to undefined symbols.
8170 .IP "\fB\-Xlinker\fR \fIoption\fR" 4
8171 .IX Item "-Xlinker option"
8172 Pass \fIoption\fR as an option to the linker.  You can use this to
8173 supply system-specific linker options which \s-1GCC\s0 does not know how to
8174 recognize.
8175 .Sp
8176 If you want to pass an option that takes a separate argument, you must use
8177 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
8178 For example, to pass \fB\-assert definitions\fR, you must write
8179 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
8180 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
8181 string as a single argument, which is not what the linker expects.
8182 .Sp
8183 When using the \s-1GNU\s0 linker, it is usually more convenient to pass 
8184 arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
8185 syntax than as separate arguments.  For example, you can specify
8186 \&\fB\-Xlinker \-Map=output.map\fR rather than
8187 \&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
8188 this syntax for command-line options.
8189 .IP "\fB\-Wl,\fR\fIoption\fR" 4
8190 .IX Item "-Wl,option"
8191 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
8192 commas, it is split into multiple options at the commas.  You can use this
8193 syntax to pass an argument to the option.  
8194 For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
8195 linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
8196 \&\fB\-Wl,\-Map=output.map\fR.
8197 .IP "\fB\-u\fR \fIsymbol\fR" 4
8198 .IX Item "-u symbol"
8199 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
8200 library modules to define it.  You can use \fB\-u\fR multiple times with
8201 different symbols to force loading of additional library modules.
8202 .Sh "Options for Directory Search"
8203 .IX Subsection "Options for Directory Search"
8204 These options specify directories to search for header files, for
8205 libraries and for parts of the compiler:
8206 .IP "\fB\-I\fR\fIdir\fR" 4
8207 .IX Item "-Idir"
8208 Add the directory \fIdir\fR to the head of the list of directories to be
8209 searched for header files.  This can be used to override a system header
8210 file, substituting your own version, since these directories are
8211 searched before the system header file directories.  However, you should
8212 not use this option to add directories that contain vendor-supplied
8213 system header files (use \fB\-isystem\fR for that).  If you use more than
8214 one \fB\-I\fR option, the directories are scanned in left-to-right
8215 order; the standard system directories come after.
8216 .Sp
8217 If a standard system include directory, or a directory specified with
8218 \&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
8219 option will be ignored.  The directory will still be searched but as a
8220 system directory at its normal position in the system include chain.
8221 This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
8222 the ordering for the include_next directive are not inadvertently changed.
8223 If you really need to change the search order for system directories,
8224 use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
8225 .IP "\fB\-iquote\fR\fIdir\fR" 4
8226 .IX Item "-iquotedir"
8227 Add the directory \fIdir\fR to the head of the list of directories to
8228 be searched for header files only for the case of \fB#include
8229 "\fR\fIfile\fR\fB"\fR; they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR,
8230 otherwise just like \fB\-I\fR.
8231 .IP "\fB\-L\fR\fIdir\fR" 4
8232 .IX Item "-Ldir"
8233 Add directory \fIdir\fR to the list of directories to be searched
8234 for \fB\-l\fR.
8235 .IP "\fB\-B\fR\fIprefix\fR" 4
8236 .IX Item "-Bprefix"
8237 This option specifies where to find the executables, libraries,
8238 include files, and data files of the compiler itself.
8239 .Sp
8240 The compiler driver program runs one or more of the subprograms
8241 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
8242 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
8243 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
8244 .Sp
8245 For each subprogram to be run, the compiler driver first tries the
8246 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
8247 was not specified, the driver tries two standard prefixes, which are
8248 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
8249 those results in a file name that is found, the unmodified program
8250 name is searched for using the directories specified in your
8251 \&\fB\s-1PATH\s0\fR environment variable.
8252 .Sp
8253 The compiler will check to see if the path provided by the \fB\-B\fR
8254 refers to a directory, and if necessary it will add a directory
8255 separator character at the end of the path.
8256 .Sp
8257 \&\fB\-B\fR prefixes that effectively specify directory names also apply
8258 to libraries in the linker, because the compiler translates these
8259 options into \fB\-L\fR options for the linker.  They also apply to
8260 includes files in the preprocessor, because the compiler translates these
8261 options into \fB\-isystem\fR options for the preprocessor.  In this case,
8262 the compiler appends \fBinclude\fR to the prefix.
8263 .Sp
8264 The run-time support file \fIlibgcc.a\fR can also be searched for using
8265 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
8266 standard prefixes above are tried, and that is all.  The file is left
8267 out of the link if it is not found by those means.
8268 .Sp
8269 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
8270 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.  
8271 .Sp
8272 As a special kludge, if the path provided by \fB\-B\fR is
8273 \&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
8274 9, then it will be replaced by \fI[dir/]include\fR.  This is to help
8275 with boot-strapping the compiler.
8276 .IP "\fB\-specs=\fR\fIfile\fR" 4
8277 .IX Item "-specs=file"
8278 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
8279 file, in order to override the defaults that the \fIgcc\fR driver
8280 program uses when determining what switches to pass to \fIcc1\fR,
8281 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
8282 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
8283 are processed in order, from left to right.
8284 .IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
8285 .IX Item "--sysroot=dir"
8286 Use \fIdir\fR as the logical root directory for headers and libraries.
8287 For example, if the compiler would normally search for headers in
8288 \&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it will instead
8289 search \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
8290 .Sp
8291 If you use both this option and the \fB\-isysroot\fR option, then
8292 the \fB\-\-sysroot\fR option will apply to libraries, but the
8293 \&\fB\-isysroot\fR option will apply to header files.
8294 .Sp
8295 The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
8296 for this option.  If your linker does not support this option, the
8297 header file aspect of \fB\-\-sysroot\fR will still work, but the
8298 library aspect will not.
8299 .IP "\fB\-I\-\fR" 4
8300 .IX Item "-I-"
8301 This option has been deprecated.  Please use \fB\-iquote\fR instead for
8302 \&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR.
8303 Any directories you specify with \fB\-I\fR options before the \fB\-I\-\fR
8304 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
8305 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
8306 .Sp
8307 If additional directories are specified with \fB\-I\fR options after
8308 the \fB\-I\-\fR, these directories are searched for all \fB#include\fR
8309 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
8310 this way.)
8311 .Sp
8312 In addition, the \fB\-I\-\fR option inhibits the use of the current
8313 directory (where the current input file came from) as the first search
8314 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
8315 override this effect of \fB\-I\-\fR.  With \fB\-I.\fR you can specify
8316 searching the directory which was current when the compiler was
8317 invoked.  That is not exactly the same as what the preprocessor does
8318 by default, but it is often satisfactory.
8319 .Sp
8320 \&\fB\-I\-\fR does not inhibit the use of the standard system directories
8321 for header files.  Thus, \fB\-I\-\fR and \fB\-nostdinc\fR are
8322 independent.
8323 .Sh "Specifying Target Machine and Compiler Version"
8324 .IX Subsection "Specifying Target Machine and Compiler Version"
8325 The usual way to run \s-1GCC\s0 is to run the executable called \fIgcc\fR, or
8326 \&\fI<machine>\-gcc\fR when cross\-compiling, or
8327 \&\fI<machine>\-gcc\-<version>\fR to run a version other than the one that
8328 was installed last.  Sometimes this is inconvenient, so \s-1GCC\s0 provides
8329 options that will switch to another cross-compiler or version.
8330 .IP "\fB\-b\fR \fImachine\fR" 4
8331 .IX Item "-b machine"
8332 The argument \fImachine\fR specifies the target machine for compilation.
8333 .Sp
8334 The value to use for \fImachine\fR is the same as was specified as the
8335 machine type when configuring \s-1GCC\s0 as a cross\-compiler.  For
8336 example, if a cross-compiler was configured with \fBconfigure
8337 arm-elf\fR, meaning to compile for an arm processor with elf binaries,
8338 then you would specify \fB\-b arm-elf\fR to run that cross compiler.
8339 Because there are other options beginning with \fB\-b\fR, the
8340 configuration must contain a hyphen, or \fB\-b\fR alone should be one
8341 argument followed by the configuration in the next argument.
8342 .IP "\fB\-V\fR \fIversion\fR" 4
8343 .IX Item "-V version"
8344 The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
8345 This is useful when multiple versions are installed.  For example,
8346 \&\fIversion\fR might be \fB4.0\fR, meaning to run \s-1GCC\s0 version 4.0.
8347 .PP
8348 The \fB\-V\fR and \fB\-b\fR options work by running the
8349 \&\fI<machine>\-gcc\-<version>\fR executable, so there's no real reason to
8350 use them if you can just run that directly.
8351 .Sh "Hardware Models and Configurations"
8352 .IX Subsection "Hardware Models and Configurations"
8353 Earlier we discussed the standard option \fB\-b\fR which chooses among
8354 different installed compilers for completely different target
8355 machines, such as \s-1VAX\s0 vs. 68000 vs. 80386.
8356 .PP
8357 In addition, each of these target machine types can have its own
8358 special options, starting with \fB\-m\fR, to choose among various
8359 hardware models or configurations\-\-\-for example, 68010 vs 68020,
8360 floating coprocessor or none.  A single installed version of the
8361 compiler can compile for any model or configuration, according to the
8362 options specified.
8363 .PP
8364 Some configurations of the compiler also support additional special
8365 options, usually for compatibility with other compilers on the same
8366 platform.
8367 .PP
8368 \fI\s-1ARC\s0 Options\fR
8369 .IX Subsection "ARC Options"
8370 .PP
8371 These options are defined for \s-1ARC\s0 implementations:
8372 .IP "\fB\-EL\fR" 4
8373 .IX Item "-EL"
8374 Compile code for little endian mode.  This is the default.
8375 .IP "\fB\-EB\fR" 4
8376 .IX Item "-EB"
8377 Compile code for big endian mode.
8378 .IP "\fB\-mmangle\-cpu\fR" 4
8379 .IX Item "-mmangle-cpu"
8380 Prepend the name of the cpu to all public symbol names.
8381 In multiple-processor systems, there are many \s-1ARC\s0 variants with different
8382 instruction and register set characteristics.  This flag prevents code
8383 compiled for one cpu to be linked with code compiled for another.
8384 No facility exists for handling variants that are \*(L"almost identical\*(R".
8385 This is an all or nothing option.
8386 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
8387 .IX Item "-mcpu=cpu"
8388 Compile code for \s-1ARC\s0 variant \fIcpu\fR.
8389 Which variants are supported depend on the configuration.
8390 All variants support \fB\-mcpu=base\fR, this is the default.
8391 .IP "\fB\-mtext=\fR\fItext-section\fR" 4
8392 .IX Item "-mtext=text-section"
8393 .PD 0
8394 .IP "\fB\-mdata=\fR\fIdata-section\fR" 4
8395 .IX Item "-mdata=data-section"
8396 .IP "\fB\-mrodata=\fR\fIreadonly-data-section\fR" 4
8397 .IX Item "-mrodata=readonly-data-section"
8398 .PD
8399 Put functions, data, and readonly data in \fItext-section\fR,
8400 \&\fIdata-section\fR, and \fIreadonly-data-section\fR respectively
8401 by default.  This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
8402 .IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
8403 .IX Item "-mfix-cortex-m3-ldrd"
8404 Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
8405 with overlapping destination and base registers are used.  This option avoids
8406 generating these instructions.  This option is enabled by default when
8407 \&\fB\-mcpu=cortex\-m3\fR is specified.
8408 .PP
8409 \fI\s-1ARM\s0 Options\fR
8410 .IX Subsection "ARM Options"
8411 .PP
8412 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
8413 architectures:
8414 .IP "\fB\-mabi=\fR\fIname\fR" 4
8415 .IX Item "-mabi=name"
8416 Generate code for the specified \s-1ABI\s0.  Permissible values are: \fBapcs-gnu\fR,
8417 \&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
8418 .IP "\fB\-mapcs\-frame\fR" 4
8419 .IX Item "-mapcs-frame"
8420 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
8421 Standard for all functions, even if this is not strictly necessary for
8422 correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
8423 with this option will cause the stack frames not to be generated for
8424 leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
8425 .IP "\fB\-mapcs\fR" 4
8426 .IX Item "-mapcs"
8427 This is a synonym for \fB\-mapcs\-frame\fR.
8428 .IP "\fB\-mthumb\-interwork\fR" 4
8429 .IX Item "-mthumb-interwork"
8430 Generate code which supports calling between the \s-1ARM\s0 and Thumb
8431 instruction sets.  Without this option the two instruction sets cannot
8432 be reliably used inside one program.  The default is
8433 \&\fB\-mno\-thumb\-interwork\fR, since slightly larger code is generated
8434 when \fB\-mthumb\-interwork\fR is specified.
8435 .IP "\fB\-mno\-sched\-prolog\fR" 4
8436 .IX Item "-mno-sched-prolog"
8437 Prevent the reordering of instructions in the function prolog, or the
8438 merging of those instruction with the instructions in the function's
8439 body.  This means that all functions will start with a recognizable set
8440 of instructions (or in fact one of a choice from a small set of
8441 different function prologues), and this information can be used to
8442 locate the start if functions inside an executable piece of code.  The
8443 default is \fB\-msched\-prolog\fR.
8444 .IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
8445 .IX Item "-mfloat-abi=name"
8446 Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
8447 are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
8448 .Sp
8449 Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing 
8450 library calls for floating-point operations.
8451 \&\fBsoftfp\fR allows the generation of code using hardware floating-point 
8452 instructions, but still uses the soft-float calling conventions.  
8453 \&\fBhard\fR allows generation of floating-point instructions 
8454 and uses FPU-specific calling conventions.
8455 .Sp
8456 Using \fB\-mfloat\-abi=hard\fR with \s-1VFP\s0 coprocessors is not supported.
8457 Use \fB\-mfloat\-abi=softfp\fR with the appropriate \fB\-mfpu\fR option
8458 to allow the compiler to generate code that makes use of the hardware
8459 floating-point capabilities for these CPUs.
8460 .Sp
8461 The default depends on the specific target configuration.  Note that
8462 the hard-float and soft-float ABIs are not link\-compatible; you must
8463 compile your entire program with the same \s-1ABI\s0, and link with a
8464 compatible set of libraries.
8465 .IP "\fB\-mhard\-float\fR" 4
8466 .IX Item "-mhard-float"
8467 Equivalent to \fB\-mfloat\-abi=hard\fR.
8468 .IP "\fB\-msoft\-float\fR" 4
8469 .IX Item "-msoft-float"
8470 Equivalent to \fB\-mfloat\-abi=soft\fR.
8471 .IP "\fB\-mlittle\-endian\fR" 4
8472 .IX Item "-mlittle-endian"
8473 Generate code for a processor running in little-endian mode.  This is
8474 the default for all standard configurations.
8475 .IP "\fB\-mbig\-endian\fR" 4
8476 .IX Item "-mbig-endian"
8477 Generate code for a processor running in big-endian mode; the default is
8478 to compile code for a little-endian processor.
8479 .IP "\fB\-mwords\-little\-endian\fR" 4
8480 .IX Item "-mwords-little-endian"
8481 This option only applies when generating code for big-endian processors.
8482 Generate code for a little-endian word order but a big-endian byte
8483 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
8484 option should only be used if you require compatibility with code for
8485 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
8486 2.8.
8487 .IP "\fB\-mcpu=\fR\fIname\fR" 4
8488 .IX Item "-mcpu=name"
8489 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
8490 to determine what kind of instructions it can emit when generating
8491 assembly code.  Permissible names are: \fBarm2\fR, \fBarm250\fR,
8492 \&\fBarm3\fR, \fBarm6\fR, \fBarm60\fR, \fBarm600\fR, \fBarm610\fR,
8493 \&\fBarm620\fR, \fBarm7\fR, \fBarm7m\fR, \fBarm7d\fR, \fBarm7dm\fR,
8494 \&\fBarm7di\fR, \fBarm7dmi\fR, \fBarm70\fR, \fBarm700\fR,
8495 \&\fBarm700i\fR, \fBarm710\fR, \fBarm710c\fR, \fBarm7100\fR,
8496 \&\fBarm720\fR,
8497 \&\fBarm7500\fR, \fBarm7500fe\fR, \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR,
8498 \&\fBarm710t\fR, \fBarm720t\fR, \fBarm740t\fR,
8499 \&\fBstrongarm\fR, \fBstrongarm110\fR, \fBstrongarm1100\fR,
8500 \&\fBstrongarm1110\fR,
8501 \&\fBarm8\fR, \fBarm810\fR, \fBarm9\fR, \fBarm9e\fR, \fBarm920\fR,
8502 \&\fBarm920t\fR, \fBarm922t\fR, \fBarm946e\-s\fR, \fBarm966e\-s\fR,
8503 \&\fBarm968e\-s\fR, \fBarm926ej\-s\fR, \fBarm940t\fR, \fBarm9tdmi\fR,
8504 \&\fBarm10tdmi\fR, \fBarm1020t\fR, \fBarm1026ej\-s\fR,
8505 \&\fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
8506 \&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
8507 \&\fBarm1156t2\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
8508 \&\fBcortex\-a8\fR, \fBcortex\-a9\fR,
8509 \&\fBcortex\-r4\fR, \fBcortex\-r4f\fR, \fBcortex\-m3\fR,
8510 \&\fBcortex\-m1\fR,
8511 \&\fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8512 .IP "\fB\-mtune=\fR\fIname\fR" 4
8513 .IX Item "-mtune=name"
8514 This option is very similar to the \fB\-mcpu=\fR option, except that
8515 instead of specifying the actual target processor type, and hence
8516 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
8517 tune the performance of the code as if the target were of the type
8518 specified in this option, but still choosing the instructions that it
8519 will generate based on the cpu specified by a \fB\-mcpu=\fR option.
8520 For some \s-1ARM\s0 implementations better performance can be obtained by using
8521 this option.
8522 .IP "\fB\-march=\fR\fIname\fR" 4
8523 .IX Item "-march=name"
8524 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
8525 name to determine what kind of instructions it can emit when generating
8526 assembly code.  This option can be used in conjunction with or instead
8527 of the \fB\-mcpu=\fR option.  Permissible names are: \fBarmv2\fR,
8528 \&\fBarmv2a\fR, \fBarmv3\fR, \fBarmv3m\fR, \fBarmv4\fR, \fBarmv4t\fR,
8529 \&\fBarmv5\fR, \fBarmv5t\fR, \fBarmv5e\fR, \fBarmv5te\fR,
8530 \&\fBarmv6\fR, \fBarmv6j\fR,
8531 \&\fBarmv6t2\fR, \fBarmv6z\fR, \fBarmv6zk\fR, \fBarmv6\-m\fR,
8532 \&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7\-r\fR, \fBarmv7\-m\fR,
8533 \&\fBiwmmxt\fR, \fBiwmmxt2\fR, \fBep9312\fR.
8534 .IP "\fB\-mfpu=\fR\fIname\fR" 4
8535 .IX Item "-mfpu=name"
8536 .PD 0
8537 .IP "\fB\-mfpe=\fR\fInumber\fR" 4
8538 .IX Item "-mfpe=number"
8539 .IP "\fB\-mfp=\fR\fInumber\fR" 4
8540 .IX Item "-mfp=number"
8541 .PD
8542 This specifies what floating point hardware (or hardware emulation) is
8543 available on the target.  Permissible names are: \fBfpa\fR, \fBfpe2\fR,
8544 \&\fBfpe3\fR, \fBmaverick\fR, \fBvfp\fR, \fBvfpv3\fR, \fBvfpv3\-d16\fR and
8545 \&\fBneon\fR.  \fB\-mfp\fR and \fB\-mfpe\fR
8546 are synonyms for \fB\-mfpu\fR=\fBfpe\fR\fInumber\fR, for compatibility
8547 with older versions of \s-1GCC\s0.
8548 .Sp
8549 If \fB\-msoft\-float\fR is specified this specifies the format of
8550 floating point values.
8551 .IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
8552 .IX Item "-mstructure-size-boundary=n"
8553 The size of all structures and unions will be rounded up to a multiple
8554 of the number of bits set by this option.  Permissible values are 8, 32
8555 and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
8556 targeted toolchain the default value is 8.  A value of 64 is only allowed
8557 if the underlying \s-1ABI\s0 supports it.
8558 .Sp
8559 Specifying the larger number can produce faster, more efficient code, but
8560 can also increase the size of the program.  Different values are potentially
8561 incompatible.  Code compiled with one value cannot necessarily expect to
8562 work with code or libraries compiled with another value, if they exchange
8563 information using structures or unions.
8564 .IP "\fB\-mabort\-on\-noreturn\fR" 4
8565 .IX Item "-mabort-on-noreturn"
8566 Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
8567 \&\f(CW\*(C`noreturn\*(C'\fR function.  It will be executed if the function tries to
8568 return.
8569 .IP "\fB\-mlong\-calls\fR" 4
8570 .IX Item "-mlong-calls"
8571 .PD 0
8572 .IP "\fB\-mno\-long\-calls\fR" 4
8573 .IX Item "-mno-long-calls"
8574 .PD
8575 Tells the compiler to perform function calls by first loading the
8576 address of the function into a register and then performing a subroutine
8577 call on this register.  This switch is needed if the target function
8578 will lie outside of the 64 megabyte addressing range of the offset based
8579 version of subroutine call instruction.
8580 .Sp
8581 Even if this switch is enabled, not all function calls will be turned
8582 into long calls.  The heuristic is that static functions, functions
8583 which have the \fBshort-call\fR attribute, functions that are inside
8584 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
8585 definitions have already been compiled within the current compilation
8586 unit, will not be turned into long calls.  The exception to this rule is
8587 that weak function definitions, functions with the \fBlong-call\fR
8588 attribute or the \fBsection\fR attribute, and functions that are within
8589 the scope of a \fB#pragma long_calls\fR directive, will always be
8590 turned into long calls.
8591 .Sp
8592 This feature is not enabled by default.  Specifying
8593 \&\fB\-mno\-long\-calls\fR will restore the default behavior, as will
8594 placing the function calls within the scope of a \fB#pragma
8595 long_calls_off\fR directive.  Note these switches have no effect on how
8596 the compiler generates code to handle function calls via function
8597 pointers.
8598 .IP "\fB\-msingle\-pic\-base\fR" 4
8599 .IX Item "-msingle-pic-base"
8600 Treat the register used for \s-1PIC\s0 addressing as read\-only, rather than
8601 loading it in the prologue for each function.  The run-time system is
8602 responsible for initializing this register with an appropriate value
8603 before execution begins.
8604 .IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
8605 .IX Item "-mpic-register=reg"
8606 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
8607 unless stack-checking is enabled, when R9 is used.
8608 .IP "\fB\-mcirrus\-fix\-invalid\-insns\fR" 4
8609 .IX Item "-mcirrus-fix-invalid-insns"
8610 Insert NOPs into the instruction stream to in order to work around
8611 problems with invalid Maverick instruction combinations.  This option
8612 is only valid if the \fB\-mcpu=ep9312\fR option has been used to
8613 enable generation of instructions for the Cirrus Maverick floating
8614 point co\-processor.  This option is not enabled by default, since the
8615 problem is only present in older Maverick implementations.  The default
8616 can be re-enabled by use of the \fB\-mno\-cirrus\-fix\-invalid\-insns\fR
8617 switch.
8618 .IP "\fB\-mpoke\-function\-name\fR" 4
8619 .IX Item "-mpoke-function-name"
8620 Write the name of each function into the text section, directly
8621 preceding the function prologue.  The generated code is similar to this:
8622 .Sp
8623 .Vb 9
8624 \&             t0
8625 \&                 .ascii "arm_poke_function_name", 0
8626 \&                 .align
8627 \&             t1
8628 \&                 .word 0xff000000 + (t1 \- t0)
8629 \&             arm_poke_function_name
8630 \&                 mov     ip, sp
8631 \&                 stmfd   sp!, {fp, ip, lr, pc}
8632 \&                 sub     fp, ip, #4
8633 .Ve
8634 .Sp
8635 When performing a stack backtrace, code can inspect the value of
8636 \&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
8637 location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
8638 there is a function name embedded immediately preceding this location
8639 and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
8640 .IP "\fB\-mthumb\fR" 4
8641 .IX Item "-mthumb"
8642 Generate code for the Thumb instruction set.  The default is to
8643 use the 32\-bit \s-1ARM\s0 instruction set.
8644 This option automatically enables either 16\-bit Thumb\-1 or
8645 mixed 16/32\-bit Thumb\-2 instructions based on the \fB\-mcpu=\fR\fIname\fR
8646 and \fB\-march=\fR\fIname\fR options.
8647 .IP "\fB\-mtpcs\-frame\fR" 4
8648 .IX Item "-mtpcs-frame"
8649 Generate a stack frame that is compliant with the Thumb Procedure Call
8650 Standard for all non-leaf functions.  (A leaf function is one that does
8651 not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
8652 .IP "\fB\-mtpcs\-leaf\-frame\fR" 4
8653 .IX Item "-mtpcs-leaf-frame"
8654 Generate a stack frame that is compliant with the Thumb Procedure Call
8655 Standard for all leaf functions.  (A leaf function is one that does
8656 not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
8657 .IP "\fB\-mcallee\-super\-interworking\fR" 4
8658 .IX Item "-mcallee-super-interworking"
8659 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
8660 instruction set header which switches to Thumb mode before executing the
8661 rest of the function.  This allows these functions to be called from
8662 non-interworking code.
8663 .IP "\fB\-mcaller\-super\-interworking\fR" 4
8664 .IX Item "-mcaller-super-interworking"
8665 Allows calls via function pointers (including virtual functions) to
8666 execute correctly regardless of whether the target code has been
8667 compiled for interworking or not.  There is a small overhead in the cost
8668 of executing a function pointer if this option is enabled.
8669 .IP "\fB\-mtp=\fR\fIname\fR" 4
8670 .IX Item "-mtp=name"
8671 Specify the access model for the thread local storage pointer.  The valid
8672 models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
8673 \&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
8674 (supported in the arm6k architecture), and \fBauto\fR, which uses the
8675 best available method for the selected processor.  The default setting is
8676 \&\fBauto\fR.
8677 .IP "\fB\-mword\-relocations\fR" 4
8678 .IX Item "-mword-relocations"
8679 Only generate absolute relocations on word sized values (i.e. R_ARM_ABS32).
8680 This is enabled by default on targets (uClinux, SymbianOS) where the runtime
8681 loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
8682 is specified.
8683 .IP "\fB\-mandroid\fR" 4
8684 .IX Item "-mandroid"
8685 Enable Android specific compilier options.
8686 .Sp
8687 If this option is used, a preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR is defined
8688 and has the value 1 during compilation. The option also implies C/\*(C+ options
8689 \&\fB\-fno\-exceptions\fR \fB\-fpic\fR \fB\-mthumb\-interwork\fR
8690 \&\fB\-fno\-short\-enums\fR and \*(C+ option \fB\-fno\-rtti\fR. These implied
8691 options can be overridden. For example \s-1RTTI\s0 in \*(C+ code can still be enabled
8692 with \-frtti even when \-mandroid is also used.
8693 .Sp
8694 Linking options depend on whether a static executable, a dynamic
8695 executable or a shared library is built. When \fB\-static\fR is given,
8696 \&\fB\-mandroid\fR implies linking flag \fB\-Bstatic\fR, start file
8697 \&\fIcrtbegin_static.o\fR and end file \fIcrtend_android.o\fR.
8698 .Sp
8699 When \fB\-shared\fR is given, \fB\-mandroid\fR implies the linking
8700 flag \fB\-Bsymbolic\fR and no start and end files.
8701 .Sp
8702 When none of \fB\-static\fR and \fB\-shared\fR is given, \fB\-mandroid\fR
8703 implies linking flags \fB\-Bdynamic \-dynamic\-linker /system/bin/linker\fR,
8704 start file \fIcrtbegin_dynamic.o\fR and end file \fIcrtend_android.o\fR. The
8705 dynamic linker used can be overriden by another \fB\-dynamic\-linker\fR in
8706 command line.
8707 .Sp
8708 The linking option \fB\-ldl\fR is also added if \fB\-static\fR is not
8709 given.
8710 .Sp
8711 If more than one of \fB\-dynamic\fR, \fB\-static\fR and \fB\-shared\fR
8712 are given, behaviour of \fB\-mandroid\fR is undefined.
8713 .PP
8714 \fI\s-1AVR\s0 Options\fR
8715 .IX Subsection "AVR Options"
8716 .PP
8717 These options are defined for \s-1AVR\s0 implementations:
8718 .IP "\fB\-mmcu=\fR\fImcu\fR" 4
8719 .IX Item "-mmcu=mcu"
8720 Specify \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
8721 .Sp
8722 Instruction set avr1 is for the minimal \s-1AVR\s0 core, not supported by the C
8723 compiler, only for assembler programs (\s-1MCU\s0 types: at90s1200, attiny10,
8724 attiny11, attiny12, attiny15, attiny28).
8725 .Sp
8726 Instruction set avr2 (default) is for the classic \s-1AVR\s0 core with up to
8727 8K program memory space (\s-1MCU\s0 types: at90s2313, at90s2323, attiny22,
8728 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
8729 at90c8534, at90s8535).
8730 .Sp
8731 Instruction set avr3 is for the classic \s-1AVR\s0 core with up to 128K program
8732 memory space (\s-1MCU\s0 types: atmega103, atmega603, at43usb320, at76c711).
8733 .Sp
8734 Instruction set avr4 is for the enhanced \s-1AVR\s0 core with up to 8K program
8735 memory space (\s-1MCU\s0 types: atmega8, atmega83, atmega85).
8736 .Sp
8737 Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
8738 memory space (\s-1MCU\s0 types: atmega16, atmega161, atmega163, atmega32, atmega323,
8739 atmega64, atmega128, at43usb355, at94k).
8740 .IP "\fB\-msize\fR" 4
8741 .IX Item "-msize"
8742 Output instruction sizes to the asm file.
8743 .IP "\fB\-minit\-stack=\fR\fIN\fR" 4
8744 .IX Item "-minit-stack=N"
8745 Specify the initial stack address, which may be a symbol or numeric value,
8746 \&\fB_\|_stack\fR is the default.
8747 .IP "\fB\-mno\-interrupts\fR" 4
8748 .IX Item "-mno-interrupts"
8749 Generated code is not compatible with hardware interrupts.
8750 Code size will be smaller.
8751 .IP "\fB\-mcall\-prologues\fR" 4
8752 .IX Item "-mcall-prologues"
8753 Functions prologues/epilogues expanded as call to appropriate
8754 subroutines.  Code size will be smaller.
8755 .IP "\fB\-mno\-tablejump\fR" 4
8756 .IX Item "-mno-tablejump"
8757 Do not generate tablejump insns which sometimes increase code size.
8758 The option is now deprecated in favor of the equivalent 
8759 \&\fB\-fno\-jump\-tables\fR
8760 .IP "\fB\-mtiny\-stack\fR" 4
8761 .IX Item "-mtiny-stack"
8762 Change only the low 8 bits of the stack pointer.
8763 .IP "\fB\-mint8\fR" 4
8764 .IX Item "-mint8"
8765 Assume int to be 8 bit integer.  This affects the sizes of all types: A
8766 char will be 1 byte, an int will be 1 byte, an long will be 2 bytes
8767 and long long will be 4 bytes.  Please note that this option does not
8768 comply to the C standards, but it will provide you with smaller code
8769 size.
8770 .PP
8771 \fIBlackfin Options\fR
8772 .IX Subsection "Blackfin Options"
8773 .IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
8774 .IX Item "-mcpu=cpu[-sirevision]"
8775 Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
8776 can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
8777 \&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
8778 \&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
8779 \&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
8780 \&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
8781 \&\fBbf561\fR.
8782 The optional \fIsirevision\fR specifies the silicon revision of the target
8783 Blackfin processor.  Any workarounds available for the targeted silicon revision
8784 will be enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
8785 If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
8786 will be enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
8787 hexadecimal digits representing the major and minor numbers in the silicon
8788 revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
8789 is not defined.  If \fIsirevision\fR is \fBany\fR, the
8790 \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
8791 If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
8792 silicon revision of the targeted Blackfin processor.
8793 .Sp
8794 Support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
8795 Only the processor macro is defined.
8796 Without this option, \fBbf532\fR is used as the processor by default.
8797 The corresponding predefined processor macros for \fIcpu\fR is to
8798 be defined.  And for \fBbfin-elf\fR toolchain, this causes the hardware \s-1BSP\s0
8799 provided by libgloss to be linked in if \fB\-msim\fR is not given.
8800 .IP "\fB\-msim\fR" 4
8801 .IX Item "-msim"
8802 Specifies that the program will be run on the simulator.  This causes
8803 the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
8804 has effect only for \fBbfin-elf\fR toolchain.
8805 Certain other options, such as \fB\-mid\-shared\-library\fR and
8806 \&\fB\-mfdpic\fR, imply \fB\-msim\fR.
8807 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
8808 .IX Item "-momit-leaf-frame-pointer"
8809 Don't keep the frame pointer in a register for leaf functions.  This
8810 avoids the instructions to save, set up and restore frame pointers and
8811 makes an extra register available in leaf functions.  The option
8812 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
8813 which might make debugging harder.
8814 .IP "\fB\-mspecld\-anomaly\fR" 4
8815 .IX Item "-mspecld-anomaly"
8816 When enabled, the compiler will ensure that the generated code does not
8817 contain speculative loads after jump instructions. If this option is used,
8818 \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
8819 .IP "\fB\-mno\-specld\-anomaly\fR" 4
8820 .IX Item "-mno-specld-anomaly"
8821 Don't generate extra code to prevent speculative loads from occurring.
8822 .IP "\fB\-mcsync\-anomaly\fR" 4
8823 .IX Item "-mcsync-anomaly"
8824 When enabled, the compiler will ensure that the generated code does not
8825 contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
8826 If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
8827 .IP "\fB\-mno\-csync\-anomaly\fR" 4
8828 .IX Item "-mno-csync-anomaly"
8829 Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
8830 occurring too soon after a conditional branch.
8831 .IP "\fB\-mlow\-64k\fR" 4
8832 .IX Item "-mlow-64k"
8833 When enabled, the compiler is free to take advantage of the knowledge that
8834 the entire program fits into the low 64k of memory.
8835 .IP "\fB\-mno\-low\-64k\fR" 4
8836 .IX Item "-mno-low-64k"
8837 Assume that the program is arbitrarily large.  This is the default.
8838 .IP "\fB\-mstack\-check\-l1\fR" 4
8839 .IX Item "-mstack-check-l1"
8840 Do stack checking using information placed into L1 scratchpad memory by the
8841 uClinux kernel.
8842 .IP "\fB\-mid\-shared\-library\fR" 4
8843 .IX Item "-mid-shared-library"
8844 Generate code that supports shared libraries via the library \s-1ID\s0 method.
8845 This allows for execute in place and shared libraries in an environment
8846 without virtual memory management.  This option implies \fB\-fPIC\fR.
8847 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
8848 .IP "\fB\-mno\-id\-shared\-library\fR" 4
8849 .IX Item "-mno-id-shared-library"
8850 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
8851 This is the default.
8852 .IP "\fB\-mleaf\-id\-shared\-library\fR" 4
8853 .IX Item "-mleaf-id-shared-library"
8854 Generate code that supports shared libraries via the library \s-1ID\s0 method,
8855 but assumes that this library or executable won't link against any other
8856 \&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
8857 and calls.
8858 .IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
8859 .IX Item "-mno-leaf-id-shared-library"
8860 Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
8861 libraries.  Slower code will be generated for jump and call insns.
8862 .IP "\fB\-mshared\-library\-id=n\fR" 4
8863 .IX Item "-mshared-library-id=n"
8864 Specified the identification number of the \s-1ID\s0 based shared library being
8865 compiled.  Specifying a value of 0 will generate more compact code, specifying
8866 other values will force the allocation of that number to the current
8867 library but is no more space or time efficient than omitting this option.
8868 .IP "\fB\-msep\-data\fR" 4
8869 .IX Item "-msep-data"
8870 Generate code that allows the data segment to be located in a different
8871 area of memory from the text segment.  This allows for execute in place in
8872 an environment without virtual memory management by eliminating relocations
8873 against the text section.
8874 .IP "\fB\-mno\-sep\-data\fR" 4
8875 .IX Item "-mno-sep-data"
8876 Generate code that assumes that the data segment follows the text segment.
8877 This is the default.
8878 .IP "\fB\-mlong\-calls\fR" 4
8879 .IX Item "-mlong-calls"
8880 .PD 0
8881 .IP "\fB\-mno\-long\-calls\fR" 4
8882 .IX Item "-mno-long-calls"
8883 .PD
8884 Tells the compiler to perform function calls by first loading the
8885 address of the function into a register and then performing a subroutine
8886 call on this register.  This switch is needed if the target function
8887 will lie outside of the 24 bit addressing range of the offset based
8888 version of subroutine call instruction.
8889 .Sp
8890 This feature is not enabled by default.  Specifying
8891 \&\fB\-mno\-long\-calls\fR will restore the default behavior.  Note these
8892 switches have no effect on how the compiler generates code to handle
8893 function calls via function pointers.
8894 .IP "\fB\-mfast\-fp\fR" 4
8895 .IX Item "-mfast-fp"
8896 Link with the fast floating-point library. This library relaxes some of
8897 the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
8898 Not-a-Number (\s-1NAN\s0), in the interest of performance.
8899 .IP "\fB\-minline\-plt\fR" 4
8900 .IX Item "-minline-plt"
8901 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
8902 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
8903 .IP "\fB\-mmulticore\fR" 4
8904 .IX Item "-mmulticore"
8905 Build standalone application for multicore Blackfin processor. Proper
8906 start files and link scripts will be used to support multicore.
8907 This option defines \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. It can only be used with
8908 \&\fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR]. It can be used with
8909 \&\fB\-mcorea\fR or \fB\-mcoreb\fR. If it's used without
8910 \&\fB\-mcorea\fR or \fB\-mcoreb\fR, single application/dual core
8911 programming model is used. In this model, the main function of Core B
8912 should be named as coreb_main. If it's used with \fB\-mcorea\fR or
8913 \&\fB\-mcoreb\fR, one application per core programming model is used.
8914 If this option is not used, single core application programming
8915 model is used.
8916 .IP "\fB\-mcorea\fR" 4
8917 .IX Item "-mcorea"
8918 Build standalone application for Core A of \s-1BF561\s0 when using
8919 one application per core programming model. Proper start files
8920 and link scripts will be used to support Core A. This option
8921 defines \f(CW\*(C`_\|_BFIN_COREA\*(C'\fR. It must be used with \fB\-mmulticore\fR.
8922 .IP "\fB\-mcoreb\fR" 4
8923 .IX Item "-mcoreb"
8924 Build standalone application for Core B of \s-1BF561\s0 when using
8925 one application per core programming model. Proper start files
8926 and link scripts will be used to support Core B. This option
8927 defines \f(CW\*(C`_\|_BFIN_COREB\*(C'\fR. When this option is used, coreb_main
8928 should be used instead of main. It must be used with
8929 \&\fB\-mmulticore\fR. 
8930 .IP "\fB\-msdram\fR" 4
8931 .IX Item "-msdram"
8932 Build standalone application for \s-1SDRAM\s0. Proper start files and
8933 link scripts will be used to put the application into \s-1SDRAM\s0.
8934 Loader should initialize \s-1SDRAM\s0 before loading the application
8935 into \s-1SDRAM\s0. This option defines \f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR.
8936 .IP "\fB\-micplb\fR" 4
8937 .IX Item "-micplb"
8938 Assume that ICPLBs are enabled at runtime.  This has an effect on certain
8939 anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
8940 are enabled; for standalone applications the default is off.
8941 .PP
8942 \fI\s-1CRIS\s0 Options\fR
8943 .IX Subsection "CRIS Options"
8944 .PP
8945 These options are defined specifically for the \s-1CRIS\s0 ports.
8946 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
8947 .IX Item "-march=architecture-type"
8948 .PD 0
8949 .IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
8950 .IX Item "-mcpu=architecture-type"
8951 .PD
8952 Generate code for the specified architecture.  The choices for
8953 \&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
8954 respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX\s0.
8955 Default is \fBv0\fR except for cris\-axis\-linux\-gnu, where the default is
8956 \&\fBv10\fR.
8957 .IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
8958 .IX Item "-mtune=architecture-type"
8959 Tune to \fIarchitecture-type\fR everything applicable about the generated
8960 code, except for the \s-1ABI\s0 and the set of available instructions.  The
8961 choices for \fIarchitecture-type\fR are the same as for
8962 \&\fB\-march=\fR\fIarchitecture-type\fR.
8963 .IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
8964 .IX Item "-mmax-stack-frame=n"
8965 Warn when the stack frame of a function exceeds \fIn\fR bytes.
8966 .IP "\fB\-metrax4\fR" 4
8967 .IX Item "-metrax4"
8968 .PD 0
8969 .IP "\fB\-metrax100\fR" 4
8970 .IX Item "-metrax100"
8971 .PD
8972 The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
8973 \&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
8974 .IP "\fB\-mmul\-bug\-workaround\fR" 4
8975 .IX Item "-mmul-bug-workaround"
8976 .PD 0
8977 .IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
8978 .IX Item "-mno-mul-bug-workaround"
8979 .PD
8980 Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
8981 models where it applies.  This option is active by default.
8982 .IP "\fB\-mpdebug\fR" 4
8983 .IX Item "-mpdebug"
8984 Enable CRIS-specific verbose debug-related information in the assembly
8985 code.  This option also has the effect to turn off the \fB#NO_APP\fR
8986 formatted-code indicator to the assembler at the beginning of the
8987 assembly file.
8988 .IP "\fB\-mcc\-init\fR" 4
8989 .IX Item "-mcc-init"
8990 Do not use condition-code results from previous instruction; always emit
8991 compare and test instructions before use of condition codes.
8992 .IP "\fB\-mno\-side\-effects\fR" 4
8993 .IX Item "-mno-side-effects"
8994 Do not emit instructions with side-effects in addressing modes other than
8995 post\-increment.
8996 .IP "\fB\-mstack\-align\fR" 4
8997 .IX Item "-mstack-align"
8998 .PD 0
8999 .IP "\fB\-mno\-stack\-align\fR" 4
9000 .IX Item "-mno-stack-align"
9001 .IP "\fB\-mdata\-align\fR" 4
9002 .IX Item "-mdata-align"
9003 .IP "\fB\-mno\-data\-align\fR" 4
9004 .IX Item "-mno-data-align"
9005 .IP "\fB\-mconst\-align\fR" 4
9006 .IX Item "-mconst-align"
9007 .IP "\fB\-mno\-const\-align\fR" 4
9008 .IX Item "-mno-const-align"
9009 .PD
9010 These options (no\-options) arranges (eliminate arrangements) for the
9011 stack\-frame, individual data and constants to be aligned for the maximum
9012 single data access size for the chosen \s-1CPU\s0 model.  The default is to
9013 arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
9014 not affected by these options.
9015 .IP "\fB\-m32\-bit\fR" 4
9016 .IX Item "-m32-bit"
9017 .PD 0
9018 .IP "\fB\-m16\-bit\fR" 4
9019 .IX Item "-m16-bit"
9020 .IP "\fB\-m8\-bit\fR" 4
9021 .IX Item "-m8-bit"
9022 .PD
9023 Similar to the stack\- data\- and const-align options above, these options
9024 arrange for stack\-frame, writable data and constants to all be 32\-bit,
9025 16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
9026 .IP "\fB\-mno\-prologue\-epilogue\fR" 4
9027 .IX Item "-mno-prologue-epilogue"
9028 .PD 0
9029 .IP "\fB\-mprologue\-epilogue\fR" 4
9030 .IX Item "-mprologue-epilogue"
9031 .PD
9032 With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
9033 epilogue that sets up the stack-frame are omitted and no return
9034 instructions or return sequences are generated in the code.  Use this
9035 option only together with visual inspection of the compiled code: no
9036 warnings or errors are generated when call-saved registers must be saved,
9037 or storage for local variable needs to be allocated.
9038 .IP "\fB\-mno\-gotplt\fR" 4
9039 .IX Item "-mno-gotplt"
9040 .PD 0
9041 .IP "\fB\-mgotplt\fR" 4
9042 .IX Item "-mgotplt"
9043 .PD
9044 With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
9045 instruction sequences that load addresses for functions from the \s-1PLT\s0 part
9046 of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
9047 \&\s-1PLT\s0.  The default is \fB\-mgotplt\fR.
9048 .IP "\fB\-melf\fR" 4
9049 .IX Item "-melf"
9050 Legacy no-op option only recognized with the cris-axis-elf and
9051 cris-axis-linux-gnu targets.
9052 .IP "\fB\-mlinux\fR" 4
9053 .IX Item "-mlinux"
9054 Legacy no-op option only recognized with the cris-axis-linux-gnu target.
9055 .IP "\fB\-sim\fR" 4
9056 .IX Item "-sim"
9057 This option, recognized for the cris-axis-elf arranges
9058 to link with input-output functions from a simulator library.  Code,
9059 initialized data and zero-initialized data are allocated consecutively.
9060 .IP "\fB\-sim2\fR" 4
9061 .IX Item "-sim2"
9062 Like \fB\-sim\fR, but pass linker options to locate initialized data at
9063 0x40000000 and zero-initialized data at 0x80000000.
9064 .PP
9065 \fI\s-1CRX\s0 Options\fR
9066 .IX Subsection "CRX Options"
9067 .PP
9068 These options are defined specifically for the \s-1CRX\s0 ports.
9069 .IP "\fB\-mmac\fR" 4
9070 .IX Item "-mmac"
9071 Enable the use of multiply-accumulate instructions. Disabled by default.
9072 .IP "\fB\-mpush\-args\fR" 4
9073 .IX Item "-mpush-args"
9074 Push instructions will be used to pass outgoing arguments when functions
9075 are called. Enabled by default.
9076 .PP
9077 \fIDarwin Options\fR
9078 .IX Subsection "Darwin Options"
9079 .PP
9080 These options are defined for all architectures running the Darwin operating
9081 system.
9082 .PP
9083 \&\s-1FSF\s0 \s-1GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it will create
9084 an object file for the single architecture that it was built to
9085 target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
9086 \&\fB\-arch\fR options are used; it does so by running the compiler or
9087 linker multiple times and joining the results together with
9088 \&\fIlipo\fR.
9089 .PP
9090 The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
9091 \&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
9092 that \s-1GCC\s0 is targetting, like \fB\-mcpu\fR or \fB\-march\fR.  The
9093 \&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
9094 .PP
9095 The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
9096 mismatch.  The assembler, \fIas\fR, will only permit instructions to
9097 be used that are valid for the subtype of the file it is generating,
9098 so you cannot put 64\-bit instructions in an \fBppc750\fR object file.
9099 The linker for shared libraries, \fI/usr/bin/libtool\fR, will fail
9100 and print an error if asked to create a shared library with a less
9101 restrictive subtype than its input files (for instance, trying to put
9102 a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
9103 for executables, \fIld\fR, will quietly give the executable the most
9104 restrictive subtype of any of its input files.
9105 .IP "\fB\-F\fR\fIdir\fR" 4
9106 .IX Item "-Fdir"
9107 Add the framework directory \fIdir\fR to the head of the list of
9108 directories to be searched for header files.  These directories are
9109 interleaved with those specified by \fB\-I\fR options and are
9110 scanned in a left-to-right order.
9111 .Sp
9112 A framework directory is a directory with frameworks in it.  A
9113 framework is a directory with a \fB\*(L"Headers\*(R"\fR and/or
9114 \&\fB\*(L"PrivateHeaders\*(R"\fR directory contained directly in it that ends
9115 in \fB\*(L".framework\*(R"\fR.  The name of a framework is the name of this
9116 directory excluding the \fB\*(L".framework\*(R"\fR.  Headers associated with
9117 the framework are found in one of those two directories, with
9118 \&\fB\*(L"Headers\*(R"\fR being searched first.  A subframework is a framework
9119 directory that is in a framework's \fB\*(L"Frameworks\*(R"\fR directory.
9120 Includes of subframework headers can only appear in a header of a
9121 framework that contains the subframework, or in a sibling subframework
9122 header.  Two subframeworks are siblings if they occur in the same
9123 framework.  A subframework should not have the same name as a
9124 framework, a warning will be issued if this is violated.  Currently a
9125 subframework cannot have subframeworks, in the future, the mechanism
9126 may be extended to support this.  The standard frameworks can be found
9127 in \fB\*(L"/System/Library/Frameworks\*(R"\fR and
9128 \&\fB\*(L"/Library/Frameworks\*(R"\fR.  An example include looks like
9129 \&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fBFramework\fR denotes
9130 the name of the framework and header.h is found in the
9131 \&\fB\*(L"PrivateHeaders\*(R"\fR or \fB\*(L"Headers\*(R"\fR directory.
9132 .IP "\fB\-iframework\fR\fIdir\fR" 4
9133 .IX Item "-iframeworkdir"
9134 Like \fB\-F\fR except the directory is a treated as a system
9135 directory.  The main difference between this \fB\-iframework\fR and
9136 \&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
9137 warn about constructs contained within header files found via
9138 \&\fIdir\fR.  This option is valid only for the C family of languages.
9139 .IP "\fB\-gused\fR" 4
9140 .IX Item "-gused"
9141 Emit debugging information for symbols that are used.  For \s-1STABS\s0
9142 debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
9143 This is by default \s-1ON\s0.
9144 .IP "\fB\-gfull\fR" 4
9145 .IX Item "-gfull"
9146 Emit debugging information for all symbols and types.
9147 .IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
9148 .IX Item "-mmacosx-version-min=version"
9149 The earliest version of MacOS X that this executable will run on
9150 is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
9151 \&\f(CW10.2\fR, and \f(CW10.3.9\fR.
9152 .Sp
9153 If the compiler was built to use the system's headers by default,
9154 then the default for this option is the system version on which the
9155 compiler is running, otherwise the default is to make choices which
9156 are compatible with as many systems and code bases as possible.
9157 .IP "\fB\-mkernel\fR" 4
9158 .IX Item "-mkernel"
9159 Enable kernel development mode.  The \fB\-mkernel\fR option sets
9160 \&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-cxa\-atexit\fR,
9161 \&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
9162 \&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
9163 applicable.  This mode also sets \fB\-mno\-altivec\fR,
9164 \&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
9165 \&\fB\-mlong\-branch\fR for PowerPC targets.
9166 .IP "\fB\-mone\-byte\-bool\fR" 4
9167 .IX Item "-mone-byte-bool"
9168 Override the defaults for \fBbool\fR so that \fBsizeof(bool)==1\fR.
9169 By default \fBsizeof(bool)\fR is \fB4\fR when compiling for
9170 Darwin/PowerPC and \fB1\fR when compiling for Darwin/x86, so this
9171 option has no effect on x86.
9172 .Sp
9173 \&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
9174 to generate code that is not binary compatible with code generated
9175 without that switch.  Using this switch may require recompiling all
9176 other modules in a program, including system libraries.  Use this
9177 switch to conform to a non-default data model.
9178 .IP "\fB\-mfix\-and\-continue\fR" 4
9179 .IX Item "-mfix-and-continue"
9180 .PD 0
9181 .IP "\fB\-ffix\-and\-continue\fR" 4
9182 .IX Item "-ffix-and-continue"
9183 .IP "\fB\-findirect\-data\fR" 4
9184 .IX Item "-findirect-data"
9185 .PD
9186 Generate code suitable for fast turn around development.  Needed to
9187 enable gdb to dynamically load \f(CW\*(C`.o\*(C'\fR files into already running
9188 programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
9189 are provided for backwards compatibility.
9190 .IP "\fB\-all_load\fR" 4
9191 .IX Item "-all_load"
9192 Loads all members of static archive libraries.
9193 See man \fIld\fR\|(1) for more information.
9194 .IP "\fB\-arch_errors_fatal\fR" 4
9195 .IX Item "-arch_errors_fatal"
9196 Cause the errors having to do with files that have the wrong architecture
9197 to be fatal.
9198 .IP "\fB\-bind_at_load\fR" 4
9199 .IX Item "-bind_at_load"
9200 Causes the output file to be marked such that the dynamic linker will
9201 bind all undefined references when the file is loaded or launched.
9202 .IP "\fB\-bundle\fR" 4
9203 .IX Item "-bundle"
9204 Produce a Mach-o bundle format file.
9205 See man \fIld\fR\|(1) for more information.
9206 .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
9207 .IX Item "-bundle_loader executable"
9208 This option specifies the \fIexecutable\fR that will be loading the build
9209 output file being linked.  See man \fIld\fR\|(1) for more information.
9210 .IP "\fB\-dynamiclib\fR" 4
9211 .IX Item "-dynamiclib"
9212 When passed this option, \s-1GCC\s0 will produce a dynamic library instead of
9213 an executable when linking, using the Darwin \fIlibtool\fR command.
9214 .IP "\fB\-force_cpusubtype_ALL\fR" 4
9215 .IX Item "-force_cpusubtype_ALL"
9216 This causes \s-1GCC\s0's output file to have the \fI\s-1ALL\s0\fR subtype, instead of
9217 one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
9218 .IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
9219 .IX Item "-allowable_client  client_name"
9220 .PD 0
9221 .IP "\fB\-client_name\fR" 4
9222 .IX Item "-client_name"
9223 .IP "\fB\-compatibility_version\fR" 4
9224 .IX Item "-compatibility_version"
9225 .IP "\fB\-current_version\fR" 4
9226 .IX Item "-current_version"
9227 .IP "\fB\-dead_strip\fR" 4
9228 .IX Item "-dead_strip"
9229 .IP "\fB\-dependency\-file\fR" 4
9230 .IX Item "-dependency-file"
9231 .IP "\fB\-dylib_file\fR" 4
9232 .IX Item "-dylib_file"
9233 .IP "\fB\-dylinker_install_name\fR" 4
9234 .IX Item "-dylinker_install_name"
9235 .IP "\fB\-dynamic\fR" 4
9236 .IX Item "-dynamic"
9237 .IP "\fB\-exported_symbols_list\fR" 4
9238 .IX Item "-exported_symbols_list"
9239 .IP "\fB\-filelist\fR" 4
9240 .IX Item "-filelist"
9241 .IP "\fB\-flat_namespace\fR" 4
9242 .IX Item "-flat_namespace"
9243 .IP "\fB\-force_flat_namespace\fR" 4
9244 .IX Item "-force_flat_namespace"
9245 .IP "\fB\-headerpad_max_install_names\fR" 4
9246 .IX Item "-headerpad_max_install_names"
9247 .IP "\fB\-image_base\fR" 4
9248 .IX Item "-image_base"
9249 .IP "\fB\-init\fR" 4
9250 .IX Item "-init"
9251 .IP "\fB\-install_name\fR" 4
9252 .IX Item "-install_name"
9253 .IP "\fB\-keep_private_externs\fR" 4
9254 .IX Item "-keep_private_externs"
9255 .IP "\fB\-multi_module\fR" 4
9256 .IX Item "-multi_module"
9257 .IP "\fB\-multiply_defined\fR" 4
9258 .IX Item "-multiply_defined"
9259 .IP "\fB\-multiply_defined_unused\fR" 4
9260 .IX Item "-multiply_defined_unused"
9261 .IP "\fB\-noall_load\fR" 4
9262 .IX Item "-noall_load"
9263 .IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
9264 .IX Item "-no_dead_strip_inits_and_terms"
9265 .IP "\fB\-nofixprebinding\fR" 4
9266 .IX Item "-nofixprebinding"
9267 .IP "\fB\-nomultidefs\fR" 4
9268 .IX Item "-nomultidefs"
9269 .IP "\fB\-noprebind\fR" 4
9270 .IX Item "-noprebind"
9271 .IP "\fB\-noseglinkedit\fR" 4
9272 .IX Item "-noseglinkedit"
9273 .IP "\fB\-pagezero_size\fR" 4
9274 .IX Item "-pagezero_size"
9275 .IP "\fB\-prebind\fR" 4
9276 .IX Item "-prebind"
9277 .IP "\fB\-prebind_all_twolevel_modules\fR" 4
9278 .IX Item "-prebind_all_twolevel_modules"
9279 .IP "\fB\-private_bundle\fR" 4
9280 .IX Item "-private_bundle"
9281 .IP "\fB\-read_only_relocs\fR" 4
9282 .IX Item "-read_only_relocs"
9283 .IP "\fB\-sectalign\fR" 4
9284 .IX Item "-sectalign"
9285 .IP "\fB\-sectobjectsymbols\fR" 4
9286 .IX Item "-sectobjectsymbols"
9287 .IP "\fB\-whyload\fR" 4
9288 .IX Item "-whyload"
9289 .IP "\fB\-seg1addr\fR" 4
9290 .IX Item "-seg1addr"
9291 .IP "\fB\-sectcreate\fR" 4
9292 .IX Item "-sectcreate"
9293 .IP "\fB\-sectobjectsymbols\fR" 4
9294 .IX Item "-sectobjectsymbols"
9295 .IP "\fB\-sectorder\fR" 4
9296 .IX Item "-sectorder"
9297 .IP "\fB\-segaddr\fR" 4
9298 .IX Item "-segaddr"
9299 .IP "\fB\-segs_read_only_addr\fR" 4
9300 .IX Item "-segs_read_only_addr"
9301 .IP "\fB\-segs_read_write_addr\fR" 4
9302 .IX Item "-segs_read_write_addr"
9303 .IP "\fB\-seg_addr_table\fR" 4
9304 .IX Item "-seg_addr_table"
9305 .IP "\fB\-seg_addr_table_filename\fR" 4
9306 .IX Item "-seg_addr_table_filename"
9307 .IP "\fB\-seglinkedit\fR" 4
9308 .IX Item "-seglinkedit"
9309 .IP "\fB\-segprot\fR" 4
9310 .IX Item "-segprot"
9311 .IP "\fB\-segs_read_only_addr\fR" 4
9312 .IX Item "-segs_read_only_addr"
9313 .IP "\fB\-segs_read_write_addr\fR" 4
9314 .IX Item "-segs_read_write_addr"
9315 .IP "\fB\-single_module\fR" 4
9316 .IX Item "-single_module"
9317 .IP "\fB\-static\fR" 4
9318 .IX Item "-static"
9319 .IP "\fB\-sub_library\fR" 4
9320 .IX Item "-sub_library"
9321 .IP "\fB\-sub_umbrella\fR" 4
9322 .IX Item "-sub_umbrella"
9323 .IP "\fB\-twolevel_namespace\fR" 4
9324 .IX Item "-twolevel_namespace"
9325 .IP "\fB\-umbrella\fR" 4
9326 .IX Item "-umbrella"
9327 .IP "\fB\-undefined\fR" 4
9328 .IX Item "-undefined"
9329 .IP "\fB\-unexported_symbols_list\fR" 4
9330 .IX Item "-unexported_symbols_list"
9331 .IP "\fB\-weak_reference_mismatches\fR" 4
9332 .IX Item "-weak_reference_mismatches"
9333 .IP "\fB\-whatsloaded\fR" 4
9334 .IX Item "-whatsloaded"
9335 .PD
9336 These options are passed to the Darwin linker.  The Darwin linker man page
9337 describes them in detail.
9338 .PP
9339 \fI\s-1DEC\s0 Alpha Options\fR
9340 .IX Subsection "DEC Alpha Options"
9341 .PP
9342 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
9343 .IP "\fB\-mno\-soft\-float\fR" 4
9344 .IX Item "-mno-soft-float"
9345 .PD 0
9346 .IP "\fB\-msoft\-float\fR" 4
9347 .IX Item "-msoft-float"
9348 .PD
9349 Use (do not use) the hardware floating-point instructions for
9350 floating-point operations.  When \fB\-msoft\-float\fR is specified,
9351 functions in \fIlibgcc.a\fR will be used to perform floating-point
9352 operations.  Unless they are replaced by routines that emulate the
9353 floating-point operations, or compiled in such a way as to call such
9354 emulations routines, these routines will issue floating-point
9355 operations.   If you are compiling for an Alpha without floating-point
9356 operations, you must ensure that the library is built so as not to call
9357 them.
9358 .Sp
9359 Note that Alpha implementations without floating-point operations are
9360 required to have floating-point registers.
9361 .IP "\fB\-mfp\-reg\fR" 4
9362 .IX Item "-mfp-reg"
9363 .PD 0
9364 .IP "\fB\-mno\-fp\-regs\fR" 4
9365 .IX Item "-mno-fp-regs"
9366 .PD
9367 Generate code that uses (does not use) the floating-point register set.
9368 \&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
9369 register set is not used, floating point operands are passed in integer
9370 registers as if they were integers and floating-point results are passed
9371 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
9372 so any function with a floating-point argument or return value called by code
9373 compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
9374 option.
9375 .Sp
9376 A typical use of this option is building a kernel that does not use,
9377 and hence need not save and restore, any floating-point registers.
9378 .IP "\fB\-mieee\fR" 4
9379 .IX Item "-mieee"
9380 The Alpha architecture implements floating-point hardware optimized for
9381 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating
9382 point standard.  However, for full compliance, software assistance is
9383 required.  This option generates code fully \s-1IEEE\s0 compliant code
9384 \&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
9385 If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
9386 defined during compilation.  The resulting code is less efficient but is
9387 able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
9388 values such as not-a-number and plus/minus infinity.  Other Alpha
9389 compilers call this option \fB\-ieee_with_no_inexact\fR.
9390 .IP "\fB\-mieee\-with\-inexact\fR" 4
9391 .IX Item "-mieee-with-inexact"
9392 This is like \fB\-mieee\fR except the generated code also maintains
9393 the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
9394 generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
9395 \&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
9396 macro.  On some Alpha implementations the resulting code may execute
9397 significantly slower than the code generated by default.  Since there is
9398 very little code that depends on the \fIinexact-flag\fR, you should
9399 normally not specify this option.  Other Alpha compilers call this
9400 option \fB\-ieee_with_inexact\fR.
9401 .IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
9402 .IX Item "-mfp-trap-mode=trap-mode"
9403 This option controls what floating-point related traps are enabled.
9404 Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
9405 The trap mode can be set to one of four values:
9406 .RS 4
9407 .IP "\fBn\fR" 4
9408 .IX Item "n"
9409 This is the default (normal) setting.  The only traps that are enabled
9410 are the ones that cannot be disabled in software (e.g., division by zero
9411 trap).
9412 .IP "\fBu\fR" 4
9413 .IX Item "u"
9414 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
9415 as well.
9416 .IP "\fBsu\fR" 4
9417 .IX Item "su"
9418 Like \fBu\fR, but the instructions are marked to be safe for software
9419 completion (see Alpha architecture manual for details).
9420 .IP "\fBsui\fR" 4
9421 .IX Item "sui"
9422 Like \fBsu\fR, but inexact traps are enabled as well.
9423 .RE
9424 .RS 4
9425 .RE
9426 .IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
9427 .IX Item "-mfp-rounding-mode=rounding-mode"
9428 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
9429 \&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
9430 of:
9431 .RS 4
9432 .IP "\fBn\fR" 4
9433 .IX Item "n"
9434 Normal \s-1IEEE\s0 rounding mode.  Floating point numbers are rounded towards
9435 the nearest machine number or towards the even machine number in case
9436 of a tie.
9437 .IP "\fBm\fR" 4
9438 .IX Item "m"
9439 Round towards minus infinity.
9440 .IP "\fBc\fR" 4
9441 .IX Item "c"
9442 Chopped rounding mode.  Floating point numbers are rounded towards zero.
9443 .IP "\fBd\fR" 4
9444 .IX Item "d"
9445 Dynamic rounding mode.  A field in the floating point control register
9446 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
9447 rounding mode in effect.  The C library initializes this register for
9448 rounding towards plus infinity.  Thus, unless your program modifies the
9449 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
9450 .RE
9451 .RS 4
9452 .RE
9453 .IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
9454 .IX Item "-mtrap-precision=trap-precision"
9455 In the Alpha architecture, floating point traps are imprecise.  This
9456 means without software assistance it is impossible to recover from a
9457 floating trap and program execution normally needs to be terminated.
9458 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
9459 in determining the exact location that caused a floating point trap.
9460 Depending on the requirements of an application, different levels of
9461 precisions can be selected:
9462 .RS 4
9463 .IP "\fBp\fR" 4
9464 .IX Item "p"
9465 Program precision.  This option is the default and means a trap handler
9466 can only identify which program caused a floating point exception.
9467 .IP "\fBf\fR" 4
9468 .IX Item "f"
9469 Function precision.  The trap handler can determine the function that
9470 caused a floating point exception.
9471 .IP "\fBi\fR" 4
9472 .IX Item "i"
9473 Instruction precision.  The trap handler can determine the exact
9474 instruction that caused a floating point exception.
9475 .RE
9476 .RS 4
9477 .Sp
9478 Other Alpha compilers provide the equivalent options called
9479 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
9480 .RE
9481 .IP "\fB\-mieee\-conformant\fR" 4
9482 .IX Item "-mieee-conformant"
9483 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
9484 use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
9485 \&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
9486 is to emit the line \fB.eflag 48\fR in the function prologue of the
9487 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
9488 IEEE-conformant math library routines will be linked in.
9489 .IP "\fB\-mbuild\-constants\fR" 4
9490 .IX Item "-mbuild-constants"
9491 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
9492 see if it can construct it from smaller constants in two or three
9493 instructions.  If it cannot, it will output the constant as a literal and
9494 generate code to load it from the data segment at runtime.
9495 .Sp
9496 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
9497 using code, even if it takes more instructions (the maximum is six).
9498 .Sp
9499 You would typically use this option to build a shared library dynamic
9500 loader.  Itself a shared library, it must relocate itself in memory
9501 before it can find the variables and constants in its own data segment.
9502 .IP "\fB\-malpha\-as\fR" 4
9503 .IX Item "-malpha-as"
9504 .PD 0
9505 .IP "\fB\-mgas\fR" 4
9506 .IX Item "-mgas"
9507 .PD
9508 Select whether to generate code to be assembled by the vendor-supplied
9509 assembler (\fB\-malpha\-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
9510 .IP "\fB\-mbwx\fR" 4
9511 .IX Item "-mbwx"
9512 .PD 0
9513 .IP "\fB\-mno\-bwx\fR" 4
9514 .IX Item "-mno-bwx"
9515 .IP "\fB\-mcix\fR" 4
9516 .IX Item "-mcix"
9517 .IP "\fB\-mno\-cix\fR" 4
9518 .IX Item "-mno-cix"
9519 .IP "\fB\-mfix\fR" 4
9520 .IX Item "-mfix"
9521 .IP "\fB\-mno\-fix\fR" 4
9522 .IX Item "-mno-fix"
9523 .IP "\fB\-mmax\fR" 4
9524 .IX Item "-mmax"
9525 .IP "\fB\-mno\-max\fR" 4
9526 .IX Item "-mno-max"
9527 .PD
9528 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
9529 \&\s-1CIX\s0, \s-1FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
9530 sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
9531 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
9532 .IP "\fB\-mfloat\-vax\fR" 4
9533 .IX Item "-mfloat-vax"
9534 .PD 0
9535 .IP "\fB\-mfloat\-ieee\fR" 4
9536 .IX Item "-mfloat-ieee"
9537 .PD
9538 Generate code that uses (does not use) \s-1VAX\s0 F and G floating point
9539 arithmetic instead of \s-1IEEE\s0 single and double precision.
9540 .IP "\fB\-mexplicit\-relocs\fR" 4
9541 .IX Item "-mexplicit-relocs"
9542 .PD 0
9543 .IP "\fB\-mno\-explicit\-relocs\fR" 4
9544 .IX Item "-mno-explicit-relocs"
9545 .PD
9546 Older Alpha assemblers provided no way to generate symbol relocations
9547 except via assembler macros.  Use of these macros does not allow
9548 optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
9549 supports a new syntax that allows the compiler to explicitly mark
9550 which relocations should apply to which instructions.  This option
9551 is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
9552 the assembler when it is built and sets the default accordingly.
9553 .IP "\fB\-msmall\-data\fR" 4
9554 .IX Item "-msmall-data"
9555 .PD 0
9556 .IP "\fB\-mlarge\-data\fR" 4
9557 .IX Item "-mlarge-data"
9558 .PD
9559 When \fB\-mexplicit\-relocs\fR is in effect, static data is
9560 accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
9561 is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
9562 (the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
9563 16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
9564 size of the small data area to 64KB, but allows the variables to be
9565 directly accessed via a single instruction.
9566 .Sp
9567 The default is \fB\-mlarge\-data\fR.  With this option the data area
9568 is limited to just below 2GB.  Programs that require more than 2GB of
9569 data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
9570 heap instead of in the program's data segment.
9571 .Sp
9572 When generating code for shared libraries, \fB\-fpic\fR implies
9573 \&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
9574 .IP "\fB\-msmall\-text\fR" 4
9575 .IX Item "-msmall-text"
9576 .PD 0
9577 .IP "\fB\-mlarge\-text\fR" 4
9578 .IX Item "-mlarge-text"
9579 .PD
9580 When \fB\-msmall\-text\fR is used, the compiler assumes that the
9581 code of the entire program (or shared library) fits in 4MB, and is
9582 thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
9583 is used, the compiler can assume that all local symbols share the
9584 same \f(CW$gp\fR value, and thus reduce the number of instructions
9585 required for a function call from 4 to 1.
9586 .Sp
9587 The default is \fB\-mlarge\-text\fR.
9588 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
9589 .IX Item "-mcpu=cpu_type"
9590 Set the instruction set and instruction scheduling parameters for
9591 machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
9592 style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
9593 parameters for the \s-1EV4\s0, \s-1EV5\s0 and \s-1EV6\s0 family of processors and will
9594 choose the default values for the instruction set from the processor
9595 you specify.  If you do not specify a processor type, \s-1GCC\s0 will default
9596 to the processor on which the compiler was built.
9597 .Sp
9598 Supported values for \fIcpu_type\fR are
9599 .RS 4
9600 .IP "\fBev4\fR" 4
9601 .IX Item "ev4"
9602 .PD 0
9603 .IP "\fBev45\fR" 4
9604 .IX Item "ev45"
9605 .IP "\fB21064\fR" 4
9606 .IX Item "21064"
9607 .PD
9608 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
9609 .IP "\fBev5\fR" 4
9610 .IX Item "ev5"
9611 .PD 0
9612 .IP "\fB21164\fR" 4
9613 .IX Item "21164"
9614 .PD
9615 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
9616 .IP "\fBev56\fR" 4
9617 .IX Item "ev56"
9618 .PD 0
9619 .IP "\fB21164a\fR" 4
9620 .IX Item "21164a"
9621 .PD
9622 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
9623 .IP "\fBpca56\fR" 4
9624 .IX Item "pca56"
9625 .PD 0
9626 .IP "\fB21164pc\fR" 4
9627 .IX Item "21164pc"
9628 .IP "\fB21164PC\fR" 4
9629 .IX Item "21164PC"
9630 .PD
9631 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
9632 .IP "\fBev6\fR" 4
9633 .IX Item "ev6"
9634 .PD 0
9635 .IP "\fB21264\fR" 4
9636 .IX Item "21264"
9637 .PD
9638 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9639 .IP "\fBev67\fR" 4
9640 .IX Item "ev67"
9641 .PD 0
9642 .IP "\fB21264a\fR" 4
9643 .IX Item "21264a"
9644 .PD
9645 Schedules as an \s-1EV6\s0 and supports the \s-1BWX\s0, \s-1CIX\s0, \s-1FIX\s0, and \s-1MAX\s0 extensions.
9646 .RE
9647 .RS 4
9648 .Sp
9649 Native Linux/GNU toolchains also support the value \fBnative\fR,
9650 which selects the best architecture option for the host processor.
9651 \&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
9652 the processor.
9653 .RE
9654 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
9655 .IX Item "-mtune=cpu_type"
9656 Set only the instruction scheduling parameters for machine type
9657 \&\fIcpu_type\fR.  The instruction set is not changed.
9658 .Sp
9659 Native Linux/GNU toolchains also support the value \fBnative\fR,
9660 which selects the best architecture option for the host processor.
9661 \&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
9662 the processor.
9663 .IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
9664 .IX Item "-mmemory-latency=time"
9665 Sets the latency the scheduler should assume for typical memory
9666 references as seen by the application.  This number is highly
9667 dependent on the memory access patterns used by the application
9668 and the size of the external cache on the machine.
9669 .Sp
9670 Valid options for \fItime\fR are
9671 .RS 4
9672 .IP "\fInumber\fR" 4
9673 .IX Item "number"
9674 A decimal number representing clock cycles.
9675 .IP "\fBL1\fR" 4
9676 .IX Item "L1"
9677 .PD 0
9678 .IP "\fBL2\fR" 4
9679 .IX Item "L2"
9680 .IP "\fBL3\fR" 4
9681 .IX Item "L3"
9682 .IP "\fBmain\fR" 4
9683 .IX Item "main"
9684 .PD
9685 The compiler contains estimates of the number of clock cycles for
9686 \&\*(L"typical\*(R" \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
9687 (also called Dcache, Scache, and Bcache), as well as to main memory.
9688 Note that L3 is only valid for \s-1EV5\s0.
9689 .RE
9690 .RS 4
9691 .RE
9692 .PP
9693 \fI\s-1DEC\s0 Alpha/VMS Options\fR
9694 .IX Subsection "DEC Alpha/VMS Options"
9695 .PP
9696 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha/VMS implementations:
9697 .IP "\fB\-mvms\-return\-codes\fR" 4
9698 .IX Item "-mvms-return-codes"
9699 Return \s-1VMS\s0 condition codes from main.  The default is to return \s-1POSIX\s0
9700 style condition (e.g. error) codes.
9701 .PP
9702 \fI\s-1FR30\s0 Options\fR
9703 .IX Subsection "FR30 Options"
9704 .PP
9705 These options are defined specifically for the \s-1FR30\s0 port.
9706 .IP "\fB\-msmall\-model\fR" 4
9707 .IX Item "-msmall-model"
9708 Use the small address space model.  This can produce smaller code, but
9709 it does assume that all symbolic values and addresses will fit into a
9710 20\-bit range.
9711 .IP "\fB\-mno\-lsim\fR" 4
9712 .IX Item "-mno-lsim"
9713 Assume that run-time support has been provided and so there is no need
9714 to include the simulator library (\fIlibsim.a\fR) on the linker
9715 command line.
9716 .PP
9717 \fI\s-1FRV\s0 Options\fR
9718 .IX Subsection "FRV Options"
9719 .IP "\fB\-mgpr\-32\fR" 4
9720 .IX Item "-mgpr-32"
9721 Only use the first 32 general purpose registers.
9722 .IP "\fB\-mgpr\-64\fR" 4
9723 .IX Item "-mgpr-64"
9724 Use all 64 general purpose registers.
9725 .IP "\fB\-mfpr\-32\fR" 4
9726 .IX Item "-mfpr-32"
9727 Use only the first 32 floating point registers.
9728 .IP "\fB\-mfpr\-64\fR" 4
9729 .IX Item "-mfpr-64"
9730 Use all 64 floating point registers
9731 .IP "\fB\-mhard\-float\fR" 4
9732 .IX Item "-mhard-float"
9733 Use hardware instructions for floating point operations.
9734 .IP "\fB\-msoft\-float\fR" 4
9735 .IX Item "-msoft-float"
9736 Use library routines for floating point operations.
9737 .IP "\fB\-malloc\-cc\fR" 4
9738 .IX Item "-malloc-cc"
9739 Dynamically allocate condition code registers.
9740 .IP "\fB\-mfixed\-cc\fR" 4
9741 .IX Item "-mfixed-cc"
9742 Do not try to dynamically allocate condition code registers, only
9743 use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
9744 .IP "\fB\-mdword\fR" 4
9745 .IX Item "-mdword"
9746 Change \s-1ABI\s0 to use double word insns.
9747 .IP "\fB\-mno\-dword\fR" 4
9748 .IX Item "-mno-dword"
9749 Do not use double word instructions.
9750 .IP "\fB\-mdouble\fR" 4
9751 .IX Item "-mdouble"
9752 Use floating point double instructions.
9753 .IP "\fB\-mno\-double\fR" 4
9754 .IX Item "-mno-double"
9755 Do not use floating point double instructions.
9756 .IP "\fB\-mmedia\fR" 4
9757 .IX Item "-mmedia"
9758 Use media instructions.
9759 .IP "\fB\-mno\-media\fR" 4
9760 .IX Item "-mno-media"
9761 Do not use media instructions.
9762 .IP "\fB\-mmuladd\fR" 4
9763 .IX Item "-mmuladd"
9764 Use multiply and add/subtract instructions.
9765 .IP "\fB\-mno\-muladd\fR" 4
9766 .IX Item "-mno-muladd"
9767 Do not use multiply and add/subtract instructions.
9768 .IP "\fB\-mfdpic\fR" 4
9769 .IX Item "-mfdpic"
9770 Select the \s-1FDPIC\s0 \s-1ABI\s0, that uses function descriptors to represent
9771 pointers to functions.  Without any PIC/PIE\-related options, it
9772 implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
9773 assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
9774 \&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
9775 are computed with 32 bits.
9776 With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
9777 .IP "\fB\-minline\-plt\fR" 4
9778 .IX Item "-minline-plt"
9779 Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
9780 not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
9781 It's enabled by default if optimizing for speed and compiling for
9782 shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
9783 optimization option such as \fB\-O3\fR or above is present in the
9784 command line.
9785 .IP "\fB\-mTLS\fR" 4
9786 .IX Item "-mTLS"
9787 Assume a large \s-1TLS\s0 segment when generating thread-local code.
9788 .IP "\fB\-mtls\fR" 4
9789 .IX Item "-mtls"
9790 Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
9791 .IP "\fB\-mgprel\-ro\fR" 4
9792 .IX Item "-mgprel-ro"
9793 Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC\s0 \s-1ABI\s0 for data
9794 that is known to be in read-only sections.  It's enabled by default,
9795 except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
9796 make the global offset table smaller, it trades 1 instruction for 4.
9797 With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
9798 one of which may be shared by multiple symbols, and it avoids the need
9799 for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
9800 win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
9801 .IP "\fB\-multilib\-library\-pic\fR" 4
9802 .IX Item "-multilib-library-pic"
9803 Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
9804 \&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
9805 \&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
9806 it explicitly.
9807 .IP "\fB\-mlinked\-fp\fR" 4
9808 .IX Item "-mlinked-fp"
9809 Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
9810 a stack frame is allocated.  This option is enabled by default and can
9811 be disabled with \fB\-mno\-linked\-fp\fR.
9812 .IP "\fB\-mlong\-calls\fR" 4
9813 .IX Item "-mlong-calls"
9814 Use indirect addressing to call functions outside the current
9815 compilation unit.  This allows the functions to be placed anywhere
9816 within the 32\-bit address space.
9817 .IP "\fB\-malign\-labels\fR" 4
9818 .IX Item "-malign-labels"
9819 Try to align labels to an 8\-byte boundary by inserting nops into the
9820 previous packet.  This option only has an effect when \s-1VLIW\s0 packing
9821 is enabled.  It doesn't create new packets; it merely adds nops to
9822 existing ones.
9823 .IP "\fB\-mlibrary\-pic\fR" 4
9824 .IX Item "-mlibrary-pic"
9825 Generate position-independent \s-1EABI\s0 code.
9826 .IP "\fB\-macc\-4\fR" 4
9827 .IX Item "-macc-4"
9828 Use only the first four media accumulator registers.
9829 .IP "\fB\-macc\-8\fR" 4
9830 .IX Item "-macc-8"
9831 Use all eight media accumulator registers.
9832 .IP "\fB\-mpack\fR" 4
9833 .IX Item "-mpack"
9834 Pack \s-1VLIW\s0 instructions.
9835 .IP "\fB\-mno\-pack\fR" 4
9836 .IX Item "-mno-pack"
9837 Do not pack \s-1VLIW\s0 instructions.
9838 .IP "\fB\-mno\-eflags\fR" 4
9839 .IX Item "-mno-eflags"
9840 Do not mark \s-1ABI\s0 switches in e_flags.
9841 .IP "\fB\-mcond\-move\fR" 4
9842 .IX Item "-mcond-move"
9843 Enable the use of conditional-move instructions (default).
9844 .Sp
9845 This switch is mainly for debugging the compiler and will likely be removed
9846 in a future version.
9847 .IP "\fB\-mno\-cond\-move\fR" 4
9848 .IX Item "-mno-cond-move"
9849 Disable the use of conditional-move instructions.
9850 .Sp
9851 This switch is mainly for debugging the compiler and will likely be removed
9852 in a future version.
9853 .IP "\fB\-mscc\fR" 4
9854 .IX Item "-mscc"
9855 Enable the use of conditional set instructions (default).
9856 .Sp
9857 This switch is mainly for debugging the compiler and will likely be removed
9858 in a future version.
9859 .IP "\fB\-mno\-scc\fR" 4
9860 .IX Item "-mno-scc"
9861 Disable the use of conditional set instructions.
9862 .Sp
9863 This switch is mainly for debugging the compiler and will likely be removed
9864 in a future version.
9865 .IP "\fB\-mcond\-exec\fR" 4
9866 .IX Item "-mcond-exec"
9867 Enable the use of conditional execution (default).
9868 .Sp
9869 This switch is mainly for debugging the compiler and will likely be removed
9870 in a future version.
9871 .IP "\fB\-mno\-cond\-exec\fR" 4
9872 .IX Item "-mno-cond-exec"
9873 Disable the use of conditional execution.
9874 .Sp
9875 This switch is mainly for debugging the compiler and will likely be removed
9876 in a future version.
9877 .IP "\fB\-mvliw\-branch\fR" 4
9878 .IX Item "-mvliw-branch"
9879 Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
9880 .Sp
9881 This switch is mainly for debugging the compiler and will likely be removed
9882 in a future version.
9883 .IP "\fB\-mno\-vliw\-branch\fR" 4
9884 .IX Item "-mno-vliw-branch"
9885 Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
9886 .Sp
9887 This switch is mainly for debugging the compiler and will likely be removed
9888 in a future version.
9889 .IP "\fB\-mmulti\-cond\-exec\fR" 4
9890 .IX Item "-mmulti-cond-exec"
9891 Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
9892 (default).
9893 .Sp
9894 This switch is mainly for debugging the compiler and will likely be removed
9895 in a future version.
9896 .IP "\fB\-mno\-multi\-cond\-exec\fR" 4
9897 .IX Item "-mno-multi-cond-exec"
9898 Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
9899 .Sp
9900 This switch is mainly for debugging the compiler and will likely be removed
9901 in a future version.
9902 .IP "\fB\-mnested\-cond\-exec\fR" 4
9903 .IX Item "-mnested-cond-exec"
9904 Enable nested conditional execution optimizations (default).
9905 .Sp
9906 This switch is mainly for debugging the compiler and will likely be removed
9907 in a future version.
9908 .IP "\fB\-mno\-nested\-cond\-exec\fR" 4
9909 .IX Item "-mno-nested-cond-exec"
9910 Disable nested conditional execution optimizations.
9911 .Sp
9912 This switch is mainly for debugging the compiler and will likely be removed
9913 in a future version.
9914 .IP "\fB\-moptimize\-membar\fR" 4
9915 .IX Item "-moptimize-membar"
9916 This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
9917 compiler generated code.  It is enabled by default.
9918 .IP "\fB\-mno\-optimize\-membar\fR" 4
9919 .IX Item "-mno-optimize-membar"
9920 This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
9921 instructions from the generated code.
9922 .IP "\fB\-mtomcat\-stats\fR" 4
9923 .IX Item "-mtomcat-stats"
9924 Cause gas to print out tomcat statistics.
9925 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
9926 .IX Item "-mcpu=cpu"
9927 Select the processor type for which to generate code.  Possible values are
9928 \&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
9929 \&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
9930 .PP
9931 \fIGNU/Linux Options\fR
9932 .IX Subsection "GNU/Linux Options"
9933 .PP
9934 These \fB\-m\fR options are defined for GNU/Linux targets:
9935 .IP "\fB\-mglibc\fR" 4
9936 .IX Item "-mglibc"
9937 Use the \s-1GNU\s0 C library instead of uClibc.  This is the default except
9938 on \fB*\-*\-linux\-*uclibc*\fR targets.
9939 .IP "\fB\-muclibc\fR" 4
9940 .IX Item "-muclibc"
9941 Use uClibc instead of the \s-1GNU\s0 C library.  This is the default on
9942 \&\fB*\-*\-linux\-*uclibc*\fR targets.
9943 .PP
9944 \fIH8/300 Options\fR
9945 .IX Subsection "H8/300 Options"
9946 .PP
9947 These \fB\-m\fR options are defined for the H8/300 implementations:
9948 .IP "\fB\-mrelax\fR" 4
9949 .IX Item "-mrelax"
9950 Shorten some address references at link time, when possible; uses the
9951 linker option \fB\-relax\fR.  
9952 .IP "\fB\-mh\fR" 4
9953 .IX Item "-mh"
9954 Generate code for the H8/300H.
9955 .IP "\fB\-ms\fR" 4
9956 .IX Item "-ms"
9957 Generate code for the H8S.
9958 .IP "\fB\-mn\fR" 4
9959 .IX Item "-mn"
9960 Generate code for the H8S and H8/300H in the normal mode.  This switch
9961 must be used either with \fB\-mh\fR or \fB\-ms\fR.
9962 .IP "\fB\-ms2600\fR" 4
9963 .IX Item "-ms2600"
9964 Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
9965 .IP "\fB\-mint32\fR" 4
9966 .IX Item "-mint32"
9967 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
9968 .IP "\fB\-malign\-300\fR" 4
9969 .IX Item "-malign-300"
9970 On the H8/300H and H8S, use the same alignment rules as for the H8/300.
9971 The default for the H8/300H and H8S is to align longs and floats on 4
9972 byte boundaries.
9973 \&\fB\-malign\-300\fR causes them to be aligned on 2 byte boundaries.
9974 This option has no effect on the H8/300.
9975 .PP
9976 \fI\s-1HPPA\s0 Options\fR
9977 .IX Subsection "HPPA Options"
9978 .PP
9979 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
9980 .IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
9981 .IX Item "-march=architecture-type"
9982 Generate code for the specified architecture.  The choices for
9983 \&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
9984 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
9985 \&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
9986 architecture option for your machine.  Code compiled for lower numbered
9987 architectures will run on higher numbered architectures, but not the
9988 other way around.
9989 .IP "\fB\-mpa\-risc\-1\-0\fR" 4
9990 .IX Item "-mpa-risc-1-0"
9991 .PD 0
9992 .IP "\fB\-mpa\-risc\-1\-1\fR" 4
9993 .IX Item "-mpa-risc-1-1"
9994 .IP "\fB\-mpa\-risc\-2\-0\fR" 4
9995 .IX Item "-mpa-risc-2-0"
9996 .PD
9997 Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
9998 .IP "\fB\-mbig\-switch\fR" 4
9999 .IX Item "-mbig-switch"
10000 Generate code suitable for big switch tables.  Use this option only if
10001 the assembler/linker complain about out of range branches within a switch
10002 table.
10003 .IP "\fB\-mjump\-in\-delay\fR" 4
10004 .IX Item "-mjump-in-delay"
10005 Fill delay slots of function calls with unconditional jump instructions
10006 by modifying the return pointer for the function call to be the target
10007 of the conditional jump.
10008 .IP "\fB\-mdisable\-fpregs\fR" 4
10009 .IX Item "-mdisable-fpregs"
10010 Prevent floating point registers from being used in any manner.  This is
10011 necessary for compiling kernels which perform lazy context switching of
10012 floating point registers.  If you use this option and attempt to perform
10013 floating point operations, the compiler will abort.
10014 .IP "\fB\-mdisable\-indexing\fR" 4
10015 .IX Item "-mdisable-indexing"
10016 Prevent the compiler from using indexing address modes.  This avoids some
10017 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
10018 .IP "\fB\-mno\-space\-regs\fR" 4
10019 .IX Item "-mno-space-regs"
10020 Generate code that assumes the target has no space registers.  This allows
10021 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
10022 .Sp
10023 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
10024 .IP "\fB\-mfast\-indirect\-calls\fR" 4
10025 .IX Item "-mfast-indirect-calls"
10026 Generate code that assumes calls never cross space boundaries.  This
10027 allows \s-1GCC\s0 to emit code which performs faster indirect calls.
10028 .Sp
10029 This option will not work in the presence of shared libraries or nested
10030 functions.
10031 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
10032 .IX Item "-mfixed-range=register-range"
10033 Generate code treating the given register range as fixed registers.
10034 A fixed register is one that the register allocator can not use.  This is
10035 useful when compiling kernel code.  A register range is specified as
10036 two registers separated by a dash.  Multiple register ranges can be
10037 specified separated by a comma.
10038 .IP "\fB\-mlong\-load\-store\fR" 4
10039 .IX Item "-mlong-load-store"
10040 Generate 3\-instruction load and store sequences as sometimes required by
10041 the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
10042 the \s-1HP\s0 compilers.
10043 .IP "\fB\-mportable\-runtime\fR" 4
10044 .IX Item "-mportable-runtime"
10045 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
10046 .IP "\fB\-mgas\fR" 4
10047 .IX Item "-mgas"
10048 Enable the use of assembler directives only \s-1GAS\s0 understands.
10049 .IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
10050 .IX Item "-mschedule=cpu-type"
10051 Schedule code according to the constraints for the machine type
10052 \&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
10053 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
10054 to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
10055 proper scheduling option for your machine.  The default scheduling is
10056 \&\fB8000\fR.
10057 .IP "\fB\-mlinker\-opt\fR" 4
10058 .IX Item "-mlinker-opt"
10059 Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
10060 debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
10061 linkers in which they give bogus error messages when linking some programs.
10062 .IP "\fB\-msoft\-float\fR" 4
10063 .IX Item "-msoft-float"
10064 Generate output containing library calls for floating point.
10065 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
10066 targets.  Normally the facilities of the machine's usual C compiler are
10067 used, but this cannot be done directly in cross\-compilation.  You must make
10068 your own arrangements to provide suitable library functions for
10069 cross\-compilation.
10070 .Sp
10071 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
10072 therefore, it is only useful if you compile \fIall\fR of a program with
10073 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
10074 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
10075 this to work.
10076 .IP "\fB\-msio\fR" 4
10077 .IX Item "-msio"
10078 Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO\s0.  The default is
10079 \&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
10080 \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO\s0.  These
10081 options are available under HP-UX and \s-1HI\-UX\s0.
10082 .IP "\fB\-mgnu\-ld\fR" 4
10083 .IX Item "-mgnu-ld"
10084 Use \s-1GNU\s0 ld specific options.  This passes \fB\-shared\fR to ld when
10085 building a shared library.  It is the default when \s-1GCC\s0 is configured,
10086 explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
10087 have any affect on which ld is called, it only changes what parameters
10088 are passed to that ld.  The ld that is called is determined by the
10089 \&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
10090 finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
10091 using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
10092 on the 64 bit HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
10093 .IP "\fB\-mhp\-ld\fR" 4
10094 .IX Item "-mhp-ld"
10095 Use \s-1HP\s0 ld specific options.  This passes \fB\-b\fR to ld when building
10096 a shared library and passes \fB+Accept TypeMismatch\fR to ld on all
10097 links.  It is the default when \s-1GCC\s0 is configured, explicitly or
10098 implicitly, with the \s-1HP\s0 linker.  This option does not have any affect on
10099 which ld is called, it only changes what parameters are passed to that
10100 ld.  The ld that is called is determined by the \fB\-\-with\-ld\fR
10101 configure option, \s-1GCC\s0's program search path, and finally by the user's
10102 \&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
10103 `gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64 bit
10104 HP-UX \s-1GCC\s0, i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
10105 .IP "\fB\-mlong\-calls\fR" 4
10106 .IX Item "-mlong-calls"
10107 Generate code that uses long call sequences.  This ensures that a call
10108 is always able to reach linker generated stubs.  The default is to generate
10109 long calls only when the distance from the call site to the beginning
10110 of the function or translation unit, as the case may be, exceeds a
10111 predefined limit set by the branch type being used.  The limits for
10112 normal calls are 7,600,000 and 240,000 bytes, respectively for the
10113 \&\s-1PA\s0 2.0 and \s-1PA\s0 1.X architectures.  Sibcalls are always limited at
10114 240,000 bytes.
10115 .Sp
10116 Distances are measured from the beginning of functions when using the
10117 \&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
10118 and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
10119 the \s-1SOM\s0 linker.
10120 .Sp
10121 It is normally not desirable to use this option as it will degrade
10122 performance.  However, it may be useful in large applications,
10123 particularly when partial linking is used to build the application.
10124 .Sp
10125 The types of long calls used depends on the capabilities of the
10126 assembler and linker, and the type of code being generated.  The
10127 impact on systems that support long absolute calls, and long pic
10128 symbol-difference or pc-relative calls should be relatively small.
10129 However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
10130 and it is quite long.
10131 .IP "\fB\-munix=\fR\fIunix-std\fR" 4
10132 .IX Item "-munix=unix-std"
10133 Generate compiler predefines and select a startfile for the specified
10134 \&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
10135 and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
10136 is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
10137 11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
10138 \&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
10139 and later.
10140 .Sp
10141 \&\fB\-munix=93\fR provides the same predefines as \s-1GCC\s0 3.3 and 3.4.
10142 \&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
10143 and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
10144 \&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
10145 \&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
10146 \&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
10147 .Sp
10148 It is \fIimportant\fR to note that this option changes the interfaces
10149 for various library routines.  It also affects the operational behavior
10150 of the C library.  Thus, \fIextreme\fR care is needed in using this
10151 option.
10152 .Sp
10153 Library code that is intended to operate with more than one \s-1UNIX\s0
10154 standard must test, set and restore the variable \fI_\|_xpg4_extended_mask\fR
10155 as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
10156 .IP "\fB\-nolibdld\fR" 4
10157 .IX Item "-nolibdld"
10158 Suppress the generation of link options to search libdld.sl when the
10159 \&\fB\-static\fR option is specified on HP-UX 10 and later.
10160 .IP "\fB\-static\fR" 4
10161 .IX Item "-static"
10162 The HP-UX implementation of setlocale in libc has a dependency on
10163 libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
10164 when the \fB\-static\fR option is specified, special link options
10165 are needed to resolve this dependency.
10166 .Sp
10167 On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
10168 link with libdld.sl when the \fB\-static\fR option is specified.
10169 This causes the resulting binary to be dynamic.  On the 64\-bit port,
10170 the linkers generate dynamic binaries by default in any case.  The
10171 \&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
10172 adding these link options.
10173 .IP "\fB\-threads\fR" 4
10174 .IX Item "-threads"
10175 Add support for multithreading with the \fIdce thread\fR library
10176 under \s-1HP\-UX\s0.  This option sets flags for both the preprocessor and
10177 linker.
10178 .PP
10179 \fIIntel 386 and \s-1AMD\s0 x86\-64 Options\fR
10180 .IX Subsection "Intel 386 and AMD x86-64 Options"
10181 .PP
10182 These \fB\-m\fR options are defined for the i386 and x86\-64 family of
10183 computers:
10184 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10185 .IX Item "-mtune=cpu-type"
10186 Tune to \fIcpu-type\fR everything applicable about the generated code, except
10187 for the \s-1ABI\s0 and the set of available instructions.  The choices for
10188 \&\fIcpu-type\fR are:
10189 .RS 4
10190 .IP "\fIgeneric\fR" 4
10191 .IX Item "generic"
10192 Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
10193 If you know the \s-1CPU\s0 on which your code will run, then you should use
10194 the corresponding \fB\-mtune\fR option instead of
10195 \&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
10196 of your application will have, then you should use this option.
10197 .Sp
10198 As new processors are deployed in the marketplace, the behavior of this
10199 option will change.  Therefore, if you upgrade to a newer version of
10200 \&\s-1GCC\s0, the code generated option will change to reflect the processors
10201 that were most common when that version of \s-1GCC\s0 was released.
10202 .Sp
10203 There is no \fB\-march=generic\fR option because \fB\-march\fR
10204 indicates the instruction set the compiler can use, and there is no
10205 generic instruction set applicable to all processors.  In contrast,
10206 \&\fB\-mtune\fR indicates the processor (or, in this case, collection of
10207 processors) for which the code is optimized.
10208 .IP "\fInative\fR" 4
10209 .IX Item "native"
10210 This selects the \s-1CPU\s0 to tune for at compilation time by determining
10211 the processor type of the compiling machine.  Using \fB\-mtune=native\fR
10212 will produce code optimized for the local machine under the constraints
10213 of the selected instruction set.  Using \fB\-march=native\fR will
10214 enable all instruction subsets supported by the local machine (hence
10215 the result might not run on different machines).
10216 .IP "\fIi386\fR" 4
10217 .IX Item "i386"
10218 Original Intel's i386 \s-1CPU\s0.
10219 .IP "\fIi486\fR" 4
10220 .IX Item "i486"
10221 Intel's i486 \s-1CPU\s0.  (No scheduling is implemented for this chip.)
10222 .IP "\fIi586, pentium\fR" 4
10223 .IX Item "i586, pentium"
10224 Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
10225 .IP "\fIpentium-mmx\fR" 4
10226 .IX Item "pentium-mmx"
10227 Intel PentiumMMX \s-1CPU\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
10228 .IP "\fIpentiumpro\fR" 4
10229 .IX Item "pentiumpro"
10230 Intel PentiumPro \s-1CPU\s0.
10231 .IP "\fIi686\fR" 4
10232 .IX Item "i686"
10233 Same as \f(CW\*(C`generic\*(C'\fR, but when used as \f(CW\*(C`march\*(C'\fR option, PentiumPro
10234 instruction set will be used, so the code will run on all i686 family chips.
10235 .IP "\fIpentium2\fR" 4
10236 .IX Item "pentium2"
10237 Intel Pentium2 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 instruction set support.
10238 .IP "\fIpentium3, pentium3m\fR" 4
10239 .IX Item "pentium3, pentium3m"
10240 Intel Pentium3 \s-1CPU\s0 based on PentiumPro core with \s-1MMX\s0 and \s-1SSE\s0 instruction set
10241 support.
10242 .IP "\fIpentium-m\fR" 4
10243 .IX Item "pentium-m"
10244 Low power version of Intel Pentium3 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set
10245 support.  Used by Centrino notebooks.
10246 .IP "\fIpentium4, pentium4m\fR" 4
10247 .IX Item "pentium4, pentium4m"
10248 Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0 and \s-1SSE2\s0 instruction set support.
10249 .IP "\fIprescott\fR" 4
10250 .IX Item "prescott"
10251 Improved version of Intel Pentium4 \s-1CPU\s0 with \s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0 and \s-1SSE3\s0 instruction
10252 set support.
10253 .IP "\fInocona\fR" 4
10254 .IX Item "nocona"
10255 Improved version of Intel Pentium4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX\s0, \s-1SSE\s0,
10256 \&\s-1SSE2\s0 and \s-1SSE3\s0 instruction set support.
10257 .IP "\fIcore2\fR" 4
10258 .IX Item "core2"
10259 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
10260 instruction set support.
10261 .IP "\fIk6\fR" 4
10262 .IX Item "k6"
10263 \&\s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 instruction set support.
10264 .IP "\fIk6\-2, k6\-3\fR" 4
10265 .IX Item "k6-2, k6-3"
10266 Improved versions of \s-1AMD\s0 K6 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10267 .IP "\fIathlon, athlon-tbird\fR" 4
10268 .IX Item "athlon, athlon-tbird"
10269 \&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and \s-1SSE\s0 prefetch instructions
10270 support.
10271 .IP "\fIathlon\-4, athlon\-xp, athlon-mp\fR" 4
10272 .IX Item "athlon-4, athlon-xp, athlon-mp"
10273 Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX\s0, 3dNOW!, enhanced 3dNOW! and full \s-1SSE\s0
10274 instruction set support.
10275 .IP "\fIk8, opteron, athlon64, athlon-fx\fR" 4
10276 .IX Item "k8, opteron, athlon64, athlon-fx"
10277 \&\s-1AMD\s0 K8 core based CPUs with x86\-64 instruction set support.  (This supersets
10278 \&\s-1MMX\s0, \s-1SSE\s0, \s-1SSE2\s0, 3dNOW!, enhanced 3dNOW! and 64\-bit instruction set extensions.)
10279 .IP "\fIk8\-sse3, opteron\-sse3, athlon64\-sse3\fR" 4
10280 .IX Item "k8-sse3, opteron-sse3, athlon64-sse3"
10281 Improved versions of k8, opteron and athlon64 with \s-1SSE3\s0 instruction set support.
10282 .IP "\fIamdfam10, barcelona\fR" 4
10283 .IX Item "amdfam10, barcelona"
10284 \&\s-1AMD\s0 Family 10h core based CPUs with x86\-64 instruction set support.  (This
10285 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
10286 instruction set extensions.)
10287 .IP "\fIwinchip\-c6\fR" 4
10288 .IX Item "winchip-c6"
10289 \&\s-1IDT\s0 Winchip C6 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 instruction
10290 set support.
10291 .IP "\fIwinchip2\fR" 4
10292 .IX Item "winchip2"
10293 \&\s-1IDT\s0 Winchip2 \s-1CPU\s0, dealt in same way as i486 with additional \s-1MMX\s0 and 3dNOW!
10294 instruction set support.
10295 .IP "\fIc3\fR" 4
10296 .IX Item "c3"
10297 Via C3 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.  (No scheduling is
10298 implemented for this chip.)
10299 .IP "\fIc3\-2\fR" 4
10300 .IX Item "c3-2"
10301 Via C3\-2 \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.  (No scheduling is
10302 implemented for this chip.)
10303 .IP "\fIgeode\fR" 4
10304 .IX Item "geode"
10305 Embedded \s-1AMD\s0 \s-1CPU\s0 with \s-1MMX\s0 and 3dNOW! instruction set support.
10306 .RE
10307 .RS 4
10308 .Sp
10309 While picking a specific \fIcpu-type\fR will schedule things appropriately
10310 for that particular chip, the compiler will not generate any code that
10311 does not run on the i386 without the \fB\-march=\fR\fIcpu-type\fR option
10312 being used.
10313 .RE
10314 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
10315 .IX Item "-march=cpu-type"
10316 Generate instructions for the machine type \fIcpu-type\fR.  The choices
10317 for \fIcpu-type\fR are the same as for \fB\-mtune\fR.  Moreover,
10318 specifying \fB\-march=\fR\fIcpu-type\fR implies \fB\-mtune=\fR\fIcpu-type\fR.
10319 .IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
10320 .IX Item "-mcpu=cpu-type"
10321 A deprecated synonym for \fB\-mtune\fR.
10322 .IP "\fB\-mfpmath=\fR\fIunit\fR" 4
10323 .IX Item "-mfpmath=unit"
10324 Generate floating point arithmetics for selected unit \fIunit\fR.  The choices
10325 for \fIunit\fR are:
10326 .RS 4
10327 .IP "\fB387\fR" 4
10328 .IX Item "387"
10329 Use the standard 387 floating point coprocessor present majority of chips and
10330 emulated otherwise.  Code compiled with this option will run almost everywhere.
10331 The temporary results are computed in 80bit precision instead of precision
10332 specified by the type resulting in slightly different results compared to most
10333 of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
10334 .Sp
10335 This is the default choice for i386 compiler.
10336 .IP "\fBsse\fR" 4
10337 .IX Item "sse"
10338 Use scalar floating point instructions present in the \s-1SSE\s0 instruction set.
10339 This instruction set is supported by Pentium3 and newer chips, in the \s-1AMD\s0 line
10340 by Athlon\-4, Athlon-xp and Athlon-mp chips.  The earlier version of \s-1SSE\s0
10341 instruction set supports only single precision arithmetics, thus the double and
10342 extended precision arithmetics is still done using 387.  Later version, present
10343 only in Pentium4 and the future \s-1AMD\s0 x86\-64 chips supports double precision
10344 arithmetics too.
10345 .Sp
10346 For the i386 compiler, you need to use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
10347 or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
10348 effective.  For the x86\-64 compiler, these extensions are enabled by default.
10349 .Sp
10350 The resulting code should be considerably faster in the majority of cases and avoid
10351 the numerical instability problems of 387 code, but may break some existing
10352 code that expects temporaries to be 80bit.
10353 .Sp
10354 This is the default choice for the x86\-64 compiler.
10355 .IP "\fBsse,387\fR" 4
10356 .IX Item "sse,387"
10357 .PD 0
10358 .IP "\fBsse+387\fR" 4
10359 .IX Item "sse+387"
10360 .IP "\fBboth\fR" 4
10361 .IX Item "both"
10362 .PD
10363 Attempt to utilize both instruction sets at once.  This effectively double the
10364 amount of available registers and on chips with separate execution units for
10365 387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
10366 still experimental, because the \s-1GCC\s0 register allocator does not model separate
10367 functional units well resulting in instable performance.
10368 .RE
10369 .RS 4
10370 .RE
10371 .IP "\fB\-masm=\fR\fIdialect\fR" 4
10372 .IX Item "-masm=dialect"
10373 Output asm instructions using selected \fIdialect\fR.  Supported
10374 choices are \fBintel\fR or \fBatt\fR (the default one).  Darwin does
10375 not support \fBintel\fR.
10376 .IP "\fB\-mieee\-fp\fR" 4
10377 .IX Item "-mieee-fp"
10378 .PD 0
10379 .IP "\fB\-mno\-ieee\-fp\fR" 4
10380 .IX Item "-mno-ieee-fp"
10381 .PD
10382 Control whether or not the compiler uses \s-1IEEE\s0 floating point
10383 comparisons.  These handle correctly the case where the result of a
10384 comparison is unordered.
10385 .IP "\fB\-msoft\-float\fR" 4
10386 .IX Item "-msoft-float"
10387 Generate output containing library calls for floating point.
10388 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
10389 Normally the facilities of the machine's usual C compiler are used, but
10390 this can't be done directly in cross\-compilation.  You must make your
10391 own arrangements to provide suitable library functions for
10392 cross\-compilation.
10393 .Sp
10394 On machines where a function returns floating point results in the 80387
10395 register stack, some floating point opcodes may be emitted even if
10396 \&\fB\-msoft\-float\fR is used.
10397 .IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
10398 .IX Item "-mno-fp-ret-in-387"
10399 Do not use the \s-1FPU\s0 registers for return values of functions.
10400 .Sp
10401 The usual calling convention has functions return values of types
10402 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
10403 is no \s-1FPU\s0.  The idea is that the operating system should emulate
10404 an \s-1FPU\s0.
10405 .Sp
10406 The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
10407 in ordinary \s-1CPU\s0 registers instead.
10408 .IP "\fB\-mno\-fancy\-math\-387\fR" 4
10409 .IX Item "-mno-fancy-math-387"
10410 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
10411 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
10412 generating those instructions.  This option is the default on FreeBSD,
10413 OpenBSD and NetBSD.  This option is overridden when \fB\-march\fR
10414 indicates that the target cpu will always have an \s-1FPU\s0 and so the
10415 instruction will not need emulation.  As of revision 2.6.1, these
10416 instructions are not generated unless you also use the
10417 \&\fB\-funsafe\-math\-optimizations\fR switch.
10418 .IP "\fB\-malign\-double\fR" 4
10419 .IX Item "-malign-double"
10420 .PD 0
10421 .IP "\fB\-mno\-align\-double\fR" 4
10422 .IX Item "-mno-align-double"
10423 .PD
10424 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
10425 \&\f(CW\*(C`long long\*(C'\fR variables on a two word boundary or a one word
10426 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two word boundary will
10427 produce code that runs somewhat faster on a \fBPentium\fR at the
10428 expense of more memory.
10429 .Sp
10430 On x86\-64, \fB\-malign\-double\fR is enabled by default.
10431 .Sp
10432 \&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
10433 structures containing the above types will be aligned differently than
10434 the published application binary interface specifications for the 386
10435 and will not be binary compatible with structures in code compiled
10436 without that switch.
10437 .IP "\fB\-m96bit\-long\-double\fR" 4
10438 .IX Item "-m96bit-long-double"
10439 .PD 0
10440 .IP "\fB\-m128bit\-long\-double\fR" 4
10441 .IX Item "-m128bit-long-double"
10442 .PD
10443 These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The i386
10444 application binary interface specifies the size to be 96 bits,
10445 so \fB\-m96bit\-long\-double\fR is the default in 32 bit mode.
10446 .Sp
10447 Modern architectures (Pentium and newer) would prefer \f(CW\*(C`long double\*(C'\fR
10448 to be aligned to an 8 or 16 byte boundary.  In arrays or structures
10449 conforming to the \s-1ABI\s0, this would not be possible.  So specifying a
10450 \&\fB\-m128bit\-long\-double\fR will align \f(CW\*(C`long double\*(C'\fR
10451 to a 16 byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
10452 32 bit zero.
10453 .Sp
10454 In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
10455 its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is to be aligned on 16 byte boundary.
10456 .Sp
10457 Notice that neither of these options enable any extra precision over the x87
10458 standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
10459 .Sp
10460 \&\fBWarning:\fR if you override the default value for your target \s-1ABI\s0, the
10461 structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables will change
10462 their size as well as function calling convention for function taking
10463 \&\f(CW\*(C`long double\*(C'\fR will be modified.  Hence they will not be binary
10464 compatible with arrays or structures in code compiled without that switch.
10465 .IP "\fB\-mlarge\-data\-threshold=\fR\fInumber\fR" 4
10466 .IX Item "-mlarge-data-threshold=number"
10467 When \fB\-mcmodel=medium\fR is specified, the data greater than
10468 \&\fIthreshold\fR are placed in large data section.  This value must be the
10469 same across all object linked into the binary and defaults to 65535.
10470 .IP "\fB\-mrtd\fR" 4
10471 .IX Item "-mrtd"
10472 Use a different function-calling convention, in which functions that
10473 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
10474 instruction, which pops their arguments while returning.  This saves one
10475 instruction in the caller since there is no need to pop the arguments
10476 there.
10477 .Sp
10478 You can specify that an individual function is called with this calling
10479 sequence with the function attribute \fBstdcall\fR.  You can also
10480 override the \fB\-mrtd\fR option by using the function attribute
10481 \&\fBcdecl\fR.  
10482 .Sp
10483 \&\fBWarning:\fR this calling convention is incompatible with the one
10484 normally used on Unix, so you cannot use it if you need to call
10485 libraries compiled with the Unix compiler.
10486 .Sp
10487 Also, you must provide function prototypes for all functions that
10488 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
10489 otherwise incorrect code will be generated for calls to those
10490 functions.
10491 .Sp
10492 In addition, seriously incorrect code will result if you call a
10493 function with too many arguments.  (Normally, extra arguments are
10494 harmlessly ignored.)
10495 .IP "\fB\-mregparm=\fR\fInum\fR" 4
10496 .IX Item "-mregparm=num"
10497 Control how many registers are used to pass integer arguments.  By
10498 default, no registers are used to pass arguments, and at most 3
10499 registers can be used.  You can control this behavior for a specific
10500 function by using the function attribute \fBregparm\fR.
10501 .Sp
10502 \&\fBWarning:\fR if you use this switch, and
10503 \&\fInum\fR is nonzero, then you must build all modules with the same
10504 value, including any libraries.  This includes the system libraries and
10505 startup modules.
10506 .IP "\fB\-msseregparm\fR" 4
10507 .IX Item "-msseregparm"
10508 Use \s-1SSE\s0 register passing conventions for float and double arguments
10509 and return values.  You can control this behavior for a specific
10510 function by using the function attribute \fBsseregparm\fR.
10511 .Sp
10512 \&\fBWarning:\fR if you use this switch then you must build all
10513 modules with the same value, including any libraries.  This includes
10514 the system libraries and startup modules.
10515 .IP "\fB\-mpc32\fR" 4
10516 .IX Item "-mpc32"
10517 .PD 0
10518 .IP "\fB\-mpc64\fR" 4
10519 .IX Item "-mpc64"
10520 .IP "\fB\-mpc80\fR" 4
10521 .IX Item "-mpc80"
10522 .PD
10523 Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
10524 is specified, the significands of results of floating-point operations are
10525 rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
10526 significands of results of floating-point operations to 53 bits (double
10527 precision) and \fB\-mpc80\fR rounds the significands of results of
10528 floating-point operations to 64 bits (extended double precision), which is
10529 the default.  When this option is used, floating-point operations in higher
10530 precisions are not available to the programmer without setting the \s-1FPU\s0
10531 control word explicitly.
10532 .Sp
10533 Setting the rounding of floating-point operations to less than the default
10534 80 bits can speed some programs by 2% or more.  Note that some mathematical
10535 libraries assume that extended precision (80 bit) floating-point operations
10536 are enabled by default; routines in such libraries could suffer significant
10537 loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
10538 when this option is used to set the precision to less than extended precision. 
10539 .IP "\fB\-mstackrealign\fR" 4
10540 .IX Item "-mstackrealign"
10541 Realign the stack at entry.  On the Intel x86, the \fB\-mstackrealign\fR
10542 option will generate an alternate prologue and epilogue that realigns the
10543 runtime stack if necessary.  This supports mixing legacy codes that keep
10544 a 4\-byte aligned stack with modern codes that keep a 16\-byte stack for
10545 \&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
10546 applicable to individual functions.
10547 .IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
10548 .IX Item "-mpreferred-stack-boundary=num"
10549 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
10550 byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
10551 the default is 4 (16 bytes or 128 bits).
10552 .IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
10553 .IX Item "-mincoming-stack-boundary=num"
10554 Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
10555 boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
10556 the one specified by \fB\-mpreferred\-stack\-boundary\fR will be used.
10557 .Sp
10558 On Pentium and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
10559 should be aligned to an 8 byte boundary (see \fB\-malign\-double\fR) or
10560 suffer significant run time performance penalties.  On Pentium \s-1III\s0, the
10561 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
10562 properly if it is not 16 byte aligned.
10563 .Sp
10564 To ensure proper alignment of this values on the stack, the stack boundary
10565 must be as aligned as that required by any value stored on the stack.
10566 Further, every function must be generated such that it keeps the stack
10567 aligned.  Thus calling a function compiled with a higher preferred
10568 stack boundary from a function compiled with a lower preferred stack
10569 boundary will most likely misalign the stack.  It is recommended that
10570 libraries that use callbacks always use the default setting.
10571 .Sp
10572 This extra alignment does consume extra stack space, and generally
10573 increases code size.  Code that is sensitive to stack space usage, such
10574 as embedded systems and operating system kernels, may want to reduce the
10575 preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
10576 .IP "\fB\-mmmx\fR" 4
10577 .IX Item "-mmmx"
10578 .PD 0
10579 .IP "\fB\-mno\-mmx\fR" 4
10580 .IX Item "-mno-mmx"
10581 .IP "\fB\-msse\fR" 4
10582 .IX Item "-msse"
10583 .IP "\fB\-mno\-sse\fR" 4
10584 .IX Item "-mno-sse"
10585 .IP "\fB\-msse2\fR" 4
10586 .IX Item "-msse2"
10587 .IP "\fB\-mno\-sse2\fR" 4
10588 .IX Item "-mno-sse2"
10589 .IP "\fB\-msse3\fR" 4
10590 .IX Item "-msse3"
10591 .IP "\fB\-mno\-sse3\fR" 4
10592 .IX Item "-mno-sse3"
10593 .IP "\fB\-mssse3\fR" 4
10594 .IX Item "-mssse3"
10595 .IP "\fB\-mno\-ssse3\fR" 4
10596 .IX Item "-mno-ssse3"
10597 .IP "\fB\-msse4.1\fR" 4
10598 .IX Item "-msse4.1"
10599 .IP "\fB\-mno\-sse4.1\fR" 4
10600 .IX Item "-mno-sse4.1"
10601 .IP "\fB\-msse4.2\fR" 4
10602 .IX Item "-msse4.2"
10603 .IP "\fB\-mno\-sse4.2\fR" 4
10604 .IX Item "-mno-sse4.2"
10605 .IP "\fB\-msse4\fR" 4
10606 .IX Item "-msse4"
10607 .IP "\fB\-mno\-sse4\fR" 4
10608 .IX Item "-mno-sse4"
10609 .IP "\fB\-mavx\fR" 4
10610 .IX Item "-mavx"
10611 .IP "\fB\-mno\-avx\fR" 4
10612 .IX Item "-mno-avx"
10613 .IP "\fB\-maes\fR" 4
10614 .IX Item "-maes"
10615 .IP "\fB\-mno\-aes\fR" 4
10616 .IX Item "-mno-aes"
10617 .IP "\fB\-mpclmul\fR" 4
10618 .IX Item "-mpclmul"
10619 .IP "\fB\-mno\-pclmul\fR" 4
10620 .IX Item "-mno-pclmul"
10621 .IP "\fB\-msse4a\fR" 4
10622 .IX Item "-msse4a"
10623 .IP "\fB\-mno\-sse4a\fR" 4
10624 .IX Item "-mno-sse4a"
10625 .IP "\fB\-msse5\fR" 4
10626 .IX Item "-msse5"
10627 .IP "\fB\-mno\-sse5\fR" 4
10628 .IX Item "-mno-sse5"
10629 .IP "\fB\-m3dnow\fR" 4
10630 .IX Item "-m3dnow"
10631 .IP "\fB\-mno\-3dnow\fR" 4
10632 .IX Item "-mno-3dnow"
10633 .IP "\fB\-mpopcnt\fR" 4
10634 .IX Item "-mpopcnt"
10635 .IP "\fB\-mno\-popcnt\fR" 4
10636 .IX Item "-mno-popcnt"
10637 .IP "\fB\-mabm\fR" 4
10638 .IX Item "-mabm"
10639 .IP "\fB\-mno\-abm\fR" 4
10640 .IX Item "-mno-abm"
10641 .PD
10642 These switches enable or disable the use of instructions in the \s-1MMX\s0,
10643 \&\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
10644 3DNow! extended instruction sets.
10645 These extensions are also available as built-in functions: see
10646 \&\fBX86 Built-in Functions\fR, for details of the functions enabled and
10647 disabled by these switches.
10648 .Sp
10649 To have \s-1SSE/SSE2\s0 instructions generated automatically from floating-point
10650 code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
10651 .Sp
10652 \&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
10653 generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
10654 when needed.
10655 .Sp
10656 These options will enable \s-1GCC\s0 to use these extended instructions in
10657 generated code, even without \fB\-mfpmath=sse\fR.  Applications which
10658 perform runtime \s-1CPU\s0 detection must compile separate files for each
10659 supported architecture, using the appropriate flags.  In particular,
10660 the file containing the \s-1CPU\s0 detection code should be compiled without
10661 these options.
10662 .IP "\fB\-mcld\fR" 4
10663 .IX Item "-mcld"
10664 This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
10665 of functions that use string instructions.  String instructions depend on
10666 the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
10667 \&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
10668 systems violate this specification by not clearing the \s-1DF\s0 flag in their
10669 exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
10670 set which leads to wrong direction mode, when string instructions are used.
10671 This option can be enabled by default on 32\-bit x86 targets by configuring
10672 \&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
10673 instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
10674 in this case.
10675 .IP "\fB\-mcx16\fR" 4
10676 .IX Item "-mcx16"
10677 This option will enable \s-1GCC\s0 to use \s-1CMPXCHG16B\s0 instruction in generated code.
10678 \&\s-1CMPXCHG16B\s0 allows for atomic operations on 128\-bit double quadword (or oword)
10679 data types.  This is useful for high resolution counters that could be updated
10680 by multiple processors (or cores).  This instruction is generated as part of
10681 atomic built-in functions: see \fBAtomic Builtins\fR for details.
10682 .IP "\fB\-msahf\fR" 4
10683 .IX Item "-msahf"
10684 This option will enable \s-1GCC\s0 to use \s-1SAHF\s0 instruction in generated 64\-bit code.
10685 Early Intel CPUs with Intel 64 lacked \s-1LAHF\s0 and \s-1SAHF\s0 instructions supported
10686 by \s-1AMD64\s0 until introduction of Pentium 4 G1 step in December 2005.  \s-1LAHF\s0 and
10687 \&\s-1SAHF\s0 are load and store instructions, respectively, for certain status flags.
10688 In 64\-bit mode, \s-1SAHF\s0 instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR, \f(CW\*(C`drem\*(C'\fR
10689 or \f(CW\*(C`remainder\*(C'\fR built-in functions: see \fBOther Builtins\fR for details.
10690 .IP "\fB\-mrecip\fR" 4
10691 .IX Item "-mrecip"
10692 This option will enable \s-1GCC\s0 to use \s-1RCPSS\s0 and \s-1RSQRTSS\s0 instructions (and their
10693 vectorized variants \s-1RCPPS\s0 and \s-1RSQRTPS\s0) with an additional Newton-Raphson step
10694 to increase precision instead of \s-1DIVSS\s0 and \s-1SQRTSS\s0 (and their vectorized
10695 variants) for single precision floating point arguments.  These instructions
10696 are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
10697 together with \fB\-finite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
10698 Note that while the throughput of the sequence is higher than the throughput
10699 of the non-reciprocal instruction, the precision of the sequence can be
10700 decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
10701 .IP "\fB\-mveclibabi=\fR\fItype\fR" 4
10702 .IX Item "-mveclibabi=type"
10703 Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
10704 external library.  Supported types are \f(CW\*(C`svml\*(C'\fR for the Intel short
10705 vector math library and \f(CW\*(C`acml\*(C'\fR for the \s-1AMD\s0 math core library style
10706 of interfacing.  \s-1GCC\s0 will currently emit calls to \f(CW\*(C`vmldExp2\*(C'\fR,
10707 \&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
10708 \&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
10709 \&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
10710 \&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
10711 \&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR, \f(CW\*(C`vmlsLog104\*(C'\fR,
10712 \&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
10713 \&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
10714 \&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
10715 \&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
10716 function type when \fB\-mveclibabi=svml\fR is used and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
10717 \&\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,
10718 \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
10719 \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
10720 \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for corresponding function type
10721 when \fB\-mveclibabi=acml\fR is used. Both \fB\-ftree\-vectorize\fR and
10722 \&\fB\-funsafe\-math\-optimizations\fR have to be enabled. A \s-1SVML\s0 or \s-1ACML\s0 \s-1ABI\s0
10723 compatible library will have to be specified at link time.
10724 .IP "\fB\-mpush\-args\fR" 4
10725 .IX Item "-mpush-args"
10726 .PD 0
10727 .IP "\fB\-mno\-push\-args\fR" 4
10728 .IX Item "-mno-push-args"
10729 .PD
10730 Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
10731 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
10732 by default.  In some cases disabling it may improve performance because of
10733 improved scheduling and reduced dependencies.
10734 .IP "\fB\-maccumulate\-outgoing\-args\fR" 4
10735 .IX Item "-maccumulate-outgoing-args"
10736 If enabled, the maximum amount of space required for outgoing arguments will be
10737 computed in the function prologue.  This is faster on most modern CPUs
10738 because of reduced dependencies, improved scheduling and reduced stack usage
10739 when preferred stack boundary is not equal to 2.  The drawback is a notable
10740 increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
10741 .IP "\fB\-mthreads\fR" 4
10742 .IX Item "-mthreads"
10743 Support thread-safe exception handling on \fBMingw32\fR.  Code that relies
10744 on thread-safe exception handling must compile and link all code with the
10745 \&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
10746 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library
10747 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
10748 .IP "\fB\-mno\-align\-stringops\fR" 4
10749 .IX Item "-mno-align-stringops"
10750 Do not align destination of inlined string operations.  This switch reduces
10751 code size and improves performance in case the destination is already aligned,
10752 but \s-1GCC\s0 doesn't know about it.
10753 .IP "\fB\-minline\-all\-stringops\fR" 4
10754 .IX Item "-minline-all-stringops"
10755 By default \s-1GCC\s0 inlines string operations only when destination is known to be
10756 aligned at least to 4 byte boundary.  This enables more inlining, increase code
10757 size, but may improve performance of code that depends on fast memcpy, strlen
10758 and memset for short lengths.
10759 .IP "\fB\-minline\-stringops\-dynamically\fR" 4
10760 .IX Item "-minline-stringops-dynamically"
10761 For string operation of unknown size, inline runtime checks so for small
10762 blocks inline code is used, while for large blocks library call is used.
10763 .IP "\fB\-minline\-compares\fR" 4
10764 .IX Item "-minline-compares"
10765 This option enables \s-1GCC\s0 to inline calls to memcmp and strcmp.  The
10766 inlined version does a byte-by-byte comparion using a repeat string
10767 operation prefix.
10768 .IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
10769 .IX Item "-mstringop-strategy=alg"
10770 Overwrite internal decision heuristic about particular algorithm to inline
10771 string operation with.  The allowed values are \f(CW\*(C`rep_byte\*(C'\fR,
10772 \&\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
10773 of specified size, \f(CW\*(C`byte_loop\*(C'\fR, \f(CW\*(C`loop\*(C'\fR, \f(CW\*(C`unrolled_loop\*(C'\fR for
10774 expanding inline loop, \f(CW\*(C`libcall\*(C'\fR for always expanding library call.
10775 .IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
10776 .IX Item "-momit-leaf-frame-pointer"
10777 Don't keep the frame pointer in a register for leaf functions.  This
10778 avoids the instructions to save, set up and restore frame pointers and
10779 makes an extra register available in leaf functions.  The option
10780 \&\fB\-fomit\-frame\-pointer\fR removes the frame pointer for all functions
10781 which might make debugging harder.
10782 .IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
10783 .IX Item "-mtls-direct-seg-refs"
10784 .PD 0
10785 .IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
10786 .IX Item "-mno-tls-direct-seg-refs"
10787 .PD
10788 Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
10789 \&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
10790 or whether the thread base pointer must be added.  Whether or not this
10791 is legal depends on the operating system, and whether it maps the
10792 segment to cover the entire \s-1TLS\s0 area.
10793 .Sp
10794 For systems that use \s-1GNU\s0 libc, the default is on.
10795 .IP "\fB\-mfused\-madd\fR" 4
10796 .IX Item "-mfused-madd"
10797 .PD 0
10798 .IP "\fB\-mno\-fused\-madd\fR" 4
10799 .IX Item "-mno-fused-madd"
10800 .PD
10801 Enable automatic generation of fused floating point multiply-add instructions
10802 if the \s-1ISA\s0 supports such instructions.  The \-mfused\-madd option is on by
10803 default.  The fused multiply-add instructions have a different
10804 rounding behavior compared to executing a multiply followed by an add.
10805 .IP "\fB\-msse2avx\fR" 4
10806 .IX Item "-msse2avx"
10807 .PD 0
10808 .IP "\fB\-mno\-sse2avx\fR" 4
10809 .IX Item "-mno-sse2avx"
10810 .PD
10811 Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
10812 prefix.  The option \fB\-mavx\fR turns this on by default.
10813 .PP
10814 These \fB\-m\fR switches are supported in addition to the above
10815 on \s-1AMD\s0 x86\-64 processors in 64\-bit environments.
10816 .IP "\fB\-m32\fR" 4
10817 .IX Item "-m32"
10818 .PD 0
10819 .IP "\fB\-m64\fR" 4
10820 .IX Item "-m64"
10821 .PD
10822 Generate code for a 32\-bit or 64\-bit environment.
10823 The 32\-bit environment sets int, long and pointer to 32 bits and
10824 generates code that runs on any i386 system.
10825 The 64\-bit environment sets int to 32 bits and long and pointer
10826 to 64 bits and generates code for \s-1AMD\s0's x86\-64 architecture. For
10827 darwin only the \-m64 option turns off the \fB\-fno\-pic\fR and
10828 \&\fB\-mdynamic\-no\-pic\fR options.
10829 .IP "\fB\-mno\-red\-zone\fR" 4
10830 .IX Item "-mno-red-zone"
10831 Do not use a so called red zone for x86\-64 code.  The red zone is mandated
10832 by the x86\-64 \s-1ABI\s0, it is a 128\-byte area beyond the location of the
10833 stack pointer that will not be modified by signal or interrupt handlers
10834 and therefore can be used for temporary data without adjusting the stack
10835 pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
10836 .IP "\fB\-mcmodel=small\fR" 4
10837 .IX Item "-mcmodel=small"
10838 Generate code for the small code model: the program and its symbols must
10839 be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
10840 Programs can be statically or dynamically linked.  This is the default
10841 code model.
10842 .IP "\fB\-mcmodel=kernel\fR" 4
10843 .IX Item "-mcmodel=kernel"
10844 Generate code for the kernel code model.  The kernel runs in the
10845 negative 2 \s-1GB\s0 of the address space.
10846 This model has to be used for Linux kernel code.
10847 .IP "\fB\-mcmodel=medium\fR" 4
10848 .IX Item "-mcmodel=medium"
10849 Generate code for the medium model: The program is linked in the lower 2
10850 \&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
10851 with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
10852 large data or bss sections and can be located above 2GB.  Programs can
10853 be statically or dynamically linked.
10854 .IP "\fB\-mcmodel=large\fR" 4
10855 .IX Item "-mcmodel=large"
10856 Generate code for the large model: This model makes no assumptions
10857 about addresses and sizes of sections.
10858 .PP
10859 \fI\s-1IA\-64\s0 Options\fR
10860 .IX Subsection "IA-64 Options"
10861 .PP
10862 These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
10863 .IP "\fB\-mbig\-endian\fR" 4
10864 .IX Item "-mbig-endian"
10865 Generate code for a big endian target.  This is the default for \s-1HP\-UX\s0.
10866 .IP "\fB\-mlittle\-endian\fR" 4
10867 .IX Item "-mlittle-endian"
10868 Generate code for a little endian target.  This is the default for \s-1AIX5\s0
10869 and GNU/Linux.
10870 .IP "\fB\-mgnu\-as\fR" 4
10871 .IX Item "-mgnu-as"
10872 .PD 0
10873 .IP "\fB\-mno\-gnu\-as\fR" 4
10874 .IX Item "-mno-gnu-as"
10875 .PD
10876 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
10877 .IP "\fB\-mgnu\-ld\fR" 4
10878 .IX Item "-mgnu-ld"
10879 .PD 0
10880 .IP "\fB\-mno\-gnu\-ld\fR" 4
10881 .IX Item "-mno-gnu-ld"
10882 .PD
10883 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
10884 .IP "\fB\-mno\-pic\fR" 4
10885 .IX Item "-mno-pic"
10886 Generate code that does not use a global pointer register.  The result
10887 is not position independent code, and violates the \s-1IA\-64\s0 \s-1ABI\s0.
10888 .IP "\fB\-mvolatile\-asm\-stop\fR" 4
10889 .IX Item "-mvolatile-asm-stop"
10890 .PD 0
10891 .IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
10892 .IX Item "-mno-volatile-asm-stop"
10893 .PD
10894 Generate (or don't) a stop bit immediately before and after volatile asm
10895 statements.
10896 .IP "\fB\-mregister\-names\fR" 4
10897 .IX Item "-mregister-names"
10898 .PD 0
10899 .IP "\fB\-mno\-register\-names\fR" 4
10900 .IX Item "-mno-register-names"
10901 .PD
10902 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
10903 the stacked registers.  This may make assembler output more readable.
10904 .IP "\fB\-mno\-sdata\fR" 4
10905 .IX Item "-mno-sdata"
10906 .PD 0
10907 .IP "\fB\-msdata\fR" 4
10908 .IX Item "-msdata"
10909 .PD
10910 Disable (or enable) optimizations that use the small data section.  This may
10911 be useful for working around optimizer bugs.
10912 .IP "\fB\-mconstant\-gp\fR" 4
10913 .IX Item "-mconstant-gp"
10914 Generate code that uses a single constant global pointer value.  This is
10915 useful when compiling kernel code.
10916 .IP "\fB\-mauto\-pic\fR" 4
10917 .IX Item "-mauto-pic"
10918 Generate code that is self\-relocatable.  This implies \fB\-mconstant\-gp\fR.
10919 This is useful when compiling firmware code.
10920 .IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
10921 .IX Item "-minline-float-divide-min-latency"
10922 Generate code for inline divides of floating point values
10923 using the minimum latency algorithm.
10924 .IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
10925 .IX Item "-minline-float-divide-max-throughput"
10926 Generate code for inline divides of floating point values
10927 using the maximum throughput algorithm.
10928 .IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
10929 .IX Item "-minline-int-divide-min-latency"
10930 Generate code for inline divides of integer values
10931 using the minimum latency algorithm.
10932 .IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
10933 .IX Item "-minline-int-divide-max-throughput"
10934 Generate code for inline divides of integer values
10935 using the maximum throughput algorithm.
10936 .IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
10937 .IX Item "-minline-sqrt-min-latency"
10938 Generate code for inline square roots
10939 using the minimum latency algorithm.
10940 .IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
10941 .IX Item "-minline-sqrt-max-throughput"
10942 Generate code for inline square roots
10943 using the maximum throughput algorithm.
10944 .IP "\fB\-mno\-dwarf2\-asm\fR" 4
10945 .IX Item "-mno-dwarf2-asm"
10946 .PD 0
10947 .IP "\fB\-mdwarf2\-asm\fR" 4
10948 .IX Item "-mdwarf2-asm"
10949 .PD
10950 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
10951 info.  This may be useful when not using the \s-1GNU\s0 assembler.
10952 .IP "\fB\-mearly\-stop\-bits\fR" 4
10953 .IX Item "-mearly-stop-bits"
10954 .PD 0
10955 .IP "\fB\-mno\-early\-stop\-bits\fR" 4
10956 .IX Item "-mno-early-stop-bits"
10957 .PD
10958 Allow stop bits to be placed earlier than immediately preceding the
10959 instruction that triggered the stop bit.  This can improve instruction
10960 scheduling, but does not always do so.
10961 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
10962 .IX Item "-mfixed-range=register-range"
10963 Generate code treating the given register range as fixed registers.
10964 A fixed register is one that the register allocator can not use.  This is
10965 useful when compiling kernel code.  A register range is specified as
10966 two registers separated by a dash.  Multiple register ranges can be
10967 specified separated by a comma.
10968 .IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
10969 .IX Item "-mtls-size=tls-size"
10970 Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
10971 64.
10972 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
10973 .IX Item "-mtune=cpu-type"
10974 Tune the instruction scheduling for a particular \s-1CPU\s0, Valid values are
10975 itanium, itanium1, merced, itanium2, and mckinley.
10976 .IP "\fB\-mt\fR" 4
10977 .IX Item "-mt"
10978 .PD 0
10979 .IP "\fB\-pthread\fR" 4
10980 .IX Item "-pthread"
10981 .PD
10982 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
10983 option sets flags for both the preprocessor and linker.  It does
10984 not affect the thread safety of object code produced by the compiler or
10985 that of libraries supplied with it.  These are HP-UX specific flags.
10986 .IP "\fB\-milp32\fR" 4
10987 .IX Item "-milp32"
10988 .PD 0
10989 .IP "\fB\-mlp64\fR" 4
10990 .IX Item "-mlp64"
10991 .PD
10992 Generate code for a 32\-bit or 64\-bit environment.
10993 The 32\-bit environment sets int, long and pointer to 32 bits.
10994 The 64\-bit environment sets int to 32 bits and long and pointer
10995 to 64 bits.  These are HP-UX specific flags.
10996 .IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
10997 .IX Item "-mno-sched-br-data-spec"
10998 .PD 0
10999 .IP "\fB\-msched\-br\-data\-spec\fR" 4
11000 .IX Item "-msched-br-data-spec"
11001 .PD
11002 (Dis/En)able data speculative scheduling before reload.
11003 This will result in generation of the ld.a instructions and
11004 the corresponding check instructions (ld.c / chk.a).
11005 The default is 'disable'.
11006 .IP "\fB\-msched\-ar\-data\-spec\fR" 4
11007 .IX Item "-msched-ar-data-spec"
11008 .PD 0
11009 .IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
11010 .IX Item "-mno-sched-ar-data-spec"
11011 .PD
11012 (En/Dis)able data speculative scheduling after reload.
11013 This will result in generation of the ld.a instructions and
11014 the corresponding check instructions (ld.c / chk.a).
11015 The default is 'enable'.
11016 .IP "\fB\-mno\-sched\-control\-spec\fR" 4
11017 .IX Item "-mno-sched-control-spec"
11018 .PD 0
11019 .IP "\fB\-msched\-control\-spec\fR" 4
11020 .IX Item "-msched-control-spec"
11021 .PD
11022 (Dis/En)able control speculative scheduling.  This feature is
11023 available only during region scheduling (i.e. before reload).
11024 This will result in generation of the ld.s instructions and
11025 the corresponding check instructions chk.s .
11026 The default is 'disable'.
11027 .IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
11028 .IX Item "-msched-br-in-data-spec"
11029 .PD 0
11030 .IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
11031 .IX Item "-mno-sched-br-in-data-spec"
11032 .PD
11033 (En/Dis)able speculative scheduling of the instructions that
11034 are dependent on the data speculative loads before reload.
11035 This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
11036 The default is 'enable'.
11037 .IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
11038 .IX Item "-msched-ar-in-data-spec"
11039 .PD 0
11040 .IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
11041 .IX Item "-mno-sched-ar-in-data-spec"
11042 .PD
11043 (En/Dis)able speculative scheduling of the instructions that
11044 are dependent on the data speculative loads after reload.
11045 This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
11046 The default is 'enable'.
11047 .IP "\fB\-msched\-in\-control\-spec\fR" 4
11048 .IX Item "-msched-in-control-spec"
11049 .PD 0
11050 .IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
11051 .IX Item "-mno-sched-in-control-spec"
11052 .PD
11053 (En/Dis)able speculative scheduling of the instructions that
11054 are dependent on the control speculative loads.
11055 This is effective only with \fB\-msched\-control\-spec\fR enabled.
11056 The default is 'enable'.
11057 .IP "\fB\-msched\-ldc\fR" 4
11058 .IX Item "-msched-ldc"
11059 .PD 0
11060 .IP "\fB\-mno\-sched\-ldc\fR" 4
11061 .IX Item "-mno-sched-ldc"
11062 .PD
11063 (En/Dis)able use of simple data speculation checks ld.c .
11064 If disabled, only chk.a instructions will be emitted to check
11065 data speculative loads.
11066 The default is 'enable'.
11067 .IP "\fB\-mno\-sched\-control\-ldc\fR" 4
11068 .IX Item "-mno-sched-control-ldc"
11069 .PD 0
11070 .IP "\fB\-msched\-control\-ldc\fR" 4
11071 .IX Item "-msched-control-ldc"
11072 .PD
11073 (Dis/En)able use of ld.c instructions to check control speculative loads.
11074 If enabled, in case of control speculative load with no speculatively
11075 scheduled dependent instructions this load will be emitted as ld.sa and
11076 ld.c will be used to check it.
11077 The default is 'disable'.
11078 .IP "\fB\-mno\-sched\-spec\-verbose\fR" 4
11079 .IX Item "-mno-sched-spec-verbose"
11080 .PD 0
11081 .IP "\fB\-msched\-spec\-verbose\fR" 4
11082 .IX Item "-msched-spec-verbose"
11083 .PD
11084 (Dis/En)able printing of the information about speculative motions.
11085 .IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
11086 .IX Item "-mno-sched-prefer-non-data-spec-insns"
11087 .PD 0
11088 .IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
11089 .IX Item "-msched-prefer-non-data-spec-insns"
11090 .PD
11091 If enabled, data speculative instructions will be chosen for schedule
11092 only if there are no other choices at the moment.  This will make
11093 the use of the data speculation much more conservative.
11094 The default is 'disable'.
11095 .IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
11096 .IX Item "-mno-sched-prefer-non-control-spec-insns"
11097 .PD 0
11098 .IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
11099 .IX Item "-msched-prefer-non-control-spec-insns"
11100 .PD
11101 If enabled, control speculative instructions will be chosen for schedule
11102 only if there are no other choices at the moment.  This will make
11103 the use of the control speculation much more conservative.
11104 The default is 'disable'.
11105 .IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
11106 .IX Item "-mno-sched-count-spec-in-critical-path"
11107 .PD 0
11108 .IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
11109 .IX Item "-msched-count-spec-in-critical-path"
11110 .PD
11111 If enabled, speculative dependencies will be considered during
11112 computation of the instructions priorities.  This will make the use of the
11113 speculation a bit more conservative.
11114 The default is 'disable'.
11115 .PP
11116 \fIM32C Options\fR
11117 .IX Subsection "M32C Options"
11118 .IP "\fB\-mcpu=\fR\fIname\fR" 4
11119 .IX Item "-mcpu=name"
11120 Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
11121 \&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
11122 /60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
11123 the M32C/80 series.
11124 .IP "\fB\-msim\fR" 4
11125 .IX Item "-msim"
11126 Specifies that the program will be run on the simulator.  This causes
11127 an alternate runtime library to be linked in which supports, for
11128 example, file I/O.  You must not use this option when generating
11129 programs that will run on real hardware; you must provide your own
11130 runtime library for whatever I/O functions are needed.
11131 .IP "\fB\-memregs=\fR\fInumber\fR" 4
11132 .IX Item "-memregs=number"
11133 Specifies the number of memory-based pseudo-registers \s-1GCC\s0 will use
11134 during code generation.  These pseudo-registers will be used like real
11135 registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
11136 code into available registers, and the performance penalty of using
11137 memory instead of registers.  Note that all modules in a program must
11138 be compiled with the same value for this option.  Because of that, you
11139 must not use this option with the default runtime libraries gcc
11140 builds.
11141 .PP
11142 \fIM32R/D Options\fR
11143 .IX Subsection "M32R/D Options"
11144 .PP
11145 These \fB\-m\fR options are defined for Renesas M32R/D architectures:
11146 .IP "\fB\-m32r2\fR" 4
11147 .IX Item "-m32r2"
11148 Generate code for the M32R/2.
11149 .IP "\fB\-m32rx\fR" 4
11150 .IX Item "-m32rx"
11151 Generate code for the M32R/X.
11152 .IP "\fB\-m32r\fR" 4
11153 .IX Item "-m32r"
11154 Generate code for the M32R.  This is the default.
11155 .IP "\fB\-mmodel=small\fR" 4
11156 .IX Item "-mmodel=small"
11157 Assume all objects live in the lower 16MB of memory (so that their addresses
11158 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
11159 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
11160 This is the default.
11161 .Sp
11162 The addressability of a particular object can be set with the
11163 \&\f(CW\*(C`model\*(C'\fR attribute.
11164 .IP "\fB\-mmodel=medium\fR" 4
11165 .IX Item "-mmodel=medium"
11166 Assume objects may be anywhere in the 32\-bit address space (the compiler
11167 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
11168 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
11169 .IP "\fB\-mmodel=large\fR" 4
11170 .IX Item "-mmodel=large"
11171 Assume objects may be anywhere in the 32\-bit address space (the compiler
11172 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
11173 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
11174 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
11175 instruction sequence).
11176 .IP "\fB\-msdata=none\fR" 4
11177 .IX Item "-msdata=none"
11178 Disable use of the small data area.  Variables will be put into
11179 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
11180 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
11181 This is the default.
11182 .Sp
11183 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
11184 Objects may be explicitly put in the small data area with the
11185 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
11186 .IP "\fB\-msdata=sdata\fR" 4
11187 .IX Item "-msdata=sdata"
11188 Put small global and static data in the small data area, but do not
11189 generate special code to reference them.
11190 .IP "\fB\-msdata=use\fR" 4
11191 .IX Item "-msdata=use"
11192 Put small global and static data in the small data area, and generate
11193 special instructions to reference them.
11194 .IP "\fB\-G\fR \fInum\fR" 4
11195 .IX Item "-G num"
11196 Put global and static objects less than or equal to \fInum\fR bytes
11197 into the small data or bss sections instead of the normal data or bss
11198 sections.  The default value of \fInum\fR is 8.
11199 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
11200 for this option to have any effect.
11201 .Sp
11202 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
11203 Compiling with different values of \fInum\fR may or may not work; if it
11204 doesn't the linker will give an error message\-\-\-incorrect code will not be
11205 generated.
11206 .IP "\fB\-mdebug\fR" 4
11207 .IX Item "-mdebug"
11208 Makes the M32R specific code in the compiler display some statistics
11209 that might help in debugging programs.
11210 .IP "\fB\-malign\-loops\fR" 4
11211 .IX Item "-malign-loops"
11212 Align all loops to a 32\-byte boundary.
11213 .IP "\fB\-mno\-align\-loops\fR" 4
11214 .IX Item "-mno-align-loops"
11215 Do not enforce a 32\-byte alignment for loops.  This is the default.
11216 .IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
11217 .IX Item "-missue-rate=number"
11218 Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
11219 or 2.
11220 .IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
11221 .IX Item "-mbranch-cost=number"
11222 \&\fInumber\fR can only be 1 or 2.  If it is 1 then branches will be
11223 preferred over conditional code, if it is 2, then the opposite will
11224 apply.
11225 .IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
11226 .IX Item "-mflush-trap=number"
11227 Specifies the trap number to use to flush the cache.  The default is
11228 12.  Valid numbers are between 0 and 15 inclusive.
11229 .IP "\fB\-mno\-flush\-trap\fR" 4
11230 .IX Item "-mno-flush-trap"
11231 Specifies that the cache cannot be flushed by using a trap.
11232 .IP "\fB\-mflush\-func=\fR\fIname\fR" 4
11233 .IX Item "-mflush-func=name"
11234 Specifies the name of the operating system function to call to flush
11235 the cache.  The default is \fI_flush_cache\fR, but a function call
11236 will only be used if a trap is not available.
11237 .IP "\fB\-mno\-flush\-func\fR" 4
11238 .IX Item "-mno-flush-func"
11239 Indicates that there is no \s-1OS\s0 function for flushing the cache.
11240 .PP
11241 \fIM680x0 Options\fR
11242 .IX Subsection "M680x0 Options"
11243 .PP
11244 These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
11245 The default settings depend on which architecture was selected when
11246 the compiler was configured; the defaults for the most common choices
11247 are given below.
11248 .IP "\fB\-march=\fR\fIarch\fR" 4
11249 .IX Item "-march=arch"
11250 Generate code for a specific M680x0 or ColdFire instruction set
11251 architecture.  Permissible values of \fIarch\fR for M680x0
11252 architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11253 \&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
11254 architectures are selected according to Freescale's \s-1ISA\s0 classification
11255 and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
11256 \&\fBisab\fR and \fBisac\fR.
11257 .Sp
11258 gcc defines a macro \fB_\|_mcf\fR\fIarch\fR\fB_\|_\fR whenever it is generating
11259 code for a ColdFire target.  The \fIarch\fR in this macro is one of the
11260 \&\fB\-march\fR arguments given above.
11261 .Sp
11262 When used together, \fB\-march\fR and \fB\-mtune\fR select code
11263 that runs on a family of similar processors but that is optimized
11264 for a particular microarchitecture.
11265 .IP "\fB\-mcpu=\fR\fIcpu\fR" 4
11266 .IX Item "-mcpu=cpu"
11267 Generate code for a specific M680x0 or ColdFire processor.
11268 The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
11269 \&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
11270 and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
11271 below, which also classifies the CPUs into families:
11272 .RS 4
11273 .IP "Family : \fB\-mcpu\fR arguments" 4
11274 .IX Item "Family : -mcpu arguments"
11275 .PD 0
11276 .IP "\fB51qe\fR : \fB51qe\fR" 4
11277 .IX Item "51qe : 51qe"
11278 .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
11279 .IX Item "5206 : 5202 5204 5206"
11280 .IP "\fB5206e\fR : \fB5206e\fR" 4
11281 .IX Item "5206e : 5206e"
11282 .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
11283 .IX Item "5208 : 5207 5208"
11284 .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
11285 .IX Item "5211a : 5210a 5211a"
11286 .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
11287 .IX Item "5213 : 5211 5212 5213"
11288 .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
11289 .IX Item "5216 : 5214 5216"
11290 .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
11291 .IX Item "52235 : 52230 52231 52232 52233 52234 52235"
11292 .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
11293 .IX Item "5225 : 5224 5225"
11294 .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
11295 .IX Item "5235 : 5232 5233 5234 5235 523x"
11296 .IP "\fB5249\fR : \fB5249\fR" 4
11297 .IX Item "5249 : 5249"
11298 .IP "\fB5250\fR : \fB5250\fR" 4
11299 .IX Item "5250 : 5250"
11300 .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
11301 .IX Item "5271 : 5270 5271"
11302 .IP "\fB5272\fR : \fB5272\fR" 4
11303 .IX Item "5272 : 5272"
11304 .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
11305 .IX Item "5275 : 5274 5275"
11306 .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
11307 .IX Item "5282 : 5280 5281 5282 528x"
11308 .IP "\fB5307\fR : \fB5307\fR" 4
11309 .IX Item "5307 : 5307"
11310 .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
11311 .IX Item "5329 : 5327 5328 5329 532x"
11312 .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
11313 .IX Item "5373 : 5372 5373 537x"
11314 .IP "\fB5407\fR : \fB5407\fR" 4
11315 .IX Item "5407 : 5407"
11316 .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
11317 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
11318 .RE
11319 .RS 4
11320 .PD
11321 .Sp
11322 \&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
11323 \&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
11324 \&\fB\-mcpu\fR and \fB\-march\fR are rejected.
11325 .Sp
11326 gcc defines the macro \fB_\|_mcf_cpu_\fR\fIcpu\fR when ColdFire target
11327 \&\fIcpu\fR is selected.  It also defines \fB_\|_mcf_family_\fR\fIfamily\fR,
11328 where the value of \fIfamily\fR is given by the table above.
11329 .RE
11330 .IP "\fB\-mtune=\fR\fItune\fR" 4
11331 .IX Item "-mtune=tune"
11332 Tune the code for a particular microarchitecture, within the
11333 constraints set by \fB\-march\fR and \fB\-mcpu\fR.
11334 The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
11335 \&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
11336 and \fBcpu32\fR.  The ColdFire microarchitectures
11337 are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
11338 .Sp
11339 You can also use \fB\-mtune=68020\-40\fR for code that needs
11340 to run relatively well on 68020, 68030 and 68040 targets.
11341 \&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
11342 as well.  These two options select the same tuning decisions as
11343 \&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
11344 .Sp
11345 gcc defines the macros \fB_\|_mc\fR\fIarch\fR and \fB_\|_mc\fR\fIarch\fR\fB_\|_\fR
11346 when tuning for 680x0 architecture \fIarch\fR.  It also defines
11347 \&\fBmc\fR\fIarch\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
11348 option is used.  If gcc is tuning for a range of architectures,
11349 as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
11350 it defines the macros for every architecture in the range.
11351 .Sp
11352 gcc also defines the macro \fB_\|_m\fR\fIuarch\fR\fB_\|_\fR when tuning for
11353 ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
11354 of the arguments given above.
11355 .IP "\fB\-m68000\fR" 4
11356 .IX Item "-m68000"
11357 .PD 0
11358 .IP "\fB\-mc68000\fR" 4
11359 .IX Item "-mc68000"
11360 .PD
11361 Generate output for a 68000.  This is the default
11362 when the compiler is configured for 68000\-based systems.
11363 It is equivalent to \fB\-march=68000\fR.
11364 .Sp
11365 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
11366 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
11367 .IP "\fB\-m68010\fR" 4
11368 .IX Item "-m68010"
11369 Generate output for a 68010.  This is the default
11370 when the compiler is configured for 68010\-based systems.
11371 It is equivalent to \fB\-march=68010\fR.
11372 .IP "\fB\-m68020\fR" 4
11373 .IX Item "-m68020"
11374 .PD 0
11375 .IP "\fB\-mc68020\fR" 4
11376 .IX Item "-mc68020"
11377 .PD
11378 Generate output for a 68020.  This is the default
11379 when the compiler is configured for 68020\-based systems.
11380 It is equivalent to \fB\-march=68020\fR.
11381 .IP "\fB\-m68030\fR" 4
11382 .IX Item "-m68030"
11383 Generate output for a 68030.  This is the default when the compiler is
11384 configured for 68030\-based systems.  It is equivalent to
11385 \&\fB\-march=68030\fR.
11386 .IP "\fB\-m68040\fR" 4
11387 .IX Item "-m68040"
11388 Generate output for a 68040.  This is the default when the compiler is
11389 configured for 68040\-based systems.  It is equivalent to
11390 \&\fB\-march=68040\fR.
11391 .Sp
11392 This option inhibits the use of 68881/68882 instructions that have to be
11393 emulated by software on the 68040.  Use this option if your 68040 does not
11394 have code to emulate those instructions.
11395 .IP "\fB\-m68060\fR" 4
11396 .IX Item "-m68060"
11397 Generate output for a 68060.  This is the default when the compiler is
11398 configured for 68060\-based systems.  It is equivalent to
11399 \&\fB\-march=68060\fR.
11400 .Sp
11401 This option inhibits the use of 68020 and 68881/68882 instructions that
11402 have to be emulated by software on the 68060.  Use this option if your 68060
11403 does not have code to emulate those instructions.
11404 .IP "\fB\-mcpu32\fR" 4
11405 .IX Item "-mcpu32"
11406 Generate output for a \s-1CPU32\s0.  This is the default
11407 when the compiler is configured for CPU32\-based systems.
11408 It is equivalent to \fB\-march=cpu32\fR.
11409 .Sp
11410 Use this option for microcontrollers with a
11411 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
11412 68336, 68340, 68341, 68349 and 68360.
11413 .IP "\fB\-m5200\fR" 4
11414 .IX Item "-m5200"
11415 Generate output for a 520X ColdFire \s-1CPU\s0.  This is the default
11416 when the compiler is configured for 520X\-based systems.
11417 It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
11418 in favor of that option.
11419 .Sp
11420 Use this option for microcontroller with a 5200 core, including
11421 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5206\s0.
11422 .IP "\fB\-m5206e\fR" 4
11423 .IX Item "-m5206e"
11424 Generate output for a 5206e ColdFire \s-1CPU\s0.  The option is now
11425 deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
11426 .IP "\fB\-m528x\fR" 4
11427 .IX Item "-m528x"
11428 Generate output for a member of the ColdFire 528X family.
11429 The option is now deprecated in favor of the equivalent
11430 \&\fB\-mcpu=528x\fR.
11431 .IP "\fB\-m5307\fR" 4
11432 .IX Item "-m5307"
11433 Generate output for a ColdFire 5307 \s-1CPU\s0.  The option is now deprecated
11434 in favor of the equivalent \fB\-mcpu=5307\fR.
11435 .IP "\fB\-m5407\fR" 4
11436 .IX Item "-m5407"
11437 Generate output for a ColdFire 5407 \s-1CPU\s0.  The option is now deprecated
11438 in favor of the equivalent \fB\-mcpu=5407\fR.
11439 .IP "\fB\-mcfv4e\fR" 4
11440 .IX Item "-mcfv4e"
11441 Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
11442 This includes use of hardware floating point instructions.
11443 The option is equivalent to \fB\-mcpu=547x\fR, and is now
11444 deprecated in favor of that option.
11445 .IP "\fB\-m68020\-40\fR" 4
11446 .IX Item "-m68020-40"
11447 Generate output for a 68040, without using any of the new instructions.
11448 This results in code which can run relatively efficiently on either a
11449 68020/68881 or a 68030 or a 68040.  The generated code does use the
11450 68881 instructions that are emulated on the 68040.
11451 .Sp
11452 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
11453 .IP "\fB\-m68020\-60\fR" 4
11454 .IX Item "-m68020-60"
11455 Generate output for a 68060, without using any of the new instructions.
11456 This results in code which can run relatively efficiently on either a
11457 68020/68881 or a 68030 or a 68040.  The generated code does use the
11458 68881 instructions that are emulated on the 68060.
11459 .Sp
11460 The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
11461 .IP "\fB\-mhard\-float\fR" 4
11462 .IX Item "-mhard-float"
11463 .PD 0
11464 .IP "\fB\-m68881\fR" 4
11465 .IX Item "-m68881"
11466 .PD
11467 Generate floating-point instructions.  This is the default for 68020
11468 and above, and for ColdFire devices that have an \s-1FPU\s0.  It defines the
11469 macro \fB_\|_HAVE_68881_\|_\fR on M680x0 targets and \fB_\|_mcffpu_\|_\fR
11470 on ColdFire targets.
11471 .IP "\fB\-msoft\-float\fR" 4
11472 .IX Item "-msoft-float"
11473 Do not generate floating-point instructions; use library calls instead.
11474 This is the default for 68000, 68010, and 68832 targets.  It is also
11475 the default for ColdFire devices that have no \s-1FPU\s0.
11476 .IP "\fB\-mdiv\fR" 4
11477 .IX Item "-mdiv"
11478 .PD 0
11479 .IP "\fB\-mno\-div\fR" 4
11480 .IX Item "-mno-div"
11481 .PD
11482 Generate (do not generate) ColdFire hardware divide and remainder
11483 instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
11484 the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
11485 architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
11486 (either the default \s-1CPU\s0, or the one specified by \fB\-mcpu\fR).  For
11487 example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
11488 \&\fB\-mcpu=5206e\fR.
11489 .Sp
11490 gcc defines the macro \fB_\|_mcfhwdiv_\|_\fR when this option is enabled.
11491 .IP "\fB\-mshort\fR" 4
11492 .IX Item "-mshort"
11493 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11494 Additionally, parameters passed on the stack are also aligned to a
11495 16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
11496 .IP "\fB\-mno\-short\fR" 4
11497 .IX Item "-mno-short"
11498 Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
11499 .IP "\fB\-mnobitfield\fR" 4
11500 .IX Item "-mnobitfield"
11501 .PD 0
11502 .IP "\fB\-mno\-bitfield\fR" 4
11503 .IX Item "-mno-bitfield"
11504 .PD
11505 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
11506 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
11507 .IP "\fB\-mbitfield\fR" 4
11508 .IX Item "-mbitfield"
11509 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
11510 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
11511 designed for a 68020.
11512 .IP "\fB\-mrtd\fR" 4
11513 .IX Item "-mrtd"
11514 Use a different function-calling convention, in which functions
11515 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
11516 instruction, which pops their arguments while returning.  This
11517 saves one instruction in the caller since there is no need to pop
11518 the arguments there.
11519 .Sp
11520 This calling convention is incompatible with the one normally
11521 used on Unix, so you cannot use it if you need to call libraries
11522 compiled with the Unix compiler.
11523 .Sp
11524 Also, you must provide function prototypes for all functions that
11525 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
11526 otherwise incorrect code will be generated for calls to those
11527 functions.
11528 .Sp
11529 In addition, seriously incorrect code will result if you call a
11530 function with too many arguments.  (Normally, extra arguments are
11531 harmlessly ignored.)
11532 .Sp
11533 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
11534 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
11535 .IP "\fB\-mno\-rtd\fR" 4
11536 .IX Item "-mno-rtd"
11537 Do not use the calling conventions selected by \fB\-mrtd\fR.
11538 This is the default.
11539 .IP "\fB\-malign\-int\fR" 4
11540 .IX Item "-malign-int"
11541 .PD 0
11542 .IP "\fB\-mno\-align\-int\fR" 4
11543 .IX Item "-mno-align-int"
11544 .PD
11545 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,
11546 \&\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
11547 boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
11548 Aligning variables on 32\-bit boundaries produces code that runs somewhat
11549 faster on processors with 32\-bit busses at the expense of more memory.
11550 .Sp
11551 \&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0 will
11552 align structures containing the above types  differently than
11553 most published application binary interface specifications for the m68k.
11554 .IP "\fB\-mpcrel\fR" 4
11555 .IX Item "-mpcrel"
11556 Use the pc-relative addressing mode of the 68000 directly, instead of
11557 using a global offset table.  At present, this option implies \fB\-fpic\fR,
11558 allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
11559 not presently supported with \fB\-mpcrel\fR, though this could be supported for
11560 68020 and higher processors.
11561 .IP "\fB\-mno\-strict\-align\fR" 4
11562 .IX Item "-mno-strict-align"
11563 .PD 0
11564 .IP "\fB\-mstrict\-align\fR" 4
11565 .IX Item "-mstrict-align"
11566 .PD
11567 Do not (do) assume that unaligned memory references will be handled by
11568 the system.
11569 .IP "\fB\-msep\-data\fR" 4
11570 .IX Item "-msep-data"
11571 Generate code that allows the data segment to be located in a different
11572 area of memory from the text segment.  This allows for execute in place in
11573 an environment without virtual memory management.  This option implies
11574 \&\fB\-fPIC\fR.
11575 .IP "\fB\-mno\-sep\-data\fR" 4
11576 .IX Item "-mno-sep-data"
11577 Generate code that assumes that the data segment follows the text segment.
11578 This is the default.
11579 .IP "\fB\-mid\-shared\-library\fR" 4
11580 .IX Item "-mid-shared-library"
11581 Generate code that supports shared libraries via the library \s-1ID\s0 method.
11582 This allows for execute in place and shared libraries in an environment
11583 without virtual memory management.  This option implies \fB\-fPIC\fR.
11584 .IP "\fB\-mno\-id\-shared\-library\fR" 4
11585 .IX Item "-mno-id-shared-library"
11586 Generate code that doesn't assume \s-1ID\s0 based shared libraries are being used.
11587 This is the default.
11588 .IP "\fB\-mshared\-library\-id=n\fR" 4
11589 .IX Item "-mshared-library-id=n"
11590 Specified the identification number of the \s-1ID\s0 based shared library being
11591 compiled.  Specifying a value of 0 will generate more compact code, specifying
11592 other values will force the allocation of that number to the current
11593 library but is no more space or time efficient than omitting this option.
11594 .IP "\fB\-mxgot\fR" 4
11595 .IX Item "-mxgot"
11596 .PD 0
11597 .IP "\fB\-mno\-xgot\fR" 4
11598 .IX Item "-mno-xgot"
11599 .PD
11600 When generating position-independent code for ColdFire, generate code
11601 that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
11602 larger and slower than code generated without this option.  On M680x0
11603 processors, this option is not needed; \fB\-fPIC\fR suffices.
11604 .Sp
11605 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
11606 While this is relatively efficient, it only works if the \s-1GOT\s0
11607 is smaller than about 64k.  Anything larger causes the linker
11608 to report an error such as:
11609 .Sp
11610 .Vb 1
11611 \&        relocation truncated to fit: R_68K_GOT16O foobar
11612 .Ve
11613 .Sp
11614 If this happens, you should recompile your code with \fB\-mxgot\fR.
11615 It should then work with very large GOTs.  However, code generated with
11616 \&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
11617 the value of a global symbol.
11618 .Sp
11619 Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
11620 can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
11621 you should only need to use \fB\-mxgot\fR when compiling a single
11622 object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
11623 .Sp
11624 These options have no effect unless \s-1GCC\s0 is generating
11625 position-independent code.
11626 .PP
11627 \fIM68hc1x Options\fR
11628 .IX Subsection "M68hc1x Options"
11629 .PP
11630 These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
11631 microcontrollers.  The default values for these options depends on
11632 which style of microcontroller was selected when the compiler was configured;
11633 the defaults for the most common choices are given below.
11634 .IP "\fB\-m6811\fR" 4
11635 .IX Item "-m6811"
11636 .PD 0
11637 .IP "\fB\-m68hc11\fR" 4
11638 .IX Item "-m68hc11"
11639 .PD
11640 Generate output for a 68HC11.  This is the default
11641 when the compiler is configured for 68HC11\-based systems.
11642 .IP "\fB\-m6812\fR" 4
11643 .IX Item "-m6812"
11644 .PD 0
11645 .IP "\fB\-m68hc12\fR" 4
11646 .IX Item "-m68hc12"
11647 .PD
11648 Generate output for a 68HC12.  This is the default
11649 when the compiler is configured for 68HC12\-based systems.
11650 .IP "\fB\-m68S12\fR" 4
11651 .IX Item "-m68S12"
11652 .PD 0
11653 .IP "\fB\-m68hcs12\fR" 4
11654 .IX Item "-m68hcs12"
11655 .PD
11656 Generate output for a 68HCS12.
11657 .IP "\fB\-mauto\-incdec\fR" 4
11658 .IX Item "-mauto-incdec"
11659 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
11660 addressing modes.
11661 .IP "\fB\-minmax\fR" 4
11662 .IX Item "-minmax"
11663 .PD 0
11664 .IP "\fB\-nominmax\fR" 4
11665 .IX Item "-nominmax"
11666 .PD
11667 Enable the use of 68HC12 min and max instructions.
11668 .IP "\fB\-mlong\-calls\fR" 4
11669 .IX Item "-mlong-calls"
11670 .PD 0
11671 .IP "\fB\-mno\-long\-calls\fR" 4
11672 .IX Item "-mno-long-calls"
11673 .PD
11674 Treat all calls as being far away (near).  If calls are assumed to be
11675 far away, the compiler will use the \f(CW\*(C`call\*(C'\fR instruction to
11676 call a function and the \f(CW\*(C`rtc\*(C'\fR instruction for returning.
11677 .IP "\fB\-mshort\fR" 4
11678 .IX Item "-mshort"
11679 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
11680 .IP "\fB\-msoft\-reg\-count=\fR\fIcount\fR" 4
11681 .IX Item "-msoft-reg-count=count"
11682 Specify the number of pseudo-soft registers which are used for the
11683 code generation.  The maximum number is 32.  Using more pseudo-soft
11684 register may or may not result in better code depending on the program.
11685 The default is 4 for 68HC11 and 2 for 68HC12.
11686 .PP
11687 \fIMCore Options\fR
11688 .IX Subsection "MCore Options"
11689 .PP
11690 These are the \fB\-m\fR options defined for the Motorola M*Core
11691 processors.
11692 .IP "\fB\-mhardlit\fR" 4
11693 .IX Item "-mhardlit"
11694 .PD 0
11695 .IP "\fB\-mno\-hardlit\fR" 4
11696 .IX Item "-mno-hardlit"
11697 .PD
11698 Inline constants into the code stream if it can be done in two
11699 instructions or less.
11700 .IP "\fB\-mdiv\fR" 4
11701 .IX Item "-mdiv"
11702 .PD 0
11703 .IP "\fB\-mno\-div\fR" 4
11704 .IX Item "-mno-div"
11705 .PD
11706 Use the divide instruction.  (Enabled by default).
11707 .IP "\fB\-mrelax\-immediate\fR" 4
11708 .IX Item "-mrelax-immediate"
11709 .PD 0
11710 .IP "\fB\-mno\-relax\-immediate\fR" 4
11711 .IX Item "-mno-relax-immediate"
11712 .PD
11713 Allow arbitrary sized immediates in bit operations.
11714 .IP "\fB\-mwide\-bitfields\fR" 4
11715 .IX Item "-mwide-bitfields"
11716 .PD 0
11717 .IP "\fB\-mno\-wide\-bitfields\fR" 4
11718 .IX Item "-mno-wide-bitfields"
11719 .PD
11720 Always treat bit-fields as int\-sized.
11721 .IP "\fB\-m4byte\-functions\fR" 4
11722 .IX Item "-m4byte-functions"
11723 .PD 0
11724 .IP "\fB\-mno\-4byte\-functions\fR" 4
11725 .IX Item "-mno-4byte-functions"
11726 .PD
11727 Force all functions to be aligned to a four byte boundary.
11728 .IP "\fB\-mcallgraph\-data\fR" 4
11729 .IX Item "-mcallgraph-data"
11730 .PD 0
11731 .IP "\fB\-mno\-callgraph\-data\fR" 4
11732 .IX Item "-mno-callgraph-data"
11733 .PD
11734 Emit callgraph information.
11735 .IP "\fB\-mslow\-bytes\fR" 4
11736 .IX Item "-mslow-bytes"
11737 .PD 0
11738 .IP "\fB\-mno\-slow\-bytes\fR" 4
11739 .IX Item "-mno-slow-bytes"
11740 .PD
11741 Prefer word access when reading byte quantities.
11742 .IP "\fB\-mlittle\-endian\fR" 4
11743 .IX Item "-mlittle-endian"
11744 .PD 0
11745 .IP "\fB\-mbig\-endian\fR" 4
11746 .IX Item "-mbig-endian"
11747 .PD
11748 Generate code for a little endian target.
11749 .IP "\fB\-m210\fR" 4
11750 .IX Item "-m210"
11751 .PD 0
11752 .IP "\fB\-m340\fR" 4
11753 .IX Item "-m340"
11754 .PD
11755 Generate code for the 210 processor.
11756 .IP "\fB\-mno\-lsim\fR" 4
11757 .IX Item "-mno-lsim"
11758 Assume that run-time support has been provided and so omit the
11759 simulator library (\fIlibsim.a)\fR from the linker command line.
11760 .IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
11761 .IX Item "-mstack-increment=size"
11762 Set the maximum amount for a single stack increment operation.  Large
11763 values can increase the speed of programs which contain functions
11764 that need a large amount of stack space, but they can also trigger a
11765 segmentation fault if the stack is extended too much.  The default
11766 value is 0x1000.
11767 .PP
11768 \fI\s-1MIPS\s0 Options\fR
11769 .IX Subsection "MIPS Options"
11770 .IP "\fB\-EB\fR" 4
11771 .IX Item "-EB"
11772 Generate big-endian code.
11773 .IP "\fB\-EL\fR" 4
11774 .IX Item "-EL"
11775 Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
11776 configurations.
11777 .IP "\fB\-march=\fR\fIarch\fR" 4
11778 .IX Item "-march=arch"
11779 Generate code that will run on \fIarch\fR, which can be the name of a
11780 generic \s-1MIPS\s0 \s-1ISA\s0, or the name of a particular processor.
11781 The \s-1ISA\s0 names are:
11782 \&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
11783 \&\fBmips32\fR, \fBmips32r2\fR, \fBmips64\fR and \fBmips64r2\fR.
11784 The processor names are:
11785 \&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
11786 \&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
11787 \&\fB5kc\fR, \fB5kf\fR,
11788 \&\fB20kc\fR,
11789 \&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
11790 \&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
11791 \&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR,
11792 \&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
11793 \&\fBloongson2e\fR, \fBloongson2f\fR,
11794 \&\fBm4k\fR,
11795 \&\fBocteon\fR,
11796 \&\fBorion\fR,
11797 \&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
11798 \&\fBr4600\fR, \fBr4650\fR, \fBr6000\fR, \fBr8000\fR,
11799 \&\fBrm7000\fR, \fBrm9000\fR,
11800 \&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
11801 \&\fBsb1\fR,
11802 \&\fBsr71000\fR,
11803 \&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
11804 \&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR
11805 and \fBxlr\fR.
11806 The special value \fBfrom-abi\fR selects the
11807 most compatible architecture for the selected \s-1ABI\s0 (that is,
11808 \&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
11809 .Sp
11810 Native Linux/GNU toolchains also support the value \fBnative\fR,
11811 which selects the best architecture option for the host processor.
11812 \&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
11813 the processor.
11814 .Sp
11815 In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
11816 (for example, \fB\-march=r2k\fR).  Prefixes are optional, and
11817 \&\fBvr\fR may be written \fBr\fR.
11818 .Sp
11819 Names of the form \fIn\fR\fBf2_1\fR refer to processors with
11820 FPUs clocked at half the rate of the core, names of the form
11821 \&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
11822 rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
11823 processors with FPUs clocked a ratio of 3:2 with respect to the core.
11824 For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
11825 for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
11826 accepted as synonyms for \fIn\fR\fBf1_1\fR.
11827 .Sp
11828 \&\s-1GCC\s0 defines two macros based on the value of this option.  The first
11829 is \fB_MIPS_ARCH\fR, which gives the name of target architecture, as
11830 a string.  The second has the form \fB_MIPS_ARCH_\fR\fIfoo\fR,
11831 where \fIfoo\fR is the capitalized value of \fB_MIPS_ARCH\fR.
11832 For example, \fB\-march=r2000\fR will set \fB_MIPS_ARCH\fR
11833 to \fB\*(L"r2000\*(R"\fR and define the macro \fB_MIPS_ARCH_R2000\fR.
11834 .Sp
11835 Note that the \fB_MIPS_ARCH\fR macro uses the processor names given
11836 above.  In other words, it will have the full prefix and will not
11837 abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
11838 the macro names the resolved architecture (either \fB\*(L"mips1\*(R"\fR or
11839 \&\fB\*(L"mips3\*(R"\fR).  It names the default architecture when no
11840 \&\fB\-march\fR option is given.
11841 .IP "\fB\-mtune=\fR\fIarch\fR" 4
11842 .IX Item "-mtune=arch"
11843 Optimize for \fIarch\fR.  Among other things, this option controls
11844 the way instructions are scheduled, and the perceived cost of arithmetic
11845 operations.  The list of \fIarch\fR values is the same as for
11846 \&\fB\-march\fR.
11847 .Sp
11848 When this option is not used, \s-1GCC\s0 will optimize for the processor
11849 specified by \fB\-march\fR.  By using \fB\-march\fR and
11850 \&\fB\-mtune\fR together, it is possible to generate code that will
11851 run on a family of processors, but optimize the code for one
11852 particular member of that family.
11853 .Sp
11854 \&\fB\-mtune\fR defines the macros \fB_MIPS_TUNE\fR and
11855 \&\fB_MIPS_TUNE_\fR\fIfoo\fR, which work in the same way as the
11856 \&\fB\-march\fR ones described above.
11857 .IP "\fB\-mips1\fR" 4
11858 .IX Item "-mips1"
11859 Equivalent to \fB\-march=mips1\fR.
11860 .IP "\fB\-mips2\fR" 4
11861 .IX Item "-mips2"
11862 Equivalent to \fB\-march=mips2\fR.
11863 .IP "\fB\-mips3\fR" 4
11864 .IX Item "-mips3"
11865 Equivalent to \fB\-march=mips3\fR.
11866 .IP "\fB\-mips4\fR" 4
11867 .IX Item "-mips4"
11868 Equivalent to \fB\-march=mips4\fR.
11869 .IP "\fB\-mips32\fR" 4
11870 .IX Item "-mips32"
11871 Equivalent to \fB\-march=mips32\fR.
11872 .IP "\fB\-mips32r2\fR" 4
11873 .IX Item "-mips32r2"
11874 Equivalent to \fB\-march=mips32r2\fR.
11875 .IP "\fB\-mips64\fR" 4
11876 .IX Item "-mips64"
11877 Equivalent to \fB\-march=mips64\fR.
11878 .IP "\fB\-mips64r2\fR" 4
11879 .IX Item "-mips64r2"
11880 Equivalent to \fB\-march=mips64r2\fR.
11881 .IP "\fB\-mips16\fR" 4
11882 .IX Item "-mips16"
11883 .PD 0
11884 .IP "\fB\-mno\-mips16\fR" 4
11885 .IX Item "-mno-mips16"
11886 .PD
11887 Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targetting a
11888 \&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it will make use of the MIPS16e \s-1ASE\s0.
11889 .Sp
11890 \&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
11891 by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.  
11892 .IP "\fB\-mflip\-mips16\fR" 4
11893 .IX Item "-mflip-mips16"
11894 Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
11895 for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
11896 not intended for ordinary use in compiling user code.
11897 .IP "\fB\-minterlink\-mips16\fR" 4
11898 .IX Item "-minterlink-mips16"
11899 .PD 0
11900 .IP "\fB\-mno\-interlink\-mips16\fR" 4
11901 .IX Item "-mno-interlink-mips16"
11902 .PD
11903 Require (do not require) that non\-MIPS16 code be link-compatible with
11904 \&\s-1MIPS16\s0 code.
11905 .Sp
11906 For example, non\-MIPS16 code cannot jump directly to \s-1MIPS16\s0 code;
11907 it must either use a call or an indirect jump.  \fB\-minterlink\-mips16\fR
11908 therefore disables direct jumps unless \s-1GCC\s0 knows that the target of the
11909 jump is not \s-1MIPS16\s0.
11910 .IP "\fB\-mabi=32\fR" 4
11911 .IX Item "-mabi=32"
11912 .PD 0
11913 .IP "\fB\-mabi=o64\fR" 4
11914 .IX Item "-mabi=o64"
11915 .IP "\fB\-mabi=n32\fR" 4
11916 .IX Item "-mabi=n32"
11917 .IP "\fB\-mabi=64\fR" 4
11918 .IX Item "-mabi=64"
11919 .IP "\fB\-mabi=eabi\fR" 4
11920 .IX Item "-mabi=eabi"
11921 .PD
11922 Generate code for the given \s-1ABI\s0.
11923 .Sp
11924 Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
11925 generates 64\-bit code when you select a 64\-bit architecture, but you
11926 can use \fB\-mgp32\fR to get 32\-bit code instead.
11927 .Sp
11928 For information about the O64 \s-1ABI\s0, see
11929 <\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
11930 .Sp
11931 \&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
11932 are 64 rather than 32 bits wide.  You can select this combination with
11933 \&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \fBmthc1\fR
11934 and \fBmfhc1\fR instructions and is therefore only supported for
11935 \&\s-1MIPS32R2\s0 processors.
11936 .Sp
11937 The register assignments for arguments and return values remain the
11938 same, but each scalar value is passed in a single 64\-bit register
11939 rather than a pair of 32\-bit registers.  For example, scalar
11940 floating-point values are returned in \fB$f0\fR only, not a
11941 \&\fB$f0\fR/\fB$f1\fR pair.  The set of call-saved registers also
11942 remains the same, but all 64 bits are saved.
11943 .IP "\fB\-mabicalls\fR" 4
11944 .IX Item "-mabicalls"
11945 .PD 0
11946 .IP "\fB\-mno\-abicalls\fR" 4
11947 .IX Item "-mno-abicalls"
11948 .PD
11949 Generate (do not generate) code that is suitable for SVR4\-style
11950 dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
11951 systems.
11952 .IP "\fB\-mshared\fR" 4
11953 .IX Item "-mshared"
11954 .PD 0
11955 .IP "\fB\-mno\-shared\fR" 4
11956 .IX Item "-mno-shared"
11957 .PD
11958 Generate (do not generate) code that is fully position\-independent,
11959 and that can therefore be linked into shared libraries.  This option
11960 only affects \fB\-mabicalls\fR.
11961 .Sp
11962 All \fB\-mabicalls\fR code has traditionally been position\-independent,
11963 regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
11964 as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
11965 accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
11966 initialization sequences and generate direct calls to locally-defined
11967 functions.  This mode is selected by \fB\-mno\-shared\fR.
11968 .Sp
11969 \&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
11970 objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
11971 does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
11972 of relocatable objects.  Using \fB\-mno\-shared\fR will generally make
11973 executables both smaller and quicker.
11974 .Sp
11975 \&\fB\-mshared\fR is the default.
11976 .IP "\fB\-mplt\fR" 4
11977 .IX Item "-mplt"
11978 .PD 0
11979 .IP "\fB\-mno\-plt\fR" 4
11980 .IX Item "-mno-plt"
11981 .PD
11982 Assume (do not assume) that the static and dynamic linkers
11983 support PLTs and copy relocations.  This option only affects
11984 \&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI\s0, this option
11985 has no effect without \fB\-msym32\fR.
11986 .Sp
11987 You can make \fB\-mplt\fR the default by configuring
11988 \&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
11989 \&\fB\-mno\-plt\fR otherwise.
11990 .IP "\fB\-mxgot\fR" 4
11991 .IX Item "-mxgot"
11992 .PD 0
11993 .IP "\fB\-mno\-xgot\fR" 4
11994 .IX Item "-mno-xgot"
11995 .PD
11996 Lift (do not lift) the usual restrictions on the size of the global
11997 offset table.
11998 .Sp
11999 \&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT\s0.
12000 While this is relatively efficient, it will only work if the \s-1GOT\s0
12001 is smaller than about 64k.  Anything larger will cause the linker
12002 to report an error such as:
12003 .Sp
12004 .Vb 1
12005 \&        relocation truncated to fit: R_MIPS_GOT16 foobar
12006 .Ve
12007 .Sp
12008 If this happens, you should recompile your code with \fB\-mxgot\fR.
12009 It should then work with very large GOTs, although it will also be
12010 less efficient, since it will take three instructions to fetch the
12011 value of a global symbol.
12012 .Sp
12013 Note that some linkers can create multiple GOTs.  If you have such a
12014 linker, you should only need to use \fB\-mxgot\fR when a single object
12015 file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
12016 .Sp
12017 These options have no effect unless \s-1GCC\s0 is generating position
12018 independent code.
12019 .IP "\fB\-mgp32\fR" 4
12020 .IX Item "-mgp32"
12021 Assume that general-purpose registers are 32 bits wide.
12022 .IP "\fB\-mgp64\fR" 4
12023 .IX Item "-mgp64"
12024 Assume that general-purpose registers are 64 bits wide.
12025 .IP "\fB\-mfp32\fR" 4
12026 .IX Item "-mfp32"
12027 Assume that floating-point registers are 32 bits wide.
12028 .IP "\fB\-mfp64\fR" 4
12029 .IX Item "-mfp64"
12030 Assume that floating-point registers are 64 bits wide.
12031 .IP "\fB\-mhard\-float\fR" 4
12032 .IX Item "-mhard-float"
12033 Use floating-point coprocessor instructions.
12034 .IP "\fB\-msoft\-float\fR" 4
12035 .IX Item "-msoft-float"
12036 Do not use floating-point coprocessor instructions.  Implement
12037 floating-point calculations using library calls instead.
12038 .IP "\fB\-msingle\-float\fR" 4
12039 .IX Item "-msingle-float"
12040 Assume that the floating-point coprocessor only supports single-precision
12041 operations.
12042 .IP "\fB\-mdouble\-float\fR" 4
12043 .IX Item "-mdouble-float"
12044 Assume that the floating-point coprocessor supports double-precision
12045 operations.  This is the default.
12046 .IP "\fB\-mllsc\fR" 4
12047 .IX Item "-mllsc"
12048 .PD 0
12049 .IP "\fB\-mno\-llsc\fR" 4
12050 .IX Item "-mno-llsc"
12051 .PD
12052 Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
12053 implement atomic memory built-in functions.  When neither option is
12054 specified, \s-1GCC\s0 will use the instructions if the target architecture
12055 supports them.
12056 .Sp
12057 \&\fB\-mllsc\fR is useful if the runtime environment can emulate the
12058 instructions and \fB\-mno\-llsc\fR can be useful when compiling for
12059 nonstandard ISAs.  You can make either option the default by
12060 configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
12061 respectively.  \fB\-\-with\-llsc\fR is the default for some
12062 configurations; see the installation documentation for details.
12063 .IP "\fB\-mdsp\fR" 4
12064 .IX Item "-mdsp"
12065 .PD 0
12066 .IP "\fB\-mno\-dsp\fR" 4
12067 .IX Item "-mno-dsp"
12068 .PD
12069 Use (do not use) revision 1 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
12070   This option defines the
12071 preprocessor macro \fB_\|_mips_dsp\fR.  It also defines
12072 \&\fB_\|_mips_dsp_rev\fR to 1.
12073 .IP "\fB\-mdspr2\fR" 4
12074 .IX Item "-mdspr2"
12075 .PD 0
12076 .IP "\fB\-mno\-dspr2\fR" 4
12077 .IX Item "-mno-dspr2"
12078 .PD
12079 Use (do not use) revision 2 of the \s-1MIPS\s0 \s-1DSP\s0 \s-1ASE\s0.
12080   This option defines the
12081 preprocessor macros \fB_\|_mips_dsp\fR and \fB_\|_mips_dspr2\fR.
12082 It also defines \fB_\|_mips_dsp_rev\fR to 2.
12083 .IP "\fB\-msmartmips\fR" 4
12084 .IX Item "-msmartmips"
12085 .PD 0
12086 .IP "\fB\-mno\-smartmips\fR" 4
12087 .IX Item "-mno-smartmips"
12088 .PD
12089 Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE\s0.
12090 .IP "\fB\-mpaired\-single\fR" 4
12091 .IX Item "-mpaired-single"
12092 .PD 0
12093 .IP "\fB\-mno\-paired\-single\fR" 4
12094 .IX Item "-mno-paired-single"
12095 .PD
12096 Use (do not use) paired-single floating-point instructions.
12097   This option requires
12098 hardware floating-point support to be enabled.
12099 .IP "\fB\-mdmx\fR" 4
12100 .IX Item "-mdmx"
12101 .PD 0
12102 .IP "\fB\-mno\-mdmx\fR" 4
12103 .IX Item "-mno-mdmx"
12104 .PD
12105 Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
12106 This option can only be used when generating 64\-bit code and requires
12107 hardware floating-point support to be enabled.
12108 .IP "\fB\-mips3d\fR" 4
12109 .IX Item "-mips3d"
12110 .PD 0
12111 .IP "\fB\-mno\-mips3d\fR" 4
12112 .IX Item "-mno-mips3d"
12113 .PD
12114 Use (do not use) the \s-1MIPS\-3D\s0 \s-1ASE\s0.  
12115 The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
12116 .IP "\fB\-mmt\fR" 4
12117 .IX Item "-mmt"
12118 .PD 0
12119 .IP "\fB\-mno\-mt\fR" 4
12120 .IX Item "-mno-mt"
12121 .PD
12122 Use (do not use) \s-1MT\s0 Multithreading instructions.
12123 .IP "\fB\-mlong64\fR" 4
12124 .IX Item "-mlong64"
12125 Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
12126 an explanation of the default and the way that the pointer size is
12127 determined.
12128 .IP "\fB\-mlong32\fR" 4
12129 .IX Item "-mlong32"
12130 Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
12131 .Sp
12132 The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
12133 the \s-1ABI\s0.  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
12134 uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
12135 32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
12136 or the same size as integer registers, whichever is smaller.
12137 .IP "\fB\-msym32\fR" 4
12138 .IX Item "-msym32"
12139 .PD 0
12140 .IP "\fB\-mno\-sym32\fR" 4
12141 .IX Item "-mno-sym32"
12142 .PD
12143 Assume (do not assume) that all symbols have 32\-bit values, regardless
12144 of the selected \s-1ABI\s0.  This option is useful in combination with
12145 \&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
12146 to generate shorter and faster references to symbolic addresses.
12147 .IP "\fB\-G\fR \fInum\fR" 4
12148 .IX Item "-G num"
12149 Put definitions of externally-visible data in a small data section
12150 if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then access
12151 the data more efficiently; see \fB\-mgpopt\fR for details.
12152 .Sp
12153 The default \fB\-G\fR option depends on the configuration.
12154 .IP "\fB\-mlocal\-sdata\fR" 4
12155 .IX Item "-mlocal-sdata"
12156 .PD 0
12157 .IP "\fB\-mno\-local\-sdata\fR" 4
12158 .IX Item "-mno-local-sdata"
12159 .PD
12160 Extend (do not extend) the \fB\-G\fR behavior to local data too,
12161 such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
12162 default for all configurations.
12163 .Sp
12164 If the linker complains that an application is using too much small data,
12165 you might want to try rebuilding the less performance-critical parts with
12166 \&\fB\-mno\-local\-sdata\fR.  You might also want to build large
12167 libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
12168 more room for the main program.
12169 .IP "\fB\-mextern\-sdata\fR" 4
12170 .IX Item "-mextern-sdata"
12171 .PD 0
12172 .IP "\fB\-mno\-extern\-sdata\fR" 4
12173 .IX Item "-mno-extern-sdata"
12174 .PD
12175 Assume (do not assume) that externally-defined data will be in
12176 a small data section if that data is within the \fB\-G\fR limit.
12177 \&\fB\-mextern\-sdata\fR is the default for all configurations.
12178 .Sp
12179 If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
12180 \&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
12181 that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
12182 is placed in a small data section.  If \fIVar\fR is defined by another
12183 module, you must either compile that module with a high-enough
12184 \&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
12185 definition.  If \fIVar\fR is common, you must link the application
12186 with a high-enough \fB\-G\fR setting.
12187 .Sp
12188 The easiest way of satisfying these restrictions is to compile
12189 and link every module with the same \fB\-G\fR option.  However,
12190 you may wish to build a library that supports several different
12191 small data limits.  You can do this by compiling the library with
12192 the highest supported \fB\-G\fR setting and additionally using
12193 \&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
12194 about externally-defined data.
12195 .IP "\fB\-mgpopt\fR" 4
12196 .IX Item "-mgpopt"
12197 .PD 0
12198 .IP "\fB\-mno\-gpopt\fR" 4
12199 .IX Item "-mno-gpopt"
12200 .PD
12201 Use (do not use) GP-relative accesses for symbols that are known to be
12202 in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
12203 \&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
12204 configurations.
12205 .Sp
12206 \&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
12207 might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
12208 part of a library that might be used in a boot monitor, programs that
12209 call boot monitor routines will pass an unknown value in \f(CW$gp\fR.
12210 (In such situations, the boot monitor itself would usually be compiled
12211 with \fB\-G0\fR.)
12212 .Sp
12213 \&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
12214 \&\fB\-mno\-extern\-sdata\fR.
12215 .IP "\fB\-membedded\-data\fR" 4
12216 .IX Item "-membedded-data"
12217 .PD 0
12218 .IP "\fB\-mno\-embedded\-data\fR" 4
12219 .IX Item "-mno-embedded-data"
12220 .PD
12221 Allocate variables to the read-only data section first if possible, then
12222 next in the small data section if possible, otherwise in data.  This gives
12223 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
12224 when executing, and thus may be preferred for some embedded systems.
12225 .IP "\fB\-muninit\-const\-in\-rodata\fR" 4
12226 .IX Item "-muninit-const-in-rodata"
12227 .PD 0
12228 .IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
12229 .IX Item "-mno-uninit-const-in-rodata"
12230 .PD
12231 Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
12232 This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
12233 .IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
12234 .IX Item "-mcode-readable=setting"
12235 Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
12236 There are three possible settings:
12237 .RS 4
12238 .IP "\fB\-mcode\-readable=yes\fR" 4
12239 .IX Item "-mcode-readable=yes"
12240 Instructions may freely access executable sections.  This is the
12241 default setting.
12242 .IP "\fB\-mcode\-readable=pcrel\fR" 4
12243 .IX Item "-mcode-readable=pcrel"
12244 \&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
12245 but other instructions must not do so.  This option is useful on 4KSc
12246 and 4KSd processors when the code TLBs have the Read Inhibit bit set.
12247 It is also useful on processors that can be configured to have a dual
12248 instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
12249 redirect PC-relative loads to the instruction \s-1RAM\s0.
12250 .IP "\fB\-mcode\-readable=no\fR" 4
12251 .IX Item "-mcode-readable=no"
12252 Instructions must not access executable sections.  This option can be
12253 useful on targets that are configured to have a dual instruction/data
12254 \&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
12255 PC-relative loads to the instruction \s-1RAM\s0.
12256 .RE
12257 .RS 4
12258 .RE
12259 .IP "\fB\-msplit\-addresses\fR" 4
12260 .IX Item "-msplit-addresses"
12261 .PD 0
12262 .IP "\fB\-mno\-split\-addresses\fR" 4
12263 .IX Item "-mno-split-addresses"
12264 .PD
12265 Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
12266 relocation operators.  This option has been superseded by
12267 \&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
12268 .IP "\fB\-mexplicit\-relocs\fR" 4
12269 .IX Item "-mexplicit-relocs"
12270 .PD 0
12271 .IP "\fB\-mno\-explicit\-relocs\fR" 4
12272 .IX Item "-mno-explicit-relocs"
12273 .PD
12274 Use (do not use) assembler relocation operators when dealing with symbolic
12275 addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
12276 is to use assembler macros instead.
12277 .Sp
12278 \&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
12279 to use an assembler that supports relocation operators.
12280 .IP "\fB\-mcheck\-zero\-division\fR" 4
12281 .IX Item "-mcheck-zero-division"
12282 .PD 0
12283 .IP "\fB\-mno\-check\-zero\-division\fR" 4
12284 .IX Item "-mno-check-zero-division"
12285 .PD
12286 Trap (do not trap) on integer division by zero.
12287 .Sp
12288 The default is \fB\-mcheck\-zero\-division\fR.
12289 .IP "\fB\-mdivide\-traps\fR" 4
12290 .IX Item "-mdivide-traps"
12291 .PD 0
12292 .IP "\fB\-mdivide\-breaks\fR" 4
12293 .IX Item "-mdivide-breaks"
12294 .PD
12295 \&\s-1MIPS\s0 systems check for division by zero by generating either a
12296 conditional trap or a break instruction.  Using traps results in
12297 smaller code, but is only supported on \s-1MIPS\s0 \s-1II\s0 and later.  Also, some
12298 versions of the Linux kernel have a bug that prevents trap from
12299 generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
12300 allow conditional traps on architectures that support them and
12301 \&\fB\-mdivide\-breaks\fR to force the use of breaks.
12302 .Sp
12303 The default is usually \fB\-mdivide\-traps\fR, but this can be
12304 overridden at configure time using \fB\-\-with\-divide=breaks\fR.
12305 Divide-by-zero checks can be completely disabled using
12306 \&\fB\-mno\-check\-zero\-division\fR.
12307 .IP "\fB\-mmemcpy\fR" 4
12308 .IX Item "-mmemcpy"
12309 .PD 0
12310 .IP "\fB\-mno\-memcpy\fR" 4
12311 .IX Item "-mno-memcpy"
12312 .PD
12313 Force (do not force) the use of \f(CW\*(C`memcpy()\*(C'\fR for non-trivial block
12314 moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
12315 most constant-sized copies.
12316 .IP "\fB\-mlong\-calls\fR" 4
12317 .IX Item "-mlong-calls"
12318 .PD 0
12319 .IP "\fB\-mno\-long\-calls\fR" 4
12320 .IX Item "-mno-long-calls"
12321 .PD
12322 Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
12323 functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
12324 and callee to be in the same 256 megabyte segment.
12325 .Sp
12326 This option has no effect on abicalls code.  The default is
12327 \&\fB\-mno\-long\-calls\fR.
12328 .IP "\fB\-mmad\fR" 4
12329 .IX Item "-mmad"
12330 .PD 0
12331 .IP "\fB\-mno\-mad\fR" 4
12332 .IX Item "-mno-mad"
12333 .PD
12334 Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
12335 instructions, as provided by the R4650 \s-1ISA\s0.
12336 .IP "\fB\-mfused\-madd\fR" 4
12337 .IX Item "-mfused-madd"
12338 .PD 0
12339 .IP "\fB\-mno\-fused\-madd\fR" 4
12340 .IX Item "-mno-fused-madd"
12341 .PD
12342 Enable (disable) use of the floating point multiply-accumulate
12343 instructions, when they are available.  The default is
12344 \&\fB\-mfused\-madd\fR.
12345 .Sp
12346 When multiply-accumulate instructions are used, the intermediate
12347 product is calculated to infinite precision and is not subject to
12348 the \s-1FCSR\s0 Flush to Zero bit.  This may be undesirable in some
12349 circumstances.
12350 .IP "\fB\-nocpp\fR" 4
12351 .IX Item "-nocpp"
12352 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
12353 assembler files (with a \fB.s\fR suffix) when assembling them.
12354 .IP "\fB\-mfix\-r4000\fR" 4
12355 .IX Item "-mfix-r4000"
12356 .PD 0
12357 .IP "\fB\-mno\-fix\-r4000\fR" 4
12358 .IX Item "-mno-fix-r4000"
12359 .PD
12360 Work around certain R4000 \s-1CPU\s0 errata:
12361 .RS 4
12362 .IP "\-" 4
12363 A double-word or a variable shift may give an incorrect result if executed
12364 immediately after starting an integer division.
12365 .IP "\-" 4
12366 A double-word or a variable shift may give an incorrect result if executed
12367 while an integer multiplication is in progress.
12368 .IP "\-" 4
12369 An integer division may give an incorrect result if started in a delay slot
12370 of a taken branch or a jump.
12371 .RE
12372 .RS 4
12373 .RE
12374 .IP "\fB\-mfix\-r4400\fR" 4
12375 .IX Item "-mfix-r4400"
12376 .PD 0
12377 .IP "\fB\-mno\-fix\-r4400\fR" 4
12378 .IX Item "-mno-fix-r4400"
12379 .PD
12380 Work around certain R4400 \s-1CPU\s0 errata:
12381 .RS 4
12382 .IP "\-" 4
12383 A double-word or a variable shift may give an incorrect result if executed
12384 immediately after starting an integer division.
12385 .RE
12386 .RS 4
12387 .RE
12388 .IP "\fB\-mfix\-r10000\fR" 4
12389 .IX Item "-mfix-r10000"
12390 .PD 0
12391 .IP "\fB\-mno\-fix\-r10000\fR" 4
12392 .IX Item "-mno-fix-r10000"
12393 .PD
12394 Work around certain R10000 errata:
12395 .RS 4
12396 .IP "\-" 4
12397 \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
12398 prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
12399 .RE
12400 .RS 4
12401 .Sp
12402 This option can only be used if the target architecture supports
12403 branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
12404 \&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
12405 otherwise.
12406 .RE
12407 .IP "\fB\-mfix\-vr4120\fR" 4
12408 .IX Item "-mfix-vr4120"
12409 .PD 0
12410 .IP "\fB\-mno\-fix\-vr4120\fR" 4
12411 .IX Item "-mno-fix-vr4120"
12412 .PD
12413 Work around certain \s-1VR4120\s0 errata:
12414 .RS 4
12415 .IP "\-" 4
12416 \&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
12417 .IP "\-" 4
12418 \&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
12419 of the operands is negative.
12420 .RE
12421 .RS 4
12422 .Sp
12423 The workarounds for the division errata rely on special functions in
12424 \&\fIlibgcc.a\fR.  At present, these functions are only provided by
12425 the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
12426 .Sp
12427 Other \s-1VR4120\s0 errata require a nop to be inserted between certain pairs of
12428 instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
12429 .RE
12430 .IP "\fB\-mfix\-vr4130\fR" 4
12431 .IX Item "-mfix-vr4130"
12432 Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
12433 workarounds are implemented by the assembler rather than by \s-1GCC\s0,
12434 although \s-1GCC\s0 will avoid using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
12435 \&\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
12436 instructions are available instead.
12437 .IP "\fB\-mfix\-sb1\fR" 4
12438 .IX Item "-mfix-sb1"
12439 .PD 0
12440 .IP "\fB\-mno\-fix\-sb1\fR" 4
12441 .IX Item "-mno-fix-sb1"
12442 .PD
12443 Work around certain \s-1SB\-1\s0 \s-1CPU\s0 core errata.
12444 (This flag currently works around the \s-1SB\-1\s0 revision 2
12445 \&\*(L"F1\*(R" and \*(L"F2\*(R" floating point errata.)
12446 .IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
12447 .IX Item "-mr10k-cache-barrier=setting"
12448 Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
12449 side-effects of speculation on R10K processors.
12450 .Sp
12451 In common with many processors, the R10K tries to predict the outcome
12452 of a conditional branch and speculatively executes instructions from
12453 the \*(L"taken\*(R" branch.  It later aborts these instructions if the
12454 predicted outcome was wrong.  However, on the R10K, even aborted
12455 instructions can have side effects.
12456 .Sp
12457 This problem only affects kernel stores and, depending on the system,
12458 kernel loads.  As an example, a speculatively-executed store may load
12459 the target memory into cache and mark the cache line as dirty, even if
12460 the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
12461 same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
12462 data will overwrite the DMA-ed data.  See the R10K processor manual
12463 for a full description, including other potential problems.
12464 .Sp
12465 One workaround is to insert cache barrier instructions before every memory
12466 access that might be speculatively executed and that might have side
12467 effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
12468 controls \s-1GCC\s0's implementation of this workaround.  It assumes that
12469 aborted accesses to any byte in the following regions will not have
12470 side effects:
12471 .RS 4
12472 .IP "1." 4
12473 the memory occupied by the current function's stack frame;
12474 .IP "2." 4
12475 the memory occupied by an incoming stack argument;
12476 .IP "3." 4
12477 the memory occupied by an object with a link-time-constant address.
12478 .RE
12479 .RS 4
12480 .Sp
12481 It is the kernel's responsibility to ensure that speculative
12482 accesses to these regions are indeed safe.
12483 .Sp
12484 If the input program contains a function declaration such as:
12485 .Sp
12486 .Vb 1
12487 \&        void foo (void);
12488 .Ve
12489 .Sp
12490 then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
12491 \&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
12492 restriction for functions it compiles itself.  It expects non-GCC
12493 functions (such as hand-written assembly code) to do the same.
12494 .Sp
12495 The option has three forms:
12496 .IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
12497 .IX Item "-mr10k-cache-barrier=load-store"
12498 Insert a cache barrier before a load or store that might be
12499 speculatively executed and that might have side effects even
12500 if aborted.
12501 .IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
12502 .IX Item "-mr10k-cache-barrier=store"
12503 Insert a cache barrier before a store that might be speculatively
12504 executed and that might have side effects even if aborted.
12505 .IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
12506 .IX Item "-mr10k-cache-barrier=none"
12507 Disable the insertion of cache barriers.  This is the default setting.
12508 .RE
12509 .RS 4
12510 .RE
12511 .IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
12512 .IX Item "-mflush-func=func"
12513 .PD 0
12514 .IP "\fB\-mno\-flush\-func\fR" 4
12515 .IX Item "-mno-flush-func"
12516 .PD
12517 Specifies the function to call to flush the I and D caches, or to not
12518 call any such function.  If called, the function must take the same
12519 arguments as the common \f(CW\*(C`_flush_func()\*(C'\fR, that is, the address of the
12520 memory range for which the cache is being flushed, the size of the
12521 memory range, and the number 3 (to flush both caches).  The default
12522 depends on the target \s-1GCC\s0 was configured for, but commonly is either
12523 \&\fB_flush_func\fR or \fB_\|_cpu_flush\fR.
12524 .IP "\fBmbranch\-cost=\fR\fInum\fR" 4
12525 .IX Item "mbranch-cost=num"
12526 Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
12527 This cost is only a heuristic and is not guaranteed to produce
12528 consistent results across releases.  A zero cost redundantly selects
12529 the default, which is based on the \fB\-mtune\fR setting.
12530 .IP "\fB\-mbranch\-likely\fR" 4
12531 .IX Item "-mbranch-likely"
12532 .PD 0
12533 .IP "\fB\-mno\-branch\-likely\fR" 4
12534 .IX Item "-mno-branch-likely"
12535 .PD
12536 Enable or disable use of Branch Likely instructions, regardless of the
12537 default for the selected architecture.  By default, Branch Likely
12538 instructions may be generated if they are supported by the selected
12539 architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
12540 and processors which implement those architectures; for those, Branch
12541 Likely instructions will not be generated by default because the \s-1MIPS32\s0
12542 and \s-1MIPS64\s0 architectures specifically deprecate their use.
12543 .IP "\fB\-mfp\-exceptions\fR" 4
12544 .IX Item "-mfp-exceptions"
12545 .PD 0
12546 .IP "\fB\-mno\-fp\-exceptions\fR" 4
12547 .IX Item "-mno-fp-exceptions"
12548 .PD
12549 Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how we schedule
12550 \&\s-1FP\s0 instructions for some processors.  The default is that \s-1FP\s0 exceptions are
12551 enabled.
12552 .Sp
12553 For instance, on the \s-1SB\-1\s0, if \s-1FP\s0 exceptions are disabled, and we are emitting
12554 64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
12555 \&\s-1FP\s0 pipe.
12556 .IP "\fB\-mvr4130\-align\fR" 4
12557 .IX Item "-mvr4130-align"
12558 .PD 0
12559 .IP "\fB\-mno\-vr4130\-align\fR" 4
12560 .IX Item "-mno-vr4130-align"
12561 .PD
12562 The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
12563 instructions together if the first one is 8\-byte aligned.  When this
12564 option is enabled, \s-1GCC\s0 will align pairs of instructions that it
12565 thinks should execute in parallel.
12566 .Sp
12567 This option only has an effect when optimizing for the \s-1VR4130\s0.
12568 It normally makes code faster, but at the expense of making it bigger.
12569 It is enabled by default at optimization level \fB\-O3\fR.
12570 .PP
12571 \fI\s-1MMIX\s0 Options\fR
12572 .IX Subsection "MMIX Options"
12573 .PP
12574 These options are defined for the \s-1MMIX:\s0
12575 .IP "\fB\-mlibfuncs\fR" 4
12576 .IX Item "-mlibfuncs"
12577 .PD 0
12578 .IP "\fB\-mno\-libfuncs\fR" 4
12579 .IX Item "-mno-libfuncs"
12580 .PD
12581 Specify that intrinsic library functions are being compiled, passing all
12582 values in registers, no matter the size.
12583 .IP "\fB\-mepsilon\fR" 4
12584 .IX Item "-mepsilon"
12585 .PD 0
12586 .IP "\fB\-mno\-epsilon\fR" 4
12587 .IX Item "-mno-epsilon"
12588 .PD
12589 Generate floating-point comparison instructions that compare with respect
12590 to the \f(CW\*(C`rE\*(C'\fR epsilon register.
12591 .IP "\fB\-mabi=mmixware\fR" 4
12592 .IX Item "-mabi=mmixware"
12593 .PD 0
12594 .IP "\fB\-mabi=gnu\fR" 4
12595 .IX Item "-mabi=gnu"
12596 .PD
12597 Generate code that passes function parameters and return values that (in
12598 the called function) are seen as registers \f(CW$0\fR and up, as opposed to
12599 the \s-1GNU\s0 \s-1ABI\s0 which uses global registers \f(CW$231\fR and up.
12600 .IP "\fB\-mzero\-extend\fR" 4
12601 .IX Item "-mzero-extend"
12602 .PD 0
12603 .IP "\fB\-mno\-zero\-extend\fR" 4
12604 .IX Item "-mno-zero-extend"
12605 .PD
12606 When reading data from memory in sizes shorter than 64 bits, use (do not
12607 use) zero-extending load instructions by default, rather than
12608 sign-extending ones.
12609 .IP "\fB\-mknuthdiv\fR" 4
12610 .IX Item "-mknuthdiv"
12611 .PD 0
12612 .IP "\fB\-mno\-knuthdiv\fR" 4
12613 .IX Item "-mno-knuthdiv"
12614 .PD
12615 Make the result of a division yielding a remainder have the same sign as
12616 the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
12617 remainder follows the sign of the dividend.  Both methods are
12618 arithmetically valid, the latter being almost exclusively used.
12619 .IP "\fB\-mtoplevel\-symbols\fR" 4
12620 .IX Item "-mtoplevel-symbols"
12621 .PD 0
12622 .IP "\fB\-mno\-toplevel\-symbols\fR" 4
12623 .IX Item "-mno-toplevel-symbols"
12624 .PD
12625 Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
12626 code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
12627 .IP "\fB\-melf\fR" 4
12628 .IX Item "-melf"
12629 Generate an executable in the \s-1ELF\s0 format, rather than the default
12630 \&\fBmmo\fR format used by the \fBmmix\fR simulator.
12631 .IP "\fB\-mbranch\-predict\fR" 4
12632 .IX Item "-mbranch-predict"
12633 .PD 0
12634 .IP "\fB\-mno\-branch\-predict\fR" 4
12635 .IX Item "-mno-branch-predict"
12636 .PD
12637 Use (do not use) the probable-branch instructions, when static branch
12638 prediction indicates a probable branch.
12639 .IP "\fB\-mbase\-addresses\fR" 4
12640 .IX Item "-mbase-addresses"
12641 .PD 0
12642 .IP "\fB\-mno\-base\-addresses\fR" 4
12643 .IX Item "-mno-base-addresses"
12644 .PD
12645 Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
12646 base address automatically generates a request (handled by the assembler
12647 and the linker) for a constant to be set up in a global register.  The
12648 register is used for one or more base address requests within the range 0
12649 to 255 from the value held in the register.  The generally leads to short
12650 and fast code, but the number of different data items that can be
12651 addressed is limited.  This means that a program that uses lots of static
12652 data may require \fB\-mno\-base\-addresses\fR.
12653 .IP "\fB\-msingle\-exit\fR" 4
12654 .IX Item "-msingle-exit"
12655 .PD 0
12656 .IP "\fB\-mno\-single\-exit\fR" 4
12657 .IX Item "-mno-single-exit"
12658 .PD
12659 Force (do not force) generated code to have a single exit point in each
12660 function.
12661 .PP
12662 \fI\s-1MN10300\s0 Options\fR
12663 .IX Subsection "MN10300 Options"
12664 .PP
12665 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
12666 .IP "\fB\-mmult\-bug\fR" 4
12667 .IX Item "-mmult-bug"
12668 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
12669 processors.  This is the default.
12670 .IP "\fB\-mno\-mult\-bug\fR" 4
12671 .IX Item "-mno-mult-bug"
12672 Do not generate code to avoid bugs in the multiply instructions for the
12673 \&\s-1MN10300\s0 processors.
12674 .IP "\fB\-mam33\fR" 4
12675 .IX Item "-mam33"
12676 Generate code which uses features specific to the \s-1AM33\s0 processor.
12677 .IP "\fB\-mno\-am33\fR" 4
12678 .IX Item "-mno-am33"
12679 Do not generate code which uses features specific to the \s-1AM33\s0 processor.  This
12680 is the default.
12681 .IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
12682 .IX Item "-mreturn-pointer-on-d0"
12683 When generating a function which returns a pointer, return the pointer
12684 in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
12685 only in a0, and attempts to call such functions without a prototype
12686 would result in errors.  Note that this option is on by default; use
12687 \&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
12688 .IP "\fB\-mno\-crt0\fR" 4
12689 .IX Item "-mno-crt0"
12690 Do not link in the C run-time initialization object file.
12691 .IP "\fB\-mrelax\fR" 4
12692 .IX Item "-mrelax"
12693 Indicate to the linker that it should perform a relaxation optimization pass
12694 to shorten branches, calls and absolute memory addresses.  This option only
12695 has an effect when used on the command line for the final link step.
12696 .Sp
12697 This option makes symbolic debugging impossible.
12698 .PP
12699 \fI\s-1PDP\-11\s0 Options\fR
12700 .IX Subsection "PDP-11 Options"
12701 .PP
12702 These options are defined for the \s-1PDP\-11:\s0
12703 .IP "\fB\-mfpu\fR" 4
12704 .IX Item "-mfpu"
12705 Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
12706 point on the \s-1PDP\-11/40\s0 is not supported.)
12707 .IP "\fB\-msoft\-float\fR" 4
12708 .IX Item "-msoft-float"
12709 Do not use hardware floating point.
12710 .IP "\fB\-mac0\fR" 4
12711 .IX Item "-mac0"
12712 Return floating-point results in ac0 (fr0 in Unix assembler syntax).
12713 .IP "\fB\-mno\-ac0\fR" 4
12714 .IX Item "-mno-ac0"
12715 Return floating-point results in memory.  This is the default.
12716 .IP "\fB\-m40\fR" 4
12717 .IX Item "-m40"
12718 Generate code for a \s-1PDP\-11/40\s0.
12719 .IP "\fB\-m45\fR" 4
12720 .IX Item "-m45"
12721 Generate code for a \s-1PDP\-11/45\s0.  This is the default.
12722 .IP "\fB\-m10\fR" 4
12723 .IX Item "-m10"
12724 Generate code for a \s-1PDP\-11/10\s0.
12725 .IP "\fB\-mbcopy\-builtin\fR" 4
12726 .IX Item "-mbcopy-builtin"
12727 Use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.  This is the
12728 default.
12729 .IP "\fB\-mbcopy\fR" 4
12730 .IX Item "-mbcopy"
12731 Do not use inline \f(CW\*(C`movmemhi\*(C'\fR patterns for copying memory.
12732 .IP "\fB\-mint16\fR" 4
12733 .IX Item "-mint16"
12734 .PD 0
12735 .IP "\fB\-mno\-int32\fR" 4
12736 .IX Item "-mno-int32"
12737 .PD
12738 Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
12739 .IP "\fB\-mint32\fR" 4
12740 .IX Item "-mint32"
12741 .PD 0
12742 .IP "\fB\-mno\-int16\fR" 4
12743 .IX Item "-mno-int16"
12744 .PD
12745 Use 32\-bit \f(CW\*(C`int\*(C'\fR.
12746 .IP "\fB\-mfloat64\fR" 4
12747 .IX Item "-mfloat64"
12748 .PD 0
12749 .IP "\fB\-mno\-float32\fR" 4
12750 .IX Item "-mno-float32"
12751 .PD
12752 Use 64\-bit \f(CW\*(C`float\*(C'\fR.  This is the default.
12753 .IP "\fB\-mfloat32\fR" 4
12754 .IX Item "-mfloat32"
12755 .PD 0
12756 .IP "\fB\-mno\-float64\fR" 4
12757 .IX Item "-mno-float64"
12758 .PD
12759 Use 32\-bit \f(CW\*(C`float\*(C'\fR.
12760 .IP "\fB\-mabshi\fR" 4
12761 .IX Item "-mabshi"
12762 Use \f(CW\*(C`abshi2\*(C'\fR pattern.  This is the default.
12763 .IP "\fB\-mno\-abshi\fR" 4
12764 .IX Item "-mno-abshi"
12765 Do not use \f(CW\*(C`abshi2\*(C'\fR pattern.
12766 .IP "\fB\-mbranch\-expensive\fR" 4
12767 .IX Item "-mbranch-expensive"
12768 Pretend that branches are expensive.  This is for experimenting with
12769 code generation only.
12770 .IP "\fB\-mbranch\-cheap\fR" 4
12771 .IX Item "-mbranch-cheap"
12772 Do not pretend that branches are expensive.  This is the default.
12773 .IP "\fB\-msplit\fR" 4
12774 .IX Item "-msplit"
12775 Generate code for a system with split I&D.
12776 .IP "\fB\-mno\-split\fR" 4
12777 .IX Item "-mno-split"
12778 Generate code for a system without split I&D.  This is the default.
12779 .IP "\fB\-munix\-asm\fR" 4
12780 .IX Item "-munix-asm"
12781 Use Unix assembler syntax.  This is the default when configured for
12782 \&\fBpdp11\-*\-bsd\fR.
12783 .IP "\fB\-mdec\-asm\fR" 4
12784 .IX Item "-mdec-asm"
12785 Use \s-1DEC\s0 assembler syntax.  This is the default when configured for any
12786 \&\s-1PDP\-11\s0 target other than \fBpdp11\-*\-bsd\fR.
12787 .PP
12788 \fIpicoChip Options\fR
12789 .IX Subsection "picoChip Options"
12790 .PP
12791 These \fB\-m\fR options are defined for picoChip implementations:
12792 .IP "\fB\-mae=\fR\fIae_type\fR" 4
12793 .IX Item "-mae=ae_type"
12794 Set the instruction set, register set, and instruction scheduling
12795 parameters for array element type \fIae_type\fR.  Supported values
12796 for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
12797 .Sp
12798 \&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
12799 generated with this option will run on any of the other \s-1AE\s0 types.  The
12800 code will not be as efficient as it would be if compiled for a specific
12801 \&\s-1AE\s0 type, and some types of operation (e.g., multiplication) will not
12802 work properly on all types of \s-1AE\s0.
12803 .Sp
12804 \&\fB\-mae=MUL\fR selects a \s-1MUL\s0 \s-1AE\s0 type.  This is the most useful \s-1AE\s0 type
12805 for compiled code, and is the default.
12806 .Sp
12807 \&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC\s0 \s-1AE\s0.  Code compiled with this
12808 option may suffer from poor performance of byte (char) manipulation,
12809 since the \s-1DSP\s0 \s-1AE\s0 does not provide hardware support for byte load/stores.
12810 .IP "\fB\-msymbol\-as\-address\fR" 4
12811 .IX Item "-msymbol-as-address"
12812 Enable the compiler to directly use a symbol name as an address in a
12813 load/store instruction, without first loading it into a
12814 register.  Typically, the use of this option will generate larger
12815 programs, which run faster than when the option isn't used.  However, the
12816 results vary from program to program, so it is left as a user option,
12817 rather than being permanently enabled.
12818 .IP "\fB\-mno\-inefficient\-warnings\fR" 4
12819 .IX Item "-mno-inefficient-warnings"
12820 Disables warnings about the generation of inefficient code.  These
12821 warnings can be generated, for example, when compiling code which
12822 performs byte-level memory operations on the \s-1MAC\s0 \s-1AE\s0 type.  The \s-1MAC\s0 \s-1AE\s0 has
12823 no hardware support for byte-level memory operations, so all byte
12824 load/stores must be synthesized from word load/store operations.  This is
12825 inefficient and a warning will be generated indicating to the programmer
12826 that they should rewrite the code to avoid byte operations, or to target
12827 an \s-1AE\s0 type which has the necessary hardware support.  This option enables
12828 the warning to be turned off.
12829 .PP
12830 \fIPowerPC Options\fR
12831 .IX Subsection "PowerPC Options"
12832 .PP
12833 These are listed under 
12834 .PP
12835 \fI\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options\fR
12836 .IX Subsection "IBM RS/6000 and PowerPC Options"
12837 .PP
12838 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
12839 .IP "\fB\-mpower\fR" 4
12840 .IX Item "-mpower"
12841 .PD 0
12842 .IP "\fB\-mno\-power\fR" 4
12843 .IX Item "-mno-power"
12844 .IP "\fB\-mpower2\fR" 4
12845 .IX Item "-mpower2"
12846 .IP "\fB\-mno\-power2\fR" 4
12847 .IX Item "-mno-power2"
12848 .IP "\fB\-mpowerpc\fR" 4
12849 .IX Item "-mpowerpc"
12850 .IP "\fB\-mno\-powerpc\fR" 4
12851 .IX Item "-mno-powerpc"
12852 .IP "\fB\-mpowerpc\-gpopt\fR" 4
12853 .IX Item "-mpowerpc-gpopt"
12854 .IP "\fB\-mno\-powerpc\-gpopt\fR" 4
12855 .IX Item "-mno-powerpc-gpopt"
12856 .IP "\fB\-mpowerpc\-gfxopt\fR" 4
12857 .IX Item "-mpowerpc-gfxopt"
12858 .IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
12859 .IX Item "-mno-powerpc-gfxopt"
12860 .IP "\fB\-mpowerpc64\fR" 4
12861 .IX Item "-mpowerpc64"
12862 .IP "\fB\-mno\-powerpc64\fR" 4
12863 .IX Item "-mno-powerpc64"
12864 .IP "\fB\-mmfcrf\fR" 4
12865 .IX Item "-mmfcrf"
12866 .IP "\fB\-mno\-mfcrf\fR" 4
12867 .IX Item "-mno-mfcrf"
12868 .IP "\fB\-mpopcntb\fR" 4
12869 .IX Item "-mpopcntb"
12870 .IP "\fB\-mno\-popcntb\fR" 4
12871 .IX Item "-mno-popcntb"
12872 .IP "\fB\-mfprnd\fR" 4
12873 .IX Item "-mfprnd"
12874 .IP "\fB\-mno\-fprnd\fR" 4
12875 .IX Item "-mno-fprnd"
12876 .IP "\fB\-mcmpb\fR" 4
12877 .IX Item "-mcmpb"
12878 .IP "\fB\-mno\-cmpb\fR" 4
12879 .IX Item "-mno-cmpb"
12880 .IP "\fB\-mmfpgpr\fR" 4
12881 .IX Item "-mmfpgpr"
12882 .IP "\fB\-mno\-mfpgpr\fR" 4
12883 .IX Item "-mno-mfpgpr"
12884 .IP "\fB\-mhard\-dfp\fR" 4
12885 .IX Item "-mhard-dfp"
12886 .IP "\fB\-mno\-hard\-dfp\fR" 4
12887 .IX Item "-mno-hard-dfp"
12888 .PD
12889 \&\s-1GCC\s0 supports two related instruction set architectures for the
12890 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
12891 instructions supported by the \fBrios\fR chip set used in the original
12892 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
12893 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, and
12894 the \s-1IBM\s0 4xx, 6xx, and follow-on microprocessors.
12895 .Sp
12896 Neither architecture is a subset of the other.  However there is a
12897 large common subset of instructions supported by both.  An \s-1MQ\s0
12898 register is included in processors supporting the \s-1POWER\s0 architecture.
12899 .Sp
12900 You use these options to specify which instructions are available on the
12901 processor you are using.  The default value of these options is
12902 determined when configuring \s-1GCC\s0.  Specifying the
12903 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
12904 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
12905 rather than the options listed above.
12906 .Sp
12907 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
12908 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
12909 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
12910 to generate instructions that are present in the \s-1POWER2\s0 architecture but
12911 not the original \s-1POWER\s0 architecture.
12912 .Sp
12913 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
12914 are found only in the 32\-bit subset of the PowerPC architecture.
12915 Specifying \fB\-mpowerpc\-gpopt\fR implies \fB\-mpowerpc\fR and also allows
12916 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
12917 General Purpose group, including floating-point square root.  Specifying
12918 \&\fB\-mpowerpc\-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
12919 use the optional PowerPC architecture instructions in the Graphics
12920 group, including floating-point select.
12921 .Sp
12922 The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
12923 condition register field instruction implemented on the \s-1POWER4\s0
12924 processor and other processors that support the PowerPC V2.01
12925 architecture.
12926 The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
12927 double precision \s-1FP\s0 reciprocal estimate instruction implemented on the
12928 \&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
12929 architecture.
12930 The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
12931 integer instructions implemented on the \s-1POWER5+\s0 processor and other
12932 processors that support the PowerPC V2.03 architecture.
12933 The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
12934 instruction implemented on the \s-1POWER6\s0 processor and other processors
12935 that support the PowerPC V2.05 architecture.
12936 The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
12937 general purpose register instructions implemented on the \s-1POWER6X\s0
12938 processor and other processors that support the extended PowerPC V2.05
12939 architecture.
12940 The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal floating
12941 point instructions implemented on some \s-1POWER\s0 processors.
12942 .Sp
12943 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
12944 64\-bit instructions that are found in the full PowerPC64 architecture
12945 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
12946 \&\fB\-mno\-powerpc64\fR.
12947 .Sp
12948 If you specify both \fB\-mno\-power\fR and \fB\-mno\-powerpc\fR, \s-1GCC\s0
12949 will use only the instructions in the common subset of both
12950 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
12951 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
12952 permits \s-1GCC\s0 to use any instruction from either architecture and to
12953 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
12954 .IP "\fB\-mnew\-mnemonics\fR" 4
12955 .IX Item "-mnew-mnemonics"
12956 .PD 0
12957 .IP "\fB\-mold\-mnemonics\fR" 4
12958 .IX Item "-mold-mnemonics"
12959 .PD
12960 Select which mnemonics to use in the generated assembler code.  With
12961 \&\fB\-mnew\-mnemonics\fR, \s-1GCC\s0 uses the assembler mnemonics defined for
12962 the PowerPC architecture.  With \fB\-mold\-mnemonics\fR it uses the
12963 assembler mnemonics defined for the \s-1POWER\s0 architecture.  Instructions
12964 defined in only one architecture have only one mnemonic; \s-1GCC\s0 uses that
12965 mnemonic irrespective of which of these options is specified.
12966 .Sp
12967 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
12968 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
12969 value of these option.  Unless you are building a cross\-compiler, you
12970 should normally not specify either \fB\-mnew\-mnemonics\fR or
12971 \&\fB\-mold\-mnemonics\fR, but should instead accept the default.
12972 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
12973 .IX Item "-mcpu=cpu_type"
12974 Set architecture type, register usage, choice of mnemonics, and
12975 instruction scheduling parameters for machine type \fIcpu_type\fR.
12976 Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
12977 \&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
12978 \&\fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR, \fB603e\fR, \fB604\fR,
12979 \&\fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR, \fB7400\fR,
12980 \&\fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
12981 \&\fB860\fR, \fB970\fR, \fB8540\fR, \fBe300c2\fR, \fBe300c3\fR,
12982 \&\fBe500mc\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
12983 \&\fBpower\fR, \fBpower2\fR, \fBpower3\fR, \fBpower4\fR,
12984 \&\fBpower5\fR, \fBpower5+\fR, \fBpower6\fR, \fBpower6x\fR, \fBpower7\fR
12985 \&\fBcommon\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBrios\fR,
12986 \&\fBrios1\fR, \fBrios2\fR, \fBrsc\fR, and \fBrs64\fR.
12987 .Sp
12988 \&\fB\-mcpu=common\fR selects a completely generic processor.  Code
12989 generated under this option will run on any \s-1POWER\s0 or PowerPC processor.
12990 \&\s-1GCC\s0 will use only the instructions in the common subset of both
12991 architectures, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
12992 processor model for scheduling purposes.
12993 .Sp
12994 \&\fB\-mcpu=power\fR, \fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and
12995 \&\fB\-mcpu=powerpc64\fR specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit
12996 PowerPC (i.e., not \s-1MPC601\s0), and 64\-bit PowerPC architecture machine
12997 types, with an appropriate, generic processor model assumed for
12998 scheduling purposes.
12999 .Sp
13000 The other options specify a specific processor.  Code generated under
13001 those options will run best on that processor, and may not run at all on
13002 others.
13003 .Sp
13004 The \fB\-mcpu\fR options automatically enable or disable the
13005 following options:
13006 .Sp
13007 \&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
13008 \&\-mnew\-mnemonics  \-mpopcntb  \-mpower  \-mpower2  \-mpowerpc64 
13009 \&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt  \-msingle\-float \-mdouble\-float 
13010 \&\-msimple\-fpu \-mstring  \-mmulhw  \-mdlmzb  \-mmfpgpr\fR
13011 .Sp
13012 The particular options set for any particular \s-1CPU\s0 will vary between
13013 compiler versions, depending on what setting seems to produce optimal
13014 code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
13015 capabilities.  If you wish to set an individual option to a particular
13016 value, you may specify it after the \fB\-mcpu\fR option, like
13017 \&\fB\-mcpu=970 \-mno\-altivec\fR.
13018 .Sp
13019 On \s-1AIX\s0, the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
13020 not enabled or disabled by the \fB\-mcpu\fR option at present because
13021 \&\s-1AIX\s0 does not have full support for these options.  You may still
13022 enable or disable them individually if you're sure it'll work in your
13023 environment.
13024 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
13025 .IX Item "-mtune=cpu_type"
13026 Set the instruction scheduling parameters for machine type
13027 \&\fIcpu_type\fR, but do not set the architecture type, register usage, or
13028 choice of mnemonics, as \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
13029 values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
13030 \&\fB\-mcpu\fR.  If both are specified, the code generated will use the
13031 architecture, registers, and mnemonics set by \fB\-mcpu\fR, but the
13032 scheduling parameters set by \fB\-mtune\fR.
13033 .IP "\fB\-mswdiv\fR" 4
13034 .IX Item "-mswdiv"
13035 .PD 0
13036 .IP "\fB\-mno\-swdiv\fR" 4
13037 .IX Item "-mno-swdiv"
13038 .PD
13039 Generate code to compute division as reciprocal estimate and iterative
13040 refinement, creating opportunities for increased throughput.  This
13041 feature requires: optional PowerPC Graphics instruction set for single
13042 precision and \s-1FRE\s0 instruction for double precision, assuming divides
13043 cannot generate user-visible traps, and the domain values not include
13044 Infinities, denormals or zero denominator.
13045 .IP "\fB\-maltivec\fR" 4
13046 .IX Item "-maltivec"
13047 .PD 0
13048 .IP "\fB\-mno\-altivec\fR" 4
13049 .IX Item "-mno-altivec"
13050 .PD
13051 Generate code that uses (does not use) AltiVec instructions, and also
13052 enable the use of built-in functions that allow more direct access to
13053 the AltiVec instruction set.  You may also need to set
13054 \&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
13055 enhancements.
13056 .IP "\fB\-mvrsave\fR" 4
13057 .IX Item "-mvrsave"
13058 .PD 0
13059 .IP "\fB\-mno\-vrsave\fR" 4
13060 .IX Item "-mno-vrsave"
13061 .PD
13062 Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
13063 .IP "\fB\-mgen\-cell\-microcode\fR" 4
13064 .IX Item "-mgen-cell-microcode"
13065 Generate Cell microcode instructions
13066 .IP "\fB\-mwarn\-cell\-microcode\fR" 4
13067 .IX Item "-mwarn-cell-microcode"
13068 Warning when a Cell microcode instruction is going to emitted.  An example
13069 of a Cell microcode instruction is a variable shift.
13070 .IP "\fB\-msecure\-plt\fR" 4
13071 .IX Item "-msecure-plt"
13072 Generate code that allows ld and ld.so to build executables and shared
13073 libraries with non-exec .plt and .got sections.  This is a PowerPC
13074 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13075 .IP "\fB\-mbss\-plt\fR" 4
13076 .IX Item "-mbss-plt"
13077 Generate code that uses a \s-1BSS\s0 .plt section that ld.so fills in, and
13078 requires .plt and .got sections that are both writable and executable.
13079 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13080 .IP "\fB\-misel\fR" 4
13081 .IX Item "-misel"
13082 .PD 0
13083 .IP "\fB\-mno\-isel\fR" 4
13084 .IX Item "-mno-isel"
13085 .PD
13086 This switch enables or disables the generation of \s-1ISEL\s0 instructions.
13087 .IP "\fB\-misel=\fR\fIyes/no\fR" 4
13088 .IX Item "-misel=yes/no"
13089 This switch has been deprecated.  Use \fB\-misel\fR and
13090 \&\fB\-mno\-isel\fR instead.
13091 .IP "\fB\-mspe\fR" 4
13092 .IX Item "-mspe"
13093 .PD 0
13094 .IP "\fB\-mno\-spe\fR" 4
13095 .IX Item "-mno-spe"
13096 .PD
13097 This switch enables or disables the generation of \s-1SPE\s0 simd
13098 instructions.
13099 .IP "\fB\-mpaired\fR" 4
13100 .IX Item "-mpaired"
13101 .PD 0
13102 .IP "\fB\-mno\-paired\fR" 4
13103 .IX Item "-mno-paired"
13104 .PD
13105 This switch enables or disables the generation of \s-1PAIRED\s0 simd
13106 instructions.
13107 .IP "\fB\-mspe=\fR\fIyes/no\fR" 4
13108 .IX Item "-mspe=yes/no"
13109 This option has been deprecated.  Use \fB\-mspe\fR and
13110 \&\fB\-mno\-spe\fR instead.
13111 .IP "\fB\-mfloat\-gprs=\fR\fIyes/single/double/no\fR" 4
13112 .IX Item "-mfloat-gprs=yes/single/double/no"
13113 .PD 0
13114 .IP "\fB\-mfloat\-gprs\fR" 4
13115 .IX Item "-mfloat-gprs"
13116 .PD
13117 This switch enables or disables the generation of floating point
13118 operations on the general purpose registers for architectures that
13119 support it.
13120 .Sp
13121 The argument \fIyes\fR or \fIsingle\fR enables the use of
13122 single-precision floating point operations.
13123 .Sp
13124 The argument \fIdouble\fR enables the use of single and
13125 double-precision floating point operations.
13126 .Sp
13127 The argument \fIno\fR disables floating point operations on the
13128 general purpose registers.
13129 .Sp
13130 This option is currently only available on the MPC854x.
13131 .IP "\fB\-m32\fR" 4
13132 .IX Item "-m32"
13133 .PD 0
13134 .IP "\fB\-m64\fR" 4
13135 .IX Item "-m64"
13136 .PD
13137 Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
13138 targets (including GNU/Linux).  The 32\-bit environment sets int, long
13139 and pointer to 32 bits and generates code that runs on any PowerPC
13140 variant.  The 64\-bit environment sets int to 32 bits and long and
13141 pointer to 64 bits, and generates code for PowerPC64, as for
13142 \&\fB\-mpowerpc64\fR.
13143 .IP "\fB\-mfull\-toc\fR" 4
13144 .IX Item "-mfull-toc"
13145 .PD 0
13146 .IP "\fB\-mno\-fp\-in\-toc\fR" 4
13147 .IX Item "-mno-fp-in-toc"
13148 .IP "\fB\-mno\-sum\-in\-toc\fR" 4
13149 .IX Item "-mno-sum-in-toc"
13150 .IP "\fB\-mminimal\-toc\fR" 4
13151 .IX Item "-mminimal-toc"
13152 .PD
13153 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
13154 every executable file.  The \fB\-mfull\-toc\fR option is selected by
13155 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
13156 each unique non-automatic variable reference in your program.  \s-1GCC\s0
13157 will also place floating-point constants in the \s-1TOC\s0.  However, only
13158 16,384 entries are available in the \s-1TOC\s0.
13159 .Sp
13160 If you receive a linker error message that saying you have overflowed
13161 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
13162 with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
13163 \&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
13164 constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
13165 generate code to calculate the sum of an address and a constant at
13166 run-time instead of putting that sum into the \s-1TOC\s0.  You may specify one
13167 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
13168 slower and larger code at the expense of conserving \s-1TOC\s0 space.
13169 .Sp
13170 If you still run out of space in the \s-1TOC\s0 even when you specify both of
13171 these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
13172 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
13173 option, \s-1GCC\s0 will produce code that is slower and larger but which
13174 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
13175 only on files that contain less frequently executed code.
13176 .IP "\fB\-maix64\fR" 4
13177 .IX Item "-maix64"
13178 .PD 0
13179 .IP "\fB\-maix32\fR" 4
13180 .IX Item "-maix32"
13181 .PD
13182 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
13183 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
13184 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
13185 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
13186 implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
13187 .IP "\fB\-mxl\-compat\fR" 4
13188 .IX Item "-mxl-compat"
13189 .PD 0
13190 .IP "\fB\-mno\-xl\-compat\fR" 4
13191 .IX Item "-mno-xl-compat"
13192 .PD
13193 Produce code that conforms more closely to \s-1IBM\s0 \s-1XL\s0 compiler semantics
13194 when using AIX-compatible \s-1ABI\s0.  Pass floating-point arguments to
13195 prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
13196 in addition to argument FPRs.  Do not assume that most significant
13197 double in 128\-bit long double value is properly rounded when comparing
13198 values and converting to double.  Use \s-1XL\s0 symbol names for long double
13199 support routines.
13200 .Sp
13201 The \s-1AIX\s0 calling convention was extended but not initially documented to
13202 handle an obscure K&R C case of calling a function that takes the
13203 address of its arguments with fewer arguments than declared.  \s-1IBM\s0 \s-1XL\s0
13204 compilers access floating point arguments which do not fit in the
13205 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
13206 optimization.  Because always storing floating-point arguments on the
13207 stack is inefficient and rarely needed, this option is not enabled by
13208 default and only is necessary when calling subroutines compiled by \s-1IBM\s0
13209 \&\s-1XL\s0 compilers without optimization.
13210 .IP "\fB\-mpe\fR" 4
13211 .IX Item "-mpe"
13212 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
13213 application written to use message passing with special startup code to
13214 enable the application to run.  The system must have \s-1PE\s0 installed in the
13215 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
13216 must be overridden with the \fB\-specs=\fR option to specify the
13217 appropriate directory location.  The Parallel Environment does not
13218 support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
13219 option are incompatible.
13220 .IP "\fB\-malign\-natural\fR" 4
13221 .IX Item "-malign-natural"
13222 .PD 0
13223 .IP "\fB\-malign\-power\fR" 4
13224 .IX Item "-malign-power"
13225 .PD
13226 On \s-1AIX\s0, 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
13227 \&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
13228 types, such as floating-point doubles, on their natural size-based boundary.
13229 The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
13230 alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI\s0.
13231 .Sp
13232 On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
13233 is not supported.
13234 .IP "\fB\-msoft\-float\fR" 4
13235 .IX Item "-msoft-float"
13236 .PD 0
13237 .IP "\fB\-mhard\-float\fR" 4
13238 .IX Item "-mhard-float"
13239 .PD
13240 Generate code that does not use (uses) the floating-point register set.
13241 Software floating point emulation is provided if you use the
13242 \&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
13243 .IP "\fB\-msingle\-float\fR" 4
13244 .IX Item "-msingle-float"
13245 .PD 0
13246 .IP "\fB\-mdouble\-float\fR" 4
13247 .IX Item "-mdouble-float"
13248 .PD
13249 Generate code for single or double-precision floating point operations. 
13250 \&\fB\-mdouble\-float\fR implies \fB\-msingle\-float\fR. 
13251 .IP "\fB\-msimple\-fpu\fR" 4
13252 .IX Item "-msimple-fpu"
13253 Do not generate sqrt and div instructions for hardware floating point unit.
13254 .IP "\fB\-mfpu\fR" 4
13255 .IX Item "-mfpu"
13256 Specify type of floating point unit.  Valid values are \fIsp_lite\fR 
13257 (equivalent to \-msingle\-float \-msimple\-fpu), \fIdp_lite\fR (equivalent
13258 to \-mdouble\-float \-msimple\-fpu), \fIsp_full\fR (equivalent to \-msingle\-float),
13259 and \fIdp_full\fR (equivalent to \-mdouble\-float).
13260 .IP "\fB\-mxilinx\-fpu\fR" 4
13261 .IX Item "-mxilinx-fpu"
13262 Perform optimizations for floating point unit on Xilinx \s-1PPC\s0 405/440.
13263 .IP "\fB\-mmultiple\fR" 4
13264 .IX Item "-mmultiple"
13265 .PD 0
13266 .IP "\fB\-mno\-multiple\fR" 4
13267 .IX Item "-mno-multiple"
13268 .PD
13269 Generate code that uses (does not use) the load multiple word
13270 instructions and the store multiple word instructions.  These
13271 instructions are generated by default on \s-1POWER\s0 systems, and not
13272 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little
13273 endian PowerPC systems, since those instructions do not work when the
13274 processor is in little endian mode.  The exceptions are \s-1PPC740\s0 and
13275 \&\s-1PPC750\s0 which permit the instructions usage in little endian mode.
13276 .IP "\fB\-mstring\fR" 4
13277 .IX Item "-mstring"
13278 .PD 0
13279 .IP "\fB\-mno\-string\fR" 4
13280 .IX Item "-mno-string"
13281 .PD
13282 Generate code that uses (does not use) the load string instructions
13283 and the store string word instructions to save multiple registers and
13284 do small block moves.  These instructions are generated by default on
13285 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
13286 \&\fB\-mstring\fR on little endian PowerPC systems, since those
13287 instructions do not work when the processor is in little endian mode.
13288 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
13289 usage in little endian mode.
13290 .IP "\fB\-mupdate\fR" 4
13291 .IX Item "-mupdate"
13292 .PD 0
13293 .IP "\fB\-mno\-update\fR" 4
13294 .IX Item "-mno-update"
13295 .PD
13296 Generate code that uses (does not use) the load or store instructions
13297 that update the base register to the address of the calculated memory
13298 location.  These instructions are generated by default.  If you use
13299 \&\fB\-mno\-update\fR, there is a small window between the time that the
13300 stack pointer is updated and the address of the previous frame is
13301 stored, which means code that walks the stack frame across interrupts or
13302 signals may get corrupted data.
13303 .IP "\fB\-mavoid\-indexed\-addresses\fR" 4
13304 .IX Item "-mavoid-indexed-addresses"
13305 .PD 0
13306 .IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
13307 .IX Item "-mno-avoid-indexed-addresses"
13308 .PD
13309 Generate code that tries to avoid (not avoid) the use of indexed load
13310 or store instructions. These instructions can incur a performance
13311 penalty on Power6 processors in certain situations, such as when
13312 stepping through large arrays that cross a 16M boundary.  This option
13313 is enabled by default when targetting Power6 and disabled otherwise.
13314 .IP "\fB\-mfused\-madd\fR" 4
13315 .IX Item "-mfused-madd"
13316 .PD 0
13317 .IP "\fB\-mno\-fused\-madd\fR" 4
13318 .IX Item "-mno-fused-madd"
13319 .PD
13320 Generate code that uses (does not use) the floating point multiply and
13321 accumulate instructions.  These instructions are generated by default if
13322 hardware floating is used.
13323 .IP "\fB\-mmulhw\fR" 4
13324 .IX Item "-mmulhw"
13325 .PD 0
13326 .IP "\fB\-mno\-mulhw\fR" 4
13327 .IX Item "-mno-mulhw"
13328 .PD
13329 Generate code that uses (does not use) the half-word multiply and
13330 multiply-accumulate instructions on the \s-1IBM\s0 405, 440 and 464 processors.
13331 These instructions are generated by default when targetting those
13332 processors.
13333 .IP "\fB\-mdlmzb\fR" 4
13334 .IX Item "-mdlmzb"
13335 .PD 0
13336 .IP "\fB\-mno\-dlmzb\fR" 4
13337 .IX Item "-mno-dlmzb"
13338 .PD
13339 Generate code that uses (does not use) the string-search \fBdlmzb\fR
13340 instruction on the \s-1IBM\s0 405, 440 and 464 processors.  This instruction is
13341 generated by default when targetting those processors.
13342 .IP "\fB\-mno\-bit\-align\fR" 4
13343 .IX Item "-mno-bit-align"
13344 .PD 0
13345 .IP "\fB\-mbit\-align\fR" 4
13346 .IX Item "-mbit-align"
13347 .PD
13348 On System V.4 and embedded PowerPC systems do not (do) force structures
13349 and unions that contain bit-fields to be aligned to the base type of the
13350 bit\-field.
13351 .Sp
13352 For example, by default a structure containing nothing but 8
13353 \&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 would be aligned to a 4 byte
13354 boundary and have a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
13355 the structure would be aligned to a 1 byte boundary and be one byte in
13356 size.
13357 .IP "\fB\-mno\-strict\-align\fR" 4
13358 .IX Item "-mno-strict-align"
13359 .PD 0
13360 .IP "\fB\-mstrict\-align\fR" 4
13361 .IX Item "-mstrict-align"
13362 .PD
13363 On System V.4 and embedded PowerPC systems do not (do) assume that
13364 unaligned memory references will be handled by the system.
13365 .IP "\fB\-mrelocatable\fR" 4
13366 .IX Item "-mrelocatable"
13367 .PD 0
13368 .IP "\fB\-mno\-relocatable\fR" 4
13369 .IX Item "-mno-relocatable"
13370 .PD
13371 On embedded PowerPC systems generate code that allows (does not allow)
13372 the program to be relocated to a different address at runtime.  If you
13373 use \fB\-mrelocatable\fR on any module, all objects linked together must
13374 be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
13375 .IP "\fB\-mrelocatable\-lib\fR" 4
13376 .IX Item "-mrelocatable-lib"
13377 .PD 0
13378 .IP "\fB\-mno\-relocatable\-lib\fR" 4
13379 .IX Item "-mno-relocatable-lib"
13380 .PD
13381 On embedded PowerPC systems generate code that allows (does not allow)
13382 the program to be relocated to a different address at runtime.  Modules
13383 compiled with \fB\-mrelocatable\-lib\fR can be linked with either modules
13384 compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable\-lib\fR or
13385 with modules compiled with the \fB\-mrelocatable\fR options.
13386 .IP "\fB\-mno\-toc\fR" 4
13387 .IX Item "-mno-toc"
13388 .PD 0
13389 .IP "\fB\-mtoc\fR" 4
13390 .IX Item "-mtoc"
13391 .PD
13392 On System V.4 and embedded PowerPC systems do not (do) assume that
13393 register 2 contains a pointer to a global area pointing to the addresses
13394 used in the program.
13395 .IP "\fB\-mlittle\fR" 4
13396 .IX Item "-mlittle"
13397 .PD 0
13398 .IP "\fB\-mlittle\-endian\fR" 4
13399 .IX Item "-mlittle-endian"
13400 .PD
13401 On System V.4 and embedded PowerPC systems compile code for the
13402 processor in little endian mode.  The \fB\-mlittle\-endian\fR option is
13403 the same as \fB\-mlittle\fR.
13404 .IP "\fB\-mbig\fR" 4
13405 .IX Item "-mbig"
13406 .PD 0
13407 .IP "\fB\-mbig\-endian\fR" 4
13408 .IX Item "-mbig-endian"
13409 .PD
13410 On System V.4 and embedded PowerPC systems compile code for the
13411 processor in big endian mode.  The \fB\-mbig\-endian\fR option is
13412 the same as \fB\-mbig\fR.
13413 .IP "\fB\-mdynamic\-no\-pic\fR" 4
13414 .IX Item "-mdynamic-no-pic"
13415 On Darwin and Mac \s-1OS\s0 X systems, compile code so that it is not
13416 relocatable, but that its external references are relocatable.  The
13417 resulting code is suitable for applications, but not shared
13418 libraries.
13419 .IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
13420 .IX Item "-mprioritize-restricted-insns=priority"
13421 This option controls the priority that is assigned to
13422 dispatch-slot restricted instructions during the second scheduling
13423 pass.  The argument \fIpriority\fR takes the value \fI0/1/2\fR to assign
13424 \&\fIno/highest/second\-highest\fR priority to dispatch slot restricted
13425 instructions.
13426 .IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
13427 .IX Item "-msched-costly-dep=dependence_type"
13428 This option controls which dependences are considered costly
13429 by the target during instruction scheduling.  The argument
13430 \&\fIdependence_type\fR takes one of the following values:
13431 \&\fIno\fR: no dependence is costly,
13432 \&\fIall\fR: all dependences are costly,
13433 \&\fItrue_store_to_load\fR: a true dependence from store to load is costly,
13434 \&\fIstore_to_load\fR: any dependence from store to load is costly,
13435 \&\fInumber\fR: any dependence which latency >= \fInumber\fR is costly.
13436 .IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
13437 .IX Item "-minsert-sched-nops=scheme"
13438 This option controls which nop insertion scheme will be used during
13439 the second scheduling pass.  The argument \fIscheme\fR takes one of the
13440 following values:
13441 \&\fIno\fR: Don't insert nops.
13442 \&\fIpad\fR: Pad with nops any dispatch group which has vacant issue slots,
13443 according to the scheduler's grouping.
13444 \&\fIregroup_exact\fR: Insert nops to force costly dependent insns into
13445 separate groups.  Insert exactly as many nops as needed to force an insn
13446 to a new group, according to the estimated processor grouping.
13447 \&\fInumber\fR: Insert nops to force costly dependent insns into
13448 separate groups.  Insert \fInumber\fR nops to force an insn to a new group.
13449 .IP "\fB\-mcall\-sysv\fR" 4
13450 .IX Item "-mcall-sysv"
13451 On System V.4 and embedded PowerPC systems compile code using calling
13452 conventions that adheres to the March 1995 draft of the System V
13453 Application Binary Interface, PowerPC processor supplement.  This is the
13454 default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
13455 .IP "\fB\-mcall\-sysv\-eabi\fR" 4
13456 .IX Item "-mcall-sysv-eabi"
13457 Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
13458 .IP "\fB\-mcall\-sysv\-noeabi\fR" 4
13459 .IX Item "-mcall-sysv-noeabi"
13460 Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
13461 .IP "\fB\-mcall\-solaris\fR" 4
13462 .IX Item "-mcall-solaris"
13463 On System V.4 and embedded PowerPC systems compile code for the Solaris
13464 operating system.
13465 .IP "\fB\-mcall\-linux\fR" 4
13466 .IX Item "-mcall-linux"
13467 On System V.4 and embedded PowerPC systems compile code for the
13468 Linux-based \s-1GNU\s0 system.
13469 .IP "\fB\-mcall\-gnu\fR" 4
13470 .IX Item "-mcall-gnu"
13471 On System V.4 and embedded PowerPC systems compile code for the
13472 Hurd-based \s-1GNU\s0 system.
13473 .IP "\fB\-mcall\-netbsd\fR" 4
13474 .IX Item "-mcall-netbsd"
13475 On System V.4 and embedded PowerPC systems compile code for the
13476 NetBSD operating system.
13477 .IP "\fB\-maix\-struct\-return\fR" 4
13478 .IX Item "-maix-struct-return"
13479 Return all structures in memory (as specified by the \s-1AIX\s0 \s-1ABI\s0).
13480 .IP "\fB\-msvr4\-struct\-return\fR" 4
13481 .IX Item "-msvr4-struct-return"
13482 Return structures smaller than 8 bytes in registers (as specified by the
13483 \&\s-1SVR4\s0 \s-1ABI\s0).
13484 .IP "\fB\-mabi=\fR\fIabi-type\fR" 4
13485 .IX Item "-mabi=abi-type"
13486 Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
13487 Valid values are \fIaltivec\fR, \fIno-altivec\fR, \fIspe\fR,
13488 \&\fIno-spe\fR, \fIibmlongdouble\fR, \fIieeelongdouble\fR.
13489 .IP "\fB\-mabi=spe\fR" 4
13490 .IX Item "-mabi=spe"
13491 Extend the current \s-1ABI\s0 with \s-1SPE\s0 \s-1ABI\s0 extensions.  This does not change
13492 the default \s-1ABI\s0, instead it adds the \s-1SPE\s0 \s-1ABI\s0 extensions to the current
13493 \&\s-1ABI\s0.
13494 .IP "\fB\-mabi=no\-spe\fR" 4
13495 .IX Item "-mabi=no-spe"
13496 Disable Booke \s-1SPE\s0 \s-1ABI\s0 extensions for the current \s-1ABI\s0.
13497 .IP "\fB\-mabi=ibmlongdouble\fR" 4
13498 .IX Item "-mabi=ibmlongdouble"
13499 Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended precision long double.
13500 This is a PowerPC 32\-bit \s-1SYSV\s0 \s-1ABI\s0 option.
13501 .IP "\fB\-mabi=ieeelongdouble\fR" 4
13502 .IX Item "-mabi=ieeelongdouble"
13503 Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended precision long double.
13504 This is a PowerPC 32\-bit Linux \s-1ABI\s0 option.
13505 .IP "\fB\-mprototype\fR" 4
13506 .IX Item "-mprototype"
13507 .PD 0
13508 .IP "\fB\-mno\-prototype\fR" 4
13509 .IX Item "-mno-prototype"
13510 .PD
13511 On System V.4 and embedded PowerPC systems assume that all calls to
13512 variable argument functions are properly prototyped.  Otherwise, the
13513 compiler must insert an instruction before every non prototyped call to
13514 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
13515 indicate whether floating point values were passed in the floating point
13516 registers in case the function takes a variable arguments.  With
13517 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
13518 will set or clear the bit.
13519 .IP "\fB\-msim\fR" 4
13520 .IX Item "-msim"
13521 On embedded PowerPC systems, assume that the startup module is called
13522 \&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
13523 \&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
13524 configurations.
13525 .IP "\fB\-mmvme\fR" 4
13526 .IX Item "-mmvme"
13527 On embedded PowerPC systems, assume that the startup module is called
13528 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
13529 \&\fIlibc.a\fR.
13530 .IP "\fB\-mads\fR" 4
13531 .IX Item "-mads"
13532 On embedded PowerPC systems, assume that the startup module is called
13533 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
13534 \&\fIlibc.a\fR.
13535 .IP "\fB\-myellowknife\fR" 4
13536 .IX Item "-myellowknife"
13537 On embedded PowerPC systems, assume that the startup module is called
13538 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
13539 \&\fIlibc.a\fR.
13540 .IP "\fB\-mvxworks\fR" 4
13541 .IX Item "-mvxworks"
13542 On System V.4 and embedded PowerPC systems, specify that you are
13543 compiling for a VxWorks system.
13544 .IP "\fB\-memb\fR" 4
13545 .IX Item "-memb"
13546 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
13547 header to indicate that \fBeabi\fR extended relocations are used.
13548 .IP "\fB\-meabi\fR" 4
13549 .IX Item "-meabi"
13550 .PD 0
13551 .IP "\fB\-mno\-eabi\fR" 4
13552 .IX Item "-mno-eabi"
13553 .PD
13554 On System V.4 and embedded PowerPC systems do (do not) adhere to the
13555 Embedded Applications Binary Interface (eabi) which is a set of
13556 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
13557 means that the stack is aligned to an 8 byte boundary, a function
13558 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
13559 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
13560 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
13561 \&\fB\-mno\-eabi\fR means that the stack is aligned to a 16 byte boundary,
13562 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
13563 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
13564 small data area.  The \fB\-meabi\fR option is on by default if you
13565 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
13566 .IP "\fB\-msdata=eabi\fR" 4
13567 .IX Item "-msdata=eabi"
13568 On System V.4 and embedded PowerPC systems, put small initialized
13569 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
13570 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
13571 non\-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
13572 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
13573 global and static data in the \fB.sbss\fR section, which is adjacent to
13574 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
13575 incompatible with the \fB\-mrelocatable\fR option.  The
13576 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
13577 .IP "\fB\-msdata=sysv\fR" 4
13578 .IX Item "-msdata=sysv"
13579 On System V.4 and embedded PowerPC systems, put small global and static
13580 data in the \fB.sdata\fR section, which is pointed to by register
13581 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
13582 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
13583 The \fB\-msdata=sysv\fR option is incompatible with the
13584 \&\fB\-mrelocatable\fR option.
13585 .IP "\fB\-msdata=default\fR" 4
13586 .IX Item "-msdata=default"
13587 .PD 0
13588 .IP "\fB\-msdata\fR" 4
13589 .IX Item "-msdata"
13590 .PD
13591 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
13592 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
13593 same as \fB\-msdata=sysv\fR.
13594 .IP "\fB\-msdata=data\fR" 4
13595 .IX Item "-msdata=data"
13596 On System V.4 and embedded PowerPC systems, put small global
13597 data in the \fB.sdata\fR section.  Put small uninitialized global
13598 data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
13599 to address small data however.  This is the default behavior unless
13600 other \fB\-msdata\fR options are used.
13601 .IP "\fB\-msdata=none\fR" 4
13602 .IX Item "-msdata=none"
13603 .PD 0
13604 .IP "\fB\-mno\-sdata\fR" 4
13605 .IX Item "-mno-sdata"
13606 .PD
13607 On embedded PowerPC systems, put all initialized global and static data
13608 in the \fB.data\fR section, and all uninitialized data in the
13609 \&\fB.bss\fR section.
13610 .IP "\fB\-G\fR \fInum\fR" 4
13611 .IX Item "-G num"
13612 On embedded PowerPC systems, put global and static items less than or
13613 equal to \fInum\fR bytes into the small data or bss sections instead of
13614 the normal data or bss section.  By default, \fInum\fR is 8.  The
13615 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
13616 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
13617 .IP "\fB\-mregnames\fR" 4
13618 .IX Item "-mregnames"
13619 .PD 0
13620 .IP "\fB\-mno\-regnames\fR" 4
13621 .IX Item "-mno-regnames"
13622 .PD
13623 On System V.4 and embedded PowerPC systems do (do not) emit register
13624 names in the assembly language output using symbolic forms.
13625 .IP "\fB\-mlongcall\fR" 4
13626 .IX Item "-mlongcall"
13627 .PD 0
13628 .IP "\fB\-mno\-longcall\fR" 4
13629 .IX Item "-mno-longcall"
13630 .PD
13631 By default assume that all calls are far away so that a longer more
13632 expensive calling sequence is required.  This is required for calls
13633 further than 32 megabytes (33,554,432 bytes) from the current location.
13634 A short call will be generated if the compiler knows
13635 the call cannot be that far away.  This setting can be overridden by
13636 the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
13637 longcall(0)\*(C'\fR.
13638 .Sp
13639 Some linkers are capable of detecting out-of-range calls and generating
13640 glue code on the fly.  On these systems, long calls are unnecessary and
13641 generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
13642 as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
13643 to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
13644 .Sp
13645 On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR will generate \*(L"jbsr
13646 callee, L42\*(R", plus a \*(L"branch island\*(R" (glue code).  The two target
13647 addresses represent the callee and the \*(L"branch island\*(R".  The
13648 Darwin/PPC linker will prefer the first address and generate a \*(L"bl
13649 callee\*(R" if the \s-1PPC\s0 \*(L"bl\*(R" instruction will reach the callee directly;
13650 otherwise, the linker will generate \*(L"bl L42\*(R" to call the \*(L"branch
13651 island\*(R".  The \*(L"branch island\*(R" is appended to the body of the
13652 calling function; it computes the full 32\-bit address of the callee
13653 and jumps to it.
13654 .Sp
13655 On Mach-O (Darwin) systems, this option directs the compiler emit to
13656 the glue for every direct call, and the Darwin linker decides whether
13657 to use or discard it.
13658 .Sp
13659 In the future, we may cause \s-1GCC\s0 to ignore all longcall specifications
13660 when the linker is known to generate glue.
13661 .IP "\fB\-pthread\fR" 4
13662 .IX Item "-pthread"
13663 Adds support for multithreading with the \fIpthreads\fR library.
13664 This option sets flags for both the preprocessor and linker.
13665 .PP
13666 \fIS/390 and zSeries Options\fR
13667 .IX Subsection "S/390 and zSeries Options"
13668 .PP
13669 These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
13670 .IP "\fB\-mhard\-float\fR" 4
13671 .IX Item "-mhard-float"
13672 .PD 0
13673 .IP "\fB\-msoft\-float\fR" 4
13674 .IX Item "-msoft-float"
13675 .PD
13676 Use (do not use) the hardware floating-point instructions and registers
13677 for floating-point operations.  When \fB\-msoft\-float\fR is specified,
13678 functions in \fIlibgcc.a\fR will be used to perform floating-point
13679 operations.  When \fB\-mhard\-float\fR is specified, the compiler
13680 generates \s-1IEEE\s0 floating-point instructions.  This is the default.
13681 .IP "\fB\-mhard\-dfp\fR" 4
13682 .IX Item "-mhard-dfp"
13683 .PD 0
13684 .IP "\fB\-mno\-hard\-dfp\fR" 4
13685 .IX Item "-mno-hard-dfp"
13686 .PD
13687 Use (do not use) the hardware decimal-floating-point instructions for
13688 decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
13689 specified, functions in \fIlibgcc.a\fR will be used to perform
13690 decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
13691 specified, the compiler generates decimal-floating-point hardware
13692 instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
13693 .IP "\fB\-mlong\-double\-64\fR" 4
13694 .IX Item "-mlong-double-64"
13695 .PD 0
13696 .IP "\fB\-mlong\-double\-128\fR" 4
13697 .IX Item "-mlong-double-128"
13698 .PD
13699 These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
13700 of 64bit makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
13701 type. This is the default.
13702 .IP "\fB\-mbackchain\fR" 4
13703 .IX Item "-mbackchain"
13704 .PD 0
13705 .IP "\fB\-mno\-backchain\fR" 4
13706 .IX Item "-mno-backchain"
13707 .PD
13708 Store (do not store) the address of the caller's frame as backchain pointer
13709 into the callee's stack frame.
13710 A backchain may be needed to allow debugging using tools that do not understand
13711 \&\s-1DWARF\-2\s0 call frame information.
13712 When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
13713 at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
13714 the backchain is placed into the topmost word of the 96/160 byte register
13715 save area.
13716 .Sp
13717 In general, code compiled with \fB\-mbackchain\fR is call-compatible with
13718 code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
13719 for debugging purposes usually requires that the whole binary is built with
13720 \&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
13721 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13722 to build a linux kernel use \fB\-msoft\-float\fR.
13723 .Sp
13724 The default is to not maintain the backchain.
13725 .IP "\fB\-mpacked\-stack\fR" 4
13726 .IX Item "-mpacked-stack"
13727 .PD 0
13728 .IP "\fB\-mno\-packed\-stack\fR" 4
13729 .IX Item "-mno-packed-stack"
13730 .PD
13731 Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
13732 specified, the compiler uses the all fields of the 96/160 byte register save
13733 area only for their default purpose; unused fields still take up stack space.
13734 When \fB\-mpacked\-stack\fR is specified, register save slots are densely
13735 packed at the top of the register save area; unused space is reused for other
13736 purposes, allowing for more efficient use of the available stack space.
13737 However, when \fB\-mbackchain\fR is also in effect, the topmost word of
13738 the save area is always used to store the backchain, and the return address
13739 register is always saved two words below the backchain.
13740 .Sp
13741 As long as the stack frame backchain is not used, code generated with
13742 \&\fB\-mpacked\-stack\fR is call-compatible with code generated with
13743 \&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC\s0 2.95 for
13744 S/390 or zSeries generated code that uses the stack frame backchain at run
13745 time, not just for debugging purposes.  Such code is not call-compatible
13746 with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
13747 combination of \fB\-mbackchain\fR,
13748 \&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
13749 to build a linux kernel use \fB\-msoft\-float\fR.
13750 .Sp
13751 The default is to not use the packed stack layout.
13752 .IP "\fB\-msmall\-exec\fR" 4
13753 .IX Item "-msmall-exec"
13754 .PD 0
13755 .IP "\fB\-mno\-small\-exec\fR" 4
13756 .IX Item "-mno-small-exec"
13757 .PD
13758 Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
13759 to do subroutine calls.
13760 This only works reliably if the total executable size does not
13761 exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
13762 which does not have this limitation.
13763 .IP "\fB\-m64\fR" 4
13764 .IX Item "-m64"
13765 .PD 0
13766 .IP "\fB\-m31\fR" 4
13767 .IX Item "-m31"
13768 .PD
13769 When \fB\-m31\fR is specified, generate code compliant to the
13770 GNU/Linux for S/390 \s-1ABI\s0.  When \fB\-m64\fR is specified, generate
13771 code compliant to the GNU/Linux for zSeries \s-1ABI\s0.  This allows \s-1GCC\s0 in
13772 particular to generate 64\-bit instructions.  For the \fBs390\fR
13773 targets, the default is \fB\-m31\fR, while the \fBs390x\fR
13774 targets default to \fB\-m64\fR.
13775 .IP "\fB\-mzarch\fR" 4
13776 .IX Item "-mzarch"
13777 .PD 0
13778 .IP "\fB\-mesa\fR" 4
13779 .IX Item "-mesa"
13780 .PD
13781 When \fB\-mzarch\fR is specified, generate code using the
13782 instructions available on z/Architecture.
13783 When \fB\-mesa\fR is specified, generate code using the
13784 instructions available on \s-1ESA/390\s0.  Note that \fB\-mesa\fR is
13785 not possible with \fB\-m64\fR.
13786 When generating code compliant to the GNU/Linux for S/390 \s-1ABI\s0,
13787 the default is \fB\-mesa\fR.  When generating code compliant
13788 to the GNU/Linux for zSeries \s-1ABI\s0, the default is \fB\-mzarch\fR.
13789 .IP "\fB\-mmvcle\fR" 4
13790 .IX Item "-mmvcle"
13791 .PD 0
13792 .IP "\fB\-mno\-mvcle\fR" 4
13793 .IX Item "-mno-mvcle"
13794 .PD
13795 Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
13796 to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
13797 use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
13798 size.
13799 .IP "\fB\-mdebug\fR" 4
13800 .IX Item "-mdebug"
13801 .PD 0
13802 .IP "\fB\-mno\-debug\fR" 4
13803 .IX Item "-mno-debug"
13804 .PD
13805 Print (or do not print) additional debug information when compiling.
13806 The default is to not print debug information.
13807 .IP "\fB\-march=\fR\fIcpu-type\fR" 4
13808 .IX Item "-march=cpu-type"
13809 Generate code that will run on \fIcpu-type\fR, which is the name of a system
13810 representing a certain processor type.  Possible values for
13811 \&\fIcpu-type\fR are \fBg5\fR, \fBg6\fR, \fBz900\fR, \fBz990\fR,
13812 \&\fBz9\-109\fR, \fBz9\-ec\fR and \fBz10\fR.
13813 When generating code using the instructions available on z/Architecture,
13814 the default is \fB\-march=z900\fR.  Otherwise, the default is
13815 \&\fB\-march=g5\fR.
13816 .IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
13817 .IX Item "-mtune=cpu-type"
13818 Tune to \fIcpu-type\fR everything applicable about the generated code,
13819 except for the \s-1ABI\s0 and the set of available instructions.
13820 The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
13821 The default is the value used for \fB\-march\fR.
13822 .IP "\fB\-mtpf\-trace\fR" 4
13823 .IX Item "-mtpf-trace"
13824 .PD 0
13825 .IP "\fB\-mno\-tpf\-trace\fR" 4
13826 .IX Item "-mno-tpf-trace"
13827 .PD
13828 Generate code that adds (does not add) in \s-1TPF\s0 \s-1OS\s0 specific branches to trace
13829 routines in the operating system.  This option is off by default, even
13830 when compiling for the \s-1TPF\s0 \s-1OS\s0.
13831 .IP "\fB\-mfused\-madd\fR" 4
13832 .IX Item "-mfused-madd"
13833 .PD 0
13834 .IP "\fB\-mno\-fused\-madd\fR" 4
13835 .IX Item "-mno-fused-madd"
13836 .PD
13837 Generate code that uses (does not use) the floating point multiply and
13838 accumulate instructions.  These instructions are generated by default if
13839 hardware floating point is used.
13840 .IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
13841 .IX Item "-mwarn-framesize=framesize"
13842 Emit a warning if the current function exceeds the given frame size.  Because
13843 this is a compile time check it doesn't need to be a real problem when the program
13844 runs.  It is intended to identify functions which most probably cause
13845 a stack overflow.  It is useful to be used in an environment with limited stack
13846 size e.g. the linux kernel.
13847 .IP "\fB\-mwarn\-dynamicstack\fR" 4
13848 .IX Item "-mwarn-dynamicstack"
13849 Emit a warning if the function calls alloca or uses dynamically
13850 sized arrays.  This is generally a bad idea with a limited stack size.
13851 .IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
13852 .IX Item "-mstack-guard=stack-guard"
13853 .PD 0
13854 .IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
13855 .IX Item "-mstack-size=stack-size"
13856 .PD
13857 If these options are provided the s390 back end emits additional instructions in
13858 the function prologue which trigger a trap if the stack size is \fIstack-guard\fR
13859 bytes above the \fIstack-size\fR (remember that the stack on s390 grows downward).
13860 If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
13861 the frame size of the compiled function is chosen.
13862 These options are intended to be used to help debugging stack overflow problems.
13863 The additionally emitted code causes only little overhead and hence can also be
13864 used in production like systems without greater performance degradation.  The given
13865 values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
13866 \&\fIstack-guard\fR without exceeding 64k.
13867 In order to be efficient the extra code makes the assumption that the stack starts
13868 at an address aligned to the value given by \fIstack-size\fR.
13869 The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
13870 .PP
13871 \fIScore Options\fR
13872 .IX Subsection "Score Options"
13873 .PP
13874 These options are defined for Score implementations:
13875 .IP "\fB\-meb\fR" 4
13876 .IX Item "-meb"
13877 Compile code for big endian mode.  This is the default.
13878 .IP "\fB\-mel\fR" 4
13879 .IX Item "-mel"
13880 Compile code for little endian mode. 
13881 .IP "\fB\-mnhwloop\fR" 4
13882 .IX Item "-mnhwloop"
13883 Disable generate bcnz instruction.
13884 .IP "\fB\-muls\fR" 4
13885 .IX Item "-muls"
13886 Enable generate unaligned load and store instruction.
13887 .IP "\fB\-mmac\fR" 4
13888 .IX Item "-mmac"
13889 Enable the use of multiply-accumulate instructions. Disabled by default. 
13890 .IP "\fB\-mscore5\fR" 4
13891 .IX Item "-mscore5"
13892 Specify the \s-1SCORE5\s0 as the target architecture.
13893 .IP "\fB\-mscore5u\fR" 4
13894 .IX Item "-mscore5u"
13895 Specify the \s-1SCORE5U\s0 of the target architecture.
13896 .IP "\fB\-mscore7\fR" 4
13897 .IX Item "-mscore7"
13898 Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
13899 .IP "\fB\-mscore7d\fR" 4
13900 .IX Item "-mscore7d"
13901 Specify the \s-1SCORE7D\s0 as the target architecture.
13902 .PP
13903 \fI\s-1SH\s0 Options\fR
13904 .IX Subsection "SH Options"
13905 .PP
13906 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
13907 .IP "\fB\-m1\fR" 4
13908 .IX Item "-m1"
13909 Generate code for the \s-1SH1\s0.
13910 .IP "\fB\-m2\fR" 4
13911 .IX Item "-m2"
13912 Generate code for the \s-1SH2\s0.
13913 .IP "\fB\-m2e\fR" 4
13914 .IX Item "-m2e"
13915 Generate code for the SH2e.
13916 .IP "\fB\-m3\fR" 4
13917 .IX Item "-m3"
13918 Generate code for the \s-1SH3\s0.
13919 .IP "\fB\-m3e\fR" 4
13920 .IX Item "-m3e"
13921 Generate code for the SH3e.
13922 .IP "\fB\-m4\-nofpu\fR" 4
13923 .IX Item "-m4-nofpu"
13924 Generate code for the \s-1SH4\s0 without a floating-point unit.
13925 .IP "\fB\-m4\-single\-only\fR" 4
13926 .IX Item "-m4-single-only"
13927 Generate code for the \s-1SH4\s0 with a floating-point unit that only
13928 supports single-precision arithmetic.
13929 .IP "\fB\-m4\-single\fR" 4
13930 .IX Item "-m4-single"
13931 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
13932 single-precision mode by default.
13933 .IP "\fB\-m4\fR" 4
13934 .IX Item "-m4"
13935 Generate code for the \s-1SH4\s0.
13936 .IP "\fB\-m4a\-nofpu\fR" 4
13937 .IX Item "-m4a-nofpu"
13938 Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
13939 floating-point unit is not used.
13940 .IP "\fB\-m4a\-single\-only\fR" 4
13941 .IX Item "-m4a-single-only"
13942 Generate code for the SH4a, in such a way that no double-precision
13943 floating point operations are used.
13944 .IP "\fB\-m4a\-single\fR" 4
13945 .IX Item "-m4a-single"
13946 Generate code for the SH4a assuming the floating-point unit is in
13947 single-precision mode by default.
13948 .IP "\fB\-m4a\fR" 4
13949 .IX Item "-m4a"
13950 Generate code for the SH4a.
13951 .IP "\fB\-m4al\fR" 4
13952 .IX Item "-m4al"
13953 Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
13954 \&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
13955 instructions at the moment.
13956 .IP "\fB\-mb\fR" 4
13957 .IX Item "-mb"
13958 Compile code for the processor in big endian mode.
13959 .IP "\fB\-ml\fR" 4
13960 .IX Item "-ml"
13961 Compile code for the processor in little endian mode.
13962 .IP "\fB\-mdalign\fR" 4
13963 .IX Item "-mdalign"
13964 Align doubles at 64\-bit boundaries.  Note that this changes the calling
13965 conventions, and thus some functions from the standard C library will
13966 not work unless you recompile it first with \fB\-mdalign\fR.
13967 .IP "\fB\-mrelax\fR" 4
13968 .IX Item "-mrelax"
13969 Shorten some address references at link time, when possible; uses the
13970 linker option \fB\-relax\fR.
13971 .IP "\fB\-mbigtable\fR" 4
13972 .IX Item "-mbigtable"
13973 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
13974 16\-bit offsets.
13975 .IP "\fB\-mbitops\fR" 4
13976 .IX Item "-mbitops"
13977 Enable the use of bit manipulation instructions on \s-1SH2A\s0.
13978 .IP "\fB\-mfmovd\fR" 4
13979 .IX Item "-mfmovd"
13980 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
13981 .IP "\fB\-mhitachi\fR" 4
13982 .IX Item "-mhitachi"
13983 Comply with the calling conventions defined by Renesas.
13984 .IP "\fB\-mrenesas\fR" 4
13985 .IX Item "-mrenesas"
13986 Comply with the calling conventions defined by Renesas.
13987 .IP "\fB\-mno\-renesas\fR" 4
13988 .IX Item "-mno-renesas"
13989 Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
13990 conventions were available.  This option is the default for all
13991 targets of the \s-1SH\s0 toolchain except for \fBsh-symbianelf\fR.
13992 .IP "\fB\-mnomacsave\fR" 4
13993 .IX Item "-mnomacsave"
13994 Mark the \f(CW\*(C`MAC\*(C'\fR register as call\-clobbered, even if
13995 \&\fB\-mhitachi\fR is given.
13996 .IP "\fB\-mieee\fR" 4
13997 .IX Item "-mieee"
13998 Increase IEEE-compliance of floating-point code.
13999 At the moment, this is equivalent to \fB\-fno\-finite\-math\-only\fR.
14000 When generating 16 bit \s-1SH\s0 opcodes, getting IEEE-conforming results for
14001 comparisons of NANs / infinities incurs extra overhead in every
14002 floating point comparison, therefore the default is set to
14003 \&\fB\-ffinite\-math\-only\fR.
14004 .IP "\fB\-minline\-ic_invalidate\fR" 4
14005 .IX Item "-minline-ic_invalidate"
14006 Inline code to invalidate instruction cache entries after setting up
14007 nested function trampolines.
14008 This option has no effect if \-musermode is in effect and the selected
14009 code generation option (e.g. \-m4) does not allow the use of the icbi
14010 instruction.
14011 If the selected code generation option does not allow the use of the icbi
14012 instruction, and \-musermode is not in effect, the inlined code will
14013 manipulate the instruction cache address array directly with an associative
14014 write.  This not only requires privileged mode, but it will also
14015 fail if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
14016 .IP "\fB\-misize\fR" 4
14017 .IX Item "-misize"
14018 Dump instruction size and location in the assembly code.
14019 .IP "\fB\-mpadstruct\fR" 4
14020 .IX Item "-mpadstruct"
14021 This option is deprecated.  It pads structures to multiple of 4 bytes,
14022 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
14023 .IP "\fB\-mspace\fR" 4
14024 .IX Item "-mspace"
14025 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
14026 .IP "\fB\-mprefergot\fR" 4
14027 .IX Item "-mprefergot"
14028 When generating position-independent code, emit function calls using
14029 the Global Offset Table instead of the Procedure Linkage Table.
14030 .IP "\fB\-musermode\fR" 4
14031 .IX Item "-musermode"
14032 Don't generate privileged mode only code; implies \-mno\-inline\-ic_invalidate
14033 if the inlined code would not work in user mode.
14034 This is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
14035 .IP "\fB\-multcost=\fR\fInumber\fR" 4
14036 .IX Item "-multcost=number"
14037 Set the cost to assume for a multiply insn.
14038 .IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
14039 .IX Item "-mdiv=strategy"
14040 Set the division strategy to use for SHmedia code.  \fIstrategy\fR must be
14041 one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call,
14042 inv:call2, inv:fp .
14043 \&\*(L"fp\*(R" performs the operation in floating point.  This has a very high latency,
14044 but needs only a few instructions, so it might be a good choice if
14045 your code has enough easily exploitable \s-1ILP\s0 to allow the compiler to
14046 schedule the floating point instructions together with other instructions.
14047 Division by zero causes a floating point exception.
14048 \&\*(L"inv\*(R" uses integer operations to calculate the inverse of the divisor,
14049 and then multiplies the dividend with the inverse.  This strategy allows
14050 cse and hoisting of the inverse calculation.  Division by zero calculates
14051 an unspecified result, but does not trap.
14052 \&\*(L"inv:minlat\*(R" is a variant of \*(L"inv\*(R" where if no cse / hoisting opportunities
14053 have been found, or if the entire operation has been hoisted to the same
14054 place, the last stages of the inverse calculation are intertwined with the
14055 final multiply to reduce the overall latency, at the expense of using a few
14056 more instructions, and thus offering fewer scheduling opportunities with
14057 other code.
14058 \&\*(L"call\*(R" calls a library function that usually implements the inv:minlat
14059 strategy.
14060 This gives high code density for m5\-*media\-nofpu compilations.
14061 \&\*(L"call2\*(R" uses a different entry point of the same library function, where it
14062 assumes that a pointer to a lookup table has already been set up, which
14063 exposes the pointer load to cse / code hoisting optimizations.
14064 \&\*(L"inv:call\*(R", \*(L"inv:call2\*(R" and \*(L"inv:fp\*(R" all use the \*(L"inv\*(R" algorithm for initial
14065 code generation, but if the code stays unoptimized, revert to the \*(L"call\*(R",
14066 \&\*(L"call2\*(R", or \*(L"fp\*(R" strategies, respectively.  Note that the
14067 potentially-trapping side effect of division by zero is carried by a
14068 separate instruction, so it is possible that all the integer instructions
14069 are hoisted out, but the marker for the side effect stays where it is.
14070 A recombination to fp operations or a call is not possible in that case.
14071 \&\*(L"inv20u\*(R" and \*(L"inv20l\*(R" are variants of the \*(L"inv:minlat\*(R" strategy.  In the case
14072 that the inverse calculation was nor separated from the multiply, they speed
14073 up division where the dividend fits into 20 bits (plus sign where applicable),
14074 by inserting a test to skip a number of operations in this case; this test
14075 slows down the case of larger dividends.  inv20u assumes the case of a such
14076 a small dividend to be unlikely, and inv20l assumes it to be likely.
14077 .IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
14078 .IX Item "-mdivsi3_libfunc=name"
14079 Set the name of the library function used for 32 bit signed division to
14080 \&\fIname\fR.  This only affect the name used in the call and inv:call
14081 division strategies, and the compiler will still expect the same
14082 sets of input/output/clobbered registers as if this option was not present.
14083 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14084 .IX Item "-mfixed-range=register-range"
14085 Generate code treating the given register range as fixed registers.
14086 A fixed register is one that the register allocator can not use.  This is
14087 useful when compiling kernel code.  A register range is specified as
14088 two registers separated by a dash.  Multiple register ranges can be
14089 specified separated by a comma.
14090 .IP "\fB\-madjust\-unroll\fR" 4
14091 .IX Item "-madjust-unroll"
14092 Throttle unrolling to avoid thrashing target registers.
14093 This option only has an effect if the gcc code base supports the
14094 \&\s-1TARGET_ADJUST_UNROLL_MAX\s0 target hook.
14095 .IP "\fB\-mindexed\-addressing\fR" 4
14096 .IX Item "-mindexed-addressing"
14097 Enable the use of the indexed addressing mode for SHmedia32/SHcompact.
14098 This is only safe if the hardware and/or \s-1OS\s0 implement 32 bit wrap-around
14099 semantics for the indexed addressing mode.  The architecture allows the
14100 implementation of processors with 64 bit \s-1MMU\s0, which the \s-1OS\s0 could use to
14101 get 32 bit addressing, but since no current hardware implementation supports
14102 this or any other way to make the indexed addressing mode safe to use in
14103 the 32 bit \s-1ABI\s0, the default is \-mno\-indexed\-addressing.
14104 .IP "\fB\-mgettrcost=\fR\fInumber\fR" 4
14105 .IX Item "-mgettrcost=number"
14106 Set the cost assumed for the gettr instruction to \fInumber\fR.
14107 The default is 2 if \fB\-mpt\-fixed\fR is in effect, 100 otherwise.
14108 .IP "\fB\-mpt\-fixed\fR" 4
14109 .IX Item "-mpt-fixed"
14110 Assume pt* instructions won't trap.  This will generally generate better
14111 scheduled code, but is unsafe on current hardware.  The current architecture
14112 definition says that ptabs and ptrel trap when the target anded with 3 is 3.
14113 This has the unintentional effect of making it unsafe to schedule ptabs /
14114 ptrel before a branch, or hoist it out of a loop.  For example,
14115 _\|_do_global_ctors, a part of libgcc that runs constructors at program
14116 startup, calls functions in a list which is delimited by \-1.  With the
14117 \&\-mpt\-fixed option, the ptabs will be done before testing against \-1.
14118 That means that all the constructors will be run a bit quicker, but when
14119 the loop comes to the end of the list, the program crashes because ptabs
14120 loads \-1 into a target register.  Since this option is unsafe for any
14121 hardware implementing the current architecture specification, the default
14122 is \-mno\-pt\-fixed.  Unless the user specifies a specific cost with
14123 \&\fB\-mgettrcost\fR, \-mno\-pt\-fixed also implies \fB\-mgettrcost=100\fR;
14124 this deters register allocation using target registers for storing
14125 ordinary integers.
14126 .IP "\fB\-minvalid\-symbols\fR" 4
14127 .IX Item "-minvalid-symbols"
14128 Assume symbols might be invalid.  Ordinary function symbols generated by
14129 the compiler will always be valid to load with movi/shori/ptabs or
14130 movi/shori/ptrel, but with assembler and/or linker tricks it is possible
14131 to generate symbols that will cause ptabs / ptrel to trap.
14132 This option is only meaningful when \fB\-mno\-pt\-fixed\fR is in effect.
14133 It will then prevent cross-basic-block cse, hoisting and most scheduling
14134 of symbol loads.  The default is \fB\-mno\-invalid\-symbols\fR.
14135 .PP
14136 \fI\s-1SPARC\s0 Options\fR
14137 .IX Subsection "SPARC Options"
14138 .PP
14139 These \fB\-m\fR options are supported on the \s-1SPARC:\s0
14140 .IP "\fB\-mno\-app\-regs\fR" 4
14141 .IX Item "-mno-app-regs"
14142 .PD 0
14143 .IP "\fB\-mapp\-regs\fR" 4
14144 .IX Item "-mapp-regs"
14145 .PD
14146 Specify \fB\-mapp\-regs\fR to generate output using the global registers
14147 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
14148 is the default.
14149 .Sp
14150 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
14151 specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
14152 software with this option.
14153 .IP "\fB\-mfpu\fR" 4
14154 .IX Item "-mfpu"
14155 .PD 0
14156 .IP "\fB\-mhard\-float\fR" 4
14157 .IX Item "-mhard-float"
14158 .PD
14159 Generate output containing floating point instructions.  This is the
14160 default.
14161 .IP "\fB\-mno\-fpu\fR" 4
14162 .IX Item "-mno-fpu"
14163 .PD 0
14164 .IP "\fB\-msoft\-float\fR" 4
14165 .IX Item "-msoft-float"
14166 .PD
14167 Generate output containing library calls for floating point.
14168 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
14169 targets.  Normally the facilities of the machine's usual C compiler are
14170 used, but this cannot be done directly in cross\-compilation.  You must make
14171 your own arrangements to provide suitable library functions for
14172 cross\-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
14173 \&\fBsparclite\-*\-*\fR do provide software floating point support.
14174 .Sp
14175 \&\fB\-msoft\-float\fR changes the calling convention in the output file;
14176 therefore, it is only useful if you compile \fIall\fR of a program with
14177 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
14178 library that comes with \s-1GCC\s0, with \fB\-msoft\-float\fR in order for
14179 this to work.
14180 .IP "\fB\-mhard\-quad\-float\fR" 4
14181 .IX Item "-mhard-quad-float"
14182 Generate output containing quad-word (long double) floating point
14183 instructions.
14184 .IP "\fB\-msoft\-quad\-float\fR" 4
14185 .IX Item "-msoft-quad-float"
14186 Generate output containing library calls for quad-word (long double)
14187 floating point instructions.  The functions called are those specified
14188 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
14189 .Sp
14190 As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
14191 support for the quad-word floating point instructions.  They all invoke
14192 a trap handler for one of these instructions, and then the trap handler
14193 emulates the effect of the instruction.  Because of the trap handler overhead,
14194 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
14195 \&\fB\-msoft\-quad\-float\fR option is the default.
14196 .IP "\fB\-mno\-unaligned\-doubles\fR" 4
14197 .IX Item "-mno-unaligned-doubles"
14198 .PD 0
14199 .IP "\fB\-munaligned\-doubles\fR" 4
14200 .IX Item "-munaligned-doubles"
14201 .PD
14202 Assume that doubles have 8 byte alignment.  This is the default.
14203 .Sp
14204 With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8 byte
14205 alignment only if they are contained in another type, or if they have an
14206 absolute address.  Otherwise, it assumes they have 4 byte alignment.
14207 Specifying this option avoids some rare compatibility problems with code
14208 generated by other compilers.  It is not the default because it results
14209 in a performance loss, especially for floating point code.
14210 .IP "\fB\-mno\-faster\-structs\fR" 4
14211 .IX Item "-mno-faster-structs"
14212 .PD 0
14213 .IP "\fB\-mfaster\-structs\fR" 4
14214 .IX Item "-mfaster-structs"
14215 .PD
14216 With \fB\-mfaster\-structs\fR, the compiler assumes that structures
14217 should have 8 byte alignment.  This enables the use of pairs of
14218 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
14219 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
14220 However, the use of this changed alignment directly violates the \s-1SPARC\s0
14221 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
14222 acknowledges that their resulting code will not be directly in line with
14223 the rules of the \s-1ABI\s0.
14224 .IP "\fB\-mimpure\-text\fR" 4
14225 .IX Item "-mimpure-text"
14226 \&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
14227 the compiler to not pass \fB\-z text\fR to the linker when linking a
14228 shared object.  Using this option, you can link position-dependent
14229 code into a shared object.
14230 .Sp
14231 \&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
14232 allocatable but non-writable sections\*(R" linker error message.
14233 However, the necessary relocations will trigger copy\-on\-write, and the
14234 shared object is not actually shared across processes.  Instead of
14235 using \fB\-mimpure\-text\fR, you should compile all source code with
14236 \&\fB\-fpic\fR or \fB\-fPIC\fR.
14237 .Sp
14238 This option is only available on SunOS and Solaris.
14239 .IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
14240 .IX Item "-mcpu=cpu_type"
14241 Set the instruction set, register set, and instruction scheduling parameters
14242 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
14243 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBsparclite\fR,
14244 \&\fBf930\fR, \fBf934\fR, \fBhypersparc\fR, \fBsparclite86x\fR,
14245 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, \fBultrasparc\fR,
14246 \&\fBultrasparc3\fR, \fBniagara\fR and \fBniagara2\fR.
14247 .Sp
14248 Default instruction scheduling parameters are used for values that select
14249 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
14250 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
14251 .Sp
14252 Here is a list of each supported architecture and their supported
14253 implementations.
14254 .Sp
14255 .Vb 5
14256 \&            v7:             cypress
14257 \&            v8:             supersparc, hypersparc
14258 \&            sparclite:      f930, f934, sparclite86x
14259 \&            sparclet:       tsc701
14260 \&            v9:             ultrasparc, ultrasparc3, niagara, niagara2
14261 .Ve
14262 .Sp
14263 By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
14264 variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
14265 additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
14266 SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
14267 SPARCStation 1, 2, \s-1IPX\s0 etc.
14268 .Sp
14269 With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
14270 architecture.  The only difference from V7 code is that the compiler emits
14271 the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
14272 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=supersparc\fR, the compiler additionally
14273 optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
14274 2000 series.
14275 .Sp
14276 With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
14277 the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
14278 and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7\s0.
14279 With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
14280 Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU\s0.  With
14281 \&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
14282 \&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU\s0.
14283 .Sp
14284 With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
14285 the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
14286 integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
14287 but not in \s-1SPARC\-V7\s0.  With \fB\-mcpu=tsc701\fR, the compiler additionally
14288 optimizes it for the \s-1TEMIC\s0 SPARClet chip.
14289 .Sp
14290 With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
14291 architecture.  This adds 64\-bit integer and floating-point move instructions,
14292 3 additional floating-point condition code registers and conditional move
14293 instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
14294 optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
14295 \&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
14296 Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
14297 \&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
14298 Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
14299 additionally optimizes it for Sun UltraSPARC T2 chips.
14300 .IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
14301 .IX Item "-mtune=cpu_type"
14302 Set the instruction scheduling parameters for machine type
14303 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
14304 option \fB\-mcpu=\fR\fIcpu_type\fR would.
14305 .Sp
14306 The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
14307 \&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
14308 that select a particular cpu implementation.  Those are \fBcypress\fR,
14309 \&\fBsupersparc\fR, \fBhypersparc\fR, \fBf930\fR, \fBf934\fR,
14310 \&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
14311 \&\fBultrasparc3\fR, \fBniagara\fR, and \fBniagara2\fR.
14312 .IP "\fB\-mv8plus\fR" 4
14313 .IX Item "-mv8plus"
14314 .PD 0
14315 .IP "\fB\-mno\-v8plus\fR" 4
14316 .IX Item "-mno-v8plus"
14317 .PD
14318 With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+\s0 \s-1ABI\s0.  The
14319 difference from the V8 \s-1ABI\s0 is that the global and out registers are
14320 considered 64\-bit wide.  This is enabled by default on Solaris in 32\-bit
14321 mode for all \s-1SPARC\-V9\s0 processors.
14322 .IP "\fB\-mvis\fR" 4
14323 .IX Item "-mvis"
14324 .PD 0
14325 .IP "\fB\-mno\-vis\fR" 4
14326 .IX Item "-mno-vis"
14327 .PD
14328 With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
14329 Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
14330 .PP
14331 These \fB\-m\fR options are supported in addition to the above
14332 on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
14333 .IP "\fB\-mlittle\-endian\fR" 4
14334 .IX Item "-mlittle-endian"
14335 Generate code for a processor running in little-endian mode.  It is only
14336 available for a few configurations and most notably not on Solaris and Linux.
14337 .IP "\fB\-m32\fR" 4
14338 .IX Item "-m32"
14339 .PD 0
14340 .IP "\fB\-m64\fR" 4
14341 .IX Item "-m64"
14342 .PD
14343 Generate code for a 32\-bit or 64\-bit environment.
14344 The 32\-bit environment sets int, long and pointer to 32 bits.
14345 The 64\-bit environment sets int to 32 bits and long and pointer
14346 to 64 bits.
14347 .IP "\fB\-mcmodel=medlow\fR" 4
14348 .IX Item "-mcmodel=medlow"
14349 Generate code for the Medium/Low code model: 64\-bit addresses, programs
14350 must be linked in the low 32 bits of memory.  Programs can be statically
14351 or dynamically linked.
14352 .IP "\fB\-mcmodel=medmid\fR" 4
14353 .IX Item "-mcmodel=medmid"
14354 Generate code for the Medium/Middle code model: 64\-bit addresses, programs
14355 must be linked in the low 44 bits of memory, the text and data segments must
14356 be less than 2GB in size and the data segment must be located within 2GB of
14357 the text segment.
14358 .IP "\fB\-mcmodel=medany\fR" 4
14359 .IX Item "-mcmodel=medany"
14360 Generate code for the Medium/Anywhere code model: 64\-bit addresses, programs
14361 may be linked anywhere in memory, the text and data segments must be less
14362 than 2GB in size and the data segment must be located within 2GB of the
14363 text segment.
14364 .IP "\fB\-mcmodel=embmedany\fR" 4
14365 .IX Item "-mcmodel=embmedany"
14366 Generate code for the Medium/Anywhere code model for embedded systems:
14367 64\-bit addresses, the text and data segments must be less than 2GB in
14368 size, both starting anywhere in memory (determined at link time).  The
14369 global register \f(CW%g4\fR points to the base of the data segment.  Programs
14370 are statically linked and \s-1PIC\s0 is not supported.
14371 .IP "\fB\-mstack\-bias\fR" 4
14372 .IX Item "-mstack-bias"
14373 .PD 0
14374 .IP "\fB\-mno\-stack\-bias\fR" 4
14375 .IX Item "-mno-stack-bias"
14376 .PD
14377 With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
14378 frame pointer if present, are offset by \-2047 which must be added back
14379 when making stack frame references.  This is the default in 64\-bit mode.
14380 Otherwise, assume no such offset is present.
14381 .PP
14382 These switches are supported in addition to the above on Solaris:
14383 .IP "\fB\-threads\fR" 4
14384 .IX Item "-threads"
14385 Add support for multithreading using the Solaris threads library.  This
14386 option sets flags for both the preprocessor and linker.  This option does
14387 not affect the thread safety of object code produced by the compiler or
14388 that of libraries supplied with it.
14389 .IP "\fB\-pthreads\fR" 4
14390 .IX Item "-pthreads"
14391 Add support for multithreading using the \s-1POSIX\s0 threads library.  This
14392 option sets flags for both the preprocessor and linker.  This option does
14393 not affect the thread safety of object code produced  by the compiler or
14394 that of libraries supplied with it.
14395 .IP "\fB\-pthread\fR" 4
14396 .IX Item "-pthread"
14397 This is a synonym for \fB\-pthreads\fR.
14398 .PP
14399 \fI\s-1SPU\s0 Options\fR
14400 .IX Subsection "SPU Options"
14401 .PP
14402 These \fB\-m\fR options are supported on the \s-1SPU:\s0
14403 .IP "\fB\-mwarn\-reloc\fR" 4
14404 .IX Item "-mwarn-reloc"
14405 .PD 0
14406 .IP "\fB\-merror\-reloc\fR" 4
14407 .IX Item "-merror-reloc"
14408 .PD
14409 The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
14410 will give an error when it generates code that requires a dynamic
14411 relocation.  \fB\-mno\-error\-reloc\fR disables the error,
14412 \&\fB\-mwarn\-reloc\fR will generate a warning instead.
14413 .IP "\fB\-msafe\-dma\fR" 4
14414 .IX Item "-msafe-dma"
14415 .PD 0
14416 .IP "\fB\-munsafe\-dma\fR" 4
14417 .IX Item "-munsafe-dma"
14418 .PD
14419 Instructions which initiate or test completion of \s-1DMA\s0 must not be
14420 reordered with respect to loads and stores of the memory which is being
14421 accessed.  Users typically address this problem using the volatile
14422 keyword, but that can lead to inefficient code in places where the
14423 memory is known to not change.  Rather than mark the memory as volatile
14424 we treat the \s-1DMA\s0 instructions as potentially effecting all memory.  With
14425 \&\fB\-munsafe\-dma\fR users must use the volatile keyword to protect
14426 memory accesses.
14427 .IP "\fB\-mbranch\-hints\fR" 4
14428 .IX Item "-mbranch-hints"
14429 By default, \s-1GCC\s0 will generate a branch hint instruction to avoid
14430 pipeline stalls for always taken or probably taken branches.  A hint
14431 will not be generated closer than 8 instructions away from its branch.
14432 There is little reason to disable them, except for debugging purposes,
14433 or to make an object a little bit smaller.
14434 .IP "\fB\-msmall\-mem\fR" 4
14435 .IX Item "-msmall-mem"
14436 .PD 0
14437 .IP "\fB\-mlarge\-mem\fR" 4
14438 .IX Item "-mlarge-mem"
14439 .PD
14440 By default, \s-1GCC\s0 generates code assuming that addresses are never larger
14441 than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
14442 a full 32 bit address.
14443 .IP "\fB\-mstdmain\fR" 4
14444 .IX Item "-mstdmain"
14445 By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
14446 main function interface (which has an unconventional parameter list).
14447 With \fB\-mstdmain\fR, \s-1GCC\s0 will link your program against startup
14448 code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
14449 local copy of \f(CW\*(C`argv\*(C'\fR strings.
14450 .IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
14451 .IX Item "-mfixed-range=register-range"
14452 Generate code treating the given register range as fixed registers.
14453 A fixed register is one that the register allocator can not use.  This is
14454 useful when compiling kernel code.  A register range is specified as
14455 two registers separated by a dash.  Multiple register ranges can be
14456 specified separated by a comma.
14457 .IP "\fB\-mdual\-nops\fR" 4
14458 .IX Item "-mdual-nops"
14459 .PD 0
14460 .IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
14461 .IX Item "-mdual-nops=n"
14462 .PD
14463 By default, \s-1GCC\s0 will insert nops to increase dual issue when it expects
14464 it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
14465 smaller \fIn\fR will insert fewer nops.  10 is the default, 0 is the
14466 same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
14467 .IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
14468 .IX Item "-mhint-max-nops=n"
14469 Maximum number of nops to insert for a branch hint.  A branch hint must
14470 be at least 8 instructions away from the branch it is effecting.  \s-1GCC\s0
14471 will insert up to \fIn\fR nops to enforce this, otherwise it will not
14472 generate the branch hint.
14473 .IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
14474 .IX Item "-mhint-max-distance=n"
14475 The encoding of the branch hint instruction limits the hint to be within
14476 256 instructions of the branch it is effecting.  By default, \s-1GCC\s0 makes
14477 sure it is within 125. 
14478 .IP "\fB\-msafe\-hints\fR" 4
14479 .IX Item "-msafe-hints"
14480 Work around a hardware bug which causes the \s-1SPU\s0 to stall indefinitely.
14481 By default, \s-1GCC\s0 will insert the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
14482 this stall won't happen.
14483 .PP
14484 \fIOptions for System V\fR
14485 .IX Subsection "Options for System V"
14486 .PP
14487 These additional options are available on System V Release 4 for
14488 compatibility with other compilers on those systems:
14489 .IP "\fB\-G\fR" 4
14490 .IX Item "-G"
14491 Create a shared object.
14492 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
14493 .IP "\fB\-Qy\fR" 4
14494 .IX Item "-Qy"
14495 Identify the versions of each tool used by the compiler, in a
14496 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
14497 .IP "\fB\-Qn\fR" 4
14498 .IX Item "-Qn"
14499 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
14500 the default).
14501 .IP "\fB\-YP,\fR\fIdirs\fR" 4
14502 .IX Item "-YP,dirs"
14503 Search the directories \fIdirs\fR, and no others, for libraries
14504 specified with \fB\-l\fR.
14505 .IP "\fB\-Ym,\fR\fIdir\fR" 4
14506 .IX Item "-Ym,dir"
14507 Look in the directory \fIdir\fR to find the M4 preprocessor.
14508 The assembler uses this option.
14509 .PP
14510 \fIV850 Options\fR
14511 .IX Subsection "V850 Options"
14512 .PP
14513 These \fB\-m\fR options are defined for V850 implementations:
14514 .IP "\fB\-mlong\-calls\fR" 4
14515 .IX Item "-mlong-calls"
14516 .PD 0
14517 .IP "\fB\-mno\-long\-calls\fR" 4
14518 .IX Item "-mno-long-calls"
14519 .PD
14520 Treat all calls as being far away (near).  If calls are assumed to be
14521 far away, the compiler will always load the functions address up into a
14522 register, and call indirect through the pointer.
14523 .IP "\fB\-mno\-ep\fR" 4
14524 .IX Item "-mno-ep"
14525 .PD 0
14526 .IP "\fB\-mep\fR" 4
14527 .IX Item "-mep"
14528 .PD
14529 Do not optimize (do optimize) basic blocks that use the same index
14530 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
14531 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
14532 option is on by default if you optimize.
14533 .IP "\fB\-mno\-prolog\-function\fR" 4
14534 .IX Item "-mno-prolog-function"
14535 .PD 0
14536 .IP "\fB\-mprolog\-function\fR" 4
14537 .IX Item "-mprolog-function"
14538 .PD
14539 Do not use (do use) external functions to save and restore registers
14540 at the prologue and epilogue of a function.  The external functions
14541 are slower, but use less code space if more than one function saves
14542 the same number of registers.  The \fB\-mprolog\-function\fR option
14543 is on by default if you optimize.
14544 .IP "\fB\-mspace\fR" 4
14545 .IX Item "-mspace"
14546 Try to make the code as small as possible.  At present, this just turns
14547 on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
14548 .IP "\fB\-mtda=\fR\fIn\fR" 4
14549 .IX Item "-mtda=n"
14550 Put static or global variables whose size is \fIn\fR bytes or less into
14551 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
14552 area can hold up to 256 bytes in total (128 bytes for byte references).
14553 .IP "\fB\-msda=\fR\fIn\fR" 4
14554 .IX Item "-msda=n"
14555 Put static or global variables whose size is \fIn\fR bytes or less into
14556 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
14557 area can hold up to 64 kilobytes.
14558 .IP "\fB\-mzda=\fR\fIn\fR" 4
14559 .IX Item "-mzda=n"
14560 Put static or global variables whose size is \fIn\fR bytes or less into
14561 the first 32 kilobytes of memory.
14562 .IP "\fB\-mv850\fR" 4
14563 .IX Item "-mv850"
14564 Specify that the target processor is the V850.
14565 .IP "\fB\-mbig\-switch\fR" 4
14566 .IX Item "-mbig-switch"
14567 Generate code suitable for big switch tables.  Use this option only if
14568 the assembler/linker complain about out of range branches within a switch
14569 table.
14570 .IP "\fB\-mapp\-regs\fR" 4
14571 .IX Item "-mapp-regs"
14572 This option will cause r2 and r5 to be used in the code generated by
14573 the compiler.  This setting is the default.
14574 .IP "\fB\-mno\-app\-regs\fR" 4
14575 .IX Item "-mno-app-regs"
14576 This option will cause r2 and r5 to be treated as fixed registers.
14577 .IP "\fB\-mv850e1\fR" 4
14578 .IX Item "-mv850e1"
14579 Specify that the target processor is the V850E1.  The preprocessor
14580 constants \fB_\|_v850e1_\|_\fR and \fB_\|_v850e_\|_\fR will be defined if
14581 this option is used.
14582 .IP "\fB\-mv850e\fR" 4
14583 .IX Item "-mv850e"
14584 Specify that the target processor is the V850E.  The preprocessor
14585 constant \fB_\|_v850e_\|_\fR will be defined if this option is used.
14586 .Sp
14587 If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
14588 are defined then a default target processor will be chosen and the
14589 relevant \fB_\|_v850*_\|_\fR preprocessor constant will be defined.
14590 .Sp
14591 The preprocessor constants \fB_\|_v850\fR and \fB_\|_v851_\|_\fR are always
14592 defined, regardless of which processor variant is the target.
14593 .IP "\fB\-mdisable\-callt\fR" 4
14594 .IX Item "-mdisable-callt"
14595 This option will suppress generation of the \s-1CALLT\s0 instruction for the
14596 v850e and v850e1 flavors of the v850 architecture.  The default is
14597 \&\fB\-mno\-disable\-callt\fR which allows the \s-1CALLT\s0 instruction to be used.
14598 .PP
14599 \fI\s-1VAX\s0 Options\fR
14600 .IX Subsection "VAX Options"
14601 .PP
14602 These \fB\-m\fR options are defined for the \s-1VAX:\s0
14603 .IP "\fB\-munix\fR" 4
14604 .IX Item "-munix"
14605 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
14606 that the Unix assembler for the \s-1VAX\s0 cannot handle across long
14607 ranges.
14608 .IP "\fB\-mgnu\fR" 4
14609 .IX Item "-mgnu"
14610 Do output those jump instructions, on the assumption that you
14611 will assemble with the \s-1GNU\s0 assembler.
14612 .IP "\fB\-mg\fR" 4
14613 .IX Item "-mg"
14614 Output code for g\-format floating point numbers instead of d\-format.
14615 .PP
14616 \fIVxWorks Options\fR
14617 .IX Subsection "VxWorks Options"
14618 .PP
14619 The options in this section are defined for all VxWorks targets.
14620 Options specific to the target hardware are listed with the other
14621 options for that target.
14622 .IP "\fB\-mrtp\fR" 4
14623 .IX Item "-mrtp"
14624 \&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
14625 (RTPs).  This option switches from the former to the latter.  It also
14626 defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
14627 .IP "\fB\-non\-static\fR" 4
14628 .IX Item "-non-static"
14629 Link an \s-1RTP\s0 executable against shared libraries rather than static
14630 libraries.  The options \fB\-static\fR and \fB\-shared\fR can
14631 also be used for RTPs; \fB\-static\fR
14632 is the default.
14633 .IP "\fB\-Bstatic\fR" 4
14634 .IX Item "-Bstatic"
14635 .PD 0
14636 .IP "\fB\-Bdynamic\fR" 4
14637 .IX Item "-Bdynamic"
14638 .PD
14639 These options are passed down to the linker.  They are defined for
14640 compatibility with Diab.
14641 .IP "\fB\-Xbind\-lazy\fR" 4
14642 .IX Item "-Xbind-lazy"
14643 Enable lazy binding of function calls.  This option is equivalent to
14644 \&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
14645 .IP "\fB\-Xbind\-now\fR" 4
14646 .IX Item "-Xbind-now"
14647 Disable lazy binding of function calls.  This option is the default and
14648 is defined for compatibility with Diab.
14649 .PP
14650 \fIx86\-64 Options\fR
14651 .IX Subsection "x86-64 Options"
14652 .PP
14653 These are listed under 
14654 .PP
14655 \fIi386 and x86\-64 Windows Options\fR
14656 .IX Subsection "i386 and x86-64 Windows Options"
14657 .PP
14658 These additional options are available for Windows targets:
14659 .IP "\fB\-mconsole\fR" 4
14660 .IX Item "-mconsole"
14661 This option is available for Cygwin and MinGW targets.  It
14662 specifies that a console application is to be generated, by
14663 instructing the linker to set the \s-1PE\s0 header subsystem type
14664 required for console applications.
14665 This is the default behaviour for Cygwin and MinGW targets.
14666 .IP "\fB\-mcygwin\fR" 4
14667 .IX Item "-mcygwin"
14668 This option is available for Cygwin targets.  It specifies that
14669 the Cygwin internal interface is to be used for predefined
14670 preprocessor macros, C runtime libraries and related linker
14671 paths and options.  For Cygwin targets this is the default behaviour.
14672 This option is deprecated and will be removed in a future release.
14673 .IP "\fB\-mno\-cygwin\fR" 4
14674 .IX Item "-mno-cygwin"
14675 This option is available for Cygwin targets.  It specifies that
14676 the MinGW internal interface is to be used instead of Cygwin's, by
14677 setting MinGW-related predefined macros and linker paths and default
14678 library options.
14679 This option is deprecated and will be removed in a future release.
14680 .IP "\fB\-mdll\fR" 4
14681 .IX Item "-mdll"
14682 This option is available for Cygwin and MinGW targets.  It
14683 specifies that a \s-1DLL\s0 \- a dynamic link library \- is to be
14684 generated, enabling the selection of the required runtime
14685 startup object and entry point.
14686 .IP "\fB\-mnop\-fun\-dllimport\fR" 4
14687 .IX Item "-mnop-fun-dllimport"
14688 This option is available for Cygwin and MinGW targets.  It
14689 specifies that the dllimport attribute should be ignored.
14690 .IP "\fB\-mthread\fR" 4
14691 .IX Item "-mthread"
14692 This option is available for MinGW targets. It specifies
14693 that MinGW-specific thread support is to be used.
14694 .IP "\fB\-mwin32\fR" 4
14695 .IX Item "-mwin32"
14696 This option is available for Cygwin and MinGW targets.  It
14697 specifies that the typical Windows pre-defined macros are to
14698 be set in the pre\-processor, but does not influence the choice
14699 of runtime library/startup code.
14700 .IP "\fB\-mwindows\fR" 4
14701 .IX Item "-mwindows"
14702 This option is available for Cygwin and MinGW targets.  It
14703 specifies that a \s-1GUI\s0 application is to be generated by
14704 instructing the linker to set the \s-1PE\s0 header subsystem type
14705 appropriately.
14706 .PP
14707 See also under \fBi386 and x86\-64 Options\fR for standard options.
14708 .PP
14709 \fIXstormy16 Options\fR
14710 .IX Subsection "Xstormy16 Options"
14711 .PP
14712 These options are defined for Xstormy16:
14713 .IP "\fB\-msim\fR" 4
14714 .IX Item "-msim"
14715 Choose startup files and linker script suitable for the simulator.
14716 .PP
14717 \fIXtensa Options\fR
14718 .IX Subsection "Xtensa Options"
14719 .PP
14720 These options are supported for Xtensa targets:
14721 .IP "\fB\-mconst16\fR" 4
14722 .IX Item "-mconst16"
14723 .PD 0
14724 .IP "\fB\-mno\-const16\fR" 4
14725 .IX Item "-mno-const16"
14726 .PD
14727 Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
14728 constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
14729 standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
14730 instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
14731 instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
14732 the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
14733 .IP "\fB\-mfused\-madd\fR" 4
14734 .IX Item "-mfused-madd"
14735 .PD 0
14736 .IP "\fB\-mno\-fused\-madd\fR" 4
14737 .IX Item "-mno-fused-madd"
14738 .PD
14739 Enable or disable use of fused multiply/add and multiply/subtract
14740 instructions in the floating-point option.  This has no effect if the
14741 floating-point option is not also enabled.  Disabling fused multiply/add
14742 and multiply/subtract instructions forces the compiler to use separate
14743 instructions for the multiply and add/subtract operations.  This may be
14744 desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
14745 required: the fused multiply add/subtract instructions do not round the
14746 intermediate result, thereby producing results with \fImore\fR bits of
14747 precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
14748 add/subtract instructions also ensures that the program output is not
14749 sensitive to the compiler's ability to combine multiply and add/subtract
14750 operations.
14751 .IP "\fB\-mserialize\-volatile\fR" 4
14752 .IX Item "-mserialize-volatile"
14753 .PD 0
14754 .IP "\fB\-mno\-serialize\-volatile\fR" 4
14755 .IX Item "-mno-serialize-volatile"
14756 .PD
14757 When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
14758 \&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
14759 The default is \fB\-mserialize\-volatile\fR.  Use
14760 \&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
14761 .IP "\fB\-mtext\-section\-literals\fR" 4
14762 .IX Item "-mtext-section-literals"
14763 .PD 0
14764 .IP "\fB\-mno\-text\-section\-literals\fR" 4
14765 .IX Item "-mno-text-section-literals"
14766 .PD
14767 Control the treatment of literal pools.  The default is
14768 \&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
14769 section in the output file.  This allows the literal pool to be placed
14770 in a data \s-1RAM/ROM\s0, and it also allows the linker to combine literal
14771 pools from separate object files to remove redundant literals and
14772 improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
14773 are interspersed in the text section in order to keep them as close as
14774 possible to their references.  This may be necessary for large assembly
14775 files.
14776 .IP "\fB\-mtarget\-align\fR" 4
14777 .IX Item "-mtarget-align"
14778 .PD 0
14779 .IP "\fB\-mno\-target\-align\fR" 4
14780 .IX Item "-mno-target-align"
14781 .PD
14782 When this option is enabled, \s-1GCC\s0 instructs the assembler to
14783 automatically align instructions to reduce branch penalties at the
14784 expense of some code density.  The assembler attempts to widen density
14785 instructions to align branch targets and the instructions following call
14786 instructions.  If there are not enough preceding safe density
14787 instructions to align a target, no widening will be performed.  The
14788 default is \fB\-mtarget\-align\fR.  These options do not affect the
14789 treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
14790 assembler will always align, either by widening density instructions or
14791 by inserting no-op instructions.
14792 .IP "\fB\-mlongcalls\fR" 4
14793 .IX Item "-mlongcalls"
14794 .PD 0
14795 .IP "\fB\-mno\-longcalls\fR" 4
14796 .IX Item "-mno-longcalls"
14797 .PD
14798 When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
14799 direct calls to indirect calls unless it can determine that the target
14800 of a direct call is in the range allowed by the call instruction.  This
14801 translation typically occurs for calls to functions in other source
14802 files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
14803 instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
14804 The default is \fB\-mno\-longcalls\fR.  This option should be used in
14805 programs where the call target can potentially be out of range.  This
14806 option is implemented in the assembler, not the compiler, so the
14807 assembly code generated by \s-1GCC\s0 will still show direct call
14808 instructions\-\-\-look at the disassembled object code to see the actual
14809 instructions.  Note that the assembler will use an indirect call for
14810 every cross-file call, not just those that really will be out of range.
14811 .PP
14812 \fIzSeries Options\fR
14813 .IX Subsection "zSeries Options"
14814 .PP
14815 These are listed under 
14816 .Sh "Options for Code Generation Conventions"
14817 .IX Subsection "Options for Code Generation Conventions"
14818 These machine-independent options control the interface conventions
14819 used in code generation.
14820 .PP
14821 Most of them have both positive and negative forms; the negative form
14822 of \fB\-ffoo\fR would be \fB\-fno\-foo\fR.  In the table below, only
14823 one of the forms is listed\-\-\-the one which is not the default.  You
14824 can figure out the other form by either removing \fBno\-\fR or adding
14825 it.
14826 .IP "\fB\-fbounds\-check\fR" 4
14827 .IX Item "-fbounds-check"
14828 For front-ends that support it, generate additional code to check that
14829 indices used to access arrays are within the declared range.  This is
14830 currently only supported by the Java and Fortran front\-ends, where
14831 this option defaults to true and false respectively.
14832 .IP "\fB\-ftrapv\fR" 4
14833 .IX Item "-ftrapv"
14834 This option generates traps for signed overflow on addition, subtraction,
14835 multiplication operations.
14836 .IP "\fB\-fwrapv\fR" 4
14837 .IX Item "-fwrapv"
14838 This option instructs the compiler to assume that signed arithmetic
14839 overflow of addition, subtraction and multiplication wraps around
14840 using twos-complement representation.  This flag enables some optimizations
14841 and disables others.  This option is enabled by default for the Java
14842 front\-end, as required by the Java language specification.
14843 .IP "\fB\-fexceptions\fR" 4
14844 .IX Item "-fexceptions"
14845 Enable exception handling.  Generates extra code needed to propagate
14846 exceptions.  For some targets, this implies \s-1GCC\s0 will generate frame
14847 unwind information for all functions, which can produce significant data
14848 size overhead, although it does not affect execution.  If you do not
14849 specify this option, \s-1GCC\s0 will enable it by default for languages like
14850 \&\*(C+ which normally require exception handling, and disable it for
14851 languages like C that do not normally require it.  However, you may need
14852 to enable this option when compiling C code that needs to interoperate
14853 properly with exception handlers written in \*(C+.  You may also wish to
14854 disable this option if you are compiling older \*(C+ programs that don't
14855 use exception handling.
14856 .IP "\fB\-fnon\-call\-exceptions\fR" 4
14857 .IX Item "-fnon-call-exceptions"
14858 Generate code that allows trapping instructions to throw exceptions.
14859 Note that this requires platform-specific runtime support that does
14860 not exist everywhere.  Moreover, it only allows \fItrapping\fR
14861 instructions to throw exceptions, i.e. memory references or floating
14862 point instructions.  It does not allow exceptions to be thrown from
14863 arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
14864 .IP "\fB\-funwind\-tables\fR" 4
14865 .IX Item "-funwind-tables"
14866 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
14867 static data, but will not affect the generated code in any other way.
14868 You will normally not enable this option; instead, a language processor
14869 that needs this handling would enable it on your behalf.
14870 .IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
14871 .IX Item "-fasynchronous-unwind-tables"
14872 Generate unwind table in dwarf2 format, if supported by target machine.  The
14873 table is exact at each instruction boundary, so it can be used for stack
14874 unwinding from asynchronous events (such as debugger or garbage collector).
14875 .IP "\fB\-fpcc\-struct\-return\fR" 4
14876 .IX Item "-fpcc-struct-return"
14877 Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
14878 longer ones, rather than in registers.  This convention is less
14879 efficient, but it has the advantage of allowing intercallability between
14880 GCC-compiled files and files compiled with other compilers, particularly
14881 the Portable C Compiler (pcc).
14882 .Sp
14883 The precise convention for returning structures in memory depends
14884 on the target configuration macros.
14885 .Sp
14886 Short structures and unions are those whose size and alignment match
14887 that of some integer type.
14888 .Sp
14889 \&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
14890 switch is not binary compatible with code compiled with the
14891 \&\fB\-freg\-struct\-return\fR switch.
14892 Use it to conform to a non-default application binary interface.
14893 .IP "\fB\-freg\-struct\-return\fR" 4
14894 .IX Item "-freg-struct-return"
14895 Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
14896 This is more efficient for small structures than
14897 \&\fB\-fpcc\-struct\-return\fR.
14898 .Sp
14899 If you specify neither \fB\-fpcc\-struct\-return\fR nor
14900 \&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
14901 standard for the target.  If there is no standard convention, \s-1GCC\s0
14902 defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
14903 the principal compiler.  In those cases, we can choose the standard, and
14904 we chose the more efficient register return alternative.
14905 .Sp
14906 \&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
14907 switch is not binary compatible with code compiled with the
14908 \&\fB\-fpcc\-struct\-return\fR switch.
14909 Use it to conform to a non-default application binary interface.
14910 .IP "\fB\-fshort\-enums\fR" 4
14911 .IX Item "-fshort-enums"
14912 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
14913 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
14914 will be equivalent to the smallest integer type which has enough room.
14915 .Sp
14916 \&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
14917 code that is not binary compatible with code generated without that switch.
14918 Use it to conform to a non-default application binary interface.
14919 .IP "\fB\-fshort\-double\fR" 4
14920 .IX Item "-fshort-double"
14921 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
14922 .Sp
14923 \&\fBWarning:\fR the \fB\-fshort\-double\fR switch causes \s-1GCC\s0 to generate
14924 code that is not binary compatible with code generated without that switch.
14925 Use it to conform to a non-default application binary interface.
14926 .IP "\fB\-fshort\-wchar\fR" 4
14927 .IX Item "-fshort-wchar"
14928 Override the underlying type for \fBwchar_t\fR to be \fBshort
14929 unsigned int\fR instead of the default for the target.  This option is
14930 useful for building programs to run under \s-1WINE\s0.
14931 .Sp
14932 \&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
14933 code that is not binary compatible with code generated without that switch.
14934 Use it to conform to a non-default application binary interface.
14935 .IP "\fB\-fno\-common\fR" 4
14936 .IX Item "-fno-common"
14937 In C code, controls the placement of uninitialized global variables.
14938 Unix C compilers have traditionally permitted multiple definitions of
14939 such variables in different compilation units by placing the variables
14940 in a common block.  
14941 This is the behavior specified by \fB\-fcommon\fR, and is the default 
14942 for \s-1GCC\s0 on most targets.  
14943 On the other hand, this behavior is not required by \s-1ISO\s0 C, and on some
14944 targets may carry a speed or code size penalty on variable references.
14945 The \fB\-fno\-common\fR option specifies that the compiler should place 
14946 uninitialized global variables in the data section of the object file,
14947 rather than generating them as common blocks.
14948 This has the effect that if the same variable is declared 
14949 (without \f(CW\*(C`extern\*(C'\fR) in two different compilations,
14950 you will get a multiple-definition error when you link them.
14951 In this case, you must compile with \fB\-fcommon\fR instead.  
14952 Compiling with \fB\-fno\-common\fR is useful on targets for which 
14953 it provides better performance, or if you wish to verify that the
14954 program will work on other systems which always treat uninitialized
14955 variable declarations this way.
14956 .IP "\fB\-fno\-ident\fR" 4
14957 .IX Item "-fno-ident"
14958 Ignore the \fB#ident\fR directive.
14959 .IP "\fB\-finhibit\-size\-directive\fR" 4
14960 .IX Item "-finhibit-size-directive"
14961 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
14962 would cause trouble if the function is split in the middle, and the
14963 two halves are placed at locations far apart in memory.  This option is
14964 used when compiling \fIcrtstuff.c\fR; you should not need to use it
14965 for anything else.
14966 .IP "\fB\-fverbose\-asm\fR" 4
14967 .IX Item "-fverbose-asm"
14968 Put extra commentary information in the generated assembly code to
14969 make it more readable.  This option is generally only of use to those
14970 who actually need to read the generated assembly code (perhaps while
14971 debugging the compiler itself).
14972 .Sp
14973 \&\fB\-fno\-verbose\-asm\fR, the default, causes the
14974 extra information to be omitted and is useful when comparing two assembler
14975 files.
14976 .IP "\fB\-frecord\-gcc\-switches\fR" 4
14977 .IX Item "-frecord-gcc-switches"
14978 This switch causes the command line that was used to invoke the
14979 compiler to be recorded into the object file that is being created.
14980 This switch is only implemented on some targets and the exact format
14981 of the recording is target and binary file format dependent, but it
14982 usually takes the form of a section containing \s-1ASCII\s0 text.  This
14983 switch is related to the \fB\-fverbose\-asm\fR switch, but that
14984 switch only records information in the assembler output file as
14985 comments, so it never reaches the object file.
14986 .IP "\fB\-fpic\fR" 4
14987 .IX Item "-fpic"
14988 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
14989 library, if supported for the target machine.  Such code accesses all
14990 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
14991 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
14992 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
14993 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
14994 maximum size, you get an error message from the linker indicating that
14995 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
14996 instead.  (These maximums are 8k on the \s-1SPARC\s0 and 32k
14997 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
14998 .Sp
14999 Position-independent code requires special support, and therefore works
15000 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
15001 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
15002 position\-independent.
15003 .Sp
15004 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
15005 are defined to 1.
15006 .IP "\fB\-fPIC\fR" 4
15007 .IX Item "-fPIC"
15008 If supported for the target machine, emit position-independent code,
15009 suitable for dynamic linking and avoiding any limit on the size of the
15010 global offset table.  This option makes a difference on the m68k,
15011 PowerPC and \s-1SPARC\s0.
15012 .Sp
15013 Position-independent code requires special support, and therefore works
15014 only on certain machines.
15015 .Sp
15016 When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
15017 are defined to 2.
15018 .IP "\fB\-fpie\fR" 4
15019 .IX Item "-fpie"
15020 .PD 0
15021 .IP "\fB\-fPIE\fR" 4
15022 .IX Item "-fPIE"
15023 .PD
15024 These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but
15025 generated position independent code can be only linked into executables.
15026 Usually these options are used when \fB\-pie\fR \s-1GCC\s0 option will be
15027 used during linking.
15028 .Sp
15029 \&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
15030 \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
15031 for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
15032 .IP "\fB\-fno\-jump\-tables\fR" 4
15033 .IX Item "-fno-jump-tables"
15034 Do not use jump tables for switch statements even where it would be
15035 more efficient than other code generation strategies.  This option is
15036 of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
15037 building code which forms part of a dynamic linker and cannot
15038 reference the address of a jump table.  On some targets, jump tables
15039 do not require a \s-1GOT\s0 and this option is not needed.
15040 .IP "\fB\-ffixed\-\fR\fIreg\fR" 4
15041 .IX Item "-ffixed-reg"
15042 Treat the register named \fIreg\fR as a fixed register; generated code
15043 should never refer to it (except perhaps as a stack pointer, frame
15044 pointer or in some other fixed role).
15045 .Sp
15046 \&\fIreg\fR must be the name of a register.  The register names accepted
15047 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
15048 macro in the machine description macro file.
15049 .Sp
15050 This flag does not have a negative form, because it specifies a
15051 three-way choice.
15052 .IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
15053 .IX Item "-fcall-used-reg"
15054 Treat the register named \fIreg\fR as an allocable register that is
15055 clobbered by function calls.  It may be allocated for temporaries or
15056 variables that do not live across a call.  Functions compiled this way
15057 will not save and restore the register \fIreg\fR.
15058 .Sp
15059 It is an error to used this flag with the frame pointer or stack pointer.
15060 Use of this flag for other registers that have fixed pervasive roles in
15061 the machine's execution model will produce disastrous results.
15062 .Sp
15063 This flag does not have a negative form, because it specifies a
15064 three-way choice.
15065 .IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
15066 .IX Item "-fcall-saved-reg"
15067 Treat the register named \fIreg\fR as an allocable register saved by
15068 functions.  It may be allocated even for temporaries or variables that
15069 live across a call.  Functions compiled this way will save and restore
15070 the register \fIreg\fR if they use it.
15071 .Sp
15072 It is an error to used this flag with the frame pointer or stack pointer.
15073 Use of this flag for other registers that have fixed pervasive roles in
15074 the machine's execution model will produce disastrous results.
15075 .Sp
15076 A different sort of disaster will result from the use of this flag for
15077 a register in which function values may be returned.
15078 .Sp
15079 This flag does not have a negative form, because it specifies a
15080 three-way choice.
15081 .IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
15082 .IX Item "-fpack-struct[=n]"
15083 Without a value specified, pack all structure members together without
15084 holes.  When a value is specified (which must be a small power of two), pack
15085 structure members according to this value, representing the maximum
15086 alignment (that is, objects with default alignment requirements larger than
15087 this will be output potentially unaligned at the next fitting location.
15088 .Sp
15089 \&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
15090 code that is not binary compatible with code generated without that switch.
15091 Additionally, it makes the code suboptimal.
15092 Use it to conform to a non-default application binary interface.
15093 .IP "\fB\-finstrument\-functions\fR" 4
15094 .IX Item "-finstrument-functions"
15095 Generate instrumentation calls for entry and exit to functions.  Just
15096 after function entry and just before function exit, the following
15097 profiling functions will be called with the address of the current
15098 function and its call site.  (On some platforms,
15099 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
15100 function, so the call site information may not be available to the
15101 profiling functions otherwise.)
15102 .Sp
15103 .Vb 4
15104 \&        void __cyg_profile_func_enter (void *this_fn,
15105 \&                                       void *call_site);
15106 \&        void __cyg_profile_func_exit  (void *this_fn,
15107 \&                                       void *call_site);
15108 .Ve
15109 .Sp
15110 The first argument is the address of the start of the current function,
15111 which may be looked up exactly in the symbol table.
15112 .Sp
15113 This instrumentation is also done for functions expanded inline in other
15114 functions.  The profiling calls will indicate where, conceptually, the
15115 inline function is entered and exited.  This means that addressable
15116 versions of such functions must be available.  If all your uses of a
15117 function are expanded inline, this may mean an additional expansion of
15118 code size.  If you use \fBextern inline\fR in your C code, an
15119 addressable version of such functions must be provided.  (This is
15120 normally the case anyways, but if you get lucky and the optimizer always
15121 expands the functions inline, you might have gotten away without
15122 providing static copies.)
15123 .Sp
15124 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
15125 which case this instrumentation will not be done.  This can be used, for
15126 example, for the profiling functions listed above, high-priority
15127 interrupt routines, and any functions from which the profiling functions
15128 cannot safely be called (perhaps signal handlers, if the profiling
15129 routines generate output or allocate memory).
15130 .IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
15131 .IX Item "-finstrument-functions-exclude-file-list=file,file,..."
15132 Set the list of functions that are excluded from instrumentation (see
15133 the description of \f(CW\*(C`\-finstrument\-functions\*(C'\fR).  If the file that
15134 contains a function definition matches with one of \fIfile\fR, then
15135 that function is not instrumented.  The match is done on substrings:
15136 if the \fIfile\fR parameter is a substring of the file name, it is
15137 considered to be a match.
15138 .Sp
15139 For example,
15140 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys\*(C'\fR
15141 will exclude any inline function defined in files whose pathnames
15142 contain \f(CW\*(C`/bits/stl\*(C'\fR or \f(CW\*(C`include/sys\*(C'\fR.
15143 .Sp
15144 If, for some reason, you want to include letter \f(CW','\fR in one of
15145 \&\fIsym\fR, write \f(CW','\fR. For example,
15146 \&\f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list=',,tmp'\*(C'\fR
15147 (note the single quote surrounding the option).
15148 .IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
15149 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
15150 This is similar to \f(CW\*(C`\-finstrument\-functions\-exclude\-file\-list\*(C'\fR,
15151 but this option sets the list of function names to be excluded from
15152 instrumentation.  The function name to be matched is its user-visible
15153 name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
15154 internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
15155 match is done on substrings: if the \fIsym\fR parameter is a substring
15156 of the function name, it is considered to be a match.
15157 .IP "\fB\-fstack\-check\fR" 4
15158 .IX Item "-fstack-check"
15159 Generate code to verify that you do not go beyond the boundary of the
15160 stack.  You should specify this flag if you are running in an
15161 environment with multiple threads, but only rarely need to specify it in
15162 a single-threaded environment since stack overflow is automatically
15163 detected on nearly all systems if there is only one stack.
15164 .Sp
15165 Note that this switch does not actually cause checking to be done; the
15166 operating system or the language runtime must do that.  The switch causes
15167 generation of code to ensure that they see the stack being extended.
15168 .Sp
15169 You can additionally specify a string parameter: \f(CW\*(C`no\*(C'\fR means no
15170 checking, \f(CW\*(C`generic\*(C'\fR means force the use of old-style checking,
15171 \&\f(CW\*(C`specific\*(C'\fR means use the best checking method and is equivalent
15172 to bare \fB\-fstack\-check\fR.
15173 .Sp
15174 Old-style checking is a generic mechanism that requires no specific
15175 target support in the compiler but comes with the following drawbacks:
15176 .RS 4
15177 .IP "1." 4
15178 Modified allocation strategy for large objects: they will always be
15179 allocated dynamically if their size exceeds a fixed threshold.
15180 .IP "2." 4
15181 Fixed limit on the size of the static frame of functions: when it is
15182 topped by a particular function, stack checking is not reliable and
15183 a warning is issued by the compiler.
15184 .IP "3." 4
15185 Inefficiency: because of both the modified allocation strategy and the
15186 generic implementation, the performances of the code are hampered.
15187 .RE
15188 .RS 4
15189 .Sp
15190 Note that old-style stack checking is also the fallback method for
15191 \&\f(CW\*(C`specific\*(C'\fR if no target support has been added in the compiler.
15192 .RE
15193 .IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
15194 .IX Item "-fstack-limit-register=reg"
15195 .PD 0
15196 .IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
15197 .IX Item "-fstack-limit-symbol=sym"
15198 .IP "\fB\-fno\-stack\-limit\fR" 4
15199 .IX Item "-fno-stack-limit"
15200 .PD
15201 Generate code to ensure that the stack does not grow beyond a certain value,
15202 either the value of a register or the address of a symbol.  If the stack
15203 would grow beyond the value, a signal is raised.  For most targets,
15204 the signal is raised before the stack overruns the boundary, so
15205 it is possible to catch the signal without taking special precautions.
15206 .Sp
15207 For instance, if the stack starts at absolute address \fB0x80000000\fR
15208 and grows downwards, you can use the flags
15209 \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
15210 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
15211 of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
15212 .IP "\fB\-fargument\-alias\fR" 4
15213 .IX Item "-fargument-alias"
15214 .PD 0
15215 .IP "\fB\-fargument\-noalias\fR" 4
15216 .IX Item "-fargument-noalias"
15217 .IP "\fB\-fargument\-noalias\-global\fR" 4
15218 .IX Item "-fargument-noalias-global"
15219 .IP "\fB\-fargument\-noalias\-anything\fR" 4
15220 .IX Item "-fargument-noalias-anything"
15221 .PD
15222 Specify the possible relationships among parameters and between
15223 parameters and global data.
15224 .Sp
15225 \&\fB\-fargument\-alias\fR specifies that arguments (parameters) may
15226 alias each other and may alias global storage.\fB\-fargument\-noalias\fR specifies that arguments do not alias
15227 each other, but may alias global storage.\fB\-fargument\-noalias\-global\fR specifies that arguments do not
15228 alias each other and do not alias global storage.
15229 \&\fB\-fargument\-noalias\-anything\fR specifies that arguments do not
15230 alias any other storage.
15231 .Sp
15232 Each language will automatically use whatever option is required by
15233 the language standard.  You should not need to use these options yourself.
15234 .IP "\fB\-fleading\-underscore\fR" 4
15235 .IX Item "-fleading-underscore"
15236 This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
15237 change the way C symbols are represented in the object file.  One use
15238 is to help link with legacy assembly code.
15239 .Sp
15240 \&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
15241 generate code that is not binary compatible with code generated without that
15242 switch.  Use it to conform to a non-default application binary interface.
15243 Not all targets provide complete support for this switch.
15244 .IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
15245 .IX Item "-ftls-model=model"
15246 Alter the thread-local storage model to be used.
15247 The \fImodel\fR argument should be one of \f(CW\*(C`global\-dynamic\*(C'\fR,
15248 \&\f(CW\*(C`local\-dynamic\*(C'\fR, \f(CW\*(C`initial\-exec\*(C'\fR or \f(CW\*(C`local\-exec\*(C'\fR.
15249 .Sp
15250 The default without \fB\-fpic\fR is \f(CW\*(C`initial\-exec\*(C'\fR; with
15251 \&\fB\-fpic\fR the default is \f(CW\*(C`global\-dynamic\*(C'\fR.
15252 .IP "\fB\-fvisibility=\fR\fIdefault|internal|hidden|protected\fR" 4
15253 .IX Item "-fvisibility=default|internal|hidden|protected"
15254 Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
15255 symbols will be marked with this unless overridden within the code.
15256 Using this feature can very substantially improve linking and
15257 load times of shared object libraries, produce more optimized
15258 code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
15259 It is \fBstrongly\fR recommended that you use this in any shared objects
15260 you distribute.
15261 .Sp
15262 Despite the nomenclature, \f(CW\*(C`default\*(C'\fR always means public ie;
15263 available to be linked against from outside the shared object.
15264 \&\f(CW\*(C`protected\*(C'\fR and \f(CW\*(C`internal\*(C'\fR are pretty useless in real-world
15265 usage so the only other commonly used option will be \f(CW\*(C`hidden\*(C'\fR.
15266 The default if \fB\-fvisibility\fR isn't specified is
15267 \&\f(CW\*(C`default\*(C'\fR, i.e., make every
15268 symbol public\-\-\-this causes the same behavior as previous versions of
15269 \&\s-1GCC\s0.
15270 .Sp
15271 A good explanation of the benefits offered by ensuring \s-1ELF\s0
15272 symbols have the correct visibility is given by \*(L"How To Write
15273 Shared Libraries\*(R" by Ulrich Drepper (which can be found at
15274 <\fBhttp://people.redhat.com/~drepper/\fR>)\-\-\-however a superior
15275 solution made possible by this option to marking things hidden when
15276 the default is public is to make the default hidden and mark things
15277 public.  This is the norm with \s-1DLL\s0's on Windows and with \fB\-fvisibility=hidden\fR
15278 and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
15279 \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
15280 identical syntax.  This is a great boon to those working with
15281 cross-platform projects.
15282 .Sp
15283 For those adding visibility support to existing code, you may find
15284 \&\fB#pragma \s-1GCC\s0 visibility\fR of use.  This works by you enclosing
15285 the declarations you wish to set visibility for with (for example)
15286 \&\fB#pragma \s-1GCC\s0 visibility push(hidden)\fR and
15287 \&\fB#pragma \s-1GCC\s0 visibility pop\fR.
15288 Bear in mind that symbol visibility should be viewed \fBas
15289 part of the \s-1API\s0 interface contract\fR and thus all new code should
15290 always specify visibility when it is not the default ie; declarations
15291 only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
15292 as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
15293 abundantly clear also aids readability and self-documentation of the code.
15294 Note that due to \s-1ISO\s0 \*(C+ specification requirements, operator new and
15295 operator delete must always be of default visibility.
15296 .Sp
15297 Be aware that headers from outside your project, in particular system
15298 headers and headers from any other library you use, may not be
15299 expecting to be compiled with visibility other than the default.  You
15300 may need to explicitly say \fB#pragma \s-1GCC\s0 visibility push(default)\fR
15301 before including any such headers.
15302 .Sp
15303 \&\fBextern\fR declarations are not affected by \fB\-fvisibility\fR, so
15304 a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
15305 no modifications.  However, this means that calls to \fBextern\fR
15306 functions with no explicit visibility will use the \s-1PLT\s0, so it is more
15307 effective to use \fB_\|_attribute ((visibility))\fR and/or
15308 \&\fB#pragma \s-1GCC\s0 visibility\fR to tell the compiler which \fBextern\fR
15309 declarations should be treated as hidden.
15310 .Sp
15311 Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
15312 entities. This means that, for instance, an exception class that will
15313 be thrown between DSOs must be explicitly marked with default
15314 visibility so that the \fBtype_info\fR nodes will be unified between
15315 the DSOs.
15316 .Sp
15317 An overview of these techniques, their benefits and how to use them
15318 is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
15319 .SH "ENVIRONMENT"
15320 .IX Header "ENVIRONMENT"
15321 This section describes several environment variables that affect how \s-1GCC\s0
15322 operates.  Some of them work by specifying directories or prefixes to use
15323 when searching for various kinds of files.  Some are used to specify other
15324 aspects of the compilation environment.
15325 .PP
15326 Note that you can also specify places to search using options such as
15327 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
15328 take precedence over places specified using environment variables, which
15329 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
15330 .IP "\fB\s-1LANG\s0\fR" 4
15331 .IX Item "LANG"
15332 .PD 0
15333 .IP "\fB\s-1LC_CTYPE\s0\fR" 4
15334 .IX Item "LC_CTYPE"
15335 .IP "\fB\s-1LC_MESSAGES\s0\fR" 4
15336 .IX Item "LC_MESSAGES"
15337 .IP "\fB\s-1LC_ALL\s0\fR" 4
15338 .IX Item "LC_ALL"
15339 .PD
15340 These environment variables control the way that \s-1GCC\s0 uses
15341 localization information that allow \s-1GCC\s0 to work with different
15342 national conventions.  \s-1GCC\s0 inspects the locale categories
15343 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
15344 so.  These locale categories can be set to any value supported by your
15345 installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
15346 Kingdom encoded in \s-1UTF\-8\s0.
15347 .Sp
15348 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
15349 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
15350 a string; this is needed for some multibyte encodings that contain quote
15351 and escape characters that would otherwise be interpreted as a string
15352 end or escape.
15353 .Sp
15354 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
15355 use in diagnostic messages.
15356 .Sp
15357 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
15358 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
15359 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
15360 environment variable.  If none of these variables are set, \s-1GCC\s0
15361 defaults to traditional C English behavior.
15362 .IP "\fB\s-1TMPDIR\s0\fR" 4
15363 .IX Item "TMPDIR"
15364 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
15365 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
15366 compilation which is to be used as input to the next stage: for example,
15367 the output of the preprocessor, which is the input to the compiler
15368 proper.
15369 .IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
15370 .IX Item "GCC_EXEC_PREFIX"
15371 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
15372 names of the subprograms executed by the compiler.  No slash is added
15373 when this prefix is combined with the name of a subprogram, but you can
15374 specify a prefix that ends with a slash if you wish.
15375 .Sp
15376 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 will attempt to figure out
15377 an appropriate prefix to use based on the pathname it was invoked with.
15378 .Sp
15379 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
15380 tries looking in the usual places for the subprogram.
15381 .Sp
15382 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
15383 \&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
15384 the installed compiler. In many cases \fIprefix\fR is the value
15385 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
15386 .Sp
15387 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
15388 .Sp
15389 This prefix is also used for finding files such as \fIcrt0.o\fR that are
15390 used for linking.
15391 .Sp
15392 In addition, the prefix is used in an unusual way in finding the
15393 directories to search for header files.  For each of the standard
15394 directories whose name normally begins with \fB/usr/local/lib/gcc\fR
15395 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
15396 replacing that beginning with the specified prefix to produce an
15397 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
15398 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
15399 These alternate directories are searched first; the standard directories
15400 come next. If a standard directory begins with the configured
15401 \&\fIprefix\fR then the value of \fIprefix\fR is replaced by
15402 \&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
15403 .IP "\fB\s-1COMPILER_PATH\s0\fR" 4
15404 .IX Item "COMPILER_PATH"
15405 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
15406 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
15407 specified when searching for subprograms, if it can't find the
15408 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
15409 .IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
15410 .IX Item "LIBRARY_PATH"
15411 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
15412 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
15413 \&\s-1GCC\s0 tries the directories thus specified when searching for special
15414 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
15415 using \s-1GCC\s0 also uses these directories when searching for ordinary
15416 libraries for the \fB\-l\fR option (but directories specified with
15417 \&\fB\-L\fR come first).
15418 .IP "\fB\s-1LANG\s0\fR" 4
15419 .IX Item "LANG"
15420 This variable is used to pass locale information to the compiler.  One way in
15421 which this information is used is to determine the character set to be used
15422 when character literals, string literals and comments are parsed in C and \*(C+.
15423 When the compiler is configured to allow multibyte characters,
15424 the following values for \fB\s-1LANG\s0\fR are recognized:
15425 .RS 4
15426 .IP "\fBC\-JIS\fR" 4
15427 .IX Item "C-JIS"
15428 Recognize \s-1JIS\s0 characters.
15429 .IP "\fBC\-SJIS\fR" 4
15430 .IX Item "C-SJIS"
15431 Recognize \s-1SJIS\s0 characters.
15432 .IP "\fBC\-EUCJP\fR" 4
15433 .IX Item "C-EUCJP"
15434 Recognize \s-1EUCJP\s0 characters.
15435 .RE
15436 .RS 4
15437 .Sp
15438 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
15439 compiler will use mblen and mbtowc as defined by the default locale to
15440 recognize and translate multibyte characters.
15441 .RE
15442 .PP
15443 Some additional environments variables affect the behavior of the
15444 preprocessor.
15445 .IP "\fB\s-1CPATH\s0\fR" 4
15446 .IX Item "CPATH"
15447 .PD 0
15448 .IP "\fBC_INCLUDE_PATH\fR" 4
15449 .IX Item "C_INCLUDE_PATH"
15450 .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
15451 .IX Item "CPLUS_INCLUDE_PATH"
15452 .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
15453 .IX Item "OBJC_INCLUDE_PATH"
15454 .PD
15455 Each variable's value is a list of directories separated by a special
15456 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
15457 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
15458 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
15459 semicolon, and for almost all other targets it is a colon.
15460 .Sp
15461 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
15462 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
15463 options on the command line.  This environment variable is used
15464 regardless of which language is being preprocessed.
15465 .Sp
15466 The remaining environment variables apply only when preprocessing the
15467 particular language indicated.  Each specifies a list of directories
15468 to be searched as if specified with \fB\-isystem\fR, but after any
15469 paths given with \fB\-isystem\fR options on the command line.
15470 .Sp
15471 In all these variables, an empty element instructs the compiler to
15472 search its current working directory.  Empty elements can appear at the
15473 beginning or end of a path.  For instance, if the value of
15474 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
15475 effect as \fB\-I.\ \-I/special/include\fR.
15476 .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
15477 .IX Item "DEPENDENCIES_OUTPUT"
15478 If this variable is set, its value specifies how to output
15479 dependencies for Make based on the non-system header files processed
15480 by the compiler.  System header files are ignored in the dependency
15481 output.
15482 .Sp
15483 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
15484 which case the Make rules are written to that file, guessing the target
15485 name from the source file name.  Or the value can have the form
15486 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
15487 file \fIfile\fR using \fItarget\fR as the target name.
15488 .Sp
15489 In other words, this environment variable is equivalent to combining
15490 the options \fB\-MM\fR and \fB\-MF\fR,
15491 with an optional \fB\-MT\fR switch too.
15492 .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
15493 .IX Item "SUNPRO_DEPENDENCIES"
15494 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
15495 except that system header files are not ignored, so it implies
15496 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
15497 main input file is omitted.
15498 .SH "BUGS"
15499 .IX Header "BUGS"
15500 For instructions on reporting bugs, see
15501 <\fBhttp://gcc.gnu.org/bugs.html\fR>.
15502 .SH "FOOTNOTES"
15503 .IX Header "FOOTNOTES"
15504 .IP "1." 4
15505 On some systems, \fBgcc \-shared\fR
15506 needs to build supplementary stub code for constructors to work.  On
15507 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
15508 libraries to link against.  Failing to supply the correct flags may lead
15509 to subtle defects.  Supplying them in cases where they are not necessary
15510 is innocuous.
15511 .SH "SEE ALSO"
15512 .IX Header "SEE ALSO"
15513 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
15514 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
15515 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
15516 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
15517 .SH "AUTHOR"
15518 .IX Header "AUTHOR"
15519 See the Info entry for \fBgcc\fR, or
15520 <\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
15521 for contributors to \s-1GCC\s0.
15522 .SH "COPYRIGHT"
15523 .IX Header "COPYRIGHT"
15524 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
15525 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
15526 Free Software Foundation, Inc.
15527 .PP
15528 Permission is granted to copy, distribute and/or modify this document
15529 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or
15530 any later version published by the Free Software Foundation; with the
15531 Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
15532 Free Software\*(R", the Front-Cover texts being (a) (see below), and with
15533 the Back-Cover Texts being (b) (see below).  A copy of the license is
15534 included in the \fIgfdl\fR\|(7) man page.
15535 .PP
15536 (a) The \s-1FSF\s0's Front-Cover Text is:
15537 .PP
15538 .Vb 1
15539 \&     A GNU Manual
15540 .Ve
15541 .PP
15542 (b) The \s-1FSF\s0's Back-Cover Text is:
15543 .PP
15544 .Vb 3
15545 \&     You have freedom to copy and modify this GNU Manual, like GNU
15546 \&     software.  Copies published by the Free Software Foundation raise
15547 \&     funds for GNU development.
15548 .Ve