libf2c:
[official-gcc.git] / gcc / gcc.1
bloba8832d069b689fbf013d5610247d7a0bb2092a79
1 .\" Automatically generated by Pod::Man version 1.1
2 .\" Mon Feb 19 19:32:03 2001
3 .\"
4 .\" Standard preamble:
5 .\" ======================================================================
6 .de Sh \" Subsection heading
7 .br
8 .if t .Sp
9 .ne 5
10 .PP
11 \fB\\$1\fR
12 .PP
14 .de Sp \" Vertical space (when we can't use .PP)
15 .if t .sp .5v
16 .if n .sp
18 .de Ip \" List item
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
24 .de Vb \" Begin verbatim text
25 .ft CW
26 .nf
27 .ne \\$1
29 .de Ve \" End verbatim text
30 .ft R
32 .fi
34 .\" Set up some character translations and predefined strings.  \*(-- will
35 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
36 .\" double quote, and \*(R" will give a right double quote.  | will give a
37 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
38 .\" to do unbreakable dashes and therefore won't be available.  \*(C` and
39 .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
40 .tr \(*W-|\(bv\*(Tr
41 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
42 .ie n \{\
43 .    ds -- \(*W-
44 .    ds PI pi
45 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
46 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
47 .    ds L" ""
48 .    ds R" ""
49 .    ds C` ""
50 .    ds C' ""
51 'br\}
52 .el\{\
53 .    ds -- \|\(em\|
54 .    ds PI \(*p
55 .    ds L" ``
56 .    ds R" ''
57 'br\}
58 .\"
59 .\" If the F register is turned on, we'll generate index entries on stderr
60 .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
61 .\" index entries marked with X<> in POD.  Of course, you'll have to process
62 .\" the output yourself in some meaningful fashion.
63 .if \nF \{\
64 .    de IX
65 .    tm Index:\\$1\t\\n%\t"\\$2"
67 .    nr % 0
68 .    rr F
69 .\}
70 .\"
71 .\" For nroff, turn off justification.  Always turn off hyphenation; it
72 .\" makes way too many mistakes in technical documents.
73 .hy 0
74 .if n .na
75 .\"
76 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
77 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
78 .bd B 3
79 .    \" fudge factors for nroff and troff
80 .if n \{\
81 .    ds #H 0
82 .    ds #V .8m
83 .    ds #F .3m
84 .    ds #[ \f1
85 .    ds #] \fP
86 .\}
87 .if t \{\
88 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
89 .    ds #V .6m
90 .    ds #F 0
91 .    ds #[ \&
92 .    ds #] \&
93 .\}
94 .    \" simple accents for nroff and troff
95 .if n \{\
96 .    ds ' \&
97 .    ds ` \&
98 .    ds ^ \&
99 .    ds , \&
100 .    ds ~ ~
101 .    ds /
103 .if t \{\
104 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
105 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
106 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
107 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
108 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
109 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
111 .    \" troff and (daisy-wheel) nroff accents
112 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
113 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
114 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
115 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
116 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
117 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
118 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
119 .ds ae a\h'-(\w'a'u*4/10)'e
120 .ds Ae A\h'-(\w'A'u*4/10)'E
121 .    \" corrections for vroff
122 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
123 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
124 .    \" for low resolution devices (crt and lpr)
125 .if \n(.H>23 .if \n(.V>19 \
127 .    ds : e
128 .    ds 8 ss
129 .    ds o a
130 .    ds d- d\h'-1'\(ga
131 .    ds D- D\h'-1'\(hy
132 .    ds th \o'bp'
133 .    ds Th \o'LP'
134 .    ds ae ae
135 .    ds Ae AE
137 .rm #[ #] #H #V #F C
138 .\" ======================================================================
140 .IX Title "GCC 1"
141 .TH GCC 1 "gcc-3.1" "2001-02-19" "GNU"
143 .SH "NAME"
144 gcc \- \s-1GNU\s0 project C and \*(C+ compiler
145 .SH "SYNOPSIS"
146 .IX Header "SYNOPSIS"
147 gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
148     [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
149     [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR]
150     [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
151     [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
152     [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
153     [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR...
155 Only the most useful options are listed here; see below for the
156 remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
157 .SH "DESCRIPTION"
158 .IX Header "DESCRIPTION"
159 When you invoke \s-1GCC\s0, it normally does preprocessing, compilation,
160 assembly and linking.  The ``overall options'' allow you to stop this
161 process at an intermediate stage.  For example, the \fB\-c\fR option
162 says not to run the linker.  Then the output consists of object files
163 output by the assembler.
165 Other options are passed on to one stage of processing.  Some options
166 control the preprocessor and others the compiler itself.  Yet other
167 options control the assembler and linker; most of these are not
168 documented here, since you rarely need to use any of them.
170 Most of the command line options that you can use with \s-1GCC\s0 are useful
171 for C programs; when an option is only useful with another language
172 (usually \*(C+), the explanation says so explicitly.  If the description
173 for a particular option does not mention a source language, you can use
174 that option with all supported languages.
176 The \fBgcc\fR program accepts options and file names as operands.  Many
177 options have multi-letter names; therefore multiple single-letter options
178 may \fInot\fR be grouped: \fB\-dr\fR is very different from \fB\-d\ \-r\fR.
180 You can mix options and other arguments.  For the most part, the order
181 you use doesn't matter.  Order does matter when you use several options
182 of the same kind; for example, if you specify \fB\-L\fR more than once,
183 the directories are searched in the order specified.
185 Many options have long names starting with \fB\-f\fR or with
186 \&\fB\-W\fR\-\-\-for example, \fB\-fforce-mem\fR,
187 \&\fB\-fstrength-reduce\fR, \fB\-Wformat\fR and so on.  Most of
188 these have both positive and negative forms; the negative form of
189 \&\fB\-ffoo\fR would be \fB\-fno-foo\fR.  This manual documents
190 only one of these two forms, whichever one is not the default.
191 .SH "OPTIONS"
192 .IX Header "OPTIONS"
193 .Sh "Option Summary"
194 .IX Subsection "Option Summary"
195 Here is a summary of all the options, grouped by type.  Explanations are
196 in the following sections.
197 .Ip "\fIOverall Options\fR" 4
198 .IX Item "Overall Options"
199 \&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-pipe  \-pass-exit-codes  \-x\fR \fIlanguage\fR 
200 \&\fB\-v  \-\-target-help  \-\-help\fR
201 .Ip "\fIC Language Options\fR" 4
202 .IX Item "C Language Options"
203 \&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fno-asm  \-fno-builtin 
204 \&\-fhosted  \-ffreestanding 
205 \&\-trigraphs  \-traditional  \-traditional-cpp 
206 \&\-fallow-single-precision  \-fcond-mismatch 
207 \&\-fsigned-bitfields  \-fsigned-char 
208 \&\-funsigned-bitfields  \-funsigned-char 
209 \&\-fwritable-strings  \-fshort-wchar\fR
210 .Ip "\fI\*(C+ Language Options\fR" 4
211 .IX Item " Language Options"
212 \&\fB\-fno-access-control  \-fcheck-new  \-fconserve-space 
213 \&\-fdollars-in-identifiers  \-fno-elide-constructors 
214 \&\-fno-enforce-eh-specs  \-fexternal-templates 
215 \&\-falt-external-templates 
216 \&\-ffor-scope  \-fno-for-scope  \-fno-gnu-keywords  \-fhonor-std 
217 \&\-fhuge-objects  \-fno-implicit-templates 
218 \&\-fno-implicit-inline-templates 
219 \&\-fno-implement-inlines  \-fms-extensions 
220 \&\-fno-operator-names 
221 \&\-fno-optional-diags  \-fpermissive 
222 \&\-frepo  \-fno-rtti \-ftemplate-depth-\fR\fIn\fR 
223 \&\fB\-fuse-cxa-atexit  \-fvtable-thunks  \-nostdinc++ 
224 \&\-fno-default-inline  \-Wctor-dtor-privacy 
225 \&\-Wnon-virtual-dtor  \-Wreorder 
226 \&\-Weffc++  \-Wno-deprecated 
227 \&\-Wno-non-template-friend  \-Wold-style-cast 
228 \&\-Woverloaded-virtual  \-Wno-pmf-conversions 
229 \&\-Wsign-promo  \-Wsynth\fR
230 .Ip "\fILanguage Independent Options\fR" 4
231 .IX Item "Language Independent Options"
232 \&\fB\-fmessage-length=\fR\fIn\fR  
233 \&\fB\-fdiagnostics-show-location=\fR[\fBonce\fR|\fBevery-line\fR]
234 .Ip "\fIWarning Options\fR" 4
235 .IX Item "Warning Options"
236 \&\fB\-fsyntax-only  \-pedantic  \-pedantic-errors 
237 \&\-w  \-W  \-Wall  \-Waggregate-return 
238 \&\-Wcast-align  \-Wcast-qual  \-Wchar-subscripts  \-Wcomment 
239 \&\-Wconversion  \-Wdisabled-optimization \-Werror 
240 \&\-Wfloat-equal  \-Wformat  \-Wformat=2 
241 \&\-Wformat-nonliteral \-Wformat-security 
242 \&\-Wid-clash-\fR\fIlen\fR  \fB\-Wimplicit \-Wimplicit-int  
243 \&\-Wimplicit-function-declaration 
244 \&\-Werror-implicit-function-declaration 
245 \&\-Wimport  \-Winline 
246 \&\-Wlarger-than-\fR\fIlen\fR  \fB\-Wlong-long 
247 \&\-Wmain  \-Wmissing-declarations 
248 \&\-Wmissing-format-attribute  \-Wmissing-noreturn 
249 \&\-Wmultichar  \-Wno-format-extra-args \-Wno-format-y2k 
250 \&\-Wno-import  \-Wpacked  \-Wpadded 
251 \&\-Wparentheses \-Wpointer-arith  \-Wredundant-decls 
252 \&\-Wreturn-type  \-Wsequence-point  \-Wshadow 
253 \&\-Wsign-compare  \-Wswitch  \-Wsystem-headers 
254 \&\-Wtrigraphs  \-Wundef  \-Wuninitialized 
255 \&\-Wunknown-pragmas  \-Wunreachable-code 
256 \&\-Wunused  \-Wunused-function  \-Wunused-label  \-Wunused-parameter 
257 \&\-Wunused-value  \-Wunused-variable  \-Wwrite-strings\fR
258 .Ip "\fIC-only Warning Options\fR" 4
259 .IX Item "C-only Warning Options"
260 \&\fB\-Wbad-function-cast \-Wmissing-prototypes \-Wnested-externs 
261 \&\-Wstrict-prototypes \-Wtraditional\fR
262 .Ip "\fIDebugging Options\fR" 4
263 .IX Item "Debugging Options"
264 \&\fB\-a  \-ax  \-d\fR\fIletters\fR  \fB\-fdump-unnumbered \-fdump-translation-unit=\fR\fIfile\fR 
265 \&\fB\-fdump-class-layout=\fR\fIfile\fR \fB\-fpretend-float \-fprofile-arcs  \-ftest-coverage 
266 \&\-g  \-g\fR\fIlevel\fR  \fB\-gcoff  \-gdwarf  \-gdwarf-1  \-gdwarf-1+  \-gdwarf-2 
267 \&\-ggdb  \-gstabs  \-gstabs+  \-gxcoff  \-gxcoff+ 
268 \&\-p  \-pg  \-print-file-name=\fR\fIlibrary\fR  \fB\-print-libgcc-file-name 
269 \&\-print-prog-name=\fR\fIprogram\fR  \fB\-print-search-dirs  \-Q 
270 \&\-save-temps  \-time\fR
271 .Ip "\fIOptimization Options\fR" 4
272 .IX Item "Optimization Options"
273 \&\fB\-falign-functions=\fR\fIn\fR  \fB\-falign-jumps=\fR\fIn\fR 
274 \&\fB\-falign-labels=\fR\fIn\fR  \fB\-falign-loops=\fR\fIn\fR  
275 \&\fB\-fbranch-probabilities  \-fcaller-saves 
276 \&\-fcse-follow-jumps  \-fcse-skip-blocks  \-fdata-sections  \-fdce 
277 \&\-fdelayed-branch  \-fdelete-null-pointer-checks 
278 \&\-fexpensive-optimizations  \-ffast-math  \-ffloat-store 
279 \&\-fforce-addr  \-fforce-mem  \-ffunction-sections  \-fgcse  
280 \&\-finline-functions  \-finline-limit=\fR\fIn\fR  \fB\-fkeep-inline-functions 
281 \&\-fkeep-static-consts  \-fmove-all-movables 
282 \&\-fno-default-inline  \-fno-defer-pop 
283 \&\-fno-function-cse   \-fno-guess-branch-probability
284 \&\-fno-inline  \-fno-math-errno  \-fno-peephole 
285 \&\-fomit-frame-pointer  \-foptimize-register-move 
286 \&\-foptimize-sibling-calls  \-freduce-all-givs 
287 \&\-fregmove  \-frename-registers 
288 \&\-frerun-cse-after-loop  \-frerun-loop-opt 
289 \&\-fschedule-insns  \-fschedule-insns2 
290 \&\-fsingle-precision-constant  \-fssa 
291 \&\-fstrength-reduce  \-fstrict-aliasing  \-fthread-jumps  \-ftrapv 
292 \&\-funroll-all-loops  \-funroll-loops  
293 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
294 \&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os\fR
295 .Ip "\fIPreprocessor Options\fR" 4
296 .IX Item "Preprocessor Options"
297 \&\fB\-$  \-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR  \fB\-A-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
298 \&\fB\-C  \-dD  \-dI  \-dM  \-dN 
299 \&\-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR]  \fB\-E  \-H 
300 \&\-idirafter\fR \fIdir\fR 
301 \&\fB\-include\fR \fIfile\fR  \fB\-imacros\fR \fIfile\fR 
302 \&\fB\-iprefix\fR \fIfile\fR  \fB\-iwithprefix\fR \fIdir\fR 
303 \&\fB\-iwithprefixbefore\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR \fB\-isystem-c++\fR \fIdir\fR 
304 \&\fB\-M  \-MM  \-MF  \-MG  \-MP  \-MQ  \-MT  \-nostdinc  \-P  \-remap 
305 \&\-trigraphs  \-undef  \-U\fR\fImacro\fR  \fB\-Wp,\fR\fIoption\fR
306 .Ip "\fIAssembler Option\fR" 4
307 .IX Item "Assembler Option"
308 \&\fB\-Wa,\fR\fIoption\fR
309 .Ip "\fILinker Options\fR" 4
310 .IX Item "Linker Options"
311 \&\fB
312 \&\fR\fIobject-file-name\fR  \fB\-l\fR\fIlibrary\fR 
313 \&\fB\-nostartfiles  \-nodefaultlibs  \-nostdlib 
314 \&\-s  \-static  \-static-libgcc  \-shared  \-shared-libgcc  \-symbolic 
315 \&\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
316 \&\fB\-u\fR \fIsymbol\fR
317 .Ip "\fIDirectory Options\fR" 4
318 .IX Item "Directory Options"
319 \&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-I-  \-L\fR\fIdir\fR  \fB\-specs=\fR\fIfile\fR
320 .Ip "\fITarget Options\fR" 4
321 .IX Item "Target Options"
322 \&\fB\-b\fR \fImachine\fR  \fB\-V\fR \fIversion\fR
323 .Ip "\fIMachine Dependent Options\fR" 4
324 .IX Item "Machine Dependent Options"
325 \&\fIM680x0 Options\fR
327 \&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
328 \&\-m68060  \-mcpu32 \-m5200  \-m68881  \-mbitfield  \-mc68000  \-mc68020   
329 \&\-mfpa \-mnobitfield  \-mrtd  \-mshort  \-msoft-float  \-mpcrel 
330 \&\-malign-int \-mstrict-align\fR
332 \&\fIM68hc1x Options\fR
334 \&\fB\-m6811  \-m6812  \-m68hc11  \-m68hc12 
335 \&\-mauto-incdec  \-mshort  \-msoft-reg-count=\fR\fIcount\fR
337 \&\fI\s-1VAX\s0 Options\fR
339 \&\fB\-mg  \-mgnu  \-munix\fR
341 \&\fI\s-1SPARC\s0 Options\fR
343 \&\fB\-mcpu=\fR\fIcpu type\fR 
344 \&\fB\-mtune=\fR\fIcpu type\fR 
345 \&\fB\-mcmodel=\fR\fIcode model\fR 
346 \&\fB\-m32  \-m64 
347 \&\-mapp-regs  \-mbroken-saverestore  \-mcypress 
348 \&\-mepilogue \-mfaster-structs \-mflat 
349 \&\-mfpu  \-mhard-float  \-mhard-quad-float 
350 \&\-mimpure-text  \-mlive-g0  \-mno-app-regs 
351 \&\-mno-epilogue \-mno-faster-structs \-mno-flat  \-mno-fpu 
352 \&\-mno-impure-text \-mno-stack-bias  \-mno-unaligned-doubles 
353 \&\-msoft-float  \-msoft-quad-float  \-msparclite  \-mstack-bias 
354 \&\-msupersparc  \-munaligned-doubles  \-mv8\fR
356 \&\fIConvex Options\fR
358 \&\fB\-mc1  \-mc2  \-mc32  \-mc34  \-mc38 
359 \&\-margcount  \-mnoargcount 
360 \&\-mlong32  \-mlong64 
361 \&\-mvolatile-cache  \-mvolatile-nocache\fR
363 \&\fI\s-1AMD29K\s0 Options\fR
365 \&\fB\-m29000  \-m29050  \-mbw  \-mnbw  \-mdw  \-mndw 
366 \&\-mlarge  \-mnormal  \-msmall 
367 \&\-mkernel-registers  \-mno-reuse-arg-regs 
368 \&\-mno-stack-check  \-mno-storem-bug 
369 \&\-mreuse-arg-regs  \-msoft-float  \-mstack-check 
370 \&\-mstorem-bug  \-muser-registers\fR
372 \&\fI\s-1ARM\s0 Options\fR
374 \&\fB\-mapcs-frame \-mno-apcs-frame 
375 \&\-mapcs-26 \-mapcs-32 
376 \&\-mapcs-stack-check \-mno-apcs-stack-check 
377 \&\-mapcs-float \-mno-apcs-float 
378 \&\-mapcs-reentrant \-mno-apcs-reentrant 
379 \&\-msched-prolog \-mno-sched-prolog 
380 \&\-mlittle-endian \-mbig-endian \-mwords-little-endian 
381 \&\-malignment-traps \-mno-alignment-traps 
382 \&\-msoft-float \-mhard-float \-mfpe 
383 \&\-mthumb-interwork \-mno-thumb-interwork 
384 \&\-mcpu= \-march= \-mfpe=  
385 \&\-mstructure-size-boundary= 
386 \&\-mbsd \-mxopen \-mno-symrename 
387 \&\-mabort-on-noreturn 
388 \&\-mlong-calls \-mno-long-calls 
389 \&\-mnop-fun-dllimport \-mno-nop-fun-dllimport 
390 \&\-msingle-pic-base \-mno-single-pic-base 
391 \&\-mpic-register=\fR
393 \&\fIThumb Options\fR
395 \&\fB\-mtpcs-frame \-mno-tpcs-frame 
396 \&\-mtpcs-leaf-frame \-mno-tpcs-leaf-frame 
397 \&\-mlittle-endian  \-mbig-endian 
398 \&\-mthumb-interwork \-mno-thumb-interwork 
399 \&\-mstructure-size-boundary= 
400 \&\-mnop-fun-dllimport \-mno-nop-fun-dllimport 
401 \&\-mcallee-super-interworking \-mno-callee-super-interworking 
402 \&\-mcaller-super-interworking \-mno-caller-super-interworking 
403 \&\-msingle-pic-base \-mno-single-pic-base 
404 \&\-mpic-register=\fR
406 \&\fI\s-1MN10200\s0 Options\fR
408 \&\fB\-mrelax\fR
410 \&\fI\s-1MN10300\s0 Options\fR
412 \&\fB\-mmult-bug 
413 \&\-mno-mult-bug 
414 \&\-mam33 
415 \&\-mno-am33 
416 \&\-mrelax\fR
418 \&\fIM32R/D Options\fR
420 \&\fB\-mcode-model=\fR\fImodel type\fR  \fB\-msdata=\fR\fIsdata type\fR 
421 \&\fB\-G\fR \fInum\fR
423 \&\fIM88K Options\fR
425 \&\fB\-m88000  \-m88100  \-m88110  \-mbig-pic 
426 \&\-mcheck-zero-division  \-mhandle-large-shift 
427 \&\-midentify-revision  \-mno-check-zero-division 
428 \&\-mno-ocs-debug-info  \-mno-ocs-frame-position 
429 \&\-mno-optimize-arg-area  \-mno-serialize-volatile 
430 \&\-mno-underscores  \-mocs-debug-info 
431 \&\-mocs-frame-position  \-moptimize-arg-area 
432 \&\-mserialize-volatile  \-mshort-data-\fR\fInum\fR  \fB\-msvr3 
433 \&\-msvr4  \-mtrap-large-shift  \-muse-div-instruction 
434 \&\-mversion-03.00  \-mwarn-passed-structs\fR
436 \&\fI\s-1RS/6000\s0 and PowerPC Options\fR
438 \&\fB\-mcpu=\fR\fIcpu type\fR 
439 \&\fB\-mtune=\fR\fIcpu type\fR 
440 \&\fB\-mpower  \-mno-power  \-mpower2  \-mno-power2 
441 \&\-mpowerpc  \-mpowerpc64  \-mno-powerpc 
442 \&\-mpowerpc-gpopt  \-mno-powerpc-gpopt 
443 \&\-mpowerpc-gfxopt  \-mno-powerpc-gfxopt 
444 \&\-mnew-mnemonics  \-mold-mnemonics 
445 \&\-mfull-toc   \-mminimal-toc  \-mno-fop-in-toc  \-mno-sum-in-toc 
446 \&\-m64  \-m32  \-mxl-call  \-mno-xl-call  \-mthreads  \-mpe 
447 \&\-msoft-float  \-mhard-float  \-mmultiple  \-mno-multiple 
448 \&\-mstring  \-mno-string  \-mupdate  \-mno-update 
449 \&\-mfused-madd  \-mno-fused-madd  \-mbit-align  \-mno-bit-align 
450 \&\-mstrict-align  \-mno-strict-align  \-mrelocatable 
451 \&\-mno-relocatable  \-mrelocatable-lib  \-mno-relocatable-lib 
452 \&\-mtoc  \-mno-toc \-mlittle  \-mlittle-endian  \-mbig  \-mbig-endian 
453 \&\-mcall-aix  \-mcall-sysv  \-mprototype  \-mno-prototype 
454 \&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb \-msdata 
455 \&\-msdata=\fR\fIopt\fR  \fB\-mvxworks \-G\fR \fInum\fR
457 \&\fI\s-1RT\s0 Options\fR
459 \&\fB\-mcall-lib-mul  \-mfp-arg-in-fpregs  \-mfp-arg-in-gregs 
460 \&\-mfull-fp-blocks  \-mhc-struct-return  \-min-line-mul 
461 \&\-mminimum-fp-blocks  \-mnohc-struct-return\fR
463 \&\fI\s-1MIPS\s0 Options\fR
465 \&\fB\-mabicalls  \-mcpu=\fR\fIcpu type\fR
466 \&\fB\-membedded-data  \-muninit-const-in-rodata 
467 \&\-membedded-pic  \-mfp32  \-mfp64  \-mgas  \-mgp32  \-mgp64 
468 \&\-mgpopt  \-mhalf-pic  \-mhard-float  \-mint64  \-mips1 
469 \&\-mips2  \-mips3 \-mips4 \-mlong64  \-mlong32 \-mlong-calls  \-mmemcpy 
470 \&\-mmips-as  \-mmips-tfile  \-mno-abicalls 
471 \&\-mno-embedded-data  \-mno-uninit-const-in-rodata  \-mno-embedded-pic 
472 \&\-mno-gpopt  \-mno-long-calls 
473 \&\-mno-memcpy  \-mno-mips-tfile  \-mno-rnames  \-mno-stats 
474 \&\-mrnames  \-msoft-float 
475 \&\-m4650  \-msingle-float  \-mmad 
476 \&\-mstats  \-EL  \-EB  \-G\fR \fInum\fR  \fB\-nocpp 
477 \&\-mabi=32 \-mabi=n32 \-mabi=64 \-mabi=eabi 
478 \&\-mfix7000 \-mno-crt0\fR
480 \&\fIi386 Options\fR
482 \&\fB\-mcpu=\fR\fIcpu type\fR \fB\-march=\fR\fIcpu type\fR 
483 \&\fB\-mintel-syntax \-mieee-fp  \-mno-fancy-math-387 
484 \&\-mno-fp-ret-in-387  \-msoft-float  \-msvr3\-shlib 
485 \&\-mno-wide-multiply  \-mrtd  \-malign-double 
486 \&\-malign-jumps=\fR\fInum\fR  \fB\-malign-loops=\fR\fInum\fR 
487 \&\fB\-malign-functions=\fR\fInum\fR \fB\-mpreferred-stack-boundary=\fR\fInum\fR 
488 \&\fB\-mthreads \-mno-align-stringops \-minline-all-stringops 
489 \&\-mpush-args \-maccumulate-outgoing-args \-m128bit-long-double 
490 \&\-m96bit-long-double \-mregparm=\fR\fInum\fR
492 \&\fI\s-1HPPA\s0 Options\fR
494 \&\fB\-march=\fR\fIarchitecture type\fR 
495 \&\fB\-mbig-switch  \-mdisable-fpregs  \-mdisable-indexing   
496 \&\-mfast-indirect-calls \-mgas  \-mjump-in-delay   
497 \&\-mlong-load-store  \-mno-big-switch  \-mno-disable-fpregs 
498 \&\-mno-disable-indexing  \-mno-fast-indirect-calls  \-mno-gas 
499 \&\-mno-jump-in-delay  \-mno-long-load-store   
500 \&\-mno-portable-runtime  \-mno-soft-float 
501 \&\-mno-space-regs  \-msoft-float  \-mpa-risc-1\-0   
502 \&\-mpa-risc-1\-1  \-mpa-risc-2\-0 \-mportable-runtime 
503 \&\-mschedule=\fR\fIcpu type\fR  \fB\-mspace-regs\fR
505 \&\fIIntel 960 Options\fR
507 \&\fB\-m\fR\fIcpu type\fR  \fB\-masm-compat  \-mclean-linkage 
508 \&\-mcode-align  \-mcomplex-addr  \-mleaf-procedures 
509 \&\-mic-compat  \-mic2.0\-compat  \-mic3.0\-compat 
510 \&\-mintel-asm  \-mno-clean-linkage  \-mno-code-align 
511 \&\-mno-complex-addr  \-mno-leaf-procedures 
512 \&\-mno-old-align  \-mno-strict-align  \-mno-tail-call 
513 \&\-mnumerics  \-mold-align  \-msoft-float  \-mstrict-align 
514 \&\-mtail-call\fR
516 \&\fI\s-1DEC\s0 Alpha Options\fR
518 \&\fB\-mfp-regs  \-mno-fp-regs \-mno-soft-float  \-msoft-float 
519 \&\-malpha-as \-mgas 
520 \&\-mieee  \-mieee-with-inexact  \-mieee-conformant 
521 \&\-mfp-trap-mode=\fR\fImode\fR  \fB\-mfp-rounding-mode=\fR\fImode\fR 
522 \&\fB\-mtrap-precision=\fR\fImode\fR  \fB\-mbuild-constants 
523 \&\-mcpu=\fR\fIcpu type\fR 
524 \&\fB\-mbwx \-mno-bwx \-mcix \-mno-cix \-mmax \-mno-max 
525 \&\-mmemory-latency=\fR\fItime\fR
527 \&\fIClipper Options\fR
529 \&\fB\-mc300  \-mc400\fR
531 \&\fIH8/300 Options\fR
533 \&\fB\-mrelax  \-mh \-ms \-mint32  \-malign-300\fR
535 \&\fI\s-1SH\s0 Options\fR
537 \&\fB\-m1  \-m2  \-m3  \-m3e 
538 \&\-m4\-nofpu  \-m4\-single-only  \-m4\-single  \-m4 
539 \&\-mb  \-ml  \-mdalign  \-mrelax 
540 \&\-mbigtable  \-mfmovd  \-mhitachi  \-mnomacsave 
541 \&\-misize  \-mpadstruct  \-mspace 
542 \&\-mprefergot
543 \&\-musermode\fR
545 \&\fISystem V Options\fR
547 \&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
549 \&\fI\s-1ARC\s0 Options\fR
551 \&\fB\-EB  \-EL 
552 \&\-mmangle-cpu  \-mcpu=\fR\fIcpu\fR  \fB\-mtext=\fR\fItext section\fR 
553 \&\fB\-mdata=\fR\fIdata section\fR  \fB\-mrodata=\fR\fIreadonly data section\fR
555 \&\fITMS320C3x/C4x Options\fR
557 \&\fB\-mcpu=\fR\fIcpu\fR \fB\-mbig \-msmall \-mregparm \-mmemparm 
558 \&\-mfast-fix \-mmpyi \-mbk \-mti \-mdp-isr-reload 
559 \&\-mrpts=\fR\fIcount\fR  \fB\-mrptb \-mdb \-mloop-unsigned 
560 \&\-mparallel-insns \-mparallel-mpy \-mpreserve-float\fR
562 \&\fIV850 Options\fR
564 \&\fB\-mlong-calls \-mno-long-calls \-mep \-mno-ep 
565 \&\-mprolog-function \-mno-prolog-function \-mspace 
566 \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR 
567 \&\fB\-mv850 \-mbig-switch\fR
569 \&\fI\s-1NS32K\s0 Options\fR
571 \&\fB\-m32032 \-m32332 \-m32532 \-m32081 \-m32381 \-mmult-add \-mnomult-add 
572 \&\-msoft-float \-mrtd \-mnortd \-mregparam \-mnoregparam \-msb \-mnosb 
573 \&\-mbitfield \-mnobitfield \-mhimem \-mnohimem\fR
575 \&\fI\s-1AVR\s0 Options\fR
577 \&\fB\-mmcu=\fR\fImcu\fR \fB\-msize \-minit-stack=\fR\fIn\fR \fB\-mno-interrupts 
578 \&\-mcall-prologues \-mno-tablejump \-mtiny-stack\fR
580 \&\fIMCore Options\fR
582 \&\fB\-mhardlit \-mno-hardlit \-mdiv \-mno-div \-mrelax-immediates  
583 \&\-mno-relax-immediates \-mwide-bitfields \-mno-wide-bitfields 
584 \&\-m4byte-functions \-mno-4byte-functions \-mcallgraph-data 
585 \&\-mno-callgraph-data \-mslow-bytes \-mno-slow-bytes \-mno-lsim 
586 \&\-mlittle-endian \-mbig-endian \-m210 \-m340 \-mstack-increment\fR
588 \&\fI\s-1IA-64\s0 Options\fR
590 \&\fB\-mbig-endian \-mlittle-endian \-mgnu-as \-mgnu-ld \-mno-pic 
591 \&\-mvolatile-asm-stop \-mb-step \-mregister-names \-mno-sdata 
592 \&\-mconstant-gp \-mauto-pic \-minline-divide-min-latency 
593 \&\-minline-divide-max-throughput \-mno-dwarf2\-asm 
594 \&\-mfixed-range=\fR\fIregister range\fR
595 .Ip "\fICode Generation Options\fR" 4
596 .IX Item "Code Generation Options"
597 \&\fB\-fcall-saved-\fR\fIreg\fR  \fB\-fcall-used-\fR\fIreg\fR 
598 \&\fB\-fexceptions  \-funwind-tables  \-ffixed-\fR\fIreg\fR 
599 \&\fB\-finhibit-size-directive  \-finstrument-functions 
600 \&\-fcheck-memory-usage  \-fprefix-function-name 
601 \&\-fno-common  \-fno-ident  \-fno-gnu-linker 
602 \&\-fpcc-struct-return  \-fpic  \-fPIC 
603 \&\-freg-struct-return  \-fshared-data  \-fshort-enums 
604 \&\-fshort-double  \-fvolatile  \-fvolatile-global \-fvolatile-static 
605 \&\-fverbose-asm  \-fpack-struct  \-fstack-check 
606 \&\-fstack-limit-register=\fR\fIreg\fR  \fB\-fstack-limit-symbol=\fR\fIsym\fR 
607 \&\fB\-fargument-alias  \-fargument-noalias 
608 \&\-fargument-noalias-global 
609 \&\-fleading-underscore\fR
610 .Sh "Options Controlling the Kind of Output"
611 .IX Subsection "Options Controlling the Kind of Output"
612 Compilation can involve up to four stages: preprocessing, compilation
613 proper, assembly and linking, always in that order.  The first three
614 stages apply to an individual source file, and end by producing an
615 object file; linking combines all the object files (those newly
616 compiled, and those specified as input) into an executable file.
618 For any given input file, the file name suffix determines what kind of
619 compilation is done:
620 .Ip "\fIfile\fR\fB.c\fR" 4
621 .IX Item "file.c"
622 C source code which must be preprocessed.
623 .Ip "\fIfile\fR\fB.i\fR" 4
624 .IX Item "file.i"
625 C source code which should not be preprocessed.
626 .Ip "\fIfile\fR\fB.ii\fR" 4
627 .IX Item "file.ii"
628 \&\*(C+ source code which should not be preprocessed.
629 .Ip "\fIfile\fR\fB.m\fR" 4
630 .IX Item "file.m"
631 Objective-C source code.  Note that you must link with the library
632 \&\fIlibobjc.a\fR to make an Objective-C program work.
633 .Ip "\fIfile\fR\fB.mi\fR" 4
634 .IX Item "file.mi"
635 Objective-C source code which should not be preprocessed.
636 .Ip "\fIfile\fR\fB.h\fR" 4
637 .IX Item "file.h"
638 C header file (not to be compiled or linked).
639 .Ip "\fIfile\fR\fB.cc\fR" 4
640 .IX Item "file.cc"
641 .PD 0
642 .Ip "\fIfile\fR\fB.cp\fR" 4
643 .IX Item "file.cp"
644 .Ip "\fIfile\fR\fB.cxx\fR" 4
645 .IX Item "file.cxx"
646 .Ip "\fIfile\fR\fB.cpp\fR" 4
647 .IX Item "file.cpp"
648 .Ip "\fIfile\fR\fB.c++\fR" 4
649 .IX Item "file.c++"
650 .Ip "\fIfile\fR\fB.C\fR" 4
651 .IX Item "file.C"
653 \&\*(C+ source code which must be preprocessed.  Note that in \fB.cxx\fR,
654 the last two letters must both be literally \fBx\fR.  Likewise,
655 \&\fB.C\fR refers to a literal capital C.
656 .Ip "\fIfile\fR\fB.f\fR" 4
657 .IX Item "file.f"
658 .PD 0
659 .Ip "\fIfile\fR\fB.for\fR" 4
660 .IX Item "file.for"
661 .Ip "\fIfile\fR\fB.FOR\fR" 4
662 .IX Item "file.FOR"
664 Fortran source code which should not be preprocessed.
665 .Ip "\fIfile\fR\fB.F\fR" 4
666 .IX Item "file.F"
667 .PD 0
668 .Ip "\fIfile\fR\fB.fpp\fR" 4
669 .IX Item "file.fpp"
670 .Ip "\fIfile\fR\fB.FPP\fR" 4
671 .IX Item "file.FPP"
673 Fortran source code which must be preprocessed (with the traditional
674 preprocessor).
675 .Ip "\fIfile\fR\fB.r\fR" 4
676 .IX Item "file.r"
677 Fortran source code which must be preprocessed with a \s-1RATFOR\s0
678 preprocessor (not included with \s-1GCC\s0).
679 .Ip "\fIfile\fR\fB.ch\fR" 4
680 .IX Item "file.ch"
681 .PD 0
682 .Ip "\fIfile\fR\fB.chi\fR" 4
683 .IX Item "file.chi"
685 \&\s-1CHILL\s0 source code (preprocessed with the traditional preprocessor).
686 .Ip "\fIfile\fR\fB.s\fR" 4
687 .IX Item "file.s"
688 Assembler code.
689 .Ip "\fIfile\fR\fB.S\fR" 4
690 .IX Item "file.S"
691 Assembler code which must be preprocessed.
692 .Ip "\fIother\fR" 4
693 .IX Item "other"
694 An object file to be fed straight into linking.
695 Any file name with no recognized suffix is treated this way.
697 You can specify the input language explicitly with the \fB\-x\fR option:
698 .Ip "\fB\-x\fR \fIlanguage\fR" 4
699 .IX Item "-x language"
700 Specify explicitly the \fIlanguage\fR for the following input files
701 (rather than letting the compiler choose a default based on the file
702 name suffix).  This option applies to all following input files until
703 the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
705 .Vb 6
706 \&        c  c-header  cpp-output
707 \&        c++  c++-cpp-output
708 \&        objective-c  objc-cpp-output
709 \&        assembler  assembler-with-cpp
710 \&        f77  f77-cpp-input  ratfor
711 \&        java  chill
713 .Ip "\fB\-x none\fR" 4
714 .IX Item "-x none"
715 Turn off any specification of a language, so that subsequent files are
716 handled according to their file name suffixes (as they are if \fB\-x\fR
717 has not been used at all).
718 .Ip "\fB\-pass-exit-codes\fR" 4
719 .IX Item "-pass-exit-codes"
720 Normally the \fBgcc\fR program will exit with the code of 1 if any
721 phase of the compiler returns a non-success return code.  If you specify
722 \&\fB\-pass-exit-codes\fR, the \fBgcc\fR program will instead return with
723 numerically highest error produced by any phase that returned an error
724 indication.
726 If you only want some of the stages of compilation, you can use
727 \&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
728 one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
729 \&\fBgcc\fR is to stop.  Note that some combinations (for example,
730 \&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
731 .Ip "\fB\-c\fR" 4
732 .IX Item "-c"
733 Compile or assemble the source files, but do not link.  The linking
734 stage simply is not done.  The ultimate output is in the form of an
735 object file for each source file.
737 By default, the object file name for a source file is made by replacing
738 the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
740 Unrecognized input files, not requiring compilation or assembly, are
741 ignored.
742 .Ip "\fB\-S\fR" 4
743 .IX Item "-S"
744 Stop after the stage of compilation proper; do not assemble.  The output
745 is in the form of an assembler code file for each non-assembler input
746 file specified.
748 By default, the assembler file name for a source file is made by
749 replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
751 Input files that don't require compilation are ignored.
752 .Ip "\fB\-E\fR" 4
753 .IX Item "-E"
754 Stop after the preprocessing stage; do not run the compiler proper.  The
755 output is in the form of preprocessed source code, which is sent to the
756 standard output.
758 Input files which don't require preprocessing are ignored.
759 .Ip "\fB\-o\fR \fIfile\fR" 4
760 .IX Item "-o file"
761 Place output in file \fIfile\fR.  This applies regardless to whatever
762 sort of output is being produced, whether it be an executable file,
763 an object file, an assembler file or preprocessed C code.
765 Since only one output file can be specified, it does not make sense to
766 use \fB\-o\fR when compiling more than one input file, unless you are
767 producing an executable file as output.
769 If \fB\-o\fR is not specified, the default is to put an executable file
770 in \fIa.out\fR, the object file for \fI\fIsource\fI.\fIsuffix\fI\fR in
771 \&\fI\fIsource\fI.o\fR, its assembler file in \fI\fIsource\fI.s\fR, and
772 all preprocessed C source on standard output.
773 .Ip "\fB\-v\fR" 4
774 .IX Item "-v"
775 Print (on standard error output) the commands executed to run the stages
776 of compilation.  Also print the version number of the compiler driver
777 program and of the preprocessor and the compiler proper.
778 .Ip "\fB\-pipe\fR" 4
779 .IX Item "-pipe"
780 Use pipes rather than temporary files for communication between the
781 various stages of compilation.  This fails to work on some systems where
782 the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
783 no trouble.
784 .Ip "\fB\*(--help\fR" 4
785 .IX Item "help"
786 Print (on the standard output) a description of the command line options
787 understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
788 then \fB\*(--help\fR will also be passed on to the various processes
789 invoked by \fBgcc\fR, so that they can display the command line options
790 they accept.  If the \fB\-W\fR option is also specified then command
791 line options which have no documentation associated with them will also
792 be displayed.
793 .Ip "\fB\*(--target-help\fR" 4
794 .IX Item "target-help"
795 Print (on the standard output) a description of target specific command
796 line options for each tool.
797 .Sh "Compiling \*(C+ Programs"
798 .IX Subsection "Compiling  Programs"
799 \&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
800 \&\fB.cc\fR, \fB.cpp\fR, \fB.c++\fR, \fB.cp\fR, or \fB.cxx\fR;
801 preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
802 files with these names and compiles them as \*(C+ programs even if you
803 call the compiler the same way as for compiling C programs (usually with
804 the name \fBgcc\fR).
806 However, \*(C+ programs often require class libraries as well as a
807 compiler that understands the \*(C+ language\-\-\-and under some
808 circumstances, you might want to compile programs from standard input,
809 or otherwise without a suffix that flags them as \*(C+ programs.
810 \&\fBg++\fR is a program that calls \s-1GCC\s0 with the default language
811 set to \*(C+, and automatically specifies linking against the \*(C+
812 library.  On many systems, \fBg++\fR is also
813 installed with the name \fBc++\fR.
815 When you compile \*(C+ programs, you may specify many of the same
816 command-line options that you use for compiling programs in any
817 language; or command-line options meaningful for C and related
818 languages; or options that are meaningful only for \*(C+ programs.
819 .Sh "Options Controlling C Dialect"
820 .IX Subsection "Options Controlling C Dialect"
821 The following options control the dialect of C (or languages derived
822 from C, such as \*(C+ and Objective C) that the compiler accepts:
823 .Ip "\fB\-ansi\fR" 4
824 .IX Item "-ansi"
825 In C mode, support all \s-1ISO\s0 C89 programs.  In \*(C+ mode,
826 remove \s-1GNU\s0 extensions that conflict with \s-1ISO\s0 \*(C+.
828 This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO\s0
829 C (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
830 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
831 predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
832 type of system you are using.  It also enables the undesirable and
833 rarely used \s-1ISO\s0 trigraph feature.  For the C compiler, 
834 it disables recognition of \*(C+ style \fB//\fR comments as well as
835 the \f(CW\*(C`inline\*(C'\fR keyword.
837 The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
838 \&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
839 \&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO\s0 C program, of
840 course, but it is useful to put them in header files that might be included
841 in compilations done with \fB\-ansi\fR.  Alternate predefined macros
842 such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
843 without \fB\-ansi\fR.
845 The \fB\-ansi\fR option does not cause non-ISO programs to be
846 rejected gratuitously.  For that, \fB\-pedantic\fR is required in
847 addition to \fB\-ansi\fR.  
849 The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
850 option is used.  Some header files may notice this macro and refrain
851 from declaring certain functions or defining certain macros that the
852 \&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
853 programs that might use these names for other things.
855 Functions which would normally be builtin but do not have semantics
856 defined by \s-1ISO\s0 C (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not builtin
857 functions with \fB\-ansi\fR is used.  
858 .Ip "\fB\-std=\fR" 4
859 .IX Item "-std="
860 Determine the language standard.  A value for this option must be provided;
861 possible values are 
862 .RS 4
863 .Ip "\fBiso9899:1990\fR" 4
864 .IX Item "iso9899:1990"
865 Same as \fB\-ansi\fR
866 .Ip "\fBiso9899:199409\fR" 4
867 .IX Item "iso9899:199409"
868 \&\s-1ISO\s0 C as modified in amend. 1
869 .Ip "\fBiso9899:1999\fR" 4
870 .IX Item "iso9899:1999"
871 \&\s-1ISO\s0 C99.  Note that this standard is not yet fully supported; see
872 <\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.
873 .Ip "\fBc89\fR" 4
874 .IX Item "c89"
875 same as \fB\-std=iso9899:1990\fR
876 .Ip "\fBc99\fR" 4
877 .IX Item "c99"
878 same as \fB\-std=iso9899:1999\fR
879 .Ip "\fBgnu89\fR" 4
880 .IX Item "gnu89"
881 default, iso9899:1990 + gnu extensions
882 .Ip "\fBgnu99\fR" 4
883 .IX Item "gnu99"
884 iso9899:1999 + gnu extensions
885 .Ip "\fBiso9899:199x\fR" 4
886 .IX Item "iso9899:199x"
887 same as \fB\-std=iso9899:1999\fR, deprecated
888 .Ip "\fBc9x\fR" 4
889 .IX Item "c9x"
890 same as \fB\-std=iso9899:1999\fR, deprecated
891 .Ip "\fBgnu9x\fR" 4
892 .IX Item "gnu9x"
893 same as \fB\-std=gnu99\fR, deprecated
895 .RS 4
897 Even when this option is not specified, you can still use some of the
898 features of newer standards in so far as they do not conflict with
899 previous C standards.  For example, you may use \f(CW\*(C`_\|_restrict_\|_\*(C'\fR even
900 when \fB\-std=c99\fR is not specified.
902 The \fB\-std\fR options specifying some version of \s-1ISO\s0 C have the same
903 effects as \fB\-ansi\fR, except that features that were not in \s-1ISO\s0 C89
904 but are in the specified version (for example, \fB//\fR comments and
905 the \f(CW\*(C`inline\*(C'\fR keyword in \s-1ISO\s0 C99) are not disabled.
907 .Ip "\fB\-fno-asm\fR" 4
908 .IX Item "-fno-asm"
909 Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
910 keyword, so that code can use these words as identifiers.  You can use
911 the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
912 instead.  \fB\-ansi\fR implies \fB\-fno-asm\fR.
914 In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
915 \&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
916 use the \fB\-fno-gnu-keywords\fR flag instead, which has the same
917 effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
918 switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
919 \&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO\s0 C99.
920 .Ip "\fB\-fno-builtin\fR" 4
921 .IX Item "-fno-builtin"
922 Don't recognize builtin functions that do not begin with
923 \&\fB_\|_builtin_\fR as prefix.  
925 \&\s-1GCC\s0 normally generates special code to handle certain builtin functions
926 more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
927 instructions that adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
928 may become inline copy loops.  The resulting code is often both smaller
929 and faster, but since the function calls no longer appear as such, you
930 cannot set a breakpoint on those calls, nor can you change the behavior
931 of the functions by linking with a different library.
932 .Ip "\fB\-fhosted\fR" 4
933 .IX Item "-fhosted"
934 Assert that compilation takes place in a hosted environment.  This implies
935 \&\fB\-fbuiltin\fR.  A hosted environment is one in which the
936 entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
937 type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
938 This is equivalent to \fB\-fno-freestanding\fR.
939 .Ip "\fB\-ffreestanding\fR" 4
940 .IX Item "-ffreestanding"
941 Assert that compilation takes place in a freestanding environment.  This
942 implies \fB\-fno-builtin\fR.  A freestanding environment
943 is one in which the standard library may not exist, and program startup may
944 not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
945 This is equivalent to \fB\-fno-hosted\fR.
946 .Ip "\fB\-trigraphs\fR" 4
947 .IX Item "-trigraphs"
948 Support \s-1ISO\s0 C trigraphs.  You don't want to know about this
949 brain-damage.  The \fB\-ansi\fR option (and \fB\-std\fR options for
950 strict \s-1ISO\s0 C conformance) implies \fB\-trigraphs\fR.
951 .Ip "\fB\-traditional\fR" 4
952 .IX Item "-traditional"
953 Attempt to support some aspects of traditional C compilers.
954 Specifically:
955 .RS 4
956 .Ip "\(bu" 4
957 All \f(CW\*(C`extern\*(C'\fR declarations take effect globally even if they
958 are written inside of a function definition.  This includes implicit
959 declarations of functions.
960 .Ip "\(bu" 4
961 The newer keywords \f(CW\*(C`typeof\*(C'\fR, \f(CW\*(C`inline\*(C'\fR, \f(CW\*(C`signed\*(C'\fR, \f(CW\*(C`const\*(C'\fR
962 and \f(CW\*(C`volatile\*(C'\fR are not recognized.  (You can still use the
963 alternative keywords such as \f(CW\*(C`_\|_typeof_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR, and
964 so on.)
965 .Ip "\(bu" 4
966 Comparisons between pointers and integers are always allowed.
967 .Ip "\(bu" 4
968 Integer types \f(CW\*(C`unsigned short\*(C'\fR and \f(CW\*(C`unsigned char\*(C'\fR promote
969 to \f(CW\*(C`unsigned int\*(C'\fR.
970 .Ip "\(bu" 4
971 Out-of-range floating point literals are not an error.
972 .Ip "\(bu" 4
973 Certain constructs which \s-1ISO\s0 regards as a single invalid preprocessing
974 number, such as \fB0xe-0xd\fR, are treated as expressions instead.
975 .Ip "\(bu" 4
976 String ``constants'' are not necessarily constant; they are stored in
977 writable space, and identical looking constants are allocated
978 separately.  (This is the same as the effect of
979 \&\fB\-fwritable-strings\fR.)
980 .Ip "\(bu" 4
981 All automatic variables not declared \f(CW\*(C`register\*(C'\fR are preserved by
982 \&\f(CW\*(C`longjmp\*(C'\fR.  Ordinarily, \s-1GNU\s0 C follows \s-1ISO\s0 C: automatic variables
983 not declared \f(CW\*(C`volatile\*(C'\fR may be clobbered.
984 .Ip "\(bu" 4
985 The character escape sequences \fB\ex\fR and \fB\ea\fR evaluate as the
986 literal characters \fBx\fR and \fBa\fR respectively.  Without
987 \&\fB\-traditional\fR, \fB\ex\fR is a prefix for the hexadecimal
988 representation of a character, and \fB\ea\fR produces a bell.
990 .RS 4
992 You may wish to use \fB\-fno-builtin\fR as well as \fB\-traditional\fR
993 if your program uses names that are normally \s-1GNU\s0 C builtin functions for
994 other purposes of its own.
996 You cannot use \fB\-traditional\fR if you include any header files that
997 rely on \s-1ISO\s0 C features.  Some vendors are starting to ship systems with
998 \&\s-1ISO\s0 C header files and you cannot use \fB\-traditional\fR on such
999 systems to compile files that include any system headers.
1001 The \fB\-traditional\fR option also enables \fB\-traditional-cpp\fR,
1002 which is described next.
1004 .Ip "\fB\-traditional-cpp\fR" 4
1005 .IX Item "-traditional-cpp"
1006 Attempt to support some aspects of traditional C preprocessors.
1007 Specifically:
1008 .RS 4
1009 .Ip "\(bu" 4
1010 Comments convert to nothing at all, rather than to a space.  This allows
1011 traditional token concatenation.
1012 .Ip "\(bu" 4
1013 In a preprocessing directive, the \fB#\fR symbol must appear as the first
1014 character of a line.
1015 .Ip "\(bu" 4
1016 Macro arguments are recognized within string constants in a macro
1017 definition (and their values are stringified, though without additional
1018 quote marks, when they appear in such a context).  The preprocessor
1019 always considers a string constant to end at a newline.
1020 .Ip "\(bu" 4
1021 The predefined macro \f(CW\*(C`_\|_STDC_\|_\*(C'\fR is not defined when you use
1022 \&\fB\-traditional\fR, but \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR is (since the \s-1GNU\s0 extensions
1023 which \f(CW\*(C`_\|_GNUC_\|_\*(C'\fR indicates are not affected by
1024 \&\fB\-traditional\fR).  If you need to write header files that work
1025 differently depending on whether \fB\-traditional\fR is in use, by
1026 testing both of these predefined macros you can distinguish four
1027 situations: \s-1GNU\s0 C, traditional \s-1GNU\s0 C, other \s-1ISO\s0 C compilers, and other
1028 old C compilers.  The predefined macro \f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR is also
1029 not defined when you use \fB\-traditional\fR.  
1030 .Ip "\(bu" 4
1031 The preprocessor considers a string constant to end at a newline (unless
1032 the newline is escaped with \fB\e\fR).  (Without \fB\-traditional\fR,
1033 string constants can contain the newline character as typed.)
1035 .RS 4
1037 .Ip "\fB\-fcond-mismatch\fR" 4
1038 .IX Item "-fcond-mismatch"
1039 Allow conditional expressions with mismatched types in the second and
1040 third arguments.  The value of such an expression is void.  This option
1041 is not supported for \*(C+.
1042 .Ip "\fB\-funsigned-char\fR" 4
1043 .IX Item "-funsigned-char"
1044 Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
1046 Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
1047 be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
1048 \&\f(CW\*(C`signed char\*(C'\fR by default.
1050 Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
1051 \&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
1052 But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
1053 expect it to be signed, or expect it to be unsigned, depending on the
1054 machines they were written for.  This option, and its inverse, let you
1055 make such a program work with the opposite default.
1057 The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
1058 \&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
1059 is always just like one of those two.
1060 .Ip "\fB\-fsigned-char\fR" 4
1061 .IX Item "-fsigned-char"
1062 Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
1064 Note that this is equivalent to \fB\-fno-unsigned-char\fR, which is
1065 the negative form of \fB\-funsigned-char\fR.  Likewise, the option
1066 \&\fB\-fno-signed-char\fR is equivalent to \fB\-funsigned-char\fR.
1068 You may wish to use \fB\-fno-builtin\fR as well as \fB\-traditional\fR
1069 if your program uses names that are normally \s-1GNU\s0 C builtin functions for
1070 other purposes of its own.
1072 You cannot use \fB\-traditional\fR if you include any header files that
1073 rely on \s-1ISO\s0 C features.  Some vendors are starting to ship systems with
1074 \&\s-1ISO\s0 C header files and you cannot use \fB\-traditional\fR on such
1075 systems to compile files that include any system headers.
1076 .Ip "\fB\-fsigned-bitfields\fR" 4
1077 .IX Item "-fsigned-bitfields"
1078 .PD 0
1079 .Ip "\fB\-funsigned-bitfields\fR" 4
1080 .IX Item "-funsigned-bitfields"
1081 .Ip "\fB\-fno-signed-bitfields\fR" 4
1082 .IX Item "-fno-signed-bitfields"
1083 .Ip "\fB\-fno-unsigned-bitfields\fR" 4
1084 .IX Item "-fno-unsigned-bitfields"
1086 These options control whether a bitfield is signed or unsigned, when the
1087 declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
1088 default, such a bitfield is signed, because this is consistent: the
1089 basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
1091 However, when \fB\-traditional\fR is used, bitfields are all unsigned
1092 no matter what.
1093 .Ip "\fB\-fwritable-strings\fR" 4
1094 .IX Item "-fwritable-strings"
1095 Store string constants in the writable data segment and don't uniquize
1096 them.  This is for compatibility with old programs which assume they can
1097 write into string constants.  The option \fB\-traditional\fR also has
1098 this effect.
1100 Writing into string constants is a very bad idea; ``constants'' should
1101 be constant.
1102 .Ip "\fB\-fallow-single-precision\fR" 4
1103 .IX Item "-fallow-single-precision"
1104 Do not promote single precision math operations to double precision,
1105 even when compiling with \fB\-traditional\fR.
1107 Traditional K&R C promotes all floating point operations to double
1108 precision, regardless of the sizes of the operands.   On the
1109 architecture for which you are compiling, single precision may be faster
1110 than double precision.   If you must use \fB\-traditional\fR, but want
1111 to use single precision operations when the operands are single
1112 precision, use this option.   This option has no effect when compiling
1113 with \s-1ISO\s0 or \s-1GNU\s0 C conventions (the default).
1114 .Ip "\fB\-fshort-wchar\fR" 4
1115 .IX Item "-fshort-wchar"
1116 Override the underlying type for \fBwchar_t\fR to be \fBshort
1117 unsigned int\fR instead of the default for the target.  This option is
1118 useful for building programs to run under \s-1WINE\s0.
1119 .Sh "Options Controlling \*(C+ Dialect"
1120 .IX Subsection "Options Controlling  Dialect"
1121 This section describes the command-line options that are only meaningful
1122 for \*(C+ programs; but you can also use most of the \s-1GNU\s0 compiler options
1123 regardless of what language your program is in.  For example, you
1124 might compile a file \f(CW\*(C`firstClass.C\*(C'\fR like this:
1126 .Vb 1
1127 \&        g++ -g -frepo -O -c firstClass.C
1129 In this example, only \fB\-frepo\fR is an option meant
1130 only for \*(C+ programs; you can use the other options with any
1131 language supported by \s-1GCC\s0.
1133 Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
1134 .Ip "\fB\-fno-access-control\fR" 4
1135 .IX Item "-fno-access-control"
1136 Turn off all access checking.  This switch is mainly useful for working
1137 around bugs in the access control code.
1138 .Ip "\fB\-fcheck-new\fR" 4
1139 .IX Item "-fcheck-new"
1140 Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
1141 before attempting to modify the storage allocated.  The current Working
1142 Paper requires that \f(CW\*(C`operator new\*(C'\fR never return a null pointer, so
1143 this check is normally unnecessary.
1145 An alternative to using this option is to specify that your
1146 \&\f(CW\*(C`operator new\*(C'\fR does not throw any exceptions; if you declare it
1147 \&\fB\f(BIthrow()\fB\fR, g++ will check the return value.  See also \fBnew
1148 (nothrow)\fR.
1149 .Ip "\fB\-fconserve-space\fR" 4
1150 .IX Item "-fconserve-space"
1151 Put uninitialized or runtime-initialized global variables into the
1152 common segment, as C does.  This saves space in the executable at the
1153 cost of not diagnosing duplicate definitions.  If you compile with this
1154 flag and your program mysteriously crashes after \f(CW\*(C`main()\*(C'\fR has
1155 completed, you may have an object that is being destroyed twice because
1156 two definitions were merged.
1158 This option is no longer useful on most targets, now that support has
1159 been added for putting variables into \s-1BSS\s0 without making them common.
1160 .Ip "\fB\-fdollars-in-identifiers\fR" 4
1161 .IX Item "-fdollars-in-identifiers"
1162 Accept \fB$\fR in identifiers.  You can also explicitly prohibit use of
1163 \&\fB$\fR with the option \fB\-fno-dollars-in-identifiers\fR.  (\s-1GNU\s0 C allows
1164 \&\fB$\fR by default on most target systems, but there are a few exceptions.)
1165 Traditional C allowed the character \fB$\fR to form part of
1166 identifiers.  However, \s-1ISO\s0 C and \*(C+ forbid \fB$\fR in identifiers.
1167 .Ip "\fB\-fno-elide-constructors\fR" 4
1168 .IX Item "-fno-elide-constructors"
1169 The \*(C+ standard allows an implementation to omit creating a temporary
1170 which is only used to initialize another object of the same type.
1171 Specifying this option disables that optimization, and forces g++ to
1172 call the copy constructor in all cases.
1173 .Ip "\fB\-fno-enforce-eh-specs\fR" 4
1174 .IX Item "-fno-enforce-eh-specs"
1175 Don't check for violation of exception specifications at runtime.  This
1176 option violates the \*(C+ standard, but may be useful for reducing code
1177 size in production builds, much like defining \fB\s-1NDEBUG\s0\fR.  The compiler
1178 will still optimize based on the exception specifications.
1179 .Ip "\fB\-fexternal-templates\fR" 4
1180 .IX Item "-fexternal-templates"
1181 Cause template instantiations to obey \fB#pragma interface\fR and
1182 \&\fBimplementation\fR; template instances are emitted or not according
1183 to the location of the template definition.  
1185 This option is deprecated.
1186 .Ip "\fB\-falt-external-templates\fR" 4
1187 .IX Item "-falt-external-templates"
1188 Similar to \-fexternal-templates, but template instances are emitted or
1189 not according to the place where they are first instantiated.
1191 This option is deprecated.
1192 .Ip "\fB\-ffor-scope\fR" 4
1193 .IX Item "-ffor-scope"
1194 .PD 0
1195 .Ip "\fB\-fno-for-scope\fR" 4
1196 .IX Item "-fno-for-scope"
1198 If \-ffor-scope is specified, the scope of variables declared in
1199 a \fIfor-init-statement\fR is limited to the \fBfor\fR loop itself,
1200 as specified by the \*(C+ standard.
1201 If \-fno-for-scope is specified, the scope of variables declared in
1202 a \fIfor-init-statement\fR extends to the end of the enclosing scope,
1203 as was the case in old versions of gcc, and other (traditional)
1204 implementations of \*(C+.
1206 The default if neither flag is given to follow the standard,
1207 but to allow and give a warning for old-style code that would
1208 otherwise be invalid, or have different behavior.
1209 .Ip "\fB\-fno-gnu-keywords\fR" 4
1210 .IX Item "-fno-gnu-keywords"
1211 Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
1212 word as an identifier. You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.  
1213 \&\fB\-ansi\fR implies \fB\-fno-gnu-keywords\fR.
1214 .Ip "\fB\-fhonor-std\fR" 4
1215 .IX Item "-fhonor-std"
1216 Treat the \f(CW\*(C`namespace std\*(C'\fR as a namespace, instead of ignoring
1217 it. For compatibility with earlier versions of g++, the compiler will,
1218 by default, ignore \f(CW\*(C`namespace\-declarations\*(C'\fR,
1219 \&\f(CW\*(C`using\-declarations\*(C'\fR, \f(CW\*(C`using\-directives\*(C'\fR, and
1220 \&\f(CW\*(C`namespace\-names\*(C'\fR, if they involve \f(CW\*(C`std\*(C'\fR.
1221 .Ip "\fB\-fhuge-objects\fR" 4
1222 .IX Item "-fhuge-objects"
1223 Support virtual function calls for objects that exceed the size
1224 representable by a \fBshort int\fR.  Users should not use this flag by
1225 default; if you need to use it, the compiler will tell you so.
1227 This flag is not useful when compiling with \-fvtable-thunks.
1229 Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
1230 libgcc\fR must be built with the same setting of this option.
1231 .Ip "\fB\-fno-implicit-templates\fR" 4
1232 .IX Item "-fno-implicit-templates"
1233 Never emit code for non-inline templates which are instantiated
1234 implicitly (i.e. by use); only emit code for explicit instantiations.
1235 .Ip "\fB\-fno-implicit-inline-templates\fR" 4
1236 .IX Item "-fno-implicit-inline-templates"
1237 Don't emit code for implicit instantiations of inline templates, either.
1238 The default is to handle inlines differently so that compiles with and
1239 without optimization will need the same set of explicit instantiations.
1240 .Ip "\fB\-fno-implement-inlines\fR" 4
1241 .IX Item "-fno-implement-inlines"
1242 To save space, do not emit out-of-line copies of inline functions
1243 controlled by \fB#pragma implementation\fR.  This will cause linker
1244 errors if these functions are not inlined everywhere they are called.
1245 .Ip "\fB\-fms-extensions\fR" 4
1246 .IX Item "-fms-extensions"
1247 Disable pedantic warnings about constructs used in \s-1MFC\s0, such as implicit
1248 int and getting a pointer to member function via non-standard syntax.
1249 .Ip "\fB\-fno-operator-names\fR" 4
1250 .IX Item "-fno-operator-names"
1251 Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
1252 \&\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
1253 synonyms as keywords.
1254 .Ip "\fB\-fno-optional-diags\fR" 4
1255 .IX Item "-fno-optional-diags"
1256 Disable diagnostics that the standard says a compiler does not need to
1257 issue.  Currently, the only such diagnostic issued by g++ is the one for
1258 a name having multiple meanings within a class.
1259 .Ip "\fB\-fpermissive\fR" 4
1260 .IX Item "-fpermissive"
1261 Downgrade messages about nonconformant code from errors to warnings.  By
1262 default, g++ effectively sets \fB\-pedantic-errors\fR without
1263 \&\fB\-pedantic\fR; this option reverses that.  This behavior and this
1264 option are superseded by \fB\-pedantic\fR, which works as it does for \s-1GNU\s0 C.
1265 .Ip "\fB\-frepo\fR" 4
1266 .IX Item "-frepo"
1267 Enable automatic template instantiation.  This option also implies
1268 \&\fB\-fno-implicit-templates\fR.  
1269 .Ip "\fB\-fno-rtti\fR" 4
1270 .IX Item "-fno-rtti"
1271 Disable generation of information about every class with virtual
1272 functions for use by the \*(C+ runtime type identification features
1273 (\fBdynamic_cast\fR and \fBtypeid\fR).  If you don't use those parts
1274 of the language, you can save some space by using this flag.  Note that
1275 exception handling uses the same information, but it will generate it as
1276 needed.
1277 .Ip "\fB\-ftemplate-depth-\fR\fIn\fR" 4
1278 .IX Item "-ftemplate-depth-n"
1279 Set the maximum instantiation depth for template classes to \fIn\fR.
1280 A limit on the template instantiation depth is needed to detect
1281 endless recursions during template class instantiation. \s-1ANSI/ISO\s0 \*(C+
1282 conforming programs must not rely on a maximum depth greater than 17.
1283 .Ip "\fB\-fuse-cxa-atexit\fR" 4
1284 .IX Item "-fuse-cxa-atexit"
1285 Register destructors for objects with static storage duration with the
1286 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
1287 This option is required for fully standards-compliant handling of static
1288 destructors, but will only work if your C library supports
1289 \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
1290 .Ip "\fB\-fvtable-thunks\fR" 4
1291 .IX Item "-fvtable-thunks"
1292 Use \fBthunks\fR to implement the virtual function dispatch table
1293 (\fBvtable\fR).  The traditional (cfront-style) approach to
1294 implementing vtables was to store a pointer to the function and two
1295 offsets for adjusting the \fBthis\fR pointer at the call site.  Newer
1296 implementations store a single pointer to a \fBthunk\fR function which
1297 does any necessary adjustment and then calls the target function.
1299 This option also enables a heuristic for controlling emission of
1300 vtables; if a class has any non-inline virtual functions, the vtable
1301 will be emitted in the translation unit containing the first one of
1302 those.
1304 Like all options that change the \s-1ABI\s0, all \*(C+ code, \fIincluding
1305 libgcc.a\fR must be built with the same setting of this option.
1306 .Ip "\fB\-nostdinc++\fR" 4
1307 .IX Item "-nostdinc++"
1308 Do not search for header files in the standard directories specific to
1309 \&\*(C+, but do still search the other standard directories.  (This option
1310 is used when building the \*(C+ library.)
1312 In addition, these optimization, warning, and code generation options
1313 have meanings only for \*(C+ programs:
1314 .Ip "\fB\-fno-default-inline\fR" 4
1315 .IX Item "-fno-default-inline"
1316 Do not assume \fBinline\fR for functions defined inside a class scope.
1317   Note that these
1318 functions will have linkage like inline functions; they just won't be
1319 inlined by default.
1320 .Ip "\fB\-Wctor-dtor-privacy (\*(C+ only)\fR" 4
1321 .IX Item "-Wctor-dtor-privacy ( only)"
1322 Warn when a class seems unusable, because all the constructors or
1323 destructors in a class are private and the class has no friends or
1324 public static member functions.
1325 .Ip "\fB\-Wnon-virtual-dtor (\*(C+ only)\fR" 4
1326 .IX Item "-Wnon-virtual-dtor ( only)"
1327 Warn when a class declares a non-virtual destructor that should probably
1328 be virtual, because it looks like the class will be used polymorphically.
1329 .Ip "\fB\-Wreorder (\*(C+ only)\fR" 4
1330 .IX Item "-Wreorder ( only)"
1331 Warn when the order of member initializers given in the code does not
1332 match the order in which they must be executed.  For instance:
1334 .Vb 5
1335 \&        struct A {
1336 \&          int i;
1337 \&          int j;
1338 \&          A(): j (0), i (1) { }
1339 \&        };
1341 Here the compiler will warn that the member initializers for \fBi\fR
1342 and \fBj\fR will be rearranged to match the declaration order of the
1343 members.
1345 The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
1346 .Ip "\fB\-Weffc++ (\*(C+ only)\fR" 4
1347 .IX Item "-Weffc++ ( only)"
1348 Warn about violations of various style guidelines from Scott Meyers'
1349 \&\fIEffective \*(C+\fR books.  If you use this option, you should be aware
1350 that the standard library headers do not obey all of these guidelines;
1351 you can use \fBgrep \-v\fR to filter out those warnings.
1352 .Ip "\fB\-Wno-deprecated (\*(C+ only)\fR" 4
1353 .IX Item "-Wno-deprecated ( only)"
1354 Do not warn about usage of deprecated features. 
1355 .Ip "\fB\-Wno-non-template-friend (\*(C+ only)\fR" 4
1356 .IX Item "-Wno-non-template-friend ( only)"
1357 Disable warnings when non-templatized friend functions are declared
1358 within a template. With the advent of explicit template specification
1359 support in g++, if the name of the friend is an unqualified-id (ie,
1360 \&\fBfriend foo(int)\fR), the \*(C+ language specification demands that the
1361 friend declare or define an ordinary, nontemplate function. (Section
1362 14.5.3). Before g++ implemented explicit specification, unqualified-ids
1363 could be interpreted as a particular specialization of a templatized
1364 function. Because this non-conforming behavior is no longer the default
1365 behavior for g++, \fB\-Wnon-template-friend\fR allows the compiler to
1366 check existing code for potential trouble spots, and is on by default.
1367 This new compiler behavior can be turned off with
1368 \&\fB\-Wno-non-template-friend\fR which keeps the conformant compiler code
1369 but disables the helpful warning.
1370 .Ip "\fB\-Wold-style-cast (\*(C+ only)\fR" 4
1371 .IX Item "-Wold-style-cast ( only)"
1372 Warn if an old-style (C-style) cast is used within a \*(C+ program.  The
1373 new-style casts (\fBstatic_cast\fR, \fBreinterpret_cast\fR, and
1374 \&\fBconst_cast\fR) are less vulnerable to unintended effects.
1375 .Ip "\fB\-Woverloaded-virtual (\*(C+ only)\fR" 4
1376 .IX Item "-Woverloaded-virtual ( only)"
1377 Warn when a function declaration hides virtual functions from a
1378 base class.  For example, in:
1380 .Vb 3
1381 \&        struct A {
1382 \&          virtual void f();
1383 \&        };
1385 .Vb 3
1386 \&        struct B: public A {
1387 \&          void f(int);
1388 \&        };
1390 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
1391 like this:
1393 .Vb 2
1394 \&        B* b;
1395 \&        b->f();
1397 will fail to compile.
1398 .Ip "\fB\-Wno-pmf-conversions (\*(C+ only)\fR" 4
1399 .IX Item "-Wno-pmf-conversions ( only)"
1400 Disable the diagnostic for converting a bound pointer to member function
1401 to a plain pointer.
1402 .Ip "\fB\-Wsign-promo (\*(C+ only)\fR" 4
1403 .IX Item "-Wsign-promo ( only)"
1404 Warn when overload resolution chooses a promotion from unsigned or
1405 enumeral type to a signed type over a conversion to an unsigned type of
1406 the same size.  Previous versions of g++ would try to preserve
1407 unsignedness, but the standard mandates the current behavior.
1408 .Ip "\fB\-Wsynth (\*(C+ only)\fR" 4
1409 .IX Item "-Wsynth ( only)"
1410 Warn when g++'s synthesis behavior does not match that of cfront.  For
1411 instance:
1413 .Vb 4
1414 \&        struct A {
1415 \&          operator int ();
1416 \&          A& operator = (int);
1417 \&        };
1419 .Vb 5
1420 \&        main ()
1421 \&        {
1422 \&          A a,b;
1423 \&          a = b;
1424 \&        }
1426 In this example, g++ will synthesize a default \fBA& operator =
1427 (const A&);\fR, while cfront will use the user-defined \fBoperator =\fR.
1428 .Sh "Options to Control Diagnostic Messages Formatting"
1429 .IX Subsection "Options to Control Diagnostic Messages Formatting"
1430 Traditionally, diagnostic messages have been formatted irrespective of
1431 the output device's aspect (e.g. its width, ...).  The options described
1432 below can be used to control the diagnostic messages formatting
1433 algorithm, e.g. how many characters per line, how often source location
1434 information should be reported.  Right now, only the \*(C+ front-end can
1435 honor these options.  However it is expected, in the near future, that
1436 the remaining front-ends would be able to digest them correctly. 
1437 .Ip "\fB\-fmessage-length=\fR\fIn\fR" 4
1438 .IX Item "-fmessage-length=n"
1439 Try to format error messages so that they fit on lines of about \fIn\fR
1440 characters.  The default is 72 characters for g++ and 0 for the rest of
1441 the front-ends supported by \s-1GCC\s0.  If \fIn\fR is zero, then no
1442 line-wrapping will be done; each error message will appear on a single 
1443 line.
1444 .Ip "\fB\-fdiagnostics-show-location=once\fR" 4
1445 .IX Item "-fdiagnostics-show-location=once"
1446 Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
1447 reporter to emit \fIonce\fR source location information; that is, in
1448 case the message is too long to fit on a single physical line and has to
1449 be wrapped, the source location won't be emitted (as prefix) again,
1450 over and over, in subsequent continuation lines.  This is the default
1451 behaviour. 
1452 .Ip "\fB\-fdiagnostics-show-location=every-line\fR" 4
1453 .IX Item "-fdiagnostics-show-location=every-line"
1454 Only meaningful in line-wrapping mode.  Instructs the diagnostic
1455 messages reporter to emit the same source location information (as
1456 prefix) for physical lines that result from the process of breaking a
1457 a message which is too long to fit on a single line.
1458 .Sh "Options to Request or Suppress Warnings"
1459 .IX Subsection "Options to Request or Suppress Warnings"
1460 Warnings are diagnostic messages that report constructions which
1461 are not inherently erroneous but which are risky or suggest there
1462 may have been an error.
1464 You can request many specific warnings with options beginning \fB\-W\fR,
1465 for example \fB\-Wimplicit\fR to request warnings on implicit
1466 declarations.  Each of these specific warning options also has a
1467 negative form beginning \fB\-Wno-\fR to turn off warnings;
1468 for example, \fB\-Wno-implicit\fR.  This manual lists only one of the
1469 two forms, whichever is not the default.
1471 These options control the amount and kinds of warnings produced by \s-1GCC:\s0
1472 .Ip "\fB\-fsyntax-only\fR" 4
1473 .IX Item "-fsyntax-only"
1474 Check the code for syntax errors, but don't do anything beyond that.
1475 .Ip "\fB\-pedantic\fR" 4
1476 .IX Item "-pedantic"
1477 Issue all the warnings demanded by strict \s-1ISO\s0 C and \s-1ISO\s0 \*(C+;
1478 reject all programs that use forbidden extensions, and some other
1479 programs that do not follow \s-1ISO\s0 C and \s-1ISO\s0 \*(C+.  For \s-1ISO\s0 C, follows the
1480 version of the \s-1ISO\s0 C standard specified by any \fB\-std\fR option used.
1482 Valid \s-1ISO\s0 C and \s-1ISO\s0 \*(C+ programs should compile properly with or without
1483 this option (though a rare few will require \fB\-ansi\fR or a
1484 \&\fB\-std\fR option specifying the required version of \s-1ISO\s0 C).  However,
1485 without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
1486 features are supported as well.  With this option, they are rejected.
1488 \&\fB\-pedantic\fR does not cause warning messages for use of the
1489 alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
1490 warnings are also disabled in the expression that follows
1491 \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
1492 these escape routes; application programs should avoid them.
1494 Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ISO\s0
1495 C conformance.  They soon find that it does not do quite what they want:
1496 it finds some non-ISO practices, but not all\-\-\-only those for which
1497 \&\s-1ISO\s0 C \fIrequires\fR a diagnostic, and some others for which
1498 diagnostics have been added.
1500 A feature to report any failure to conform to \s-1ISO\s0 C might be useful in
1501 some instances, but would require considerable additional work and would
1502 be quite different from \fB\-pedantic\fR.  We don't have plans to
1503 support such a feature in the near future.
1504 .Ip "\fB\-pedantic-errors\fR" 4
1505 .IX Item "-pedantic-errors"
1506 Like \fB\-pedantic\fR, except that errors are produced rather than
1507 warnings.
1508 .Ip "\fB\-w\fR" 4
1509 .IX Item "-w"
1510 Inhibit all warning messages.
1511 .Ip "\fB\-Wno-import\fR" 4
1512 .IX Item "-Wno-import"
1513 Inhibit warning messages about the use of \fB#import\fR.
1514 .Ip "\fB\-Wchar-subscripts\fR" 4
1515 .IX Item "-Wchar-subscripts"
1516 Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
1517 of error, as programmers often forget that this type is signed on some
1518 machines.
1519 .Ip "\fB\-Wcomment\fR" 4
1520 .IX Item "-Wcomment"
1521 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
1522 comment, or whenever a Backslash-Newline appears in a \fB//\fR comment.
1523 .Ip "\fB\-Wformat\fR" 4
1524 .IX Item "-Wformat"
1525 Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
1526 the arguments supplied have types appropriate to the format string
1527 specified, and that the conversions specified in the format string make
1528 sense.  This includes standard functions, and others specified by format
1529 attributes, in the \f(CW\*(C`printf\*(C'\fR,
1530 \&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
1531 not in the C standard) families.
1533 The formats are checked against the format features supported by \s-1GNU\s0
1534 libc version 2.2.  These include all \s-1ISO\s0 C89 and C99 features, as well
1535 as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
1536 extensions.  Other library implementations may not support all these
1537 features; \s-1GCC\s0 does not support warning about features that go beyond a
1538 particular library's limitations.  However, if \fB\-pedantic\fR is used
1539 with \fB\-Wformat\fR, warnings will be given about format features not
1540 in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
1541 since those are not in any version of the C standard).  
1543 \&\fB\-Wformat\fR is included in \fB\-Wall\fR.  For more control over some
1544 aspects of format checking, the options \fB\-Wno-format-y2k\fR,
1545 \&\fB\-Wno-format-extra-args\fR, \fB\-Wformat-nonliteral\fR,
1546 \&\fB\-Wformat-security\fR and \fB\-Wformat=2\fR are available, but are
1547 not included in \fB\-Wall\fR.
1548 .Ip "\fB\-Wno-format-y2k\fR" 4
1549 .IX Item "-Wno-format-y2k"
1550 If \fB\-Wformat\fR is specified, do not warn about \f(CW\*(C`strftime\*(C'\fR
1551 formats which may yield only a two-digit year.
1552 .Ip "\fB\-Wno-format-extra-args\fR" 4
1553 .IX Item "-Wno-format-extra-args"
1554 If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
1555 \&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
1556 that such arguments are ignored.
1557 .Ip "\fB\-Wformat-nonliteral\fR" 4
1558 .IX Item "-Wformat-nonliteral"
1559 If \fB\-Wformat\fR is specified, also warn if the format string is not a
1560 string literal and so cannot be checked, unless the format function
1561 takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
1562 .Ip "\fB\-Wformat-security\fR" 4
1563 .IX Item "-Wformat-security"
1564 If \fB\-Wformat\fR is specified, also warn about uses of format
1565 functions that represent possible security problems.  At present, this
1566 warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
1567 format string is not a string literal and there are no format arguments,
1568 as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
1569 string came from untrusted input and contains \fB%n\fR.  (This is
1570 currently a subset of what \fB\-Wformat-nonliteral\fR warns about, but
1571 in future warnings may be added to \fB\-Wformat-security\fR that are not
1572 included in \fB\-Wformat-nonliteral\fR.)
1573 .Ip "\fB\-Wformat=2\fR" 4
1574 .IX Item "-Wformat=2"
1575 Enable \fB\-Wformat\fR plus format checks not included in
1576 \&\fB\-Wformat\fR.  Currently equivalent to \fB\-Wformat
1577 \&\-Wformat-nonliteral \-Wformat-security\fR.
1578 .Ip "\fB\-Wimplicit-int\fR" 4
1579 .IX Item "-Wimplicit-int"
1580 Warn when a declaration does not specify a type.
1581 .Ip "\fB\-Wimplicit-function-declaration\fR" 4
1582 .IX Item "-Wimplicit-function-declaration"
1583 .PD 0
1584 .Ip "\fB\-Werror-implicit-function-declaration\fR" 4
1585 .IX Item "-Werror-implicit-function-declaration"
1587 Give a warning (or error) whenever a function is used before being
1588 declared.
1589 .Ip "\fB\-Wimplicit\fR" 4
1590 .IX Item "-Wimplicit"
1591 Same as \fB\-Wimplicit-int\fR and \fB\-Wimplicit-function-\fR\fBdeclaration\fR.
1592 .Ip "\fB\-Wmain\fR" 4
1593 .IX Item "-Wmain"
1594 Warn if the type of \fBmain\fR is suspicious.  \fBmain\fR should be a
1595 function with external linkage, returning int, taking either zero
1596 arguments, two, or three arguments of appropriate types.
1597 .Ip "\fB\-Wmultichar\fR" 4
1598 .IX Item "-Wmultichar"
1599 Warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.  Usually they
1600 indicate a typo in the user's code, as they have implementation-defined
1601 values, and should not be used in portable code.
1602 .Ip "\fB\-Wparentheses\fR" 4
1603 .IX Item "-Wparentheses"
1604 Warn if parentheses are omitted in certain contexts, such
1605 as when there is an assignment in a context where a truth value
1606 is expected, or when operators are nested whose precedence people
1607 often get confused about.
1609 Also warn about constructions where there may be confusion to which
1610 \&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
1611 such a case:
1613 .Vb 7
1614 \&        {
1615 \&          if (a)
1616 \&            if (b)
1617 \&              foo ();
1618 \&          else
1619 \&            bar ();
1620 \&        }
1622 In C, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible \f(CW\*(C`if\*(C'\fR
1623 statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is often not
1624 what the programmer expected, as illustrated in the above example by
1625 indentation the programmer chose.  When there is the potential for this
1626 confusion, \s-1GNU\s0 C will issue a warning when this flag is specified.
1627 To eliminate the warning, add explicit braces around the innermost
1628 \&\f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR could belong to
1629 the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code would look like this:
1631 .Vb 9
1632 \&        {
1633 \&          if (a)
1634 \&            {
1635 \&              if (b)
1636 \&                foo ();
1637 \&              else
1638 \&                bar ();
1639 \&            }
1640 \&        }
1642 .Ip "\fB\-Wsequence-point\fR" 4
1643 .IX Item "-Wsequence-point"
1644 Warn about code that may have undefined semantics because of violations
1645 of sequence point rules in the C standard.
1647 The C standard defines the order in which expressions in a C program are
1648 evaluated in terms of \fIsequence points\fR, which represent a partial
1649 ordering between the execution of parts of the program: those executed
1650 before the sequence point, and those executed after it.  These occur
1651 after the evaluation of a full expression (one which is not part of a
1652 larger expression), after the evaluation of the first operand of a
1653 \&\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
1654 function is called (but after the evaluation of its arguments and the
1655 expression denoting the called function), and in certain other places.
1656 Other than as expressed by the sequence point rules, the order of
1657 evaluation of subexpressions of an expression is not specified.  All
1658 these rules describe only a partial order rather than a total order,
1659 since, for example, if two functions are called within one expression
1660 with no sequence point between them, the order in which the functions
1661 are called is not specified.  However, the standards committee have
1662 ruled that function calls do not overlap.
1664 It is not specified when between sequence points modifications to the
1665 values of objects take effect.  Programs whose behavior depends on this
1666 have undefined behavior; the C standard specifies that ``Between the
1667 previous and next sequence point an object shall have its stored value
1668 modified at most once by the evaluation of an expression.  Furthermore,
1669 the prior value shall be read only to determine the value to be
1670 stored.''.  If a program breaks these rules, the results on any
1671 particular implementation are entirely unpredictable.
1673 Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
1674 = b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
1675 diagnosed by this option, and it may give an occasional false positive
1676 result, but in general it has been found fairly effective at detecting
1677 this sort of problem in programs.
1679 The present implementation of this option only works for C programs.  A
1680 future implementation may also work for \*(C+ programs.
1682 There is some controversy over the precise meaning of the sequence point
1683 rules in subtle cases.  Alternative formal definitions may be found in
1684 Clive Feather's ``Annex S''
1685 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n925.htm\fR> and in
1686 Michael Norrish's thesis
1687 <\fBhttp://www.cl.cam.ac.uk/users/mn200/PhD/thesis-report.ps.gz\fR>.
1688 Other discussions are by Raymond Mak
1689 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n926.htm\fR> and
1690 D. Hugh Redelmeier
1691 <\fBhttp://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/n927.htm\fR>.
1692 .Ip "\fB\-Wreturn-type\fR" 4
1693 .IX Item "-Wreturn-type"
1694 Warn whenever a function is defined with a return-type that defaults to
1695 \&\f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
1696 return-value in a function whose return-type is not \f(CW\*(C`void\*(C'\fR. 
1698 For \*(C+, a function without return type always produces a diagnostic
1699 message, even when \fB\-Wno-return-type\fR is specified. The only
1700 exceptions are \fBmain\fR and functions defined in system headers.
1701 .Ip "\fB\-Wswitch\fR" 4
1702 .IX Item "-Wswitch"
1703 Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumeral type
1704 and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
1705 enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
1706 warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
1707 provoke warnings when this option is used.
1708 .Ip "\fB\-Wtrigraphs\fR" 4
1709 .IX Item "-Wtrigraphs"
1710 Warn if any trigraphs are encountered that might change the meaning of
1711 the program (trigraphs within comments are not warned about).
1712 .Ip "\fB\-Wunused-function\fR" 4
1713 .IX Item "-Wunused-function"
1714 Warn whenever a static function is declared but not defined or a
1715 non\e-inline static function is unused.
1716 .Ip "\fB\-Wunused-label\fR" 4
1717 .IX Item "-Wunused-label"
1718 Warn whenever a label is declared but not used.
1720 To suppress this warning use the \fBunused\fR attribute.
1721 .Ip "\fB\-Wunused-parameter\fR" 4
1722 .IX Item "-Wunused-parameter"
1723 Warn whenever a function parameter is unused aside from its declaration.
1725 To suppress this warning use the \fBunused\fR attribute.
1726 .Ip "\fB\-Wunused-variable\fR" 4
1727 .IX Item "-Wunused-variable"
1728 Warn whenever a local variable or non-constant static variable is unused
1729 aside from its declaration
1731 To suppress this warning use the \fBunused\fR attribute.
1732 .Ip "\fB\-Wunused-value\fR" 4
1733 .IX Item "-Wunused-value"
1734 Warn whenever a statement computes a result that is explicitly not used.
1736 To suppress this warning cast the expression to \fBvoid\fR.
1737 .Ip "\fB\-Wunused\fR" 4
1738 .IX Item "-Wunused"
1739 All all the above \fB\-Wunused\fR options combined.
1741 In order to get a warning about an unused function parameter, you must
1742 either specify \fB\-W \-Wunused\fR or separately specify
1743 \&\fB\-Wunused-parameter\fR.
1744 .Ip "\fB\-Wuninitialized\fR" 4
1745 .IX Item "-Wuninitialized"
1746 Warn if an automatic variable is used without first being initialized or
1747 if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call.
1749 These warnings are possible only in optimizing compilation,
1750 because they require data flow information that is computed only
1751 when optimizing.  If you don't specify \fB\-O\fR, you simply won't
1752 get these warnings.
1754 These warnings occur only for variables that are candidates for
1755 register allocation.  Therefore, they do not occur for a variable that
1756 is declared \f(CW\*(C`volatile\*(C'\fR, or whose address is taken, or whose size
1757 is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
1758 structures, unions or arrays, even when they are in registers.
1760 Note that there may be no warning about a variable that is used only
1761 to compute a value that itself is never used, because such
1762 computations may be deleted by data flow analysis before the warnings
1763 are printed.
1765 These warnings are made optional because \s-1GCC\s0 is not smart
1766 enough to see all the reasons why the code might be correct
1767 despite appearing to have an error.  Here is one example of how
1768 this can happen:
1770 .Vb 12
1771 \&        {
1772 \&          int x;
1773 \&          switch (y)
1774 \&            {
1775 \&            case 1: x = 1;
1776 \&              break;
1777 \&            case 2: x = 4;
1778 \&              break;
1779 \&            case 3: x = 5;
1780 \&            }
1781 \&          foo (x);
1782 \&        }
1784 If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
1785 always initialized, but \s-1GCC\s0 doesn't know this.  Here is
1786 another common case:
1788 .Vb 6
1789 \&        {
1790 \&          int save_y;
1791 \&          if (change_y) save_y = y, y = new_y;
1792 \&          ...
1793 \&          if (change_y) y = save_y;
1794 \&        }
1796 This has no bug because \f(CW\*(C`save_y\*(C'\fR is used only if it is set.
1798 This option also warns when a non-volatile automatic variable might be
1799 changed by a call to \f(CW\*(C`longjmp\*(C'\fR.  These warnings as well are possible
1800 only in optimizing compilation.
1802 The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
1803 where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
1804 call it at any point in the code.  As a result, you may get a warning
1805 even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
1806 in fact be called at the place which would cause a problem.
1808 Some spurious warnings can be avoided if you declare all the functions
1809 you use that never return as \f(CW\*(C`noreturn\*(C'\fR.  
1810 .Ip "\fB\-Wreorder (\*(C+ only)\fR" 4
1811 .IX Item "-Wreorder ( only)"
1812 Warn when the order of member initializers given in the code does not
1813 match the order in which they must be executed.  For instance:
1814 .Ip "\fB\-Wunknown-pragmas\fR" 4
1815 .IX Item "-Wunknown-pragmas"
1816 Warn when a #pragma directive is encountered which is not understood by
1817 \&\s-1GCC\s0.  If this command line option is used, warnings will even be issued
1818 for unknown pragmas in system header files.  This is not the case if
1819 the warnings were only enabled by the \fB\-Wall\fR command line option.
1820 .Ip "\fB\-Wall\fR" 4
1821 .IX Item "-Wall"
1822 All of the above \fB\-W\fR options combined.  This enables all the
1823 warnings about constructions that some users consider questionable, and
1824 that are easy to avoid (or modify to prevent the warning), even in
1825 conjunction with macros.
1826 .Ip "\fB\-Wsystem-headers\fR" 4
1827 .IX Item "-Wsystem-headers"
1828 Print warning messages for constructs found in system header files.
1829 Warnings from system headers are normally suppressed, on the assumption
1830 that they usually do not indicate real problems and would only make the
1831 compiler output harder to read.  Using this command line option tells
1832 \&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
1833 code.  However, note that using \fB\-Wall\fR in conjunction with this
1834 option will \fInot\fR warn about unknown pragmas in system
1835 headers\-\-\-for that, \fB\-Wunknown-pragmas\fR must also be used.
1837 The following \fB\-W...\fR options are not implied by \fB\-Wall\fR.
1838 Some of them warn about constructions that users generally do not
1839 consider questionable, but which occasionally you might wish to check
1840 for; others warn about constructions that are necessary or hard to avoid
1841 in some cases, and there is no simple way to modify the code to suppress
1842 the warning.
1843 .Ip "\fB\-W\fR" 4
1844 .IX Item "-W"
1845 Print extra warning messages for these events:
1846 .RS 4
1847 .Ip "\(bu" 4
1848 A function can return either with or without a value.  (Falling
1849 off the end of the function body is considered returning without
1850 a value.)  For example, this function would evoke such a
1851 warning:
1853 .Vb 5
1854 \&        foo (a)
1855 \&        {
1856 \&          if (a > 0)
1857 \&            return a;
1858 \&        }
1860 .Ip "\(bu" 4
1861 An expression-statement or the left-hand side of a comma expression
1862 contains no side effects.
1863 To suppress the warning, cast the unused expression to void.
1864 For example, an expression such as \fBx[i,j]\fR will cause a warning,
1865 but \fBx[(void)i,j]\fR will not.
1866 .Ip "\(bu" 4
1867 An unsigned value is compared against zero with \fB<\fR or \fB<=\fR.
1868 .Ip "\(bu" 4
1869 A comparison like \fBx<=y<=z\fR appears; this is equivalent to
1870 \&\fB(x<=y ? 1 : 0) <= z\fR, which is a different interpretation from
1871 that of ordinary mathematical notation.
1872 .Ip "\(bu" 4
1873 Storage-class specifiers like \f(CW\*(C`static\*(C'\fR are not the first things in
1874 a declaration.  According to the C Standard, this usage is obsolescent.
1875 .Ip "\(bu" 4
1876 The return type of a function has a type qualifier such as \f(CW\*(C`const\*(C'\fR.
1877 Such a type qualifier has no effect, since the value returned by a
1878 function is not an lvalue.  (But don't warn about the \s-1GNU\s0 extension of
1879 \&\f(CW\*(C`volatile void\*(C'\fR return types.  That extension will be warned about
1880 if \fB\-pedantic\fR is specified.)
1881 .Ip "\(bu" 4
1882 If \fB\-Wall\fR or \fB\-Wunused\fR is also specified, warn about unused
1883 arguments.
1884 .Ip "\(bu" 4
1885 A comparison between signed and unsigned values could produce an
1886 incorrect result when the signed value is converted to unsigned.
1887 (But don't warn if \fB\-Wno-sign-compare\fR is also specified.)
1888 .Ip "\(bu" 4
1889 An aggregate has a partly bracketed initializer.
1890 For example, the following code would evoke such a warning,
1891 because braces are missing around the initializer for \f(CW\*(C`x.h\*(C'\fR:
1893 .Vb 3
1894 \&        struct s { int f, g; };
1895 \&        struct t { struct s h; int i; };
1896 \&        struct t x = { 1, 2, 3 };
1898 .Ip "\(bu" 4
1899 An aggregate has an initializer which does not initialize all members.
1900 For example, the following code would cause such a warning, because
1901 \&\f(CW\*(C`x.h\*(C'\fR would be implicitly initialized to zero:
1903 .Vb 2
1904 \&        struct s { int f, g, h; };
1905 \&        struct s x = { 3, 4 };
1908 .RS 4
1910 .Ip "\fB\-Wfloat-equal\fR" 4
1911 .IX Item "-Wfloat-equal"
1912 Warn if floating point values are used in equality comparisons.
1914 The idea behind this is that sometimes it is convenient (for the
1915 programmer) to consider floating-point values as approximations to
1916 infinitely precise real numbers.  If you are doing this, then you need
1917 to compute (by analysing the code, or in some other way) the maximum or
1918 likely maximum error that the computation introduces, and allow for it
1919 when performing comparisons (and when producing output, but that's a
1920 different problem).  In particular, instead of testing for equality, you
1921 would check to see whether the two values have ranges that overlap; and
1922 this is done with the relational operators, so equality comparisons are
1923 probably mistaken.
1924 .Ip "\fB\-Wtraditional (C only)\fR" 4
1925 .IX Item "-Wtraditional (C only)"
1926 Warn about certain constructs that behave differently in traditional and
1927 \&\s-1ISO\s0 C.
1928 .RS 4
1929 .Ip "\(bu" 4
1930 Macro parameters that appear within string literals in the macro body.
1931 In traditional C macro replacement takes place within string literals,
1932 but does not in \s-1ISO\s0 C.
1933 .Ip "\(bu" 4
1934 In traditional C, some preprocessor directives did not exist.
1935 Traditional preprocessors would only consider a line to be a directive
1936 if the \fB#\fR appeared in column 1 on the line.  Therefore
1937 \&\fB\-Wtraditional\fR warns about directives that traditional C
1938 understands but would ignore because the \fB#\fR does not appear as the
1939 first character on the line.  It also suggests you hide directives like
1940 \&\fB#pragma\fR not understood by traditional C by indenting them.  Some
1941 traditional implementations would not recognise \fB#elif\fR, so it
1942 suggests avoiding it altogether.
1943 .Ip "\(bu" 4
1944 A function-like macro that appears without arguments.
1945 .Ip "\(bu" 4
1946 The unary plus operator.
1947 .Ip "\(bu" 4
1948 The `U' integer constant suffix, or the `F' or `L' floating point
1949 constant suffixes.  (Traditonal C does support the `L' suffix on integer
1950 constants.)  Note, these suffixes appear in macros defined in the system
1951 headers of most modern systems, e.g. the _MIN/_MAX macros in limits.h.
1952 Use of these macros can lead to spurious warnings as they do not
1953 necessarily reflect whether the code in question is any less portable to
1954 traditional C given that suitable backup definitions are provided.
1955 .Ip "\(bu" 4
1956 A function declared external in one block and then used after the end of
1957 the block.
1958 .Ip "\(bu" 4
1959 A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
1960 .Ip "\(bu" 4
1961 A non-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
1962 This construct is not accepted by some traditional C compilers.
1963 .Ip "\(bu" 4
1964 The \s-1ISO\s0 type of an integer constant has a different width or
1965 signedness from its traditional type.  This warning is only issued if
1966 the base of the constant is ten.  I.e. hexadecimal or octal values, which
1967 typically represent bit patterns, are not warned about.
1968 .Ip "\(bu" 4
1969 Usage of \s-1ISO\s0 string concatenation is detected.
1970 .Ip "\(bu" 4
1971 Initialization of automatic aggregates.
1972 .Ip "\(bu" 4
1973 Identifier conflicts with labels.  Traditional C lacks a separate
1974 namespace for labels.
1975 .Ip "\(bu" 4
1976 Initialization of unions.  If the initializer is zero, the warning is
1977 omitted.  This is done under the assumption that the zero initializer in
1978 user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
1979 initializer warnings and relies on default initialization to zero in the
1980 traditional C case.
1982 .RS 4
1984 .Ip "\fB\-Wundef\fR" 4
1985 .IX Item "-Wundef"
1986 Warn if an undefined identifier is evaluated in an \fB#if\fR directive.
1987 .Ip "\fB\-Wshadow\fR" 4
1988 .IX Item "-Wshadow"
1989 Warn whenever a local variable shadows another local variable.
1990 .Ip "\fB\-Wid-clash-\fR\fIlen\fR" 4
1991 .IX Item "-Wid-clash-len"
1992 Warn whenever two distinct identifiers match in the first \fIlen\fR
1993 characters.  This may help you prepare a program that will compile
1994 with certain obsolete, brain-damaged compilers.
1995 .Ip "\fB\-Wlarger-than-\fR\fIlen\fR" 4
1996 .IX Item "-Wlarger-than-len"
1997 Warn whenever an object of larger than \fIlen\fR bytes is defined.
1998 .Ip "\fB\-Wpointer-arith\fR" 4
1999 .IX Item "-Wpointer-arith"
2000 Warn about anything that depends on the ``size of'' a function type or
2001 of \f(CW\*(C`void\*(C'\fR.  \s-1GNU\s0 C assigns these types a size of 1, for
2002 convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
2003 to functions.
2004 .Ip "\fB\-Wbad-function-cast (C only)\fR" 4
2005 .IX Item "-Wbad-function-cast (C only)"
2006 Warn whenever a function call is cast to a non-matching type.
2007 For example, warn if \f(CW\*(C`int malloc()\*(C'\fR is cast to \f(CW\*(C`anything *\*(C'\fR.
2008 .Ip "\fB\-Wcast-qual\fR" 4
2009 .IX Item "-Wcast-qual"
2010 Warn whenever a pointer is cast so as to remove a type qualifier from
2011 the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
2012 to an ordinary \f(CW\*(C`char *\*(C'\fR.
2013 .Ip "\fB\-Wcast-align\fR" 4
2014 .IX Item "-Wcast-align"
2015 Warn whenever a pointer is cast such that the required alignment of the
2016 target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
2017 an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
2018 two- or four-byte boundaries.
2019 .Ip "\fB\-Wwrite-strings\fR" 4
2020 .IX Item "-Wwrite-strings"
2021 Give string constants the type \f(CW\*(C`const char[\f(CIlength\f(CW]\*(C'\fR so that
2022 copying the address of one into a non-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR
2023 pointer will get a warning.  These warnings will help you find at
2024 compile time code that can try to write into a string constant, but
2025 only if you have been very careful about using \f(CW\*(C`const\*(C'\fR in
2026 declarations and prototypes.  Otherwise, it will just be a nuisance;
2027 this is why we did not make \fB\-Wall\fR request these warnings.
2028 .Ip "\fB\-Wconversion\fR" 4
2029 .IX Item "-Wconversion"
2030 Warn if a prototype causes a type conversion that is different from what
2031 would happen to the same argument in the absence of a prototype.  This
2032 includes conversions of fixed point to floating and vice versa, and
2033 conversions changing the width or signedness of a fixed point argument
2034 except when the same as the default promotion.
2036 Also, warn if a negative integer constant expression is implicitly
2037 converted to an unsigned type.  For example, warn about the assignment
2038 \&\f(CW\*(C`x = \-1\*(C'\fR if \f(CW\*(C`x\*(C'\fR is unsigned.  But do not warn about explicit
2039 casts like \f(CW\*(C`(unsigned) \-1\*(C'\fR.
2040 .Ip "\fB\-Wsign-compare\fR" 4
2041 .IX Item "-Wsign-compare"
2042 Warn when a comparison between signed and unsigned values could produce
2043 an incorrect result when the signed value is converted to unsigned.
2044 This warning is also enabled by \fB\-W\fR; to get the other warnings
2045 of \fB\-W\fR without this warning, use \fB\-W \-Wno-sign-compare\fR.
2046 .Ip "\fB\-Waggregate-return\fR" 4
2047 .IX Item "-Waggregate-return"
2048 Warn if any functions that return structures or unions are defined or
2049 called.  (In languages where you can return an array, this also elicits
2050 a warning.)
2051 .Ip "\fB\-Wstrict-prototypes (C only)\fR" 4
2052 .IX Item "-Wstrict-prototypes (C only)"
2053 Warn if a function is declared or defined without specifying the
2054 argument types.  (An old-style function definition is permitted without
2055 a warning if preceded by a declaration which specifies the argument
2056 types.)
2057 .Ip "\fB\-Wmissing-prototypes (C only)\fR" 4
2058 .IX Item "-Wmissing-prototypes (C only)"
2059 Warn if a global function is defined without a previous prototype
2060 declaration.  This warning is issued even if the definition itself
2061 provides a prototype.  The aim is to detect global functions that fail
2062 to be declared in header files.
2063 .Ip "\fB\-Wmissing-declarations\fR" 4
2064 .IX Item "-Wmissing-declarations"
2065 Warn if a global function is defined without a previous declaration.
2066 Do so even if the definition itself provides a prototype.
2067 Use this option to detect global functions that are not declared in
2068 header files.
2069 .Ip "\fB\-Wmissing-noreturn\fR" 4
2070 .IX Item "-Wmissing-noreturn"
2071 Warn about functions which might be candidates for attribute \f(CW\*(C`noreturn\*(C'\fR.
2072 Note these are only possible candidates, not absolute ones.  Care should
2073 be taken to manually verify functions actually do not ever return before
2074 adding the \f(CW\*(C`noreturn\*(C'\fR attribute, otherwise subtle code generation
2075 bugs could be introduced.  You will not get a warning for \f(CW\*(C`main\*(C'\fR in
2076 hosted C environments.
2077 .Ip "\fB\-Wmissing-format-attribute\fR" 4
2078 .IX Item "-Wmissing-format-attribute"
2079 If \fB\-Wformat\fR is enabled, also warn about functions which might be
2080 candidates for \f(CW\*(C`format\*(C'\fR attributes.  Note these are only possible
2081 candidates, not absolute ones.  \s-1GCC\s0 will guess that \f(CW\*(C`format\*(C'\fR
2082 attributes might be appropriate for any function that calls a function
2083 like \f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
2084 case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
2085 appropriate may not be detected.  This option has no effect unless
2086 \&\fB\-Wformat\fR is enabled (possibly by \fB\-Wall\fR).
2087 .Ip "\fB\-Wpacked\fR" 4
2088 .IX Item "-Wpacked"
2089 Warn if a structure is given the packed attribute, but the packed
2090 attribute has no effect on the layout or size of the structure.  
2091 Such structures may be mis-aligned for little benefit.  For
2092 instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
2093 will be misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
2094 have the packed attribute:
2096 .Vb 8
2097 \&        struct foo {
2098 \&          int x;
2099 \&          char a, b, c, d;
2100 \&        } __attribute__((packed));
2101 \&        struct bar {
2102 \&          char z;
2103 \&          struct foo f;
2104 \&        };
2106 .Ip "\fB\-Wpadded\fR" 4
2107 .IX Item "-Wpadded"
2108 Warn if padding is included in a structure, either to align an element
2109 of the structure or to align the whole structure.  Sometimes when this
2110 happens it is possible to rearrange the fields of the structure to
2111 reduce the padding and so make the structure smaller.
2112 .Ip "\fB\-Wredundant-decls\fR" 4
2113 .IX Item "-Wredundant-decls"
2114 Warn if anything is declared more than once in the same scope, even in
2115 cases where multiple declaration is valid and changes nothing.
2116 .Ip "\fB\-Wnested-externs (C only)\fR" 4
2117 .IX Item "-Wnested-externs (C only)"
2118 Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
2119 .Ip "\fB\-Wunreachable-code\fR" 4
2120 .IX Item "-Wunreachable-code"
2121 Warn if the compiler detects that code will never be executed.
2123 This option is intended to warn when the compiler detects that at
2124 least a whole line of source code will never be executed, because
2125 some condition is never satisfied or because it is after a
2126 procedure that never returns.
2128 It is possible for this option to produce a warning even though there
2129 are circumstances under which part of the affected line can be executed,
2130 so care should be taken when removing apparently-unreachable code.
2132 For instance, when a function is inlined, a warning may mean that the
2133 line is unreachable in only one inlined copy of the function.  
2135 This option is not made part of \fB\-Wall\fR because in a debugging
2136 version of a program there is often substantial code which checks
2137 correct functioning of the program and is, hopefully, unreachable
2138 because the program does work.  Another common use of unreachable
2139 code is to provide behaviour which is selectable at compile-time.
2140 .Ip "\fB\-Winline\fR" 4
2141 .IX Item "-Winline"
2142 Warn if a function can not be inlined and it was declared as inline.
2143 .Ip "\fB\-Wlong-long\fR" 4
2144 .IX Item "-Wlong-long"
2145 Warn if \fBlong long\fR type is used.  This is default.  To inhibit
2146 the warning messages, use \fB\-Wno-long-long\fR.  Flags
2147 \&\fB\-Wlong-long\fR and \fB\-Wno-long-long\fR are taken into account
2148 only when \fB\-pedantic\fR flag is used.
2149 .Ip "\fB\-Wdisabled-optimization\fR" 4
2150 .IX Item "-Wdisabled-optimization"
2151 Warn if a requested optimization pass is disabled.  This warning does
2152 not generally indicate that there is anything wrong with your code; it
2153 merely indicates that \s-1GCC\s0's optimizers were unable to handle the code
2154 effectively.  Often, the problem is that your code is too big or too
2155 complex; \s-1GCC\s0 will refuse to optimize programs when the optimization
2156 itself is likely to take inordinate amounts of time.
2157 .Ip "\fB\-Werror\fR" 4
2158 .IX Item "-Werror"
2159 Make all warnings into errors.
2160 .Sh "Options for Debugging Your Program or \s-1GCC\s0"
2161 .IX Subsection "Options for Debugging Your Program or GCC"
2162 \&\s-1GCC\s0 has various special options that are used for debugging
2163 either your program or \s-1GCC:\s0
2164 .Ip "\fB\-g\fR" 4
2165 .IX Item "-g"
2166 Produce debugging information in the operating system's native format
2167 (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
2168 information.
2170 On most systems that use stabs format, \fB\-g\fR enables use of extra
2171 debugging information that only \s-1GDB\s0 can use; this extra information
2172 makes debugging work better in \s-1GDB\s0 but will probably make other debuggers
2173 crash or
2174 refuse to read the program.  If you want to control for certain whether
2175 to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
2176 \&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, \fB\-gdwarf-1+\fR, or \fB\-gdwarf-1\fR
2177 (see below).
2179 Unlike most other C compilers, \s-1GCC\s0 allows you to use \fB\-g\fR with
2180 \&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
2181 produce surprising results: some variables you declared may not exist
2182 at all; flow of control may briefly move where you did not expect it;
2183 some statements may not be executed because they compute constant
2184 results or their values were already at hand; some statements may
2185 execute in different places because they were moved out of loops.
2187 Nevertheless it proves possible to debug optimized output.  This makes
2188 it reasonable to use the optimizer for programs that might have bugs.
2190 The following options are useful when \s-1GCC\s0 is generated with the
2191 capability for more than one debugging format.
2192 .Ip "\fB\-ggdb\fR" 4
2193 .IX Item "-ggdb"
2194 Produce debugging information for use by \s-1GDB\s0.  This means to use the
2195 most expressive format available (\s-1DWARF\s0 2, stabs, or the native format
2196 if neither of those are supported), including \s-1GDB\s0 extensions if at all
2197 possible.
2198 .Ip "\fB\-gstabs\fR" 4
2199 .IX Item "-gstabs"
2200 Produce debugging information in stabs format (if that is supported),
2201 without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
2202 systems.  On \s-1MIPS\s0, Alpha and System V Release 4 systems this option
2203 produces stabs debugging output which is not understood by \s-1DBX\s0 or \s-1SDB\s0.
2204 On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
2205 .Ip "\fB\-gstabs+\fR" 4
2206 .IX Item "-gstabs+"
2207 Produce debugging information in stabs format (if that is supported),
2208 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
2209 use of these extensions is likely to make other debuggers crash or
2210 refuse to read the program.
2211 .Ip "\fB\-gcoff\fR" 4
2212 .IX Item "-gcoff"
2213 Produce debugging information in \s-1COFF\s0 format (if that is supported).
2214 This is the format used by \s-1SDB\s0 on most System V systems prior to
2215 System V Release 4.
2216 .Ip "\fB\-gxcoff\fR" 4
2217 .IX Item "-gxcoff"
2218 Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
2219 This is the format used by the \s-1DBX\s0 debugger on \s-1IBM\s0 \s-1RS/6000\s0 systems.
2220 .Ip "\fB\-gxcoff+\fR" 4
2221 .IX Item "-gxcoff+"
2222 Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
2223 using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
2224 use of these extensions is likely to make other debuggers crash or
2225 refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
2226 assembler (\s-1GAS\s0) to fail with an error.
2227 .Ip "\fB\-gdwarf\fR" 4
2228 .IX Item "-gdwarf"
2229 Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
2230 supported).  This is the format used by \s-1SDB\s0 on most System V Release 4
2231 systems.
2232 .Ip "\fB\-gdwarf+\fR" 4
2233 .IX Item "-gdwarf+"
2234 Produce debugging information in \s-1DWARF\s0 version 1 format (if that is
2235 supported), using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger
2236 (\s-1GDB\s0).  The use of these extensions is likely to make other debuggers
2237 crash or refuse to read the program.
2238 .Ip "\fB\-gdwarf-2\fR" 4
2239 .IX Item "-gdwarf-2"
2240 Produce debugging information in \s-1DWARF\s0 version 2 format (if that is
2241 supported).  This is the format used by \s-1DBX\s0 on \s-1IRIX\s0 6.
2242 .Ip "\fB\-g\fR\fIlevel\fR" 4
2243 .IX Item "-glevel"
2244 .PD 0
2245 .Ip "\fB\-ggdb\fR\fIlevel\fR" 4
2246 .IX Item "-ggdblevel"
2247 .Ip "\fB\-gstabs\fR\fIlevel\fR" 4
2248 .IX Item "-gstabslevel"
2249 .Ip "\fB\-gcoff\fR\fIlevel\fR" 4
2250 .IX Item "-gcofflevel"
2251 .Ip "\fB\-gxcoff\fR\fIlevel\fR" 4
2252 .IX Item "-gxcofflevel"
2253 .Ip "\fB\-gdwarf\fR\fIlevel\fR" 4
2254 .IX Item "-gdwarflevel"
2255 .Ip "\fB\-gdwarf-2\fR\fIlevel\fR" 4
2256 .IX Item "-gdwarf-2level"
2258 Request debugging information and also use \fIlevel\fR to specify how
2259 much information.  The default level is 2.
2261 Level 1 produces minimal information, enough for making backtraces in
2262 parts of the program that you don't plan to debug.  This includes
2263 descriptions of functions and external variables, but no information
2264 about local variables and no line numbers.
2266 Level 3 includes extra information, such as all the macro definitions
2267 present in the program.  Some debuggers support macro expansion when
2268 you use \fB\-g3\fR.
2269 .Ip "\fB\-p\fR" 4
2270 .IX Item "-p"
2271 Generate extra code to write profile information suitable for the
2272 analysis program \f(CW\*(C`prof\*(C'\fR.  You must use this option when compiling
2273 the source files you want data about, and you must also use it when
2274 linking.
2275 .Ip "\fB\-pg\fR" 4
2276 .IX Item "-pg"
2277 Generate extra code to write profile information suitable for the
2278 analysis program \f(CW\*(C`gprof\*(C'\fR.  You must use this option when compiling
2279 the source files you want data about, and you must also use it when
2280 linking.
2281 .Ip "\fB\-a\fR" 4
2282 .IX Item "-a"
2283 Generate extra code to write profile information for basic blocks, which will
2284 record the number of times each basic block is executed, the basic block start
2285 address, and the function name containing the basic block.  If \fB\-g\fR is
2286 used, the line number and filename of the start of the basic block will also be
2287 recorded.  If not overridden by the machine description, the default action is
2288 to append to the text file \fIbb.out\fR.
2290 This data could be analyzed by a program like \f(CW\*(C`tcov\*(C'\fR.  Note,
2291 however, that the format of the data is not what \f(CW\*(C`tcov\*(C'\fR expects.
2292 Eventually \s-1GNU\s0 \f(CW\*(C`gprof\*(C'\fR should be extended to process this data.
2293 .Ip "\fB\-Q\fR" 4
2294 .IX Item "-Q"
2295 Makes the compiler print out each function name as it is compiled, and
2296 print some statistics about each pass when it finishes.
2297 .Ip "\fB\-ax\fR" 4
2298 .IX Item "-ax"
2299 Generate extra code to profile basic blocks.  Your executable will
2300 produce output that is a superset of that produced when \fB\-a\fR is
2301 used.  Additional output is the source and target address of the basic
2302 blocks where a jump takes place, the number of times a jump is executed,
2303 and (optionally) the complete sequence of basic blocks being executed.
2304 The output is appended to file \fIbb.out\fR.
2306 You can examine different profiling aspects without recompilation.  Your
2307 executable will read a list of function names from file \fIbb.in\fR.
2308 Profiling starts when a function on the list is entered and stops when
2309 that invocation is exited.  To exclude a function from profiling, prefix
2310 its name with `\-'.  If a function name is not unique, you can
2311 disambiguate it by writing it in the form
2312 \&\fB/path/filename.d:functionname\fR.  Your executable will write the
2313 available paths and filenames in file \fIbb.out\fR.
2315 Several function names have a special meaning:
2316 .RS 4
2317 .if n .Ip "\f(CW""_\|_bb_jumps_\|_""\fR" 4
2318 .el .Ip "\f(CW_\|_bb_jumps_\|_\fR" 4
2319 .IX Item "__bb_jumps__"
2320 Write source, target and frequency of jumps to file \fIbb.out\fR.
2321 .if n .Ip "\f(CW""_\|_bb_hidecall_\|_""\fR" 4
2322 .el .Ip "\f(CW_\|_bb_hidecall_\|_\fR" 4
2323 .IX Item "__bb_hidecall__"
2324 Exclude function calls from frequency count.
2325 .if n .Ip "\f(CW""_\|_bb_showret_\|_""\fR" 4
2326 .el .Ip "\f(CW_\|_bb_showret_\|_\fR" 4
2327 .IX Item "__bb_showret__"
2328 Include function returns in frequency count.
2329 .if n .Ip "\f(CW""_\|_bb_trace_\|_""\fR" 4
2330 .el .Ip "\f(CW_\|_bb_trace_\|_\fR" 4
2331 .IX Item "__bb_trace__"
2332 Write the sequence of basic blocks executed to file \fIbbtrace.gz\fR.
2333 The file will be compressed using the program \fBgzip\fR, which must
2334 exist in your \fB\s-1PATH\s0\fR.  On systems without the \fBpopen\fR
2335 function, the file will be named \fIbbtrace\fR and will not be
2336 compressed.  \fBProfiling for even a few seconds on these systems
2337 will produce a very large file.\fR  Note: \f(CW\*(C`_\|_bb_hidecall_\|_\*(C'\fR and
2338 \&\f(CW\*(C`_\|_bb_showret_\|_\*(C'\fR will not affect the sequence written to
2339 \&\fIbbtrace.gz\fR.
2341 .RS 4
2343 Here's a short example using different profiling parameters
2344 in file \fIbb.in\fR.  Assume function \f(CW\*(C`foo\*(C'\fR consists of basic blocks
2345 1 and 2 and is called twice from block 3 of function \f(CW\*(C`main\*(C'\fR.  After
2346 the calls, block 3 transfers control to block 4 of \f(CW\*(C`main\*(C'\fR.
2348 With \f(CW\*(C`_\|_bb_trace_\|_\*(C'\fR and \f(CW\*(C`main\*(C'\fR contained in file \fIbb.in\fR,
2349 the following sequence of blocks is written to file \fIbbtrace.gz\fR:
2350 0 3 1 2 1 2 4.  The return from block 2 to block 3 is not shown, because
2351 the return is to a point inside the block and not to the top.  The
2352 block address 0 always indicates, that control is transferred
2353 to the trace from somewhere outside the observed functions.  With
2354 \&\fB\-foo\fR added to \fIbb.in\fR, the blocks of function
2355 \&\f(CW\*(C`foo\*(C'\fR are removed from the trace, so only 0 3 4 remains.
2357 With \f(CW\*(C`_\|_bb_jumps_\|_\*(C'\fR and \f(CW\*(C`main\*(C'\fR contained in file \fIbb.in\fR,
2358 jump frequencies will be written to file \fIbb.out\fR.  The
2359 frequencies are obtained by constructing a trace of blocks
2360 and incrementing a counter for every neighbouring pair of blocks
2361 in the trace.  The trace 0 3 1 2 1 2 4 displays the following
2362 frequencies:
2364 .Vb 5
2365 \&        Jump from block 0x0 to block 0x3 executed 1 time(s)
2366 \&        Jump from block 0x3 to block 0x1 executed 1 time(s)
2367 \&        Jump from block 0x1 to block 0x2 executed 2 time(s)
2368 \&        Jump from block 0x2 to block 0x1 executed 1 time(s)
2369 \&        Jump from block 0x2 to block 0x4 executed 1 time(s)
2371 With \f(CW\*(C`_\|_bb_hidecall_\|_\*(C'\fR, control transfer due to call instructions
2372 is removed from the trace, that is the trace is cut into three parts: 0
2373 3 4, 0 1 2 and 0 1 2.  With \f(CW\*(C`_\|_bb_showret_\|_\*(C'\fR, control transfer due
2374 to return instructions is added to the trace.  The trace becomes: 0 3 1
2375 2 3 1 2 3 4.  Note, that this trace is not the same, as the sequence
2376 written to \fIbbtrace.gz\fR.  It is solely used for counting jump
2377 frequencies.
2379 .Ip "\fB\-fprofile-arcs\fR" 4
2380 .IX Item "-fprofile-arcs"
2381 Instrument \fIarcs\fR during compilation.  For each function of your
2382 program, \s-1GCC\s0 creates a program flow graph, then finds a spanning tree
2383 for the graph.  Only arcs that are not on the spanning tree have to be
2384 instrumented: the compiler adds code to count the number of times that these
2385 arcs are executed.  When an arc is the only exit or only entrance to a
2386 block, the instrumentation code can be added to the block; otherwise, a
2387 new basic block must be created to hold the instrumentation code.
2389 Since not every arc in the program must be instrumented, programs
2390 compiled with this option run faster than programs compiled with
2391 \&\fB\-a\fR, which adds instrumentation code to every basic block in the
2392 program.  The tradeoff: since \f(CW\*(C`gcov\*(C'\fR does not have
2393 execution counts for all branches, it must start with the execution
2394 counts for the instrumented branches, and then iterate over the program
2395 flow graph until the entire graph has been solved.  Hence, \f(CW\*(C`gcov\*(C'\fR
2396 runs a little more slowly than a program which uses information from
2397 \&\fB\-a\fR.
2399 \&\fB\-fprofile-arcs\fR also makes it possible to estimate branch
2400 probabilities, and to calculate basic block execution counts.  In
2401 general, basic block execution counts do not give enough information to
2402 estimate all branch probabilities.  When the compiled program exits, it
2403 saves the arc execution counts to a file called
2404 \&\fI\fIsourcename\fI.da\fR.  Use the compiler option
2405 \&\fB\-fbranch-probabilities\fR when recompiling, to optimize using estimated
2406 branch probabilities.
2407 .Ip "\fB\-ftest-coverage\fR" 4
2408 .IX Item "-ftest-coverage"
2409 Create data files for the \f(CW\*(C`gcov\*(C'\fR code-coverage utility.
2410 The data file names begin with the name of your source file:
2411 .RS 4
2412 .Ip "\fIsourcename\fR\fB.bb\fR" 4
2413 .IX Item "sourcename.bb"
2414 A mapping from basic blocks to line numbers, which \f(CW\*(C`gcov\*(C'\fR uses to
2415 associate basic block execution counts with line numbers.
2416 .Ip "\fIsourcename\fR\fB.bbg\fR" 4
2417 .IX Item "sourcename.bbg"
2418 A list of all arcs in the program flow graph.  This allows \f(CW\*(C`gcov\*(C'\fR
2419 to reconstruct the program flow graph, so that it can compute all basic
2420 block and arc execution counts from the information in the
2421 \&\f(CW\*(C`\f(CIsourcename\f(CW.da\*(C'\fR file (this last file is the output from
2422 \&\fB\-fprofile-arcs\fR).
2424 .RS 4
2426 .Ip "\fB\-d\fR\fIletters\fR" 4
2427 .IX Item "-dletters"
2428 Says to make debugging dumps during compilation at times specified by
2429 \&\fIletters\fR.  This is used for debugging the compiler.  The file names
2430 for most of the dumps are made by appending a pass number and a word to
2431 the source file name (e.g.  \fIfoo.c.00.rtl\fR or \fIfoo.c.01.sibling\fR). 
2432 Here are the possible letters for use in \fIletters\fR, and their meanings:
2433 .RS 4
2434 .Ip "\fBA\fR" 4
2435 .IX Item "A"
2436 Annotate the assembler output with miscellaneous debugging information.
2437 .Ip "\fBb\fR" 4
2438 .IX Item "b"
2439 Dump after computing branch probabilities, to \fI\fIfile\fI.11.bp\fR.
2440 .Ip "\fBB\fR" 4
2441 .IX Item "B"
2442 Dump after block reordering, to \fI\fIfile\fI.26.bbro\fR.
2443 .Ip "\fBc\fR" 4
2444 .IX Item "c"
2445 Dump after instruction combination, to the file \fI\fIfile\fI.14.combine\fR.
2446 .Ip "\fBC\fR" 4
2447 .IX Item "C"
2448 Dump after the first if conversion, to the file \fI\fIfile\fI.15.ce\fR.
2449 .Ip "\fBd\fR" 4
2450 .IX Item "d"
2451 Dump after delayed branch scheduling, to \fI\fIfile\fI.29.dbr\fR.
2452 .Ip "\fBD\fR" 4
2453 .IX Item "D"
2454 Dump all macro definitions, at the end of preprocessing, in addition to
2455 normal output.
2456 .Ip "\fBe\fR" 4
2457 .IX Item "e"
2458 Dump after \s-1SSA\s0 optimizations, to \fI\fIfile\fI.05.ssa\fR and
2459 \&\fI\fIfile\fI.06.ussa\fR.
2460 .Ip "\fBE\fR" 4
2461 .IX Item "E"
2462 Dump after the second if conversion, to \fI\fIfile\fI.24.ce2\fR.
2463 .Ip "\fBf\fR" 4
2464 .IX Item "f"
2465 Dump after life analysis, to \fI\fIfile\fI.13.life\fR.
2466 .Ip "\fBF\fR" 4
2467 .IX Item "F"
2468 Dump after purging \f(CW\*(C`ADDRESSOF\*(C'\fR codes, to \fI\fIfile\fI.04.addressof\fR.
2469 .Ip "\fBg\fR" 4
2470 .IX Item "g"
2471 Dump after global register allocation, to \fI\fIfile\fI.19.greg\fR.
2472 .Ip "\fBo\fR" 4
2473 .IX Item "o"
2474 Dump after post-reload \s-1CSE\s0 and other optimizations, to \fI\fIfile\fI.20.postreload\fR.
2475 .Ip "\fBG\fR" 4
2476 .IX Item "G"
2477 Dump after \s-1GCSE\s0, to \fI\fIfile\fI.08.gcse\fR.
2478 .Ip "\fBi\fR" 4
2479 .IX Item "i"
2480 Dump after sibling call optimizations, to \fI\fIfile\fI.01.sibling\fR.
2481 .Ip "\fBj\fR" 4
2482 .IX Item "j"
2483 Dump after the first jump optimization, to \fI\fIfile\fI.02.jump\fR.
2484 .Ip "\fBJ\fR" 4
2485 .IX Item "J"
2486 Dump after the last jump optimization, to \fI\fIfile\fI.27.jump2\fR.
2487 .Ip "\fBk\fR" 4
2488 .IX Item "k"
2489 Dump after conversion from registers to stack, to \fI\fIfile\fI.29.stack\fR.
2490 .Ip "\fBl\fR" 4
2491 .IX Item "l"
2492 Dump after local register allocation, to \fI\fIfile\fI.18.lreg\fR.
2493 .Ip "\fBL\fR" 4
2494 .IX Item "L"
2495 Dump after loop optimization, to \fI\fIfile\fI.09.loop\fR.
2496 .Ip "\fBM\fR" 4
2497 .IX Item "M"
2498 Dump after performing the machine dependent reorganisation pass, to
2499 \&\fI\fIfile\fI.28.mach\fR. 
2500 .Ip "\fBn\fR" 4
2501 .IX Item "n"
2502 Dump after register renumbering, to \fI\fIfile\fI.23.rnreg\fR.
2503 .Ip "\fBN\fR" 4
2504 .IX Item "N"
2505 Dump after the register move pass, to \fI\fIfile\fI.16.regmove\fR.
2506 .Ip "\fBr\fR" 4
2507 .IX Item "r"
2508 Dump after \s-1RTL\s0 generation, to \fI\fIfile\fI.00.rtl\fR.
2509 .Ip "\fBR\fR" 4
2510 .IX Item "R"
2511 Dump after the second instruction scheduling pass, to
2512 \&\fI\fIfile\fI.25.sched2\fR.
2513 .Ip "\fBs\fR" 4
2514 .IX Item "s"
2515 Dump after \s-1CSE\s0 (including the jump optimization that sometimes follows
2516 \&\s-1CSE\s0), to \fI\fIfile\fI.03.cse\fR. 
2517 .Ip "\fBS\fR" 4
2518 .IX Item "S"
2519 Dump after the first instruction scheduling pass, to
2520 \&\fI\fIfile\fI.17.sched\fR.
2521 .Ip "\fBt\fR" 4
2522 .IX Item "t"
2523 Dump after the second \s-1CSE\s0 pass (including the jump optimization that
2524 sometimes follows \s-1CSE\s0), to \fI\fIfile\fI.10.cse2\fR.
2525 .Ip "\fBw\fR" 4
2526 .IX Item "w"
2527 Dump after the second flow pass, to \fI\fIfile\fI.21.flow2\fR.
2528 .Ip "\fBX\fR" 4
2529 .IX Item "X"
2530 Dump after dead code elimination, to \fI\fIfile\fI.06.dce\fR.
2531 .Ip "\fBz\fR" 4
2532 .IX Item "z"
2533 Dump after the peephole pass, to \fI\fIfile\fI.22.peephole2\fR.
2534 .Ip "\fBa\fR" 4
2535 .IX Item "a"
2536 Produce all the dumps listed above.
2537 .Ip "\fBm\fR" 4
2538 .IX Item "m"
2539 Print statistics on memory usage, at the end of the run, to
2540 standard error.
2541 .Ip "\fBp\fR" 4
2542 .IX Item "p"
2543 Annotate the assembler output with a comment indicating which
2544 pattern and alternative was used.  The length of each instruction is
2545 also printed.
2546 .Ip "\fBP\fR" 4
2547 .IX Item "P"
2548 Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
2549 Also turns on \fB\-dp\fR annotation.
2550 .Ip "\fBv\fR" 4
2551 .IX Item "v"
2552 For each of the other indicated dump files (except for
2553 \&\fI\fIfile\fI.00.rtl\fR), dump a representation of the control flow graph
2554 suitable for viewing with \s-1VCG\s0 to \fI\fIfile\fI.\fIpass\fI.vcg\fR.
2555 .Ip "\fBx\fR" 4
2556 .IX Item "x"
2557 Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
2558 with \fBr\fR.
2559 .Ip "\fBy\fR" 4
2560 .IX Item "y"
2561 Dump debugging information during parsing, to standard error.
2563 .RS 4
2565 .Ip "\fB\-fdump-unnumbered\fR" 4
2566 .IX Item "-fdump-unnumbered"
2567 When doing debugging dumps (see \-d option above), suppress instruction
2568 numbers and line number note output.  This makes it more feasible to
2569 use diff on debugging dumps for compiler invocations with different
2570 options, in particular with and without \-g.
2571 .Ip "\fB\-fdump-translation-unit=\fR\fIfile\fR \fB(C and \*(C+ only)\fR" 4
2572 .IX Item "-fdump-translation-unit=file (C and  only)"
2573 Dump a representation of the tree structure for the entire translation
2574 unit to \fIfile\fR.
2575 .Ip "\fB\-fdump-class_layout=\fR\fIfile\fR \fB(\*(C+ only)\fR" 4
2576 .IX Item "-fdump-class_layout=file ( only)"
2577 .PD 0
2578 .Ip "\fB\-fdump-class_layout (\*(C+ only)\fR" 4
2579 .IX Item "-fdump-class_layout ( only)"
2581 Dump a representation of each class's heirarchy to \fIfile\fR, or
2582 \&\f(CW\*(C`stderr\*(C'\fR if not specified.
2583 .Ip "\fB\-fpretend-float\fR" 4
2584 .IX Item "-fpretend-float"
2585 When running a cross-compiler, pretend that the target machine uses the
2586 same floating point format as the host machine.  This causes incorrect
2587 output of the actual floating constants, but the actual instruction
2588 sequence will probably be the same as \s-1GCC\s0 would make when running on
2589 the target machine.
2590 .Ip "\fB\-save-temps\fR" 4
2591 .IX Item "-save-temps"
2592 Store the usual ``temporary'' intermediate files permanently; place them
2593 in the current directory and name them based on the source file.  Thus,
2594 compiling \fIfoo.c\fR with \fB\-c \-save-temps\fR would produce files
2595 \&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
2596 preprocessed \fIfoo.i\fR output file even though the compiler now
2597 normally uses an integrated preprocessor.
2598 .Ip "\fB\-time\fR" 4
2599 .IX Item "-time"
2600 Report the \s-1CPU\s0 time taken by each subprocess in the compilation
2601 sequence.  For C source files, this is the compiler proper and assembler
2602 (plus the linker if linking is done).  The output looks like this:
2604 .Vb 2
2605 \&        # cc1 0.12 0.01
2606 \&        # as 0.00 0.01
2608 The first number on each line is the ``user time,'' that is time spent
2609 executing the program itself.  The second number is ``system time,''
2610 time spent executing operating system routines on behalf of the program.
2611 Both numbers are in seconds.
2612 .Ip "\fB\-print-file-name=\fR\fIlibrary\fR" 4
2613 .IX Item "-print-file-name=library"
2614 Print the full absolute name of the library file \fIlibrary\fR that
2615 would be used when linking\-\-\-and don't do anything else.  With this
2616 option, \s-1GCC\s0 does not compile or link anything; it just prints the
2617 file name.
2618 .Ip "\fB\-print-prog-name=\fR\fIprogram\fR" 4
2619 .IX Item "-print-prog-name=program"
2620 Like \fB\-print-file-name\fR, but searches for a program such as \fBcpp\fR.
2621 .Ip "\fB\-print-libgcc-file-name\fR" 4
2622 .IX Item "-print-libgcc-file-name"
2623 Same as \fB\-print-file-name=libgcc.a\fR.
2625 This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
2626 but you do want to link with \fIlibgcc.a\fR.  You can do
2628 .Vb 1
2629 \&        gcc -nostdlib I<files>... `gcc -print-libgcc-file-name`
2631 .Ip "\fB\-print-search-dirs\fR" 4
2632 .IX Item "-print-search-dirs"
2633 Print the name of the configured installation directory and a list of
2634 program and library directories gcc will search\-\-\-and don't do anything else.
2636 This is useful when gcc prints the error message
2637 \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
2638 To resolve this you either need to put \fIcpp0\fR and the other compiler
2639 components where gcc expects to find them, or you can set the environment
2640 variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
2641 Don't forget the trailing '/'.
2642 .Sh "Options That Control Optimization"
2643 .IX Subsection "Options That Control Optimization"
2644 These options control various sorts of optimizations:
2645 .Ip "\fB\-O\fR" 4
2646 .IX Item "-O"
2647 .PD 0
2648 .Ip "\fB\-O1\fR" 4
2649 .IX Item "-O1"
2651 Optimize.  Optimizing compilation takes somewhat more time, and a lot
2652 more memory for a large function.
2654 Without \fB\-O\fR, the compiler's goal is to reduce the cost of
2655 compilation and to make debugging produce the expected results.
2656 Statements are independent: if you stop the program with a breakpoint
2657 between statements, you can then assign a new value to any variable or
2658 change the program counter to any other statement in the function and
2659 get exactly the results you would expect from the source code.
2661 Without \fB\-O\fR, the compiler only allocates variables declared
2662 \&\f(CW\*(C`register\*(C'\fR in registers.  The resulting compiled code is a little
2663 worse than produced by \s-1PCC\s0 without \fB\-O\fR.
2665 With \fB\-O\fR, the compiler tries to reduce code size and execution
2666 time.
2668 When you specify \fB\-O\fR, the compiler turns on \fB\-fthread-jumps\fR
2669 and \fB\-fdefer-pop\fR on all machines.  The compiler turns on
2670 \&\fB\-fdelayed-branch\fR on machines that have delay slots, and
2671 \&\fB\-fomit-frame-pointer\fR on machines that can support debugging even
2672 without a frame pointer.  On some machines the compiler also turns
2673 on other flags.
2674 .Ip "\fB\-O2\fR" 4
2675 .IX Item "-O2"
2676 Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
2677 that do not involve a space-speed tradeoff.  The compiler does not
2678 perform loop unrolling or function inlining when you specify \fB\-O2\fR.
2679 As compared to \fB\-O\fR, this option increases both compilation time
2680 and the performance of the generated code.
2682 \&\fB\-O2\fR turns on all optional optimizations except for loop unrolling,
2683 function inlining, and register renaming.  It also turns on the
2684 \&\fB\-fforce-mem\fR option on all machines and frame pointer elimination
2685 on machines where doing so does not interfere with debugging.
2686 .Ip "\fB\-O3\fR" 4
2687 .IX Item "-O3"
2688 Optimize yet more.  \fB\-O3\fR turns on all optimizations specified by
2689 \&\fB\-O2\fR and also turns on the \fB\-finline-functions\fR and
2690 \&\fB\-frename-registers\fR options.
2691 .Ip "\fB\-O0\fR" 4
2692 .IX Item "-O0"
2693 Do not optimize.
2694 .Ip "\fB\-Os\fR" 4
2695 .IX Item "-Os"
2696 Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations that
2697 do not typically increase code size.  It also performs further
2698 optimizations designed to reduce code size.
2700 If you use multiple \fB\-O\fR options, with or without level numbers,
2701 the last such option is the one that is effective.
2703 Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
2704 flags.  Most flags have both positive and negative forms; the negative
2705 form of \fB\-ffoo\fR would be \fB\-fno-foo\fR.  In the table below,
2706 only one of the forms is listed\-\-\-the one which is not the default.
2707 You can figure out the other form by either removing \fBno-\fR or
2708 adding it.
2709 .Ip "\fB\-ffloat-store\fR" 4
2710 .IX Item "-ffloat-store"
2711 Do not store floating point variables in registers, and inhibit other
2712 options that might change whether a floating point value is taken from a
2713 register or memory.
2715 This option prevents undesirable excess precision on machines such as
2716 the 68000 where the floating registers (of the 68881) keep more
2717 precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
2718 x86 architecture.  For most programs, the excess precision does only
2719 good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
2720 point.  Use \fB\-ffloat-store\fR for such programs, after modifying
2721 them to store all pertinent intermediate computations into variables.
2722 .Ip "\fB\-fno-default-inline\fR" 4
2723 .IX Item "-fno-default-inline"
2724 Do not make member functions inline by default merely because they are
2725 defined inside the class scope (\*(C+ only).  Otherwise, when you specify
2726 \&\fB\-O\fR, member functions defined inside class scope are compiled
2727 inline by default; i.e., you don't need to add \fBinline\fR in front of
2728 the member function name.
2729 .Ip "\fB\-fno-defer-pop\fR" 4
2730 .IX Item "-fno-defer-pop"
2731 Always pop the arguments to each function call as soon as that function
2732 returns.  For machines which must pop arguments after a function call,
2733 the compiler normally lets arguments accumulate on the stack for several
2734 function calls and pops them all at once.
2735 .Ip "\fB\-fforce-mem\fR" 4
2736 .IX Item "-fforce-mem"
2737 Force memory operands to be copied into registers before doing
2738 arithmetic on them.  This produces better code by making all memory
2739 references potential common subexpressions.  When they are not common
2740 subexpressions, instruction combination should eliminate the separate
2741 register-load.  The \fB\-O2\fR option turns on this option.
2742 .Ip "\fB\-fforce-addr\fR" 4
2743 .IX Item "-fforce-addr"
2744 Force memory address constants to be copied into registers before
2745 doing arithmetic on them.  This may produce better code just as
2746 \&\fB\-fforce-mem\fR may.
2747 .Ip "\fB\-fomit-frame-pointer\fR" 4
2748 .IX Item "-fomit-frame-pointer"
2749 Don't keep the frame pointer in a register for functions that
2750 don't need one.  This avoids the instructions to save, set up and
2751 restore frame pointers; it also makes an extra register available
2752 in many functions.  \fBIt also makes debugging impossible on
2753 some machines.\fR
2755 On some machines, such as the Vax, this flag has no effect, because
2756 the standard calling sequence automatically handles the frame pointer
2757 and nothing is saved by pretending it doesn't exist.  The
2758 machine-description macro \f(CW\*(C`FRAME_POINTER_REQUIRED\*(C'\fR controls
2759 whether a target machine supports this flag.  
2760 .Ip "\fB\-foptimize-sibling-calls\fR" 4
2761 .IX Item "-foptimize-sibling-calls"
2762 Optimize sibling and tail recursive calls.
2763 .Ip "\fB\-ftrapv\fR" 4
2764 .IX Item "-ftrapv"
2765 This option generates traps for signed overflow on addition, subtraction,
2766 multiplication operations.
2767 .Ip "\fB\-fno-inline\fR" 4
2768 .IX Item "-fno-inline"
2769 Don't pay attention to the \f(CW\*(C`inline\*(C'\fR keyword.  Normally this option
2770 is used to keep the compiler from expanding any functions inline.
2771 Note that if you are not optimizing, no functions can be expanded inline.
2772 .Ip "\fB\-finline-functions\fR" 4
2773 .IX Item "-finline-functions"
2774 Integrate all simple functions into their callers.  The compiler
2775 heuristically decides which functions are simple enough to be worth
2776 integrating in this way.
2778 If all calls to a given function are integrated, and the function is
2779 declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
2780 assembler code in its own right.
2781 .Ip "\fB\-finline-limit=\fR\fIn\fR" 4
2782 .IX Item "-finline-limit=n"
2783 By default, gcc limits the size of functions that can be inlined.  This flag
2784 allows the control of this limit for functions that are explicitly marked as
2785 inline (ie marked with the inline keyword or defined within the class 
2786 definition in c++).  \fIn\fR is the size of functions that can be inlined in 
2787 number of pseudo instructions (not counting parameter handling).  The default
2788 value of n is 10000.  Increasing this value can result in more inlined code at
2789 the cost of compilation time and memory consumption.  Decreasing usually makes
2790 the compilation faster and less code will be inlined (which presumably 
2791 means slower programs).  This option is particularly useful for programs that 
2792 use inlining heavily such as those based on recursive templates with c++.
2794 \&\fINote:\fR pseudo instruction represents, in this particular context, an
2795 abstract measurement of function's size.  In no way, it represents a count
2796 of assembly instructions and as such its exact meaning might change from one
2797 release to an another.
2798 .Ip "\fB\-fkeep-inline-functions\fR" 4
2799 .IX Item "-fkeep-inline-functions"
2800 Even if all calls to a given function are integrated, and the function
2801 is declared \f(CW\*(C`static\*(C'\fR, nevertheless output a separate run-time
2802 callable version of the function.  This switch does not affect
2803 \&\f(CW\*(C`extern inline\*(C'\fR functions.
2804 .Ip "\fB\-fkeep-static-consts\fR" 4
2805 .IX Item "-fkeep-static-consts"
2806 Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
2807 on, even if the variables aren't referenced.
2809 \&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
2810 check if the variable was referenced, regardless of whether or not
2811 optimization is turned on, use the \fB\-fno-keep-static-consts\fR option.
2812 .Ip "\fB\-fno-function-cse\fR" 4
2813 .IX Item "-fno-function-cse"
2814 Do not put function addresses in registers; make each instruction that
2815 calls a constant function contain the function's address explicitly.
2817 This option results in less efficient code, but some strange hacks
2818 that alter the assembler output may be confused by the optimizations
2819 performed when this option is not used.
2820 .Ip "\fB\-ffast-math\fR" 4
2821 .IX Item "-ffast-math"
2822 This option allows \s-1GCC\s0 to violate some \s-1ISO\s0 or \s-1IEEE\s0 rules and/or
2823 specifications in the interest of optimizing code for speed.  For
2824 example, it allows the compiler to assume arguments to the \f(CW\*(C`sqrt\*(C'\fR
2825 function are non-negative numbers and that no floating-point values
2826 are NaNs.
2828 This option should never be turned on by any \fB\-O\fR option since
2829 it can result in incorrect output for programs which depend on
2830 an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
2831 math functions.
2832 .Ip "\fB\-fno-math-errno\fR" 4
2833 .IX Item "-fno-math-errno"
2834 Do not set \s-1ERRNO\s0 after calling math functions that are executed
2835 with a single instruction, e.g., sqrt.  A program that relies on
2836 \&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
2837 for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
2839 The default is \fB\-fmath-errno\fR.  The \fB\-ffast-math\fR option
2840 sets \fB\-fno-math-errno\fR.
2842 The following options control specific optimizations.  The \fB\-O2\fR
2843 option turns on all of these optimizations except \fB\-funroll-loops\fR
2844 and \fB\-funroll-all-loops\fR.  On most machines, the \fB\-O\fR option
2845 turns on the \fB\-fthread-jumps\fR and \fB\-fdelayed-branch\fR options,
2846 but specific machines may handle it differently.
2848 You can use the following flags in the rare cases when ``fine-tuning''
2849 of optimizations to be performed is desired.
2850 .Ip "\fB\-fstrength-reduce\fR" 4
2851 .IX Item "-fstrength-reduce"
2852 Perform the optimizations of loop strength reduction and
2853 elimination of iteration variables.
2854 .Ip "\fB\-fthread-jumps\fR" 4
2855 .IX Item "-fthread-jumps"
2856 Perform optimizations where we check to see if a jump branches to a
2857 location where another comparison subsumed by the first is found.  If
2858 so, the first branch is redirected to either the destination of the
2859 second branch or a point immediately following it, depending on whether
2860 the condition is known to be true or false.
2861 .Ip "\fB\-fcse-follow-jumps\fR" 4
2862 .IX Item "-fcse-follow-jumps"
2863 In common subexpression elimination, scan through jump instructions
2864 when the target of the jump is not reached by any other path.  For
2865 example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
2866 \&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 will follow the jump when the condition
2867 tested is false.
2868 .Ip "\fB\-fcse-skip-blocks\fR" 4
2869 .IX Item "-fcse-skip-blocks"
2870 This is similar to \fB\-fcse-follow-jumps\fR, but causes \s-1CSE\s0 to
2871 follow jumps which conditionally skip over blocks.  When \s-1CSE\s0
2872 encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
2873 \&\fB\-fcse-skip-blocks\fR causes \s-1CSE\s0 to follow the jump around the
2874 body of the \f(CW\*(C`if\*(C'\fR.
2875 .Ip "\fB\-frerun-cse-after-loop\fR" 4
2876 .IX Item "-frerun-cse-after-loop"
2877 Re-run common subexpression elimination after loop optimizations has been
2878 performed.
2879 .Ip "\fB\-frerun-loop-opt\fR" 4
2880 .IX Item "-frerun-loop-opt"
2881 Run the loop optimizer twice.
2882 .Ip "\fB\-fgcse\fR" 4
2883 .IX Item "-fgcse"
2884 Perform a global common subexpression elimination pass.
2885 This pass also performs global constant and copy propagation.
2886 .Ip "\fB\-fdelete-null-pointer-checks\fR" 4
2887 .IX Item "-fdelete-null-pointer-checks"
2888 Use global dataflow analysis to identify and eliminate useless null
2889 pointer checks.  Programs which rely on \s-1NULL\s0 pointer dereferences \fInot\fR
2890 halting the program may not work properly with this option.  Use
2891 \&\-fno-delete-null-pointer-checks to disable this optimizing for programs
2892 which depend on that behavior.
2893 .Ip "\fB\-fexpensive-optimizations\fR" 4
2894 .IX Item "-fexpensive-optimizations"
2895 Perform a number of minor optimizations that are relatively expensive.
2896 .Ip "\fB\-foptimize-register-move\fR" 4
2897 .IX Item "-foptimize-register-move"
2898 .PD 0
2899 .Ip "\fB\-fregmove\fR" 4
2900 .IX Item "-fregmove"
2902 Attempt to reassign register numbers in move instructions and as
2903 operands of other simple instructions in order to maximize the amount of
2904 register tying.  This is especially helpful on machines with two-operand
2905 instructions.  \s-1GCC\s0 enables this optimization by default with \fB\-O2\fR
2906 or higher.
2908 Note \fB\-fregmove\fR and \fB\-foptimize-register-move\fR are the same
2909 optimization.
2910 .Ip "\fB\-fdelayed-branch\fR" 4
2911 .IX Item "-fdelayed-branch"
2912 If supported for the target machine, attempt to reorder instructions
2913 to exploit instruction slots available after delayed branch
2914 instructions.
2915 .Ip "\fB\-fschedule-insns\fR" 4
2916 .IX Item "-fschedule-insns"
2917 If supported for the target machine, attempt to reorder instructions to
2918 eliminate execution stalls due to required data being unavailable.  This
2919 helps machines that have slow floating point or memory load instructions
2920 by allowing other instructions to be issued until the result of the load
2921 or floating point instruction is required.
2922 .Ip "\fB\-fschedule-insns2\fR" 4
2923 .IX Item "-fschedule-insns2"
2924 Similar to \fB\-fschedule-insns\fR, but requests an additional pass of
2925 instruction scheduling after register allocation has been done.  This is
2926 especially useful on machines with a relatively small number of
2927 registers and where memory load instructions take more than one cycle.
2928 .Ip "\fB\-ffunction-sections\fR" 4
2929 .IX Item "-ffunction-sections"
2930 .PD 0
2931 .Ip "\fB\-fdata-sections\fR" 4
2932 .IX Item "-fdata-sections"
2934 Place each function or data item into its own section in the output
2935 file if the target supports arbitrary sections.  The name of the
2936 function or the name of the data item determines the section's name
2937 in the output file.
2939 Use these options on systems where the linker can perform optimizations
2940 to improve locality of reference in the instruction space.  \s-1HPPA\s0
2941 processors running \s-1HP-UX\s0 and Sparc processors running Solaris 2 have
2942 linkers with such optimizations.  Other systems using the \s-1ELF\s0 object format
2943 as well as \s-1AIX\s0 may have these optimizations in the future.
2945 Only use these options when there are significant benefits from doing
2946 so.  When you specify these options, the assembler and linker will
2947 create larger object and executable files and will also be slower.
2948 You will not be able to use \f(CW\*(C`gprof\*(C'\fR on all systems if you
2949 specify this option and you may have problems with debugging if
2950 you specify both this option and \fB\-g\fR.
2951 .Ip "\fB\-fcaller-saves\fR" 4
2952 .IX Item "-fcaller-saves"
2953 Enable values to be allocated in registers that will be clobbered by
2954 function calls, by emitting extra instructions to save and restore the
2955 registers around such calls.  Such allocation is done only when it
2956 seems to result in better code than would otherwise be produced.
2958 This option is always enabled by default on certain machines, usually
2959 those which have no call-preserved registers to use instead.
2961 For all machines, optimization level 2 and higher enables this flag by
2962 default.
2963 .Ip "\fB\-funroll-loops\fR" 4
2964 .IX Item "-funroll-loops"
2965 Perform the optimization of loop unrolling.  This is only done for loops
2966 whose number of iterations can be determined at compile time or run time.
2967 \&\fB\-funroll-loops\fR implies both \fB\-fstrength-reduce\fR and
2968 \&\fB\-frerun-cse-after-loop\fR.
2969 .Ip "\fB\-funroll-all-loops\fR" 4
2970 .IX Item "-funroll-all-loops"
2971 Perform the optimization of loop unrolling.  This is done for all loops
2972 and usually makes programs run more slowly.  \fB\-funroll-all-loops\fR
2973 implies \fB\-fstrength-reduce\fR as well as \fB\-frerun-cse-after-loop\fR.
2974 .Ip "\fB\-fmove-all-movables\fR" 4
2975 .IX Item "-fmove-all-movables"
2976 Forces all invariant computations in loops to be moved
2977 outside the loop.
2978 .Ip "\fB\-freduce-all-givs\fR" 4
2979 .IX Item "-freduce-all-givs"
2980 Forces all general-induction variables in loops to be
2981 strength-reduced.
2983 \&\fINote:\fR When compiling programs written in Fortran,
2984 \&\fB\-fmove-all-movables\fR and \fB\-freduce-all-givs\fR are enabled
2985 by default when you use the optimizer.
2987 These options may generate better or worse code; results are highly
2988 dependent on the structure of loops within the source code.
2990 These two options are intended to be removed someday, once
2991 they have helped determine the efficacy of various
2992 approaches to improving loop optimizations.
2994 Please let us (<\fBgcc@gcc.gnu.org\fR> and <\fBfortran@gnu.org\fR>)
2995 know how use of these options affects
2996 the performance of your production code.
2997 We're very interested in code that runs \fIslower\fR
2998 when these options are \fIenabled\fR.
2999 .Ip "\fB\-fno-peephole\fR" 4
3000 .IX Item "-fno-peephole"
3001 Disable any machine-specific peephole optimizations.
3002 .Ip "\fB\-fbranch-probabilities\fR" 4
3003 .IX Item "-fbranch-probabilities"
3004 After running a program compiled with \fB\-fprofile-arcs\fR, you can compile it a second time using
3005 \&\fB\-fbranch-probabilities\fR, to improve optimizations based on
3006 guessing the path a branch might take.
3007 .Ip "\fB\-fno-guess-branch-probability\fR" 4
3008 .IX Item "-fno-guess-branch-probability"
3009 Sometimes gcc will opt to guess branch probabilities when none are
3010 available from either profile directed feedback (\fB\-fprofile-arcs\fR)
3011 or \fB_\|_builtin_expect\fR.  In a hard real-time system, people don't
3012 want different runs of the compiler to produce code that has different
3013 behavior; minimizing non-determinism is of paramount import.  This
3014 switch allows users to reduce non-determinism, possibly at the expense
3015 of inferior optimization.
3016 .Ip "\fB\-fstrict-aliasing\fR" 4
3017 .IX Item "-fstrict-aliasing"
3018 Allows the compiler to assume the strictest aliasing rules applicable to
3019 the language being compiled.  For C (and \*(C+), this activates
3020 optimizations based on the type of expressions.  In particular, an
3021 object of one type is assumed never to reside at the same address as an
3022 object of a different type, unless the types are almost the same.  For
3023 example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
3024 \&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
3025 type.  
3027 Pay special attention to code like this:
3029 .Vb 4
3030 \&        union a_union { 
3031 \&          int i;
3032 \&          double d;
3033 \&        };
3035 .Vb 5
3036 \&        int f() {
3037 \&          a_union t;
3038 \&          t.d = 3.0;
3039 \&          return t.i;
3040 \&        }
3042 The practice of reading from a different union member than the one most
3043 recently written to (called ``type-punning'') is common.  Even with
3044 \&\fB\-fstrict-aliasing\fR, type-punning is allowed, provided the memory
3045 is accessed through the union type.  So, the code above will work as
3046 expected.  However, this code might not:
3048 .Vb 7
3049 \&        int f() { 
3050 \&          a_union t;
3051 \&          int* ip;
3052 \&          t.d = 3.0;
3053 \&          ip = &t.i;
3054 \&          return *ip;
3055 \&        }
3057 .Ip "\fB\-falign-functions\fR" 4
3058 .IX Item "-falign-functions"
3059 .PD 0
3060 .Ip "\fB\-falign-functions=\fR\fIn\fR" 4
3061 .IX Item "-falign-functions=n"
3063 Align the start of functions to the next power-of-two greater than
3064 \&\fIn\fR, skipping up to \fIn\fR bytes.  For instance,
3065 \&\fB\-falign-functions=32\fR aligns functions to the next 32\-byte
3066 boundary, but \fB\-falign-functions=24\fR would align to the next
3067 32\-byte boundary only if this can be done by skipping 23 bytes or less.
3069 \&\fB\-fno-align-functions\fR and \fB\-falign-functions=1\fR are
3070 equivalent and mean that functions will not be aligned.
3072 Some assemblers only support this flag when \fIn\fR is a power of two;
3073 in that case, it is rounded up.
3075 If \fIn\fR is not specified, use a machine-dependent default.
3076 .Ip "\fB\-falign-labels\fR" 4
3077 .IX Item "-falign-labels"
3078 .PD 0
3079 .Ip "\fB\-falign-labels=\fR\fIn\fR" 4
3080 .IX Item "-falign-labels=n"
3082 Align all branch targets to a power-of-two boundary, skipping up to
3083 \&\fIn\fR bytes like \fB\-falign-functions\fR.  This option can easily
3084 make code slower, because it must insert dummy operations for when the
3085 branch target is reached in the usual flow of the code.
3087 If \fB\-falign-loops\fR or \fB\-falign-jumps\fR are applicable and
3088 are greater than this value, then their values are used instead.
3090 If \fIn\fR is not specified, use a machine-dependent default which is
3091 very likely to be \fB1\fR, meaning no alignment.
3092 .Ip "\fB\-falign-loops\fR" 4
3093 .IX Item "-falign-loops"
3094 .PD 0
3095 .Ip "\fB\-falign-loops=\fR\fIn\fR" 4
3096 .IX Item "-falign-loops=n"
3098 Align loops to a power-of-two boundary, skipping up to \fIn\fR bytes
3099 like \fB\-falign-functions\fR.  The hope is that the loop will be
3100 executed many times, which will make up for any execution of the dummy
3101 operations.
3103 If \fIn\fR is not specified, use a machine-dependent default.
3104 .Ip "\fB\-falign-jumps\fR" 4
3105 .IX Item "-falign-jumps"
3106 .PD 0
3107 .Ip "\fB\-falign-jumps=\fR\fIn\fR" 4
3108 .IX Item "-falign-jumps=n"
3110 Align branch targets to a power-of-two boundary, for branch targets
3111 where the targets can only be reached by jumping, skipping up to \fIn\fR
3112 bytes like \fB\-falign-functions\fR.  In this case, no dummy operations
3113 need be executed.
3115 If \fIn\fR is not specified, use a machine-dependent default.
3116 .Ip "\fB\-fssa\fR" 4
3117 .IX Item "-fssa"
3118 Perform optimizations in static single assignment form.  Each function's
3119 flow graph is translated into \s-1SSA\s0 form, optimizations are performed, and
3120 the flow graph is translated back from \s-1SSA\s0 form.  User's should not
3121 specify this option, since it is not yet ready for production use.
3122 .Ip "\fB\-fdce\fR" 4
3123 .IX Item "-fdce"
3124 Perform dead-code elimination in \s-1SSA\s0 form.  Requires \fB\-fssa\fR.  Like
3125 \&\fB\-fssa\fR, this is an experimental feature.
3126 .Ip "\fB\-fsingle-precision-constant\fR" 4
3127 .IX Item "-fsingle-precision-constant"
3128 Treat floating point constant as single precision constant instead of
3129 implicitly converting it to double precision constant.
3130 .Ip "\fB\-frename-registers\fR" 4
3131 .IX Item "-frename-registers"
3132 Attempt to avoid false dependancies in scheduled code by making use
3133 of registers left over after register allocation.  This optimization
3134 will most benefit processors with lots of registers.  It can, however,
3135 make debugging impossible, since variables will no longer stay in
3136 a ``home register''.
3137 .Ip "\fB\*(--param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
3138 .IX Item "param name=value"
3139 In some places, \s-1GCC\s0 uses various constants to control the amount of
3140 optimization that is done.  For example, \s-1GCC\s0 will not inline functions
3141 that contain more that a certain number of instructions.  You can
3142 control some of these constants on the command-line using the
3143 \&\fB\*(--param\fR option.  
3145 In each case, the \fIvalue\fR is a integer.  The allowable choices for
3146 \&\fIname\fR are given in the following table:
3147 .RS 4
3148 .Ip "\fBmax-inline-insns\fR" 4
3149 .IX Item "max-inline-insns"
3150 If an function contains more than this many instructions, it
3151 will not be inlined.  This option is precisely equivalent to
3152 \&\fB\-finline-limit\fR.
3154 .RS 4
3156 .Sh "Options Controlling the Preprocessor"
3157 .IX Subsection "Options Controlling the Preprocessor"
3158 These options control the C preprocessor, which is run on each C source
3159 file before actual compilation.
3161 If you use the \fB\-E\fR option, nothing is done except preprocessing.
3162 Some of these options make sense only together with \fB\-E\fR because
3163 they cause the preprocessor output to be unsuitable for actual
3164 compilation.
3165 .Ip "\fB\-include\fR \fIfile\fR" 4
3166 .IX Item "-include file"
3167 Process \fIfile\fR as input before processing the regular input file.
3168 In effect, the contents of \fIfile\fR are compiled first.  Any \fB\-D\fR
3169 and \fB\-U\fR options on the command line are always processed before
3170 \&\fB\-include\fR \fIfile\fR, regardless of the order in which they are
3171 written.  All the \fB\-include\fR and \fB\-imacros\fR options are
3172 processed in the order in which they are written.
3173 .Ip "\fB\-imacros\fR \fIfile\fR" 4
3174 .IX Item "-imacros file"
3175 Process \fIfile\fR as input, discarding the resulting output, before
3176 processing the regular input file.  Because the output generated from
3177 \&\fIfile\fR is discarded, the only effect of \fB\-imacros\fR \fIfile\fR
3178 is to make the macros defined in \fIfile\fR available for use in the
3179 main input.  All the \fB\-include\fR and \fB\-imacros\fR options are
3180 processed in the order in which they are written.
3181 .Ip "\fB\-idirafter\fR \fIdir\fR" 4
3182 .IX Item "-idirafter dir"
3183 Add the directory \fIdir\fR to the second include path.  The directories
3184 on the second include path are searched when a header file is not found
3185 in any of the directories in the main include path (the one that
3186 \&\fB\-I\fR adds to).
3187 .Ip "\fB\-iprefix\fR \fIprefix\fR" 4
3188 .IX Item "-iprefix prefix"
3189 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
3190 options.
3191 .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
3192 .IX Item "-iwithprefix dir"
3193 Add a directory to the second include path.  The directory's name is
3194 made by concatenating \fIprefix\fR and \fIdir\fR, where \fIprefix\fR was
3195 specified previously with \fB\-iprefix\fR.  If you have not specified a
3196 prefix yet, the directory containing the installed passes of the
3197 compiler is used as the default.
3198 .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
3199 .IX Item "-iwithprefixbefore dir"
3200 Add a directory to the main include path.  The directory's name is made
3201 by concatenating \fIprefix\fR and \fIdir\fR, as in the case of
3202 \&\fB\-iwithprefix\fR.
3203 .Ip "\fB\-isystem\fR \fIdir\fR" 4
3204 .IX Item "-isystem dir"
3205 Add a directory to the beginning of the second include path, marking it
3206 as a system directory, so that it gets the same special treatment as
3207 is applied to the standard system directories.
3208 .Ip "\fB\-nostdinc\fR" 4
3209 .IX Item "-nostdinc"
3210 Do not search the standard system directories for header files.  Only
3211 the directories you have specified with \fB\-I\fR options (and the
3212 current directory, if appropriate) are searched.  
3214 By using both \fB\-nostdinc\fR and \fB\-I-\fR, you can limit the include-file
3215 search path to only those directories you specify explicitly.
3216 .Ip "\fB\-remap\fR" 4
3217 .IX Item "-remap"
3218 When searching for a header file in a directory, remap file names if a
3219 file named \fIheader.gcc\fR exists in that directory.  This can be used
3220 to work around limitations of file systems with file name restrictions.
3221 The \fIheader.gcc\fR file should contain a series of lines with two
3222 tokens on each line: the first token is the name to map, and the second
3223 token is the actual name to use.
3224 .Ip "\fB\-undef\fR" 4
3225 .IX Item "-undef"
3226 Do not predefine any nonstandard macros.  (Including architecture flags).
3227 .Ip "\fB\-E\fR" 4
3228 .IX Item "-E"
3229 Run only the C preprocessor.  Preprocess all the C source files
3230 specified and output the results to standard output or to the
3231 specified output file.
3232 .Ip "\fB\-C\fR" 4
3233 .IX Item "-C"
3234 Tell the preprocessor not to discard comments.  Used with the
3235 \&\fB\-E\fR option.
3236 .Ip "\fB\-P\fR" 4
3237 .IX Item "-P"
3238 Tell the preprocessor not to generate \fB#line\fR directives.
3239 Used with the \fB\-E\fR option.
3240 .Ip "\fB\-M\fR" 4
3241 .IX Item "-M"
3242 Instead of outputting the result of preprocessing, output a rule
3243 suitable for \f(CW\*(C`make\*(C'\fR describing the dependencies of the main source
3244 file.  The preprocessor outputs one \f(CW\*(C`make\*(C'\fR rule containing the
3245 object file name for that source file, a colon, and the names of all the
3246 included files.  Unless overridden explicitly, the object file name
3247 consists of the basename of the source file with any suffix replaced with
3248 object file suffix. If there are many included files then the
3249 rule is split into several lines using \fB\e\fR\-newline.
3251 \&\fB\-M\fR implies \fB\-E\fR.
3252 .Ip "\fB\-MM\fR" 4
3253 .IX Item "-MM"
3254 Like \fB\-M\fR, but mention only the files included with \fB#include
3255 "\fR\fIfile\fR\fB"\fR.  System header files included with \fB#include
3256 <\fR\fIfile\fR\fB>\fR are omitted.
3257 .Ip "\fB\-MD\fR" 4
3258 .IX Item "-MD"
3259 Like \fB\-M\fR but the dependency information is written to a file
3260 rather than stdout.  \f(CW\*(C`gcc\*(C'\fR will use the same file name and
3261 directory as the object file, but with the suffix \*(L".d\*(R" instead.
3263 This is in addition to compiling the main file as specified \-\-\-
3264 \&\fB\-MD\fR does not inhibit ordinary compilation the way \fB\-M\fR does,
3265 unless you also specify \fB\-MG\fR.
3267 With Mach, you can use the utility \f(CW\*(C`md\*(C'\fR to merge multiple
3268 dependency files into a single dependency file suitable for using with
3269 the \fBmake\fR command.
3270 .Ip "\fB\-MMD\fR" 4
3271 .IX Item "-MMD"
3272 Like \fB\-MD\fR except mention only user header files, not system
3273 \&\-header files.
3274 .Ip "\fB\-MF\fR \fIfile\fR" 4
3275 .IX Item "-MF file"
3276 When used with \fB\-M\fR or \fB\-MM\fR, specifies a file to write the
3277 dependencies to.  This allows the preprocessor to write the preprocessed
3278 file to stdout normally.  If no \fB\-MF\fR switch is given, \s-1CPP\s0 sends
3279 the rules to stdout and suppresses normal preprocessed output.
3281 Another way to specify output of a \f(CW\*(C`make\*(C'\fR rule is by setting
3282 the environment variable \fB\s-1DEPENDENCIES_OUTPUT\s0\fR.
3283 .Ip "\fB\-MG\fR" 4
3284 .IX Item "-MG"
3285 When used with \fB\-M\fR or \fB\-MM\fR, \fB\-MG\fR says to treat missing
3286 header files as generated files and assume they live in the same
3287 directory as the source file.  It suppresses preprocessed output, as a
3288 missing header file is ordinarily an error.
3290 This feature is used in automatic updating of makefiles.
3291 .Ip "\fB\-MP\fR" 4
3292 .IX Item "-MP"
3293 This option instructs \s-1CPP\s0 to add a phony target for each dependency
3294 other than the main file, causing each to depend on nothing.  These
3295 dummy rules work around errors \f(CW\*(C`make\*(C'\fR gives if you remove header
3296 files without updating the \f(CW\*(C`Makefile\*(C'\fR to match.
3298 This is typical output:\-
3300 .Vb 1
3301 \&        /tmp/test.o: /tmp/test.c /tmp/test.h
3303 .Vb 1
3304 \&        /tmp/test.h:
3306 .Ip "\fB\-MQ\fR \fItarget\fR" 4
3307 .IX Item "-MQ target"
3308 .PD 0
3309 .Ip "\fB\-MT\fR \fItarget\fR" 4
3310 .IX Item "-MT target"
3312 By default \s-1CPP\s0 uses the main file name, including any path, and appends
3313 the object suffix, normally ``.o'', to it to obtain the name of the
3314 target for dependency generation.  With \fB\-MT\fR you can specify a
3315 target yourself, overriding the default one.
3317 If you want multiple targets, you can specify them as a single argument
3318 to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
3320 The targets you specify are output in the order they appear on the
3321 command line.  \fB\-MQ\fR is identical to \fB\-MT\fR, except that the
3322 target name is quoted for Make, but with \fB\-MT\fR it isn't.  For
3323 example, \-MT '$(objpfx)foo.o' gives
3325 .Vb 1
3326 \&        $(objpfx)foo.o: /tmp/foo.c
3328 but \-MQ '$(objpfx)foo.o' gives
3330 .Vb 1
3331 \&        $$(objpfx)foo.o: /tmp/foo.c
3333 The default target is automatically quoted, as if it were given with
3334 \&\fB\-MQ\fR.
3335 .Ip "\fB\-H\fR" 4
3336 .IX Item "-H"
3337 Print the name of each header file used, in addition to other normal
3338 activities.
3339 .Ip "\fB\-A\fR\fIquestion\fR\fB(\fR\fIanswer\fR\fB)\fR" 4
3340 .IX Item "-Aquestion(answer)"
3341 Assert the answer \fIanswer\fR for \fIquestion\fR, in case it is tested
3342 with a preprocessing conditional such as \fB#if
3343 #\fR\fIquestion\fR\fB(\fR\fIanswer\fR\fB)\fR.  \fB\-A-\fR disables the standard
3344 assertions that normally describe the target machine.
3345 .Ip "\fB\-D\fR\fImacro\fR" 4
3346 .IX Item "-Dmacro"
3347 Define macro \fImacro\fR with the string \fB1\fR as its definition.
3348 .Ip "\fB\-D\fR\fImacro\fR\fB=\fR\fIdefn\fR" 4
3349 .IX Item "-Dmacro=defn"
3350 Define macro \fImacro\fR as \fIdefn\fR.  All instances of \fB\-D\fR on
3351 the command line are processed before any \fB\-U\fR options.
3353 Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
3354 order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
3355 order in which they are written.
3356 .Ip "\fB\-U\fR\fImacro\fR" 4
3357 .IX Item "-Umacro"
3358 Undefine macro \fImacro\fR.  \fB\-U\fR options are evaluated after all
3359 \&\fB\-D\fR options, but before any \fB\-include\fR and \fB\-imacros\fR
3360 options.
3362 Any \fB\-D\fR and \fB\-U\fR options on the command line are processed in
3363 order, and always before \fB\-imacros\fR \fIfile\fR, regardless of the
3364 order in which they are written.
3365 .Ip "\fB\-dM\fR" 4
3366 .IX Item "-dM"
3367 Tell the preprocessor to output only a list of the macro definitions
3368 that are in effect at the end of preprocessing.  Used with the \fB\-E\fR
3369 option.
3370 .Ip "\fB\-dD\fR" 4
3371 .IX Item "-dD"
3372 Tell the preprocessing to pass all macro definitions into the output, in
3373 their proper sequence in the rest of the output.
3374 .Ip "\fB\-dN\fR" 4
3375 .IX Item "-dN"
3376 Like \fB\-dD\fR except that the macro arguments and contents are omitted.
3377 Only \fB#define\fR \fIname\fR is included in the output.
3378 .Ip "\fB\-dI\fR" 4
3379 .IX Item "-dI"
3380 Output \fB#include\fR directives in addition to the result of
3381 preprocessing.
3382 .Ip "\fB\-trigraphs\fR" 4
3383 .IX Item "-trigraphs"
3384 Process \s-1ISO\s0 standard trigraph sequences.  These are three-character
3385 sequences, all starting with \fB??\fR, that are defined by \s-1ISO\s0 C to
3386 stand for single characters.  For example, \fB??/\fR stands for
3387 \&\fB\e\fR, so \fB'??/n'\fR is a character constant for a newline.  By
3388 default, \s-1GCC\s0 ignores trigraphs, but in standard-conforming modes it
3389 converts them.  See the \fB\-std\fR and \fB\-ansi\fR options.
3391 The nine trigraph sequences are
3392 .RS 4
3393 .Ip "\fB??(\fR" 4
3394 .IX Item "??("
3395 -> \fB[\fR
3396 .Ip "\fB??)\fR" 4
3397 .IX Item "??)"
3398 -> \fB]\fR
3399 .Ip "\fB??<\fR" 4
3400 .IX Item "??<"
3401 -> \fB{\fR
3402 .Ip "\fB??>\fR" 4
3403 .IX Item "??>"
3404 -> \fB}\fR
3405 .Ip "\fB??=\fR" 4
3406 .IX Item "??="
3407 -> \fB#\fR
3408 .Ip "\fB??/\fR" 4
3409 .IX Item "??/"
3410 -> \fB\e\fR
3411 .Ip "\fB??'\fR" 4
3412 .IX Item "??'"
3413 -> \fB^\fR
3414 .Ip "\fB??!\fR" 4
3415 .IX Item "??!"
3416 -> \fB|\fR
3417 .Ip "\fB??-\fR" 4
3418 .IX Item "??-"
3419 -> \fB~\fR
3421 .RS 4
3423 Trigraph support is not popular, so many compilers do not implement it
3424 properly.  Portable code should not rely on trigraphs being either
3425 converted or ignored.
3427 .Ip "\fB\-Wp,\fR\fIoption\fR" 4
3428 .IX Item "-Wp,option"
3429 Pass \fIoption\fR as an option to the preprocessor.  If \fIoption\fR
3430 contains commas, it is split into multiple options at the commas.
3431 .Sh "Passing Options to the Assembler"
3432 .IX Subsection "Passing Options to the Assembler"
3433 You can pass options to the assembler.
3434 .Ip "\fB\-Wa,\fR\fIoption\fR" 4
3435 .IX Item "-Wa,option"
3436 Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
3437 contains commas, it is split into multiple options at the commas.
3438 .Sh "Options for Linking"
3439 .IX Subsection "Options for Linking"
3440 These options come into play when the compiler links object files into
3441 an executable output file.  They are meaningless if the compiler is
3442 not doing a link step.
3443 .Ip "\fIobject-file-name\fR" 4
3444 .IX Item "object-file-name"
3445 A file name that does not end in a special recognized suffix is
3446 considered to name an object file or library.  (Object files are
3447 distinguished from libraries by the linker according to the file
3448 contents.)  If linking is done, these object files are used as input
3449 to the linker.
3450 .Ip "\fB\-c\fR" 4
3451 .IX Item "-c"
3452 .PD 0
3453 .Ip "\fB\-S\fR" 4
3454 .IX Item "-S"
3455 .Ip "\fB\-E\fR" 4
3456 .IX Item "-E"
3458 If any of these options is used, then the linker is not run, and
3459 object file names should not be used as arguments.  
3460 .Ip "\fB\-l\fR\fIlibrary\fR" 4
3461 .IX Item "-llibrary"
3462 Search the library named \fIlibrary\fR when linking.
3464 It makes a difference where in the command you write this option; the
3465 linker searches processes libraries and object files in the order they
3466 are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
3467 after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
3468 to functions in \fBz\fR, those functions may not be loaded.
3470 The linker searches a standard list of directories for the library,
3471 which is actually a file named \fIlib\fIlibrary\fI.a\fR.  The linker
3472 then uses this file as if it had been specified precisely by name.
3474 The directories searched include several standard system directories
3475 plus any that you specify with \fB\-L\fR.
3477 Normally the files found this way are library files\-\-\-archive files
3478 whose members are object files.  The linker handles an archive file by
3479 scanning through it for members which define symbols that have so far
3480 been referenced but not defined.  But if the file that is found is an
3481 ordinary object file, it is linked in the usual fashion.  The only
3482 difference between using an \fB\-l\fR option and specifying a file name
3483 is that \fB\-l\fR surrounds \fIlibrary\fR with \fBlib\fR and \fB.a\fR
3484 and searches several directories.
3485 .Ip "\fB\-lobjc\fR" 4
3486 .IX Item "-lobjc"
3487 You need this special case of the \fB\-l\fR option in order to
3488 link an Objective C program.
3489 .Ip "\fB\-nostartfiles\fR" 4
3490 .IX Item "-nostartfiles"
3491 Do not use the standard system startup files when linking.
3492 The standard system libraries are used normally, unless \fB\-nostdlib\fR
3493 or \fB\-nodefaultlibs\fR is used.
3494 .Ip "\fB\-nodefaultlibs\fR" 4
3495 .IX Item "-nodefaultlibs"
3496 Do not use the standard system libraries when linking.
3497 Only the libraries you specify will be passed to the linker.
3498 The standard startup files are used normally, unless \fB\-nostartfiles\fR
3499 is used.  The compiler may generate calls to memcmp, memset, and memcpy
3500 for System V (and \s-1ISO\s0 C) environments or to bcopy and bzero for
3501 \&\s-1BSD\s0 environments.  These entries are usually resolved by entries in
3502 libc.  These entry points should be supplied through some other
3503 mechanism when this option is specified.
3504 .Ip "\fB\-nostdlib\fR" 4
3505 .IX Item "-nostdlib"
3506 Do not use the standard system startup files or libraries when linking.
3507 No startup files and only the libraries you specify will be passed to
3508 the linker. The compiler may generate calls to memcmp, memset, and memcpy
3509 for System V (and \s-1ISO\s0 C) environments or to bcopy and bzero for
3510 \&\s-1BSD\s0 environments.  These entries are usually resolved by entries in
3511 libc.  These entry points should be supplied through some other
3512 mechanism when this option is specified.
3514 One of the standard libraries bypassed by \fB\-nostdlib\fR and
3515 \&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
3516 that \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
3517 needs for some languages.
3519 In most cases, you need \fIlibgcc.a\fR even when you want to avoid
3520 other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
3521 or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
3522 This ensures that you have no unresolved references to internal \s-1GCC\s0
3523 library subroutines.  (For example, \fB_\|_main\fR, used to ensure \*(C+
3524 constructors will be called.)
3525 .Ip "\fB\-s\fR" 4
3526 .IX Item "-s"
3527 Remove all symbol table and relocation information from the executable.
3528 .Ip "\fB\-static\fR" 4
3529 .IX Item "-static"
3530 On systems that support dynamic linking, this prevents linking with the shared
3531 libraries.  On other systems, this option has no effect.
3532 .Ip "\fB\-shared\fR" 4
3533 .IX Item "-shared"
3534 Produce a shared object which can then be linked with other objects to
3535 form an executable.  Not all systems support this option.  For predictable
3536 results, you must also specify the same set of options that were used to 
3537 generate code (\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions)
3538 when you specify this option.[1]
3539 .Ip "\fB\-shared-libgcc\fR" 4
3540 .IX Item "-shared-libgcc"
3541 .PD 0
3542 .Ip "\fB\-static-libgcc\fR" 4
3543 .IX Item "-static-libgcc"
3545 On systems that provide \fIlibgcc\fR as a shared library, these options
3546 force the use of either the shared or static version respectively.
3547 If no shared version of \fIlibgcc\fR was built when the compiler was
3548 configured, these options have no effect.
3550 There are several situations in which an application should use the
3551 shared \fIlibgcc\fR instead of the static version.  The most common
3552 of these is when the application wishes to throw and catch exceptions
3553 across different shared libraries.  In that case, each of the libraries
3554 as well as the application itself should use the shared \fIlibgcc\fR.
3556 Therefore, whenever you specify the \fB\-shared\fR option, the \s-1GCC\s0
3557 driver automatically adds \fB\-shared-libgcc\fR, unless you explicitly
3558 specify \fB\-static-libgcc\fR.  The G++ driver automatically adds
3559 \&\fB\-shared-libgcc\fR when you build a main executable as well because
3560 for \*(C+ programs that is typically the right thing to do.
3561 (Exception-handling will not work reliably otherwise.)
3563 However, when linking a main executable written in C, you must
3564 explicitly say \fB\-shared-libgcc\fR if you want to use the shared
3565 \&\fIlibgcc\fR.
3566 .Ip "\fB\-symbolic\fR" 4
3567 .IX Item "-symbolic"
3568 Bind references to global symbols when building a shared object.  Warn
3569 about any unresolved references (unless overridden by the link editor
3570 option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
3571 this option.
3572 .Ip "\fB\-Xlinker\fR \fIoption\fR" 4
3573 .IX Item "-Xlinker option"
3574 Pass \fIoption\fR as an option to the linker.  You can use this to
3575 supply system-specific linker options which \s-1GCC\s0 does not know how to
3576 recognize.
3578 If you want to pass an option that takes an argument, you must use
3579 \&\fB\-Xlinker\fR twice, once for the option and once for the argument.
3580 For example, to pass \fB\-assert definitions\fR, you must write
3581 \&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
3582 \&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
3583 string as a single argument, which is not what the linker expects.
3584 .Ip "\fB\-Wl,\fR\fIoption\fR" 4
3585 .IX Item "-Wl,option"
3586 Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
3587 commas, it is split into multiple options at the commas.
3588 .Ip "\fB\-u\fR \fIsymbol\fR" 4
3589 .IX Item "-u symbol"
3590 Pretend the symbol \fIsymbol\fR is undefined, to force linking of
3591 library modules to define it.  You can use \fB\-u\fR multiple times with
3592 different symbols to force loading of additional library modules.
3593 .Sh "Options for Directory Search"
3594 .IX Subsection "Options for Directory Search"
3595 These options specify directories to search for header files, for
3596 libraries and for parts of the compiler:
3597 .Ip "\fB\-I\fR\fIdir\fR" 4
3598 .IX Item "-Idir"
3599 Add the directory \fIdir\fR to the head of the list of directories to be
3600 searched for header files.  This can be used to override a system header
3601 file, substituting your own version, since these directories are
3602 searched before the system header file directories.  However, you should
3603 not use this option to add directories that contain vendor-supplied
3604 system header files (use \fB\-isystem\fR for that). If you use more than
3605 one \fB\-I\fR option, the directories are scanned in left-to-right
3606 order; the standard system directories come after.
3607 .Ip "\fB\-I-\fR" 4
3608 .IX Item "-I-"
3609 Any directories you specify with \fB\-I\fR options before the \fB\-I-\fR
3610 option are searched only for the case of \fB#include "\fR\fIfile\fR\fB"\fR;
3611 they are not searched for \fB#include <\fR\fIfile\fR\fB>\fR.
3613 If additional directories are specified with \fB\-I\fR options after
3614 the \fB\-I-\fR, these directories are searched for all \fB#include\fR
3615 directives.  (Ordinarily \fIall\fR \fB\-I\fR directories are used
3616 this way.)
3618 In addition, the \fB\-I-\fR option inhibits the use of the current
3619 directory (where the current input file came from) as the first search
3620 directory for \fB#include "\fR\fIfile\fR\fB"\fR.  There is no way to
3621 override this effect of \fB\-I-\fR.  With \fB\-I.\fR you can specify
3622 searching the directory which was current when the compiler was
3623 invoked.  That is not exactly the same as what the preprocessor does
3624 by default, but it is often satisfactory.
3626 \&\fB\-I-\fR does not inhibit the use of the standard system directories
3627 for header files.  Thus, \fB\-I-\fR and \fB\-nostdinc\fR are
3628 independent.
3629 .Ip "\fB\-L\fR\fIdir\fR" 4
3630 .IX Item "-Ldir"
3631 Add directory \fIdir\fR to the list of directories to be searched
3632 for \fB\-l\fR.
3633 .Ip "\fB\-B\fR\fIprefix\fR" 4
3634 .IX Item "-Bprefix"
3635 This option specifies where to find the executables, libraries,
3636 include files, and data files of the compiler itself.
3638 The compiler driver program runs one or more of the subprograms
3639 \&\fIcpp\fR, \fIcc1\fR, \fIas\fR and \fIld\fR.  It tries
3640 \&\fIprefix\fR as a prefix for each program it tries to run, both with and
3641 without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR.
3643 For each subprogram to be run, the compiler driver first tries the
3644 \&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
3645 was not specified, the driver tries two standard prefixes, which are
3646 \&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc-lib/\fR.  If neither of
3647 those results in a file name that is found, the unmodified program
3648 name is searched for using the directories specified in your
3649 \&\fB\s-1PATH\s0\fR environment variable.
3651 \&\fB\-B\fR prefixes that effectively specify directory names also apply
3652 to libraries in the linker, because the compiler translates these
3653 options into \fB\-L\fR options for the linker.  They also apply to
3654 includes files in the preprocessor, because the compiler translates these
3655 options into \fB\-isystem\fR options for the preprocessor.  In this case,
3656 the compiler appends \fBinclude\fR to the prefix.
3658 The run-time support file \fIlibgcc.a\fR can also be searched for using
3659 the \fB\-B\fR prefix, if needed.  If it is not found there, the two
3660 standard prefixes above are tried, and that is all.  The file is left
3661 out of the link if it is not found by those means.
3663 Another way to specify a prefix much like the \fB\-B\fR prefix is to use
3664 the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.  
3665 .Ip "\fB\-specs=\fR\fIfile\fR" 4
3666 .IX Item "-specs=file"
3667 Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
3668 file, in order to override the defaults that the \fIgcc\fR driver
3669 program uses when determining what switches to pass to \fIcc1\fR,
3670 \&\fIcc1plus\fR, \fIas\fR, \fIld\fR, etc.  More than one
3671 \&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
3672 are processed in order, from left to right.
3673 .Sh "Specifying Target Machine and Compiler Version"
3674 .IX Subsection "Specifying Target Machine and Compiler Version"
3675 By default, \s-1GCC\s0 compiles code for the same type of machine that you
3676 are using.  However, it can also be installed as a cross-compiler, to
3677 compile for some other type of machine.  In fact, several different
3678 configurations of \s-1GCC\s0, for different target machines, can be
3679 installed side by side.  Then you specify which one to use with the
3680 \&\fB\-b\fR option.
3682 In addition, older and newer versions of \s-1GCC\s0 can be installed side
3683 by side.  One of them (probably the newest) will be the default, but
3684 you may sometimes wish to use another.
3685 .Ip "\fB\-b\fR \fImachine\fR" 4
3686 .IX Item "-b machine"
3687 The argument \fImachine\fR specifies the target machine for compilation.
3688 This is useful when you have installed \s-1GCC\s0 as a cross-compiler.
3690 The value to use for \fImachine\fR is the same as was specified as the
3691 machine type when configuring \s-1GCC\s0 as a cross-compiler.  For
3692 example, if a cross-compiler was configured with \fBconfigure
3693 i386v\fR, meaning to compile for an 80386 running System V, then you
3694 would specify \fB\-b i386v\fR to run that cross compiler.
3696 When you do not specify \fB\-b\fR, it normally means to compile for
3697 the same type of machine that you are using.
3698 .Ip "\fB\-V\fR \fIversion\fR" 4
3699 .IX Item "-V version"
3700 The argument \fIversion\fR specifies which version of \s-1GCC\s0 to run.
3701 This is useful when multiple versions are installed.  For example,
3702 \&\fIversion\fR might be \fB2.0\fR, meaning to run \s-1GCC\s0 version 2.0.
3704 The default version, when you do not specify \fB\-V\fR, is the last
3705 version of \s-1GCC\s0 that you installed.
3707 The \fB\-b\fR and \fB\-V\fR options actually work by controlling part of
3708 the file name used for the executable files and libraries used for
3709 compilation.  A given version of \s-1GCC\s0, for a given target machine, is
3710 normally kept in the directory \fI/usr/local/lib/gcc-lib/\fImachine\fI/\fIversion\fI\fR.
3712 Thus, sites can customize the effect of \fB\-b\fR or \fB\-V\fR either by
3713 changing the names of these directories or adding alternate names (or
3714 symbolic links).  If in directory \fI/usr/local/lib/gcc-lib/\fR the
3715 file \fI80386\fR is a link to the file \fIi386v\fR, then \fB\-b
3716 80386\fR becomes an alias for \fB\-b i386v\fR.
3718 In one respect, the \fB\-b\fR or \fB\-V\fR do not completely change
3719 to a different compiler: the top-level driver program \fBgcc\fR
3720 that you originally invoked continues to run and invoke the other
3721 executables (preprocessor, compiler per se, assembler and linker)
3722 that do the real work.  However, since no real work is done in the
3723 driver program, it usually does not matter that the driver program
3724 in use is not the one for the specified target.  It is common for the
3725 interface to the other executables to change incompatibly between
3726 compiler versions, so unless the version specified is very close to that
3727 of the driver (for example, \fB\-V 3.0\fR with a driver program from \s-1GCC\s0
3728 version 3.0.1), use of \fB\-V\fR may not work; for example, using
3729 \&\fB\-V 2.95.2\fR will not work with a driver program from \s-1GCC\s0 3.0.
3731 The only way that the driver program depends on the target machine is
3732 in the parsing and handling of special machine-specific options.
3733 However, this is controlled by a file which is found, along with the
3734 other executables, in the directory for the specified version and
3735 target machine.  As a result, a single installed driver program adapts
3736 to any specified target machine, and sufficiently similar compiler
3737 versions.
3739 The driver program executable does control one significant thing,
3740 however: the default version and target machine.  Therefore, you can
3741 install different instances of the driver program, compiled for
3742 different targets or versions, under different names.
3744 For example, if the driver for version 2.0 is installed as \fBogcc\fR
3745 and that for version 2.1 is installed as \fBgcc\fR, then the command
3746 \&\fBgcc\fR will use version 2.1 by default, while \fBogcc\fR will use
3747 2.0 by default.  However, you can choose either version with either
3748 command with the \fB\-V\fR option.
3749 .Sh "Hardware Models and Configurations"
3750 .IX Subsection "Hardware Models and Configurations"
3751 Earlier we discussed the standard option \fB\-b\fR which chooses among
3752 different installed compilers for completely different target
3753 machines, such as Vax vs. 68000 vs. 80386.
3755 In addition, each of these target machine types can have its own
3756 special options, starting with \fB\-m\fR, to choose among various
3757 hardware models or configurations\-\-\-for example, 68010 vs 68020,
3758 floating coprocessor or none.  A single installed version of the
3759 compiler can compile for any model or configuration, according to the
3760 options specified.
3762 Some configurations of the compiler also support additional special
3763 options, usually for compatibility with other compilers on the same
3764 platform.
3766 .I "M680x0 Options"
3767 .IX Subsection "M680x0 Options"
3769 These are the \fB\-m\fR options defined for the 68000 series.  The default
3770 values for these options depends on which style of 68000 was selected when
3771 the compiler was configured; the defaults for the most common choices are
3772 given below.
3773 .Ip "\fB\-m68000\fR" 4
3774 .IX Item "-m68000"
3775 .PD 0
3776 .Ip "\fB\-mc68000\fR" 4
3777 .IX Item "-mc68000"
3779 Generate output for a 68000.  This is the default
3780 when the compiler is configured for 68000\-based systems.
3782 Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
3783 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
3784 .Ip "\fB\-m68020\fR" 4
3785 .IX Item "-m68020"
3786 .PD 0
3787 .Ip "\fB\-mc68020\fR" 4
3788 .IX Item "-mc68020"
3790 Generate output for a 68020.  This is the default
3791 when the compiler is configured for 68020\-based systems.
3792 .Ip "\fB\-m68881\fR" 4
3793 .IX Item "-m68881"
3794 Generate output containing 68881 instructions for floating point.
3795 This is the default for most 68020 systems unless \fB\-nfp\fR was
3796 specified when the compiler was configured.
3797 .Ip "\fB\-m68030\fR" 4
3798 .IX Item "-m68030"
3799 Generate output for a 68030.  This is the default when the compiler is
3800 configured for 68030\-based systems.
3801 .Ip "\fB\-m68040\fR" 4
3802 .IX Item "-m68040"
3803 Generate output for a 68040.  This is the default when the compiler is
3804 configured for 68040\-based systems.
3806 This option inhibits the use of 68881/68882 instructions that have to be
3807 emulated by software on the 68040.  Use this option if your 68040 does not
3808 have code to emulate those instructions.
3809 .Ip "\fB\-m68060\fR" 4
3810 .IX Item "-m68060"
3811 Generate output for a 68060.  This is the default when the compiler is
3812 configured for 68060\-based systems.
3814 This option inhibits the use of 68020 and 68881/68882 instructions that
3815 have to be emulated by software on the 68060.  Use this option if your 68060
3816 does not have code to emulate those instructions.
3817 .Ip "\fB\-mcpu32\fR" 4
3818 .IX Item "-mcpu32"
3819 Generate output for a \s-1CPU32\s0. This is the default
3820 when the compiler is configured for CPU32\-based systems.
3822 Use this option for microcontrollers with a
3823 \&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
3824 68336, 68340, 68341, 68349 and 68360.
3825 .Ip "\fB\-m5200\fR" 4
3826 .IX Item "-m5200"
3827 Generate output for a 520X \*(L"coldfire\*(R" family cpu.  This is the default
3828 when the compiler is configured for 520X-based systems.
3830 Use this option for microcontroller with a 5200 core, including 
3831 the \s-1MCF5202\s0, \s-1MCF5203\s0, \s-1MCF5204\s0 and \s-1MCF5202\s0.
3832 .Ip "\fB\-m68020\-40\fR" 4
3833 .IX Item "-m68020-40"
3834 Generate output for a 68040, without using any of the new instructions.
3835 This results in code which can run relatively efficiently on either a
3836 68020/68881 or a 68030 or a 68040.  The generated code does use the
3837 68881 instructions that are emulated on the 68040.
3838 .Ip "\fB\-m68020\-60\fR" 4
3839 .IX Item "-m68020-60"
3840 Generate output for a 68060, without using any of the new instructions.
3841 This results in code which can run relatively efficiently on either a
3842 68020/68881 or a 68030 or a 68040.  The generated code does use the
3843 68881 instructions that are emulated on the 68060.
3844 .Ip "\fB\-mfpa\fR" 4
3845 .IX Item "-mfpa"
3846 Generate output containing Sun \s-1FPA\s0 instructions for floating point.
3847 .Ip "\fB\-msoft-float\fR" 4
3848 .IX Item "-msoft-float"
3849 Generate output containing library calls for floating point.
3850 \&\fBWarning:\fR the requisite libraries are not available for all m68k
3851 targets.  Normally the facilities of the machine's usual C compiler are
3852 used, but this can't be done directly in cross-compilation.  You must
3853 make your own arrangements to provide suitable library functions for
3854 cross-compilation.  The embedded targets \fBm68k-*\-aout\fR and
3855 \&\fBm68k-*\-coff\fR do provide software floating point support.
3856 .Ip "\fB\-mshort\fR" 4
3857 .IX Item "-mshort"
3858 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
3859 .Ip "\fB\-mnobitfield\fR" 4
3860 .IX Item "-mnobitfield"
3861 Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
3862 and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
3863 .Ip "\fB\-mbitfield\fR" 4
3864 .IX Item "-mbitfield"
3865 Do use the bit-field instructions.  The \fB\-m68020\fR option implies
3866 \&\fB\-mbitfield\fR.  This is the default if you use a configuration
3867 designed for a 68020.
3868 .Ip "\fB\-mrtd\fR" 4
3869 .IX Item "-mrtd"
3870 Use a different function-calling convention, in which functions
3871 that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
3872 instruction, which pops their arguments while returning.  This
3873 saves one instruction in the caller since there is no need to pop
3874 the arguments there.
3876 This calling convention is incompatible with the one normally
3877 used on Unix, so you cannot use it if you need to call libraries
3878 compiled with the Unix compiler.
3880 Also, you must provide function prototypes for all functions that
3881 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
3882 otherwise incorrect code will be generated for calls to those
3883 functions.
3885 In addition, seriously incorrect code will result if you call a
3886 function with too many arguments.  (Normally, extra arguments are
3887 harmlessly ignored.)
3889 The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
3890 68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
3891 .Ip "\fB\-malign-int\fR" 4
3892 .IX Item "-malign-int"
3893 .PD 0
3894 .Ip "\fB\-mno-align-int\fR" 4
3895 .IX Item "-mno-align-int"
3897 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, 
3898 \&\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
3899 boundary (\fB\-malign-int\fR) or a 16\-bit boundary (\fB\-mno-align-int\fR).
3900 Aligning variables on 32\-bit boundaries produces code that runs somewhat
3901 faster on processors with 32\-bit busses at the expense of more memory.
3903 \&\fBWarning:\fR if you use the \fB\-malign-int\fR switch, \s-1GCC\s0 will
3904 align structures containing the above types  differently than
3905 most published application binary interface specifications for the m68k.
3906 .Ip "\fB\-mpcrel\fR" 4
3907 .IX Item "-mpcrel"
3908 Use the pc-relative addressing mode of the 68000 directly, instead of
3909 using a global offset table.  At present, this option implies \-fpic,
3910 allowing at most a 16\-bit offset for pc-relative addressing.  \-fPIC is
3911 not presently supported with \-mpcrel, though this could be supported for
3912 68020 and higher processors.
3913 .Ip "\fB\-mno-strict-align\fR" 4
3914 .IX Item "-mno-strict-align"
3915 .PD 0
3916 .Ip "\fB\-mstrict-align\fR" 4
3917 .IX Item "-mstrict-align"
3919 Do not (do) assume that unaligned memory references will be handled by
3920 the system.
3922 .I "M68hc1x Options"
3923 .IX Subsection "M68hc1x Options"
3925 These are the \fB\-m\fR options defined for the 68hc11 and 68hc12
3926 microcontrollers.  The default values for these options depends on 
3927 which style of microcontroller was selected when the compiler was configured;
3928 the defaults for the most common choices are given below.
3929 .Ip "\fB\-m6811\fR" 4
3930 .IX Item "-m6811"
3931 .PD 0
3932 .Ip "\fB\-m68hc11\fR" 4
3933 .IX Item "-m68hc11"
3935 Generate output for a 68HC11.  This is the default
3936 when the compiler is configured for 68HC11\-based systems.
3937 .Ip "\fB\-m6812\fR" 4
3938 .IX Item "-m6812"
3939 .PD 0
3940 .Ip "\fB\-m68hc12\fR" 4
3941 .IX Item "-m68hc12"
3943 Generate output for a 68HC12.  This is the default
3944 when the compiler is configured for 68HC12\-based systems.
3945 .Ip "\fB\-mauto-incdec\fR" 4
3946 .IX Item "-mauto-incdec"
3947 Enable the use of 68HC12 pre and post auto-increment and auto-decrement
3948 addressing modes.
3949 .Ip "\fB\-mshort\fR" 4
3950 .IX Item "-mshort"
3951 Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
3952 .Ip "\fB\-msoft-reg-count=\fR\fIcount\fR" 4
3953 .IX Item "-msoft-reg-count=count"
3954 Specify the number of pseudo-soft registers which are used for the
3955 code generation.  The maximum number is 32.  Using more pseudo-soft
3956 register may or may not result in better code depending on the program.
3957 The default is 4 for 68HC11 and 2 for 68HC12.
3959 .I "\s-1VAX\s0 Options"
3960 .IX Subsection "VAX Options"
3962 These \fB\-m\fR options are defined for the Vax:
3963 .Ip "\fB\-munix\fR" 4
3964 .IX Item "-munix"
3965 Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
3966 that the Unix assembler for the Vax cannot handle across long
3967 ranges.
3968 .Ip "\fB\-mgnu\fR" 4
3969 .IX Item "-mgnu"
3970 Do output those jump instructions, on the assumption that you
3971 will assemble with the \s-1GNU\s0 assembler.
3972 .Ip "\fB\-mg\fR" 4
3973 .IX Item "-mg"
3974 Output code for g-format floating point numbers instead of d-format.
3976 .I "\s-1SPARC\s0 Options"
3977 .IX Subsection "SPARC Options"
3979 These \fB\-m\fR switches are supported on the \s-1SPARC:\s0
3980 .Ip "\fB\-mno-app-regs\fR" 4
3981 .IX Item "-mno-app-regs"
3982 .PD 0
3983 .Ip "\fB\-mapp-regs\fR" 4
3984 .IX Item "-mapp-regs"
3986 Specify \fB\-mapp-regs\fR to generate output using the global registers
3987 2 through 4, which the \s-1SPARC\s0 \s-1SVR4\s0 \s-1ABI\s0 reserves for applications.  This
3988 is the default.
3990 To be fully \s-1SVR4\s0 \s-1ABI\s0 compliant at the cost of some performance loss,
3991 specify \fB\-mno-app-regs\fR.  You should compile libraries and system
3992 software with this option.
3993 .Ip "\fB\-mfpu\fR" 4
3994 .IX Item "-mfpu"
3995 .PD 0
3996 .Ip "\fB\-mhard-float\fR" 4
3997 .IX Item "-mhard-float"
3999 Generate output containing floating point instructions.  This is the
4000 default.
4001 .Ip "\fB\-mno-fpu\fR" 4
4002 .IX Item "-mno-fpu"
4003 .PD 0
4004 .Ip "\fB\-msoft-float\fR" 4
4005 .IX Item "-msoft-float"
4007 Generate output containing library calls for floating point.
4008 \&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
4009 targets.  Normally the facilities of the machine's usual C compiler are
4010 used, but this cannot be done directly in cross-compilation.  You must make
4011 your own arrangements to provide suitable library functions for
4012 cross-compilation.  The embedded targets \fBsparc-*\-aout\fR and
4013 \&\fBsparclite-*\-*\fR do provide software floating point support.
4015 \&\fB\-msoft-float\fR changes the calling convention in the output file;
4016 therefore, it is only useful if you compile \fIall\fR of a program with
4017 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
4018 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
4019 this to work.
4020 .Ip "\fB\-mhard-quad-float\fR" 4
4021 .IX Item "-mhard-quad-float"
4022 Generate output containing quad-word (long double) floating point
4023 instructions.
4024 .Ip "\fB\-msoft-quad-float\fR" 4
4025 .IX Item "-msoft-quad-float"
4026 Generate output containing library calls for quad-word (long double)
4027 floating point instructions.  The functions called are those specified
4028 in the \s-1SPARC\s0 \s-1ABI\s0.  This is the default.
4030 As of this writing, there are no sparc implementations that have hardware
4031 support for the quad-word floating point instructions.  They all invoke
4032 a trap handler for one of these instructions, and then the trap handler
4033 emulates the effect of the instruction.  Because of the trap handler overhead,
4034 this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
4035 \&\fB\-msoft-quad-float\fR option is the default.
4036 .Ip "\fB\-mno-epilogue\fR" 4
4037 .IX Item "-mno-epilogue"
4038 .PD 0
4039 .Ip "\fB\-mepilogue\fR" 4
4040 .IX Item "-mepilogue"
4042 With \fB\-mepilogue\fR (the default), the compiler always emits code for
4043 function exit at the end of each function.  Any function exit in
4044 the middle of the function (such as a return statement in C) will
4045 generate a jump to the exit code at the end of the function.
4047 With \fB\-mno-epilogue\fR, the compiler tries to emit exit code inline
4048 at every function exit.
4049 .Ip "\fB\-mno-flat\fR" 4
4050 .IX Item "-mno-flat"
4051 .PD 0
4052 .Ip "\fB\-mflat\fR" 4
4053 .IX Item "-mflat"
4055 With \fB\-mflat\fR, the compiler does not generate save/restore instructions
4056 and will use a \*(L"flat\*(R" or single register window calling convention.
4057 This model uses \f(CW%i7\fR as the frame pointer and is compatible with the normal
4058 register window model.  Code from either may be intermixed.
4059 The local registers and the input registers (0\-5) are still treated as
4060 \&\*(L"call saved\*(R" registers and will be saved on the stack as necessary.
4062 With \fB\-mno-flat\fR (the default), the compiler emits save/restore
4063 instructions (except for leaf functions) and is the normal mode of operation.
4064 .Ip "\fB\-mno-unaligned-doubles\fR" 4
4065 .IX Item "-mno-unaligned-doubles"
4066 .PD 0
4067 .Ip "\fB\-munaligned-doubles\fR" 4
4068 .IX Item "-munaligned-doubles"
4070 Assume that doubles have 8 byte alignment.  This is the default.
4072 With \fB\-munaligned-doubles\fR, \s-1GCC\s0 assumes that doubles have 8 byte
4073 alignment only if they are contained in another type, or if they have an
4074 absolute address.  Otherwise, it assumes they have 4 byte alignment.
4075 Specifying this option avoids some rare compatibility problems with code
4076 generated by other compilers.  It is not the default because it results
4077 in a performance loss, especially for floating point code.
4078 .Ip "\fB\-mno-faster-structs\fR" 4
4079 .IX Item "-mno-faster-structs"
4080 .PD 0
4081 .Ip "\fB\-mfaster-structs\fR" 4
4082 .IX Item "-mfaster-structs"
4084 With \fB\-mfaster-structs\fR, the compiler assumes that structures
4085 should have 8 byte alignment.  This enables the use of pairs of
4086 \&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
4087 assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
4088 However, the use of this changed alignment directly violates the Sparc
4089 \&\s-1ABI\s0.  Thus, it's intended only for use on targets where the developer
4090 acknowledges that their resulting code will not be directly in line with
4091 the rules of the \s-1ABI\s0.
4092 .Ip "\fB\-mv8\fR" 4
4093 .IX Item "-mv8"
4094 .PD 0
4095 .Ip "\fB\-msparclite\fR" 4
4096 .IX Item "-msparclite"
4098 These two options select variations on the \s-1SPARC\s0 architecture.
4100 By default (unless specifically configured for the Fujitsu SPARClite),
4101 \&\s-1GCC\s0 generates code for the v7 variant of the \s-1SPARC\s0 architecture.
4103 \&\fB\-mv8\fR will give you \s-1SPARC\s0 v8 code.  The only difference from v7
4104 code is that the compiler emits the integer multiply and integer
4105 divide instructions which exist in \s-1SPARC\s0 v8 but not in \s-1SPARC\s0 v7.
4107 \&\fB\-msparclite\fR will give you SPARClite code.  This adds the integer
4108 multiply, integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which
4109 exist in SPARClite but not in \s-1SPARC\s0 v7.
4111 These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
4112 They have been replaced with \fB\-mcpu=xxx\fR.
4113 .Ip "\fB\-mcypress\fR" 4
4114 .IX Item "-mcypress"
4115 .PD 0
4116 .Ip "\fB\-msupersparc\fR" 4
4117 .IX Item "-msupersparc"
4119 These two options select the processor for which the code is optimised.
4121 With \fB\-mcypress\fR (the default), the compiler optimizes code for the
4122 Cypress \s-1CY7C602\s0 chip, as used in the SparcStation/SparcServer 3xx series.
4123 This is also appropriate for the older SparcStation 1, 2, \s-1IPX\s0 etc.
4125 With \fB\-msupersparc\fR the compiler optimizes code for the SuperSparc cpu, as
4126 used in the SparcStation 10, 1000 and 2000 series. This flag also enables use
4127 of the full \s-1SPARC\s0 v8 instruction set.
4129 These options are deprecated and will be deleted in a future \s-1GCC\s0 release.
4130 They have been replaced with \fB\-mcpu=xxx\fR.
4131 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
4132 .IX Item "-mcpu=cpu_type"
4133 Set the instruction set, register set, and instruction scheduling parameters
4134 for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
4135 \&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBsparclite\fR,
4136 \&\fBhypersparc\fR, \fBsparclite86x\fR, \fBf930\fR, \fBf934\fR,
4137 \&\fBsparclet\fR, \fBtsc701\fR, \fBv9\fR, and \fBultrasparc\fR.
4139 Default instruction scheduling parameters are used for values that select
4140 an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
4141 \&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
4143 Here is a list of each supported architecture and their supported
4144 implementations.
4146 .Vb 5
4147 \&            v7:             cypress
4148 \&            v8:             supersparc, hypersparc
4149 \&            sparclite:      f930, f934, sparclite86x
4150 \&            sparclet:       tsc701
4151 \&            v9:             ultrasparc
4153 .Ip "\fB\-mtune=\fR\fIcpu_type\fR" 4
4154 .IX Item "-mtune=cpu_type"
4155 Set the instruction scheduling parameters for machine type
4156 \&\fIcpu_type\fR, but do not set the instruction set or register set that the
4157 option \fB\-mcpu=\fR\fIcpu_type\fR would.
4159 The same values for \fB\-mcpu=\fR\fIcpu_type\fR are used for
4160 \&\fB\-mtune=\fR\fIcpu_type\fR, though the only useful values are those that
4161 select a particular cpu implementation: \fBcypress\fR, \fBsupersparc\fR,
4162 \&\fBhypersparc\fR, \fBf930\fR, \fBf934\fR, \fBsparclite86x\fR,
4163 \&\fBtsc701\fR, \fBultrasparc\fR.
4165 These \fB\-m\fR switches are supported in addition to the above
4166 on the \s-1SPARCLET\s0 processor.
4167 .Ip "\fB\-mlittle-endian\fR" 4
4168 .IX Item "-mlittle-endian"
4169 Generate code for a processor running in little-endian mode.
4170 .Ip "\fB\-mlive-g0\fR" 4
4171 .IX Item "-mlive-g0"
4172 Treat register \f(CW\*(C`%g0\*(C'\fR as a normal register.
4173 \&\s-1GCC\s0 will continue to clobber it as necessary but will not assume
4174 it always reads as 0.
4175 .Ip "\fB\-mbroken-saverestore\fR" 4
4176 .IX Item "-mbroken-saverestore"
4177 Generate code that does not use non-trivial forms of the \f(CW\*(C`save\*(C'\fR and
4178 \&\f(CW\*(C`restore\*(C'\fR instructions.  Early versions of the \s-1SPARCLET\s0 processor do
4179 not correctly handle \f(CW\*(C`save\*(C'\fR and \f(CW\*(C`restore\*(C'\fR instructions used with
4180 arguments.  They correctly handle them used without arguments.  A \f(CW\*(C`save\*(C'\fR
4181 instruction used without arguments increments the current window pointer
4182 but does not allocate a new stack frame.  It is assumed that the window
4183 overflow trap handler will properly handle this case as will interrupt
4184 handlers.
4186 These \fB\-m\fR switches are supported in addition to the above
4187 on \s-1SPARC\s0 V9 processors in 64 bit environments.
4188 .Ip "\fB\-mlittle-endian\fR" 4
4189 .IX Item "-mlittle-endian"
4190 Generate code for a processor running in little-endian mode.
4191 .Ip "\fB\-m32\fR" 4
4192 .IX Item "-m32"
4193 .PD 0
4194 .Ip "\fB\-m64\fR" 4
4195 .IX Item "-m64"
4197 Generate code for a 32 bit or 64 bit environment.
4198 The 32 bit environment sets int, long and pointer to 32 bits.
4199 The 64 bit environment sets int to 32 bits and long and pointer
4200 to 64 bits.
4201 .Ip "\fB\-mcmodel=medlow\fR" 4
4202 .IX Item "-mcmodel=medlow"
4203 Generate code for the Medium/Low code model: the program must be linked
4204 in the low 32 bits of the address space.  Pointers are 64 bits.
4205 Programs can be statically or dynamically linked.
4206 .Ip "\fB\-mcmodel=medmid\fR" 4
4207 .IX Item "-mcmodel=medmid"
4208 Generate code for the Medium/Middle code model: the program must be linked
4209 in the low 44 bits of the address space, the text segment must be less than
4210 2G bytes, and data segment must be within 2G of the text segment.
4211 Pointers are 64 bits.
4212 .Ip "\fB\-mcmodel=medany\fR" 4
4213 .IX Item "-mcmodel=medany"
4214 Generate code for the Medium/Anywhere code model: the program may be linked
4215 anywhere in the address space, the text segment must be less than
4216 2G bytes, and data segment must be within 2G of the text segment.
4217 Pointers are 64 bits.
4218 .Ip "\fB\-mcmodel=embmedany\fR" 4
4219 .IX Item "-mcmodel=embmedany"
4220 Generate code for the Medium/Anywhere code model for embedded systems:
4221 assume a 32 bit text and a 32 bit data segment, both starting anywhere
4222 (determined at link time).  Register \f(CW%g4\fR points to the base of the
4223 data segment.  Pointers still 64 bits.
4224 Programs are statically linked, \s-1PIC\s0 is not supported.
4225 .Ip "\fB\-mstack-bias\fR" 4
4226 .IX Item "-mstack-bias"
4227 .PD 0
4228 .Ip "\fB\-mno-stack-bias\fR" 4
4229 .IX Item "-mno-stack-bias"
4231 With \fB\-mstack-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
4232 frame pointer if present, are offset by \-2047 which must be added back
4233 when making stack frame references.
4234 Otherwise, assume no such offset is present.
4236 .I "Convex Options"
4237 .IX Subsection "Convex Options"
4239 These \fB\-m\fR options are defined for Convex:
4240 .Ip "\fB\-mc1\fR" 4
4241 .IX Item "-mc1"
4242 Generate output for C1.  The code will run on any Convex machine.
4243 The preprocessor symbol \f(CW\*(C`_\|_convex_\|_c1_\|_\*(C'\fR is defined.
4244 .Ip "\fB\-mc2\fR" 4
4245 .IX Item "-mc2"
4246 Generate output for C2.  Uses instructions not available on C1.
4247 Scheduling and other optimizations are chosen for max performance on C2.
4248 The preprocessor symbol \f(CW\*(C`_\|_convex_c2_\|_\*(C'\fR is defined.
4249 .Ip "\fB\-mc32\fR" 4
4250 .IX Item "-mc32"
4251 Generate output for C32xx.  Uses instructions not available on C1.
4252 Scheduling and other optimizations are chosen for max performance on C32.
4253 The preprocessor symbol \f(CW\*(C`_\|_convex_c32_\|_\*(C'\fR is defined.
4254 .Ip "\fB\-mc34\fR" 4
4255 .IX Item "-mc34"
4256 Generate output for C34xx.  Uses instructions not available on C1.
4257 Scheduling and other optimizations are chosen for max performance on C34.
4258 The preprocessor symbol \f(CW\*(C`_\|_convex_c34_\|_\*(C'\fR is defined.
4259 .Ip "\fB\-mc38\fR" 4
4260 .IX Item "-mc38"
4261 Generate output for C38xx.  Uses instructions not available on C1.
4262 Scheduling and other optimizations are chosen for max performance on C38.
4263 The preprocessor symbol \f(CW\*(C`_\|_convex_c38_\|_\*(C'\fR is defined.
4264 .Ip "\fB\-margcount\fR" 4
4265 .IX Item "-margcount"
4266 Generate code which puts an argument count in the word preceding each
4267 argument list.  This is compatible with regular \s-1CC\s0, and a few programs
4268 may need the argument count word.  \s-1GDB\s0 and other source-level debuggers
4269 do not need it; this info is in the symbol table.
4270 .Ip "\fB\-mnoargcount\fR" 4
4271 .IX Item "-mnoargcount"
4272 Omit the argument count word.  This is the default.
4273 .Ip "\fB\-mvolatile-cache\fR" 4
4274 .IX Item "-mvolatile-cache"
4275 Allow volatile references to be cached.  This is the default.
4276 .Ip "\fB\-mvolatile-nocache\fR" 4
4277 .IX Item "-mvolatile-nocache"
4278 Volatile references bypass the data cache, going all the way to memory.
4279 This is only needed for multi-processor code that does not use standard
4280 synchronization instructions.  Making non-volatile references to volatile
4281 locations will not necessarily work.
4282 .Ip "\fB\-mlong32\fR" 4
4283 .IX Item "-mlong32"
4284 Type long is 32 bits, the same as type int.  This is the default.
4285 .Ip "\fB\-mlong64\fR" 4
4286 .IX Item "-mlong64"
4287 Type long is 64 bits, the same as type long long.  This option is useless,
4288 because no library support exists for it.
4290 .I "\s-1AMD29K\s0 Options"
4291 .IX Subsection "AMD29K Options"
4293 These \fB\-m\fR options are defined for the \s-1AMD\s0 Am29000:
4294 .Ip "\fB\-mdw\fR" 4
4295 .IX Item "-mdw"
4296 Generate code that assumes the \f(CW\*(C`DW\*(C'\fR bit is set, i.e., that byte and
4297 halfword operations are directly supported by the hardware.  This is the
4298 default.
4299 .Ip "\fB\-mndw\fR" 4
4300 .IX Item "-mndw"
4301 Generate code that assumes the \f(CW\*(C`DW\*(C'\fR bit is not set.
4302 .Ip "\fB\-mbw\fR" 4
4303 .IX Item "-mbw"
4304 Generate code that assumes the system supports byte and halfword write
4305 operations.  This is the default.
4306 .Ip "\fB\-mnbw\fR" 4
4307 .IX Item "-mnbw"
4308 Generate code that assumes the systems does not support byte and
4309 halfword write operations.  \fB\-mnbw\fR implies \fB\-mndw\fR.
4310 .Ip "\fB\-msmall\fR" 4
4311 .IX Item "-msmall"
4312 Use a small memory model that assumes that all function addresses are
4313 either within a single 256 \s-1KB\s0 segment or at an absolute address of less
4314 than 256k.  This allows the \f(CW\*(C`call\*(C'\fR instruction to be used instead
4315 of a \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`consth\*(C'\fR, \f(CW\*(C`calli\*(C'\fR sequence.
4316 .Ip "\fB\-mnormal\fR" 4
4317 .IX Item "-mnormal"
4318 Use the normal memory model: Generate \f(CW\*(C`call\*(C'\fR instructions only when
4319 calling functions in the same file and \f(CW\*(C`calli\*(C'\fR instructions
4320 otherwise.  This works if each file occupies less than 256 \s-1KB\s0 but allows
4321 the entire executable to be larger than 256 \s-1KB\s0.  This is the default.
4322 .Ip "\fB\-mlarge\fR" 4
4323 .IX Item "-mlarge"
4324 Always use \f(CW\*(C`calli\*(C'\fR instructions.  Specify this option if you expect
4325 a single file to compile into more than 256 \s-1KB\s0 of code.
4326 .Ip "\fB\-m29050\fR" 4
4327 .IX Item "-m29050"
4328 Generate code for the Am29050.
4329 .Ip "\fB\-m29000\fR" 4
4330 .IX Item "-m29000"
4331 Generate code for the Am29000.  This is the default.
4332 .Ip "\fB\-mkernel-registers\fR" 4
4333 .IX Item "-mkernel-registers"
4334 Generate references to registers \f(CW\*(C`gr64\-gr95\*(C'\fR instead of to
4335 registers \f(CW\*(C`gr96\-gr127\*(C'\fR.  This option can be used when compiling
4336 kernel code that wants a set of global registers disjoint from that used
4337 by user-mode code.
4339 Note that when this option is used, register names in \fB\-f\fR flags
4340 must use the normal, user-mode, names.
4341 .Ip "\fB\-muser-registers\fR" 4
4342 .IX Item "-muser-registers"
4343 Use the normal set of global registers, \f(CW\*(C`gr96\-gr127\*(C'\fR.  This is the
4344 default.
4345 .Ip "\fB\-mstack-check\fR" 4
4346 .IX Item "-mstack-check"
4347 .PD 0
4348 .Ip "\fB\-mno-stack-check\fR" 4
4349 .IX Item "-mno-stack-check"
4351 Insert (or do not insert) a call to \f(CW\*(C`_\|_msp_check\*(C'\fR after each stack
4352 adjustment.  This is often used for kernel code.
4353 .Ip "\fB\-mstorem-bug\fR" 4
4354 .IX Item "-mstorem-bug"
4355 .PD 0
4356 .Ip "\fB\-mno-storem-bug\fR" 4
4357 .IX Item "-mno-storem-bug"
4359 \&\fB\-mstorem-bug\fR handles 29k processors which cannot handle the
4360 separation of a mtsrim insn and a storem instruction (most 29000 chips
4361 to date, but not the 29050).
4362 .Ip "\fB\-mno-reuse-arg-regs\fR" 4
4363 .IX Item "-mno-reuse-arg-regs"
4364 .PD 0
4365 .Ip "\fB\-mreuse-arg-regs\fR" 4
4366 .IX Item "-mreuse-arg-regs"
4368 \&\fB\-mno-reuse-arg-regs\fR tells the compiler to only use incoming argument
4369 registers for copying out arguments.  This helps detect calling a function
4370 with fewer arguments than it was declared with.
4371 .Ip "\fB\-mno-impure-text\fR" 4
4372 .IX Item "-mno-impure-text"
4373 .PD 0
4374 .Ip "\fB\-mimpure-text\fR" 4
4375 .IX Item "-mimpure-text"
4377 \&\fB\-mimpure-text\fR, used in addition to \fB\-shared\fR, tells the compiler to
4378 not pass \fB\-assert pure-text\fR to the linker when linking a shared object.
4379 .Ip "\fB\-msoft-float\fR" 4
4380 .IX Item "-msoft-float"
4381 Generate output containing library calls for floating point.
4382 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
4383 Normally the facilities of the machine's usual C compiler are used, but
4384 this can't be done directly in cross-compilation.  You must make your
4385 own arrangements to provide suitable library functions for
4386 cross-compilation.
4387 .Ip "\fB\-mno-multm\fR" 4
4388 .IX Item "-mno-multm"
4389 Do not generate multm or multmu instructions.  This is useful for some embedded
4390 systems which do not have trap handlers for these instructions.
4392 .I "\s-1ARM\s0 Options"
4393 .IX Subsection "ARM Options"
4395 These \fB\-m\fR options are defined for Advanced \s-1RISC\s0 Machines (\s-1ARM\s0)
4396 architectures:
4397 .Ip "\fB\-mapcs-frame\fR" 4
4398 .IX Item "-mapcs-frame"
4399 Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
4400 Standard for all functions, even if this is not strictly necessary for
4401 correct execution of the code.  Specifying \fB\-fomit-frame-pointer\fR
4402 with this option will cause the stack frames not to be generated for
4403 leaf functions.  The default is \fB\-mno-apcs-frame\fR.
4404 .Ip "\fB\-mapcs\fR" 4
4405 .IX Item "-mapcs"
4406 This is a synonym for \fB\-mapcs-frame\fR.
4407 .Ip "\fB\-mapcs-26\fR" 4
4408 .IX Item "-mapcs-26"
4409 Generate code for a processor running with a 26\-bit program counter,
4410 and conforming to the function calling standards for the \s-1APCS\s0 26\-bit
4411 option.  This option replaces the \fB\-m2\fR and \fB\-m3\fR options
4412 of previous releases of the compiler.
4413 .Ip "\fB\-mapcs-32\fR" 4
4414 .IX Item "-mapcs-32"
4415 Generate code for a processor running with a 32\-bit program counter,
4416 and conforming to the function calling standards for the \s-1APCS\s0 32\-bit
4417 option.  This option replaces the \fB\-m6\fR option of previous releases
4418 of the compiler.
4419 .Ip "\fB\-mapcs-stack-check\fR" 4
4420 .IX Item "-mapcs-stack-check"
4421 Generate code to check the amount of stack space available upon entry to
4422 every function (that actually uses some stack space).  If there is
4423 insufficient space available then either the function
4424 \&\fB_\|_rt_stkovf_split_small\fR or \fB_\|_rt_stkovf_split_big\fR will be
4425 called, depending upon the amount of stack space required.  The run time
4426 system is required to provide these functions.  The default is
4427 \&\fB\-mno-apcs-stack-check\fR, since this produces smaller code.
4428 .Ip "\fB\-mapcs-float\fR" 4
4429 .IX Item "-mapcs-float"
4430 Pass floating point arguments using the float point registers.  This is
4431 one of the variants of the \s-1APCS\s0.  This option is recommended if the
4432 target hardware has a floating point unit or if a lot of floating point
4433 arithmetic is going to be performed by the code.  The default is
4434 \&\fB\-mno-apcs-float\fR, since integer only code is slightly increased in
4435 size if \fB\-mapcs-float\fR is used.
4436 .Ip "\fB\-mapcs-reentrant\fR" 4
4437 .IX Item "-mapcs-reentrant"
4438 Generate reentrant, position independent code.  This is the equivalent
4439 to specifying the \fB\-fpic\fR option.  The default is
4440 \&\fB\-mno-apcs-reentrant\fR.
4441 .Ip "\fB\-mthumb-interwork\fR" 4
4442 .IX Item "-mthumb-interwork"
4443 Generate code which supports calling between the \s-1ARM\s0 and \s-1THUMB\s0
4444 instruction sets.  Without this option the two instruction sets cannot
4445 be reliably used inside one program.  The default is
4446 \&\fB\-mno-thumb-interwork\fR, since slightly larger code is generated
4447 when \fB\-mthumb-interwork\fR is specified.
4448 .Ip "\fB\-mno-sched-prolog\fR" 4
4449 .IX Item "-mno-sched-prolog"
4450 Prevent the reordering of instructions in the function prolog, or the
4451 merging of those instruction with the instructions in the function's
4452 body.  This means that all functions will start with a recognizable set
4453 of instructions (or in fact one of a choice from a small set of
4454 different function prologues), and this information can be used to
4455 locate the start if functions inside an executable piece of code.  The
4456 default is \fB\-msched-prolog\fR.
4457 .Ip "\fB\-mhard-float\fR" 4
4458 .IX Item "-mhard-float"
4459 Generate output containing floating point instructions.  This is the
4460 default.
4461 .Ip "\fB\-msoft-float\fR" 4
4462 .IX Item "-msoft-float"
4463 Generate output containing library calls for floating point.
4464 \&\fBWarning:\fR the requisite libraries are not available for all \s-1ARM\s0
4465 targets.  Normally the facilities of the machine's usual C compiler are
4466 used, but this cannot be done directly in cross-compilation.  You must make
4467 your own arrangements to provide suitable library functions for
4468 cross-compilation.
4470 \&\fB\-msoft-float\fR changes the calling convention in the output file;
4471 therefore, it is only useful if you compile \fIall\fR of a program with
4472 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
4473 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
4474 this to work.
4475 .Ip "\fB\-mlittle-endian\fR" 4
4476 .IX Item "-mlittle-endian"
4477 Generate code for a processor running in little-endian mode.  This is
4478 the default for all standard configurations.
4479 .Ip "\fB\-mbig-endian\fR" 4
4480 .IX Item "-mbig-endian"
4481 Generate code for a processor running in big-endian mode; the default is
4482 to compile code for a little-endian processor.
4483 .Ip "\fB\-mwords-little-endian\fR" 4
4484 .IX Item "-mwords-little-endian"
4485 This option only applies when generating code for big-endian processors.
4486 Generate code for a little-endian word order but a big-endian byte
4487 order.  That is, a byte order of the form \fB32107654\fR.  Note: this
4488 option should only be used if you require compatibility with code for
4489 big-endian \s-1ARM\s0 processors generated by versions of the compiler prior to
4490 2.8.
4491 .Ip "\fB\-malignment-traps\fR" 4
4492 .IX Item "-malignment-traps"
4493 Generate code that will not trap if the \s-1MMU\s0 has alignment traps enabled.
4494 On \s-1ARM\s0 architectures prior to ARMv4, there were no instructions to
4495 access half-word objects stored in memory.  However, when reading from
4496 memory a feature of the \s-1ARM\s0 architecture allows a word load to be used,
4497 even if the address is unaligned, and the processor core will rotate the
4498 data as it is being loaded.  This option tells the compiler that such
4499 misaligned accesses will cause a \s-1MMU\s0 trap and that it should instead
4500 synthesise the access as a series of byte accesses.  The compiler can
4501 still use word accesses to load half-word data if it knows that the
4502 address is aligned to a word boundary.
4504 This option is ignored when compiling for \s-1ARM\s0 architecture 4 or later,
4505 since these processors have instructions to directly access half-word
4506 objects in memory. 
4507 .Ip "\fB\-mno-alignment-traps\fR" 4
4508 .IX Item "-mno-alignment-traps"
4509 Generate code that assumes that the \s-1MMU\s0 will not trap unaligned
4510 accesses.  This produces better code when the target instruction set
4511 does not have half-word memory operations (implementations prior to
4512 ARMv4). 
4514 Note that you cannot use this option to access unaligned word objects,
4515 since the processor will only fetch one 32\-bit aligned object from
4516 memory. 
4518 The default setting for most targets is \-mno-alignment-traps, since
4519 this produces better code when there are no half-word memory
4520 instructions available. 
4521 .Ip "\fB\-mshort-load-bytes\fR" 4
4522 .IX Item "-mshort-load-bytes"
4523 This is a deprecated alias for \fB\-malignment-traps\fR.
4524 .Ip "\fB\-mno-short-load-bytes\fR" 4
4525 .IX Item "-mno-short-load-bytes"
4526 This is a deprecated alias for \fB\-mno-alignment-traps\fR.
4527 .Ip "\fB\-mshort-load-words\fR" 4
4528 .IX Item "-mshort-load-words"
4529 This is a deprecated alias for \fB\-mno-alignment-traps\fR.
4530 .Ip "\fB\-mno-short-load-words\fR" 4
4531 .IX Item "-mno-short-load-words"
4532 This is a deprecated alias for \fB\-malignment-traps\fR.
4533 .Ip "\fB\-mbsd\fR" 4
4534 .IX Item "-mbsd"
4535 This option only applies to \s-1RISC\s0 iX.  Emulate the native BSD-mode
4536 compiler.  This is the default if \fB\-ansi\fR is not specified.
4537 .Ip "\fB\-mxopen\fR" 4
4538 .IX Item "-mxopen"
4539 This option only applies to \s-1RISC\s0 iX.  Emulate the native X/Open-mode
4540 compiler.
4541 .Ip "\fB\-mno-symrename\fR" 4
4542 .IX Item "-mno-symrename"
4543 This option only applies to \s-1RISC\s0 iX.  Do not run the assembler
4544 post-processor, \fBsymrename\fR, after code has been assembled.
4545 Normally it is necessary to modify some of the standard symbols in
4546 preparation for linking with the \s-1RISC\s0 iX C library; this option
4547 suppresses this pass.  The post-processor is never run when the
4548 compiler is built for cross-compilation.
4549 .Ip "\fB\-mcpu=<name>\fR" 4
4550 .IX Item "-mcpu=<name>"
4551 This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
4552 to determine what kind of instructions it can use when generating
4553 assembly code.  Permissible names are: arm2, arm250, arm3, arm6, arm60,
4554 arm600, arm610, arm620, arm7, arm7m, arm7d, arm7dm, arm7di, arm7dmi,
4555 arm70, arm700, arm700i, arm710, arm710c, arm7100, arm7500, arm7500fe,
4556 arm7tdmi, arm8, strongarm, strongarm110, strongarm1100, arm8, arm810,
4557 arm9, arm920, arm920t, arm9tdmi.
4558 .Ip "\fB\-mtune=<name>\fR" 4
4559 .IX Item "-mtune=<name>"
4560 This option is very similar to the \fB\-mcpu=\fR option, except that
4561 instead of specifying the actual target processor type, and hence
4562 restricting which instructions can be used, it specifies that \s-1GCC\s0 should
4563 tune the performance of the code as if the target were of the type
4564 specified in this option, but still choosing the instructions that it
4565 will generate based on the cpu specified by a \fB\-mcpu=\fR option.
4566 For some arm implementations better performance can be obtained by using
4567 this option.
4568 .Ip "\fB\-march=<name>\fR" 4
4569 .IX Item "-march=<name>"
4570 This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
4571 name to determine what kind of instructions it can use when generating
4572 assembly code.  This option can be used in conjunction with or instead
4573 of the \fB\-mcpu=\fR option.  Permissible names are: armv2, armv2a,
4574 armv3, armv3m, armv4, armv4t, armv5.
4575 .Ip "\fB\-mfpe=<number>\fR" 4
4576 .IX Item "-mfpe=<number>"
4577 .PD 0
4578 .Ip "\fB\-mfp=<number>\fR" 4
4579 .IX Item "-mfp=<number>"
4581 This specifies the version of the floating point emulation available on
4582 the target.  Permissible values are 2 and 3.  \fB\-mfp=\fR is a synonym
4583 for \fB\-mfpe=\fR to support older versions of \s-1GCC\s0.
4584 .Ip "\fB\-mstructure-size-boundary=<n>\fR" 4
4585 .IX Item "-mstructure-size-boundary=<n>"
4586 The size of all structures and unions will be rounded up to a multiple
4587 of the number of bits set by this option.  Permissible values are 8 and
4588 32.  The default value varies for different toolchains.  For the \s-1COFF\s0
4589 targeted toolchain the default value is 8.  Specifying the larger number
4590 can produce faster, more efficient code, but can also increase the size
4591 of the program.  The two values are potentially incompatible.  Code
4592 compiled with one value cannot necessarily expect to work with code or
4593 libraries compiled with the other value, if they exchange information
4594 using structures or unions.  Programmers are encouraged to use the 32
4595 value as future versions of the toolchain may default to this value.
4596 .Ip "\fB\-mabort-on-noreturn\fR" 4
4597 .IX Item "-mabort-on-noreturn"
4598 Generate a call to the function abort at the end of a noreturn function.
4599 It will be executed if the function tries to return.
4600 .Ip "\fB\-mlong-calls\fR" 4
4601 .IX Item "-mlong-calls"
4602 .PD 0
4603 .Ip "\fB\-mno-long-calls\fR" 4
4604 .IX Item "-mno-long-calls"
4606 Tells the compiler to perform function calls by first loading the
4607 address of the function into a register and then performing a subroutine
4608 call on this register.  This switch is needed if the target function
4609 will lie outside of the 64 megabyte addressing range of the offset based
4610 version of subroutine call instruction. 
4612 Even if this switch is enabled, not all function calls will be turned
4613 into long calls.  The heuristic is that static functions, functions
4614 which have the \fBshort-call\fR attribute, functions that are inside
4615 the scope of a \fB#pragma no_long_calls\fR directive and functions whose
4616 definitions have already been compiled within the current compilation
4617 unit, will not be turned into long calls.  The exception to this rule is
4618 that weak function definitions, functions with the \fBlong-call\fR
4619 attribute or the \fBsection\fR attribute, and functions that are within
4620 the scope of a \fB#pragma long_calls\fR directive, will always be
4621 turned into long calls.
4623 This feature is not enabled by default.  Specifying
4624 \&\fB\*(--no-long-calls\fR will restore the default behaviour, as will
4625 placing the function calls within the scope of a \fB#pragma
4626 long_calls_off\fR directive.  Note these switches have no effect on how
4627 the compiler generates code to handle function calls via function
4628 pointers.  
4629 .Ip "\fB\-mnop-fun-dllimport\fR" 4
4630 .IX Item "-mnop-fun-dllimport"
4631 Disable the support for the \fIdllimport\fR attribute.
4632 .Ip "\fB\-msingle-pic-base\fR" 4
4633 .IX Item "-msingle-pic-base"
4634 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
4635 loading it in the prologue for each function.  The run-time system is
4636 responsible for initialising this register with an appropriate value
4637 before execution begins.
4638 .Ip "\fB\-mpic-register=<reg>\fR" 4
4639 .IX Item "-mpic-register=<reg>"
4640 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10
4641 unless stack-checking is enabled, when R9 is used.
4643 .I "Thumb Options"
4644 .IX Subsection "Thumb Options"
4645 .Ip "\fB\-mthumb-interwork\fR" 4
4646 .IX Item "-mthumb-interwork"
4647 Generate code which supports calling between the \s-1THUMB\s0 and \s-1ARM\s0
4648 instruction sets.  Without this option the two instruction sets cannot
4649 be reliably used inside one program.  The default is
4650 \&\fB\-mno-thumb-interwork\fR, since slightly smaller code is generated
4651 with this option.
4652 .Ip "\fB\-mtpcs-frame\fR" 4
4653 .IX Item "-mtpcs-frame"
4654 Generate a stack frame that is compliant with the Thumb Procedure Call
4655 Standard for all non-leaf functions.  (A leaf function is one that does
4656 not call any other functions).  The default is \fB\-mno-apcs-frame\fR. 
4657 .Ip "\fB\-mtpcs-leaf-frame\fR" 4
4658 .IX Item "-mtpcs-leaf-frame"
4659 Generate a stack frame that is compliant with the Thumb Procedure Call
4660 Standard for all leaf functions.  (A leaf function is one that does
4661 not call any other functions).  The default is \fB\-mno-apcs-leaf-frame\fR. 
4662 .Ip "\fB\-mlittle-endian\fR" 4
4663 .IX Item "-mlittle-endian"
4664 Generate code for a processor running in little-endian mode.  This is
4665 the default for all standard configurations.
4666 .Ip "\fB\-mbig-endian\fR" 4
4667 .IX Item "-mbig-endian"
4668 Generate code for a processor running in big-endian mode.
4669 .Ip "\fB\-mstructure-size-boundary=<n>\fR" 4
4670 .IX Item "-mstructure-size-boundary=<n>"
4671 The size of all structures and unions will be rounded up to a multiple
4672 of the number of bits set by this option.  Permissible values are 8 and
4673 32.  The default value varies for different toolchains.  For the \s-1COFF\s0
4674 targeted toolchain the default value is 8.  Specifying the larger number
4675 can produced faster, more efficient code, but can also increase the size
4676 of the program.  The two values are potentially incompatible.  Code
4677 compiled with one value cannot necessarily expect to work with code or
4678 libraries compiled with the other value, if they exchange information
4679 using structures or unions.  Programmers are encouraged to use the 32
4680 value as future versions of the toolchain may default to this value.
4681 .Ip "\fB\-mnop-fun-dllimport\fR" 4
4682 .IX Item "-mnop-fun-dllimport"
4683 Disable the support for the \fIdllimport\fR attribute.
4684 .Ip "\fB\-mcallee-super-interworking\fR" 4
4685 .IX Item "-mcallee-super-interworking"
4686 Gives all externally visible functions in the file being compiled an \s-1ARM\s0
4687 instruction set header which switches to Thumb mode before executing the
4688 rest of the function.  This allows these functions to be called from
4689 non-interworking code.
4690 .Ip "\fB\-mcaller-super-interworking\fR" 4
4691 .IX Item "-mcaller-super-interworking"
4692 Allows calls via function pointers (including virtual functions) to
4693 execute correctly regardless of whether the target code has been
4694 compiled for interworking or not.  There is a small overhead in the cost
4695 of executing a function pointer if this option is enabled.
4696 .Ip "\fB\-msingle-pic-base\fR" 4
4697 .IX Item "-msingle-pic-base"
4698 Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
4699 loading it in the prologue for each function.  The run-time system is
4700 responsible for initialising this register with an appropriate value
4701 before execution begins.
4702 .Ip "\fB\-mpic-register=<reg>\fR" 4
4703 .IX Item "-mpic-register=<reg>"
4704 Specify the register to be used for \s-1PIC\s0 addressing.  The default is R10.
4706 .I "\s-1MN10200\s0 Options"
4707 .IX Subsection "MN10200 Options"
4709 These \fB\-m\fR options are defined for Matsushita \s-1MN10200\s0 architectures:
4710 .Ip "\fB\-mrelax\fR" 4
4711 .IX Item "-mrelax"
4712 Indicate to the linker that it should perform a relaxation optimization pass
4713 to shorten branches, calls and absolute memory addresses.  This option only
4714 has an effect when used on the command line for the final link step.
4716 This option makes symbolic debugging impossible. 
4718 .I "\s-1MN10300\s0 Options"
4719 .IX Subsection "MN10300 Options"
4721 These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
4722 .Ip "\fB\-mmult-bug\fR" 4
4723 .IX Item "-mmult-bug"
4724 Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
4725 processors.  This is the default.
4726 .Ip "\fB\-mno-mult-bug\fR" 4
4727 .IX Item "-mno-mult-bug"
4728 Do not generate code to avoid bugs in the multiply instructions for the
4729 \&\s-1MN10300\s0 processors.
4730 .Ip "\fB\-mam33\fR" 4
4731 .IX Item "-mam33"
4732 Generate code which uses features specific to the \s-1AM33\s0 processor.
4733 .Ip "\fB\-mno-am33\fR" 4
4734 .IX Item "-mno-am33"
4735 Do not generate code which uses features specific to the \s-1AM33\s0 processor.  This
4736 is the default.
4737 .Ip "\fB\-mrelax\fR" 4
4738 .IX Item "-mrelax"
4739 Indicate to the linker that it should perform a relaxation optimization pass
4740 to shorten branches, calls and absolute memory addresses.  This option only
4741 has an effect when used on the command line for the final link step.
4743 This option makes symbolic debugging impossible. 
4745 .I "M32R/D Options"
4746 .IX Subsection "M32R/D Options"
4748 These \fB\-m\fR options are defined for Mitsubishi M32R/D architectures:
4749 .Ip "\fB\-mcode-model=small\fR" 4
4750 .IX Item "-mcode-model=small"
4751 Assume all objects live in the lower 16MB of memory (so that their addresses
4752 can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
4753 are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
4754 This is the default.
4756 The addressability of a particular object can be set with the
4757 \&\f(CW\*(C`model\*(C'\fR attribute.
4758 .Ip "\fB\-mcode-model=medium\fR" 4
4759 .IX Item "-mcode-model=medium"
4760 Assume objects may be anywhere in the 32 bit address space (the compiler
4761 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
4762 assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
4763 .Ip "\fB\-mcode-model=large\fR" 4
4764 .IX Item "-mcode-model=large"
4765 Assume objects may be anywhere in the 32 bit address space (the compiler
4766 will generate \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
4767 assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
4768 (the compiler will generate the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
4769 instruction sequence).
4770 .Ip "\fB\-msdata=none\fR" 4
4771 .IX Item "-msdata=none"
4772 Disable use of the small data area.  Variables will be put into
4773 one of \fB.data\fR, \fBbss\fR, or \fB.rodata\fR (unless the
4774 \&\f(CW\*(C`section\*(C'\fR attribute has been specified).
4775 This is the default.
4777 The small data area consists of sections \fB.sdata\fR and \fB.sbss\fR.
4778 Objects may be explicitly put in the small data area with the
4779 \&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
4780 .Ip "\fB\-msdata=sdata\fR" 4
4781 .IX Item "-msdata=sdata"
4782 Put small global and static data in the small data area, but do not
4783 generate special code to reference them.
4784 .Ip "\fB\-msdata=use\fR" 4
4785 .IX Item "-msdata=use"
4786 Put small global and static data in the small data area, and generate
4787 special instructions to reference them.
4788 .Ip "\fB\-G\fR \fInum\fR" 4
4789 .IX Item "-G num"
4790 Put global and static objects less than or equal to \fInum\fR bytes
4791 into the small data or bss sections instead of the normal data or bss
4792 sections.  The default value of \fInum\fR is 8.
4793 The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
4794 for this option to have any effect.
4796 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
4797 Compiling with different values of \fInum\fR may or may not work; if it
4798 doesn't the linker will give an error message \- incorrect code will not be
4799 generated.
4801 .I "M88K Options"
4802 .IX Subsection "M88K Options"
4804 These \fB\-m\fR options are defined for Motorola 88k architectures:
4805 .Ip "\fB\-m88000\fR" 4
4806 .IX Item "-m88000"
4807 Generate code that works well on both the m88100 and the
4808 m88110.
4809 .Ip "\fB\-m88100\fR" 4
4810 .IX Item "-m88100"
4811 Generate code that works best for the m88100, but that also
4812 runs on the m88110.
4813 .Ip "\fB\-m88110\fR" 4
4814 .IX Item "-m88110"
4815 Generate code that works best for the m88110, and may not run
4816 on the m88100.
4817 .Ip "\fB\-mbig-pic\fR" 4
4818 .IX Item "-mbig-pic"
4819 Obsolete option to be removed from the next revision.
4820 Use \fB\-fPIC\fR.
4821 .Ip "\fB\-midentify-revision\fR" 4
4822 .IX Item "-midentify-revision"
4823 Include an \f(CW\*(C`ident\*(C'\fR directive in the assembler output recording the
4824 source file name, compiler name and version, timestamp, and compilation
4825 flags used.
4826 .Ip "\fB\-mno-underscores\fR" 4
4827 .IX Item "-mno-underscores"
4828 In assembler output, emit symbol names without adding an underscore
4829 character at the beginning of each name.  The default is to use an
4830 underscore as prefix on each name.
4831 .Ip "\fB\-mocs-debug-info\fR" 4
4832 .IX Item "-mocs-debug-info"
4833 .PD 0
4834 .Ip "\fB\-mno-ocs-debug-info\fR" 4
4835 .IX Item "-mno-ocs-debug-info"
4837 Include (or omit) additional debugging information (about registers used
4838 in each stack frame) as specified in the 88open Object Compatibility
4839 Standard, ``\s-1OCS\s0''.  This extra information allows debugging of code that
4840 has had the frame pointer eliminated.  The default for \s-1DG/UX\s0, SVr4, and
4841 Delta 88 SVr3.2 is to include this information; other 88k configurations
4842 omit this information by default.
4843 .Ip "\fB\-mocs-frame-position\fR" 4
4844 .IX Item "-mocs-frame-position"
4845 When emitting \s-1COFF\s0 debugging information for automatic variables and
4846 parameters stored on the stack, use the offset from the canonical frame
4847 address, which is the stack pointer (register 31) on entry to the
4848 function.  The \s-1DG/UX\s0, SVr4, Delta88 SVr3.2, and \s-1BCS\s0 configurations use
4849 \&\fB\-mocs-frame-position\fR; other 88k configurations have the default
4850 \&\fB\-mno-ocs-frame-position\fR.
4851 .Ip "\fB\-mno-ocs-frame-position\fR" 4
4852 .IX Item "-mno-ocs-frame-position"
4853 When emitting \s-1COFF\s0 debugging information for automatic variables and
4854 parameters stored on the stack, use the offset from the frame pointer
4855 register (register 30).  When this option is in effect, the frame
4856 pointer is not eliminated when debugging information is selected by the
4857 \&\-g switch.
4858 .Ip "\fB\-moptimize-arg-area\fR" 4
4859 .IX Item "-moptimize-arg-area"
4860 .PD 0
4861 .Ip "\fB\-mno-optimize-arg-area\fR" 4
4862 .IX Item "-mno-optimize-arg-area"
4864 Control how function arguments are stored in stack frames.
4865 \&\fB\-moptimize-arg-area\fR saves space by optimizing them, but this
4866 conflicts with the 88open specifications.  The opposite alternative,
4867 \&\fB\-mno-optimize-arg-area\fR, agrees with 88open standards.  By default
4868 \&\s-1GCC\s0 does not optimize the argument area.
4869 .Ip "\fB\-mshort-data-\fR\fInum\fR" 4
4870 .IX Item "-mshort-data-num"
4871 Generate smaller data references by making them relative to \f(CW\*(C`r0\*(C'\fR,
4872 which allows loading a value using a single instruction (rather than the
4873 usual two).  You control which data references are affected by
4874 specifying \fInum\fR with this option.  For example, if you specify
4875 \&\fB\-mshort-data-512\fR, then the data references affected are those
4876 involving displacements of less than 512 bytes.
4877 \&\fB\-mshort-data-\fR\fInum\fR is not effective for \fInum\fR greater
4878 than 64k.
4879 .Ip "\fB\-mserialize-volatile\fR" 4
4880 .IX Item "-mserialize-volatile"
4881 .PD 0
4882 .Ip "\fB\-mno-serialize-volatile\fR" 4
4883 .IX Item "-mno-serialize-volatile"
4885 Do, or don't, generate code to guarantee sequential consistency
4886 of volatile memory references.  By default, consistency is
4887 guaranteed.
4889 The order of memory references made by the \s-1MC88110\s0 processor does
4890 not always match the order of the instructions requesting those
4891 references.  In particular, a load instruction may execute before
4892 a preceding store instruction.  Such reordering violates
4893 sequential consistency of volatile memory references, when there
4894 are multiple processors.   When consistency must be guaranteed,
4895 \&\s-1GNU\s0 C generates special instructions, as needed, to force
4896 execution in the proper order.
4898 The \s-1MC88100\s0 processor does not reorder memory references and so
4899 always provides sequential consistency.  However, by default, \s-1GNU\s0
4900 C generates the special instructions to guarantee consistency
4901 even when you use \fB\-m88100\fR, so that the code may be run on an
4902 \&\s-1MC88110\s0 processor.  If you intend to run your code only on the
4903 \&\s-1MC88100\s0 processor, you may use \fB\-mno-serialize-volatile\fR.
4905 The extra code generated to guarantee consistency may affect the
4906 performance of your application.  If you know that you can safely
4907 forgo this guarantee, you may use \fB\-mno-serialize-volatile\fR.
4908 .Ip "\fB\-msvr4\fR" 4
4909 .IX Item "-msvr4"
4910 .PD 0
4911 .Ip "\fB\-msvr3\fR" 4
4912 .IX Item "-msvr3"
4914 Turn on (\fB\-msvr4\fR) or off (\fB\-msvr3\fR) compiler extensions
4915 related to System V release 4 (SVr4).  This controls the following:
4916 .RS 4
4917 .Ip "1." 4
4918 Which variant of the assembler syntax to emit.
4919 .Ip "2." 4
4920 \&\fB\-msvr4\fR makes the C preprocessor recognize \fB#pragma weak\fR
4921 that is used on System V release 4.
4922 .Ip "3." 4
4923 \&\fB\-msvr4\fR makes \s-1GCC\s0 issue additional declaration directives used in
4924 SVr4.
4926 .RS 4
4928 \&\fB\-msvr4\fR is the default for the m88k-motorola-sysv4 and
4929 m88k-dg-dgux m88k configurations. \fB\-msvr3\fR is the default for all
4930 other m88k configurations.
4932 .Ip "\fB\-mversion-03.00\fR" 4
4933 .IX Item "-mversion-03.00"
4934 This option is obsolete, and is ignored.
4935 .Ip "\fB\-mno-check-zero-division\fR" 4
4936 .IX Item "-mno-check-zero-division"
4937 .PD 0
4938 .Ip "\fB\-mcheck-zero-division\fR" 4
4939 .IX Item "-mcheck-zero-division"
4941 Do, or don't, generate code to guarantee that integer division by
4942 zero will be detected.  By default, detection is guaranteed.
4944 Some models of the \s-1MC88100\s0 processor fail to trap upon integer
4945 division by zero under certain conditions.  By default, when
4946 compiling code that might be run on such a processor, \s-1GNU\s0 C
4947 generates code that explicitly checks for zero-valued divisors
4948 and traps with exception number 503 when one is detected.  Use of
4949 mno-check-zero-division suppresses such checking for code
4950 generated to run on an \s-1MC88100\s0 processor.
4952 \&\s-1GNU\s0 C assumes that the \s-1MC88110\s0 processor correctly detects all
4953 instances of integer division by zero.  When \fB\-m88110\fR is
4954 specified, both \fB\-mcheck-zero-division\fR and
4955 \&\fB\-mno-check-zero-division\fR are ignored, and no explicit checks for
4956 zero-valued divisors are generated.
4957 .Ip "\fB\-muse-div-instruction\fR" 4
4958 .IX Item "-muse-div-instruction"
4959 Use the div instruction for signed integer division on the
4960 \&\s-1MC88100\s0 processor.  By default, the div instruction is not used.
4962 On the \s-1MC88100\s0 processor the signed integer division instruction
4963 div) traps to the operating system on a negative operand.  The
4964 operating system transparently completes the operation, but at a
4965 large cost in execution time.  By default, when compiling code
4966 that might be run on an \s-1MC88100\s0 processor, \s-1GNU\s0 C emulates signed
4967 integer division using the unsigned integer division instruction
4968 divu), thereby avoiding the large penalty of a trap to the
4969 operating system.  Such emulation has its own, smaller, execution
4970 cost in both time and space.  To the extent that your code's
4971 important signed integer division operations are performed on two
4972 nonnegative operands, it may be desirable to use the div
4973 instruction directly.
4975 On the \s-1MC88110\s0 processor the div instruction (also known as the
4976 divs instruction) processes negative operands without trapping to
4977 the operating system.  When \fB\-m88110\fR is specified,
4978 \&\fB\-muse-div-instruction\fR is ignored, and the div instruction is used
4979 for signed integer division.
4981 Note that the result of dividing \s-1INT_MIN\s0 by \-1 is undefined.  In
4982 particular, the behavior of such a division with and without
4983 \&\fB\-muse-div-instruction\fR  may differ.
4984 .Ip "\fB\-mtrap-large-shift\fR" 4
4985 .IX Item "-mtrap-large-shift"
4986 .PD 0
4987 .Ip "\fB\-mhandle-large-shift\fR" 4
4988 .IX Item "-mhandle-large-shift"
4990 Include code to detect bit-shifts of more than 31 bits; respectively,
4991 trap such shifts or emit code to handle them properly.  By default \s-1GCC\s0
4992 makes no special provision for large bit shifts.
4993 .Ip "\fB\-mwarn-passed-structs\fR" 4
4994 .IX Item "-mwarn-passed-structs"
4995 Warn when a function passes a struct as an argument or result.
4996 Structure-passing conventions have changed during the evolution of the C
4997 language, and are often the source of portability problems.  By default,
4998 \&\s-1GCC\s0 issues no such warning.
5000 .I "\s-1IBM\s0 \s-1RS/6000\s0 and PowerPC Options"
5001 .IX Subsection "IBM RS/6000 and PowerPC Options"
5003 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RS/6000\s0 and PowerPC:
5004 .Ip "\fB\-mpower\fR" 4
5005 .IX Item "-mpower"
5006 .PD 0
5007 .Ip "\fB\-mno-power\fR" 4
5008 .IX Item "-mno-power"
5009 .Ip "\fB\-mpower2\fR" 4
5010 .IX Item "-mpower2"
5011 .Ip "\fB\-mno-power2\fR" 4
5012 .IX Item "-mno-power2"
5013 .Ip "\fB\-mpowerpc\fR" 4
5014 .IX Item "-mpowerpc"
5015 .Ip "\fB\-mno-powerpc\fR" 4
5016 .IX Item "-mno-powerpc"
5017 .Ip "\fB\-mpowerpc-gpopt\fR" 4
5018 .IX Item "-mpowerpc-gpopt"
5019 .Ip "\fB\-mno-powerpc-gpopt\fR" 4
5020 .IX Item "-mno-powerpc-gpopt"
5021 .Ip "\fB\-mpowerpc-gfxopt\fR" 4
5022 .IX Item "-mpowerpc-gfxopt"
5023 .Ip "\fB\-mno-powerpc-gfxopt\fR" 4
5024 .IX Item "-mno-powerpc-gfxopt"
5025 .Ip "\fB\-mpowerpc64\fR" 4
5026 .IX Item "-mpowerpc64"
5027 .Ip "\fB\-mno-powerpc64\fR" 4
5028 .IX Item "-mno-powerpc64"
5030 \&\s-1GCC\s0 supports two related instruction set architectures for the
5031 \&\s-1RS/6000\s0 and PowerPC.  The \fI\s-1POWER\s0\fR instruction set are those
5032 instructions supported by the \fBrios\fR chip set used in the original
5033 \&\s-1RS/6000\s0 systems and the \fIPowerPC\fR instruction set is the
5034 architecture of the Motorola MPC5xx, MPC6xx, MPC8xx microprocessors, and
5035 the \s-1IBM\s0 4xx microprocessors.
5037 Neither architecture is a subset of the other.  However there is a
5038 large common subset of instructions supported by both.  An \s-1MQ\s0
5039 register is included in processors supporting the \s-1POWER\s0 architecture.
5041 You use these options to specify which instructions are available on the
5042 processor you are using.  The default value of these options is
5043 determined when configuring \s-1GCC\s0.  Specifying the
5044 \&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
5045 options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
5046 rather than the options listed above.
5048 The \fB\-mpower\fR option allows \s-1GCC\s0 to generate instructions that
5049 are found only in the \s-1POWER\s0 architecture and to use the \s-1MQ\s0 register.
5050 Specifying \fB\-mpower2\fR implies \fB\-power\fR and also allows \s-1GCC\s0
5051 to generate instructions that are present in the \s-1POWER2\s0 architecture but
5052 not the original \s-1POWER\s0 architecture.
5054 The \fB\-mpowerpc\fR option allows \s-1GCC\s0 to generate instructions that
5055 are found only in the 32\-bit subset of the PowerPC architecture.
5056 Specifying \fB\-mpowerpc-gpopt\fR implies \fB\-mpowerpc\fR and also allows
5057 \&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
5058 General Purpose group, including floating-point square root.  Specifying
5059 \&\fB\-mpowerpc-gfxopt\fR implies \fB\-mpowerpc\fR and also allows \s-1GCC\s0 to
5060 use the optional PowerPC architecture instructions in the Graphics
5061 group, including floating-point select.
5063 The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
5064 64\-bit instructions that are found in the full PowerPC64 architecture
5065 and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
5066 \&\fB\-mno-powerpc64\fR.
5068 If you specify both \fB\-mno-power\fR and \fB\-mno-powerpc\fR, \s-1GCC\s0
5069 will use only the instructions in the common subset of both
5070 architectures plus some special \s-1AIX\s0 common-mode calls, and will not use
5071 the \s-1MQ\s0 register.  Specifying both \fB\-mpower\fR and \fB\-mpowerpc\fR
5072 permits \s-1GCC\s0 to use any instruction from either architecture and to
5073 allow use of the \s-1MQ\s0 register; specify this for the Motorola \s-1MPC601\s0.
5074 .Ip "\fB\-mnew-mnemonics\fR" 4
5075 .IX Item "-mnew-mnemonics"
5076 .PD 0
5077 .Ip "\fB\-mold-mnemonics\fR" 4
5078 .IX Item "-mold-mnemonics"
5080 Select which mnemonics to use in the generated assembler code.
5081 \&\fB\-mnew-mnemonics\fR requests output that uses the assembler mnemonics
5082 defined for the PowerPC architecture, while \fB\-mold-mnemonics\fR
5083 requests the assembler mnemonics defined for the \s-1POWER\s0 architecture.
5084 Instructions defined in only one architecture have only one mnemonic;
5085 \&\s-1GCC\s0 uses that mnemonic irrespective of which of these options is
5086 specified.
5088 \&\s-1GCC\s0 defaults to the mnemonics appropriate for the architecture in
5089 use.  Specifying \fB\-mcpu=\fR\fIcpu_type\fR sometimes overrides the
5090 value of these option.  Unless you are building a cross-compiler, you
5091 should normally not specify either \fB\-mnew-mnemonics\fR or
5092 \&\fB\-mold-mnemonics\fR, but should instead accept the default.
5093 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
5094 .IX Item "-mcpu=cpu_type"
5095 Set architecture type, register usage, choice of mnemonics, and
5096 instruction scheduling parameters for machine type \fIcpu_type\fR.
5097 Supported values for \fIcpu_type\fR are \fBrios\fR, \fBrios1\fR,
5098 \&\fBrsc\fR, \fBrios2\fR, \fBrs64a\fR, \fB601\fR, \fB602\fR,
5099 \&\fB603\fR, \fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR,
5100 \&\fB630\fR, \fB740\fR, \fB750\fR, \fBpower\fR, \fBpower2\fR,
5101 \&\fBpowerpc\fR, \fB403\fR, \fB505\fR, \fB801\fR, \fB821\fR,
5102 \&\fB823\fR, and \fB860\fR and \fBcommon\fR.  \fB\-mcpu=power\fR,
5103 \&\fB\-mcpu=power2\fR, \fB\-mcpu=powerpc\fR, and \fB\-mcpu=powerpc64\fR
5104 specify generic \s-1POWER\s0, \s-1POWER2\s0, pure 32\-bit PowerPC (i.e., not \s-1MPC601\s0),
5105 and 64\-bit PowerPC architecture machine types, with an appropriate,
5106 generic processor model assumed for scheduling purposes.
5108 Specifying any of the following options: 
5109 \&\fB\-mcpu=rios1\fR, \fB\-mcpu=rios2\fR, \fB\-mcpu=rsc\fR,
5110 \&\fB\-mcpu=power\fR, or \fB\-mcpu=power2\fR  
5111 enables the \fB\-mpower\fR option and disables the \fB\-mpowerpc\fR option; 
5112 \&\fB\-mcpu=601\fR enables both the \fB\-mpower\fR and \fB\-mpowerpc\fR options.
5113 All of \fB\-mcpu=rs64a\fR, \fB\-mcpu=602\fR, \fB\-mcpu=603\fR,
5114 \&\fB\-mcpu=603e\fR, \fB\-mcpu=604\fR, \fB\-mcpu=620\fR, \fB\-mcpu=630\fR,
5115 \&\fB\-mcpu=740\fR, and \fB\-mcpu=750\fR
5116 enable the \fB\-mpowerpc\fR option and disable the \fB\-mpower\fR option.  
5117 Exactly similarly, all of \fB\-mcpu=403\fR,
5118 \&\fB\-mcpu=505\fR, \fB\-mcpu=821\fR, \fB\-mcpu=860\fR and \fB\-mcpu=powerpc\fR 
5119 enable the \fB\-mpowerpc\fR option and disable the \fB\-mpower\fR option.
5120 \&\fB\-mcpu=common\fR disables both the 
5121 \&\fB\-mpower\fR and \fB\-mpowerpc\fR options.
5123 \&\s-1AIX\s0 versions 4 or greater selects \fB\-mcpu=common\fR by default, so
5124 that code will operate on all members of the \s-1RS/6000\s0 \s-1POWER\s0 and PowerPC
5125 families.  In that case, \s-1GCC\s0 will use only the instructions in the
5126 common subset of both architectures plus some special \s-1AIX\s0 common-mode
5127 calls, and will not use the \s-1MQ\s0 register.  \s-1GCC\s0 assumes a generic
5128 processor model for scheduling purposes.
5130 Specifying any of the options \fB\-mcpu=rios1\fR, \fB\-mcpu=rios2\fR,
5131 \&\fB\-mcpu=rsc\fR, \fB\-mcpu=power\fR, or \fB\-mcpu=power2\fR also
5132 disables the \fBnew-mnemonics\fR option.  Specifying \fB\-mcpu=601\fR,
5133 \&\fB\-mcpu=602\fR, \fB\-mcpu=603\fR, \fB\-mcpu=603e\fR, \fB\-mcpu=604\fR,
5134 \&\fB\-mcpu=620\fR, \fB\-mcpu=630\fR, \fB\-mcpu=403\fR, \fB\-mcpu=505\fR,
5135 \&\fB\-mcpu=821\fR, \fB\-mcpu=860\fR or \fB\-mcpu=powerpc\fR also enables
5136 the \fBnew-mnemonics\fR option.
5138 Specifying \fB\-mcpu=403\fR, \fB\-mcpu=821\fR, or \fB\-mcpu=860\fR also
5139 enables the \fB\-msoft-float\fR option.
5140 .Ip "\fB\-mtune=\fR\fIcpu_type\fR" 4
5141 .IX Item "-mtune=cpu_type"
5142 Set the instruction scheduling parameters for machine type
5143 \&\fIcpu_type\fR, but do not set the architecture type, register usage,
5144 choice of mnemonics like \fB\-mcpu=\fR\fIcpu_type\fR would.  The same
5145 values for \fIcpu_type\fR are used for \fB\-mtune=\fR\fIcpu_type\fR as
5146 for \fB\-mcpu=\fR\fIcpu_type\fR.  The \fB\-mtune=\fR\fIcpu_type\fR
5147 option overrides the \fB\-mcpu=\fR\fIcpu_type\fR option in terms of
5148 instruction scheduling parameters.
5149 .Ip "\fB\-mfull-toc\fR" 4
5150 .IX Item "-mfull-toc"
5151 .PD 0
5152 .Ip "\fB\-mno-fp-in-toc\fR" 4
5153 .IX Item "-mno-fp-in-toc"
5154 .Ip "\fB\-mno-sum-in-toc\fR" 4
5155 .IX Item "-mno-sum-in-toc"
5156 .Ip "\fB\-mminimal-toc\fR" 4
5157 .IX Item "-mminimal-toc"
5159 Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
5160 every executable file.  The \fB\-mfull-toc\fR option is selected by
5161 default.  In that case, \s-1GCC\s0 will allocate at least one \s-1TOC\s0 entry for
5162 each unique non-automatic variable reference in your program.  \s-1GCC\s0
5163 will also place floating-point constants in the \s-1TOC\s0.  However, only
5164 16,384 entries are available in the \s-1TOC\s0.
5166 If you receive a linker error message that saying you have overflowed
5167 the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
5168 with the \fB\-mno-fp-in-toc\fR and \fB\-mno-sum-in-toc\fR options.
5169 \&\fB\-mno-fp-in-toc\fR prevents \s-1GCC\s0 from putting floating-point
5170 constants in the \s-1TOC\s0 and \fB\-mno-sum-in-toc\fR forces \s-1GCC\s0 to
5171 generate code to calculate the sum of an address and a constant at
5172 run-time instead of putting that sum into the \s-1TOC\s0.  You may specify one
5173 or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
5174 slower and larger code at the expense of conserving \s-1TOC\s0 space.
5176 If you still run out of space in the \s-1TOC\s0 even when you specify both of
5177 these options, specify \fB\-mminimal-toc\fR instead.  This option causes
5178 \&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
5179 option, \s-1GCC\s0 will produce code that is slower and larger but which
5180 uses extremely little \s-1TOC\s0 space.  You may wish to use this option
5181 only on files that contain less frequently executed code. 
5182 .Ip "\fB\-maix64\fR" 4
5183 .IX Item "-maix64"
5184 .PD 0
5185 .Ip "\fB\-maix32\fR" 4
5186 .IX Item "-maix32"
5188 Enable 64\-bit \s-1AIX\s0 \s-1ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
5189 \&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
5190 Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR and
5191 \&\fB\-mpowerpc\fR, while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
5192 implies \fB\-mno-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
5193 .Ip "\fB\-mxl-call\fR" 4
5194 .IX Item "-mxl-call"
5195 .PD 0
5196 .Ip "\fB\-mno-xl-call\fR" 4
5197 .IX Item "-mno-xl-call"
5199 On \s-1AIX\s0, pass floating-point arguments to prototyped functions beyond the
5200 register save area (\s-1RSA\s0) on the stack in addition to argument FPRs.  The
5201 \&\s-1AIX\s0 calling convention was extended but not initially documented to
5202 handle an obscure K&R C case of calling a function that takes the
5203 address of its arguments with fewer arguments than declared.  \s-1AIX\s0 \s-1XL\s0
5204 compilers access floating point arguments which do not fit in the
5205 \&\s-1RSA\s0 from the stack when a subroutine is compiled without
5206 optimization.  Because always storing floating-point arguments on the
5207 stack is inefficient and rarely needed, this option is not enabled by
5208 default and only is necessary when calling subroutines compiled by \s-1AIX\s0
5209 \&\s-1XL\s0 compilers without optimization.
5210 .Ip "\fB\-mthreads\fR" 4
5211 .IX Item "-mthreads"
5212 Support \fI\s-1AIX\s0 Threads\fR.  Link an application written to use
5213 \&\fIpthreads\fR with special libraries and startup code to enable the
5214 application to run.
5215 .Ip "\fB\-mpe\fR" 4
5216 .IX Item "-mpe"
5217 Support \fI\s-1IBM\s0 \s-1RS/6000\s0 \s-1SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
5218 application written to use message passing with special startup code to
5219 enable the application to run.  The system must have \s-1PE\s0 installed in the
5220 standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
5221 must be overridden with the \fB\-specs=\fR option to specify the
5222 appropriate directory location.  The Parallel Environment does not
5223 support threads, so the \fB\-mpe\fR option and the \fB\-mthreads\fR
5224 option are incompatible.
5225 .Ip "\fB\-msoft-float\fR" 4
5226 .IX Item "-msoft-float"
5227 .PD 0
5228 .Ip "\fB\-mhard-float\fR" 4
5229 .IX Item "-mhard-float"
5231 Generate code that does not use (uses) the floating-point register set.
5232 Software floating point emulation is provided if you use the
5233 \&\fB\-msoft-float\fR option, and pass the option to \s-1GCC\s0 when linking.
5234 .Ip "\fB\-mmultiple\fR" 4
5235 .IX Item "-mmultiple"
5236 .PD 0
5237 .Ip "\fB\-mno-multiple\fR" 4
5238 .IX Item "-mno-multiple"
5240 Generate code that uses (does not use) the load multiple word
5241 instructions and the store multiple word instructions.  These
5242 instructions are generated by default on \s-1POWER\s0 systems, and not
5243 generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little
5244 endian PowerPC systems, since those instructions do not work when the
5245 processor is in little endian mode.  The exceptions are \s-1PPC740\s0 and
5246 \&\s-1PPC750\s0 which permit the instructions usage in little endian mode.
5247 .Ip "\fB\-mstring\fR" 4
5248 .IX Item "-mstring"
5249 .PD 0
5250 .Ip "\fB\-mno-string\fR" 4
5251 .IX Item "-mno-string"
5253 Generate code that uses (does not use) the load string instructions
5254 and the store string word instructions to save multiple registers and
5255 do small block moves.  These instructions are generated by default on
5256 \&\s-1POWER\s0 systems, and not generated on PowerPC systems.  Do not use
5257 \&\fB\-mstring\fR on little endian PowerPC systems, since those
5258 instructions do not work when the processor is in little endian mode.
5259 The exceptions are \s-1PPC740\s0 and \s-1PPC750\s0 which permit the instructions
5260 usage in little endian mode.
5261 .Ip "\fB\-mupdate\fR" 4
5262 .IX Item "-mupdate"
5263 .PD 0
5264 .Ip "\fB\-mno-update\fR" 4
5265 .IX Item "-mno-update"
5267 Generate code that uses (does not use) the load or store instructions
5268 that update the base register to the address of the calculated memory
5269 location.  These instructions are generated by default.  If you use
5270 \&\fB\-mno-update\fR, there is a small window between the time that the
5271 stack pointer is updated and the address of the previous frame is
5272 stored, which means code that walks the stack frame across interrupts or
5273 signals may get corrupted data.
5274 .Ip "\fB\-mfused-madd\fR" 4
5275 .IX Item "-mfused-madd"
5276 .PD 0
5277 .Ip "\fB\-mno-fused-madd\fR" 4
5278 .IX Item "-mno-fused-madd"
5280 Generate code that uses (does not use) the floating point multiply and
5281 accumulate instructions.  These instructions are generated by default if
5282 hardware floating is used.
5283 .Ip "\fB\-mno-bit-align\fR" 4
5284 .IX Item "-mno-bit-align"
5285 .PD 0
5286 .Ip "\fB\-mbit-align\fR" 4
5287 .IX Item "-mbit-align"
5289 On System V.4 and embedded PowerPC systems do not (do) force structures
5290 and unions that contain bit fields to be aligned to the base type of the
5291 bit field.
5293 For example, by default a structure containing nothing but 8
5294 \&\f(CW\*(C`unsigned\*(C'\fR bitfields of length 1 would be aligned to a 4 byte
5295 boundary and have a size of 4 bytes.  By using \fB\-mno-bit-align\fR,
5296 the structure would be aligned to a 1 byte boundary and be one byte in
5297 size.
5298 .Ip "\fB\-mno-strict-align\fR" 4
5299 .IX Item "-mno-strict-align"
5300 .PD 0
5301 .Ip "\fB\-mstrict-align\fR" 4
5302 .IX Item "-mstrict-align"
5304 On System V.4 and embedded PowerPC systems do not (do) assume that
5305 unaligned memory references will be handled by the system.
5306 .Ip "\fB\-mrelocatable\fR" 4
5307 .IX Item "-mrelocatable"
5308 .PD 0
5309 .Ip "\fB\-mno-relocatable\fR" 4
5310 .IX Item "-mno-relocatable"
5312 On embedded PowerPC systems generate code that allows (does not allow)
5313 the program to be relocated to a different address at runtime.  If you
5314 use \fB\-mrelocatable\fR on any module, all objects linked together must
5315 be compiled with \fB\-mrelocatable\fR or \fB\-mrelocatable-lib\fR.
5316 .Ip "\fB\-mrelocatable-lib\fR" 4
5317 .IX Item "-mrelocatable-lib"
5318 .PD 0
5319 .Ip "\fB\-mno-relocatable-lib\fR" 4
5320 .IX Item "-mno-relocatable-lib"
5322 On embedded PowerPC systems generate code that allows (does not allow)
5323 the program to be relocated to a different address at runtime.  Modules
5324 compiled with \fB\-mrelocatable-lib\fR can be linked with either modules
5325 compiled without \fB\-mrelocatable\fR and \fB\-mrelocatable-lib\fR or
5326 with modules compiled with the \fB\-mrelocatable\fR options.
5327 .Ip "\fB\-mno-toc\fR" 4
5328 .IX Item "-mno-toc"
5329 .PD 0
5330 .Ip "\fB\-mtoc\fR" 4
5331 .IX Item "-mtoc"
5333 On System V.4 and embedded PowerPC systems do not (do) assume that
5334 register 2 contains a pointer to a global area pointing to the addresses
5335 used in the program.
5336 .Ip "\fB\-mlittle\fR" 4
5337 .IX Item "-mlittle"
5338 .PD 0
5339 .Ip "\fB\-mlittle-endian\fR" 4
5340 .IX Item "-mlittle-endian"
5342 On System V.4 and embedded PowerPC systems compile code for the
5343 processor in little endian mode.  The \fB\-mlittle-endian\fR option is
5344 the same as \fB\-mlittle\fR.
5345 .Ip "\fB\-mbig\fR" 4
5346 .IX Item "-mbig"
5347 .PD 0
5348 .Ip "\fB\-mbig-endian\fR" 4
5349 .IX Item "-mbig-endian"
5351 On System V.4 and embedded PowerPC systems compile code for the
5352 processor in big endian mode.  The \fB\-mbig-endian\fR option is
5353 the same as \fB\-mbig\fR.
5354 .Ip "\fB\-mcall-sysv\fR" 4
5355 .IX Item "-mcall-sysv"
5356 On System V.4 and embedded PowerPC systems compile code using calling
5357 conventions that adheres to the March 1995 draft of the System V
5358 Application Binary Interface, PowerPC processor supplement.  This is the
5359 default unless you configured \s-1GCC\s0 using \fBpowerpc-*\-eabiaix\fR.
5360 .Ip "\fB\-mcall-sysv-eabi\fR" 4
5361 .IX Item "-mcall-sysv-eabi"
5362 Specify both \fB\-mcall-sysv\fR and \fB\-meabi\fR options.
5363 .Ip "\fB\-mcall-sysv-noeabi\fR" 4
5364 .IX Item "-mcall-sysv-noeabi"
5365 Specify both \fB\-mcall-sysv\fR and \fB\-mno-eabi\fR options.
5366 .Ip "\fB\-mcall-aix\fR" 4
5367 .IX Item "-mcall-aix"
5368 On System V.4 and embedded PowerPC systems compile code using calling
5369 conventions that are similar to those used on \s-1AIX\s0.  This is the
5370 default if you configured \s-1GCC\s0 using \fBpowerpc-*\-eabiaix\fR.
5371 .Ip "\fB\-mcall-solaris\fR" 4
5372 .IX Item "-mcall-solaris"
5373 On System V.4 and embedded PowerPC systems compile code for the Solaris
5374 operating system.
5375 .Ip "\fB\-mcall-linux\fR" 4
5376 .IX Item "-mcall-linux"
5377 On System V.4 and embedded PowerPC systems compile code for the
5378 Linux-based \s-1GNU\s0 system.
5379 .Ip "\fB\-mprototype\fR" 4
5380 .IX Item "-mprototype"
5381 .PD 0
5382 .Ip "\fB\-mno-prototype\fR" 4
5383 .IX Item "-mno-prototype"
5385 On System V.4 and embedded PowerPC systems assume that all calls to
5386 variable argument functions are properly prototyped.  Otherwise, the
5387 compiler must insert an instruction before every non prototyped call to
5388 set or clear bit 6 of the condition code register (\fI\s-1CR\s0\fR) to
5389 indicate whether floating point values were passed in the floating point
5390 registers in case the function takes a variable arguments.  With
5391 \&\fB\-mprototype\fR, only calls to prototyped variable argument functions
5392 will set or clear the bit.
5393 .Ip "\fB\-msim\fR" 4
5394 .IX Item "-msim"
5395 On embedded PowerPC systems, assume that the startup module is called
5396 \&\fIsim-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
5397 \&\fIlibc.a\fR.  This is the default for \fBpowerpc-*\-eabisim\fR.
5398 configurations.
5399 .Ip "\fB\-mmvme\fR" 4
5400 .IX Item "-mmvme"
5401 On embedded PowerPC systems, assume that the startup module is called
5402 \&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
5403 \&\fIlibc.a\fR.
5404 .Ip "\fB\-mads\fR" 4
5405 .IX Item "-mads"
5406 On embedded PowerPC systems, assume that the startup module is called
5407 \&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
5408 \&\fIlibc.a\fR.
5409 .Ip "\fB\-myellowknife\fR" 4
5410 .IX Item "-myellowknife"
5411 On embedded PowerPC systems, assume that the startup module is called
5412 \&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
5413 \&\fIlibc.a\fR.
5414 .Ip "\fB\-mvxworks\fR" 4
5415 .IX Item "-mvxworks"
5416 On System V.4 and embedded PowerPC systems, specify that you are
5417 compiling for a VxWorks system.
5418 .Ip "\fB\-memb\fR" 4
5419 .IX Item "-memb"
5420 On embedded PowerPC systems, set the \fI\s-1PPC_EMB\s0\fR bit in the \s-1ELF\s0 flags
5421 header to indicate that \fBeabi\fR extended relocations are used.
5422 .Ip "\fB\-meabi\fR" 4
5423 .IX Item "-meabi"
5424 .PD 0
5425 .Ip "\fB\-mno-eabi\fR" 4
5426 .IX Item "-mno-eabi"
5428 On System V.4 and embedded PowerPC systems do (do not) adhere to the
5429 Embedded Applications Binary Interface (eabi) which is a set of
5430 modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
5431 means that the stack is aligned to an 8 byte boundary, a function
5432 \&\f(CW\*(C`_\|_eabi\*(C'\fR is called to from \f(CW\*(C`main\*(C'\fR to set up the eabi
5433 environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
5434 \&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
5435 \&\fB\-mno-eabi\fR means that the stack is aligned to a 16 byte boundary,
5436 do not call an initialization function from \f(CW\*(C`main\*(C'\fR, and the
5437 \&\fB\-msdata\fR option will only use \f(CW\*(C`r13\*(C'\fR to point to a single
5438 small data area.  The \fB\-meabi\fR option is on by default if you
5439 configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
5440 .Ip "\fB\-msdata=eabi\fR" 4
5441 .IX Item "-msdata=eabi"
5442 On System V.4 and embedded PowerPC systems, put small initialized
5443 \&\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata2\fR section, which
5444 is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
5445 non-\f(CW\*(C`const\*(C'\fR global and static data in the \fB.sdata\fR section,
5446 which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
5447 global and static data in the \fB.sbss\fR section, which is adjacent to
5448 the \fB.sdata\fR section.  The \fB\-msdata=eabi\fR option is
5449 incompatible with the \fB\-mrelocatable\fR option.  The
5450 \&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
5451 .Ip "\fB\-msdata=sysv\fR" 4
5452 .IX Item "-msdata=sysv"
5453 On System V.4 and embedded PowerPC systems, put small global and static
5454 data in the \fB.sdata\fR section, which is pointed to by register
5455 \&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
5456 \&\fB.sbss\fR section, which is adjacent to the \fB.sdata\fR section.
5457 The \fB\-msdata=sysv\fR option is incompatible with the
5458 \&\fB\-mrelocatable\fR option.
5459 .Ip "\fB\-msdata=default\fR" 4
5460 .IX Item "-msdata=default"
5461 .PD 0
5462 .Ip "\fB\-msdata\fR" 4
5463 .IX Item "-msdata"
5465 On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
5466 compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
5467 same as \fB\-msdata=sysv\fR.
5468 .Ip "\fB\-msdata-data\fR" 4
5469 .IX Item "-msdata-data"
5470 On System V.4 and embedded PowerPC systems, put small global and static
5471 data in the \fB.sdata\fR section.  Put small uninitialized global and
5472 static data in the \fB.sbss\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
5473 to address small data however.  This is the default behavior unless
5474 other \fB\-msdata\fR options are used.
5475 .Ip "\fB\-msdata=none\fR" 4
5476 .IX Item "-msdata=none"
5477 .PD 0
5478 .Ip "\fB\-mno-sdata\fR" 4
5479 .IX Item "-mno-sdata"
5481 On embedded PowerPC systems, put all initialized global and static data
5482 in the \fB.data\fR section, and all uninitialized data in the
5483 \&\fB.bss\fR section.
5484 .Ip "\fB\-G\fR \fInum\fR" 4
5485 .IX Item "-G num"
5486 On embedded PowerPC systems, put global and static items less than or
5487 equal to \fInum\fR bytes into the small data or bss sections instead of
5488 the normal data or bss section.  By default, \fInum\fR is 8.  The
5489 \&\fB\-G\fR \fInum\fR switch is also passed to the linker.
5490 All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
5491 .Ip "\fB\-mregnames\fR" 4
5492 .IX Item "-mregnames"
5493 .PD 0
5494 .Ip "\fB\-mno-regnames\fR" 4
5495 .IX Item "-mno-regnames"
5497 On System V.4 and embedded PowerPC systems do (do not) emit register
5498 names in the assembly language output using symbolic forms.
5500 .I "\s-1IBM\s0 \s-1RT\s0 Options"
5501 .IX Subsection "IBM RT Options"
5503 These \fB\-m\fR options are defined for the \s-1IBM\s0 \s-1RT\s0 \s-1PC:\s0
5504 .Ip "\fB\-min-line-mul\fR" 4
5505 .IX Item "-min-line-mul"
5506 Use an in-line code sequence for integer multiplies.  This is the
5507 default.
5508 .Ip "\fB\-mcall-lib-mul\fR" 4
5509 .IX Item "-mcall-lib-mul"
5510 Call \f(CW\*(C`lmul$$\*(C'\fR for integer multiples.
5511 .Ip "\fB\-mfull-fp-blocks\fR" 4
5512 .IX Item "-mfull-fp-blocks"
5513 Generate full-size floating point data blocks, including the minimum
5514 amount of scratch space recommended by \s-1IBM\s0.  This is the default.
5515 .Ip "\fB\-mminimum-fp-blocks\fR" 4
5516 .IX Item "-mminimum-fp-blocks"
5517 Do not include extra scratch space in floating point data blocks.  This
5518 results in smaller code, but slower execution, since scratch space must
5519 be allocated dynamically.
5520 .Ip "\fB\-mfp-arg-in-fpregs\fR" 4
5521 .IX Item "-mfp-arg-in-fpregs"
5522 Use a calling sequence incompatible with the \s-1IBM\s0 calling convention in
5523 which floating point arguments are passed in floating point registers.
5524 Note that \f(CW\*(C`varargs.h\*(C'\fR and \f(CW\*(C`stdargs.h\*(C'\fR will not work with
5525 floating point operands if this option is specified.
5526 .Ip "\fB\-mfp-arg-in-gregs\fR" 4
5527 .IX Item "-mfp-arg-in-gregs"
5528 Use the normal calling convention for floating point arguments.  This is
5529 the default.
5530 .Ip "\fB\-mhc-struct-return\fR" 4
5531 .IX Item "-mhc-struct-return"
5532 Return structures of more than one word in memory, rather than in a
5533 register.  This provides compatibility with the MetaWare HighC (hc)
5534 compiler.  Use the option \fB\-fpcc-struct-return\fR for compatibility
5535 with the Portable C Compiler (pcc).
5536 .Ip "\fB\-mnohc-struct-return\fR" 4
5537 .IX Item "-mnohc-struct-return"
5538 Return some structures of more than one word in registers, when
5539 convenient.  This is the default.  For compatibility with the
5540 IBM-supplied compilers, use the option \fB\-fpcc-struct-return\fR or the
5541 option \fB\-mhc-struct-return\fR.
5543 .I "\s-1MIPS\s0 Options"
5544 .IX Subsection "MIPS Options"
5546 These \fB\-m\fR options are defined for the \s-1MIPS\s0 family of computers:
5547 .Ip "\fB\-mcpu=\fR\fIcpu type\fR" 4
5548 .IX Item "-mcpu=cpu type"
5549 Assume the defaults for the machine type \fIcpu type\fR when scheduling
5550 instructions.  The choices for \fIcpu type\fR are \fBr2000\fR, \fBr3000\fR,
5551 \&\fBr3900\fR, \fBr4000\fR, \fBr4100\fR, \fBr4300\fR, \fBr4400\fR,
5552 \&\fBr4600\fR, \fBr4650\fR, \fBr5000\fR, \fBr6000\fR, \fBr8000\fR,
5553 and \fBorion\fR.  Additionally, the \fBr2000\fR, \fBr3000\fR,
5554 \&\fBr4000\fR, \fBr5000\fR, and \fBr6000\fR can be abbreviated as
5555 \&\fBr2k\fR (or \fBr2K\fR), \fBr3k\fR, etc.  While picking a specific
5556 \&\fIcpu type\fR will schedule things appropriately for that particular
5557 chip, the compiler will not generate any code that does not meet level 1
5558 of the \s-1MIPS\s0 \s-1ISA\s0 (instruction set architecture) without a \fB\-mipsX\fR
5559 or \fB\-mabi\fR switch being used.
5560 .Ip "\fB\-mips1\fR" 4
5561 .IX Item "-mips1"
5562 Issue instructions from level 1 of the \s-1MIPS\s0 \s-1ISA\s0.  This is the default.
5563 \&\fBr3000\fR is the default \fIcpu type\fR at this \s-1ISA\s0 level.
5564 .Ip "\fB\-mips2\fR" 4
5565 .IX Item "-mips2"
5566 Issue instructions from level 2 of the \s-1MIPS\s0 \s-1ISA\s0 (branch likely, square
5567 root instructions).  \fBr6000\fR is the default \fIcpu type\fR at this
5568 \&\s-1ISA\s0 level.
5569 .Ip "\fB\-mips3\fR" 4
5570 .IX Item "-mips3"
5571 Issue instructions from level 3 of the \s-1MIPS\s0 \s-1ISA\s0 (64 bit instructions).
5572 \&\fBr4000\fR is the default \fIcpu type\fR at this \s-1ISA\s0 level.
5573 .Ip "\fB\-mips4\fR" 4
5574 .IX Item "-mips4"
5575 Issue instructions from level 4 of the \s-1MIPS\s0 \s-1ISA\s0 (conditional move,
5576 prefetch, enhanced \s-1FPU\s0 instructions).  \fBr8000\fR is the default
5577 \&\fIcpu type\fR at this \s-1ISA\s0 level.
5578 .Ip "\fB\-mfp32\fR" 4
5579 .IX Item "-mfp32"
5580 Assume that 32 32\-bit floating point registers are available.  This is
5581 the default.
5582 .Ip "\fB\-mfp64\fR" 4
5583 .IX Item "-mfp64"
5584 Assume that 32 64\-bit floating point registers are available.  This is
5585 the default when the \fB\-mips3\fR option is used.
5586 .Ip "\fB\-mgp32\fR" 4
5587 .IX Item "-mgp32"
5588 Assume that 32 32\-bit general purpose registers are available.  This is
5589 the default.
5590 .Ip "\fB\-mgp64\fR" 4
5591 .IX Item "-mgp64"
5592 Assume that 32 64\-bit general purpose registers are available.  This is
5593 the default when the \fB\-mips3\fR option is used.
5594 .Ip "\fB\-mint64\fR" 4
5595 .IX Item "-mint64"
5596 Force int and long types to be 64 bits wide.  See \fB\-mlong32\fR for an
5597 explanation of the default, and the width of pointers.
5598 .Ip "\fB\-mlong64\fR" 4
5599 .IX Item "-mlong64"
5600 Force long types to be 64 bits wide.  See \fB\-mlong32\fR for an
5601 explanation of the default, and the width of pointers.
5602 .Ip "\fB\-mlong32\fR" 4
5603 .IX Item "-mlong32"
5604 Force long, int, and pointer types to be 32 bits wide.
5606 If none of \fB\-mlong32\fR, \fB\-mlong64\fR, or \fB\-mint64\fR are set,
5607 the size of ints, longs, and pointers depends on the \s-1ABI\s0 and \s-1ISA\s0 chosen.
5608 For \fB\-mabi=32\fR, and \fB\-mabi=n32\fR, ints and longs are 32 bits
5609 wide.  For \fB\-mabi=64\fR, ints are 32 bits, and longs are 64 bits wide.
5610 For \fB\-mabi=eabi\fR and either \fB\-mips1\fR or \fB\-mips2\fR, ints
5611 and longs are 32 bits wide.  For \fB\-mabi=eabi\fR and higher ISAs, ints
5612 are 32 bits, and longs are 64 bits wide.  The width of pointer types is
5613 the smaller of the width of longs or the width of general purpose
5614 registers (which in turn depends on the \s-1ISA\s0).
5615 .Ip "\fB\-mabi=32\fR" 4
5616 .IX Item "-mabi=32"
5617 .PD 0
5618 .Ip "\fB\-mabi=o64\fR" 4
5619 .IX Item "-mabi=o64"
5620 .Ip "\fB\-mabi=n32\fR" 4
5621 .IX Item "-mabi=n32"
5622 .Ip "\fB\-mabi=64\fR" 4
5623 .IX Item "-mabi=64"
5624 .Ip "\fB\-mabi=eabi\fR" 4
5625 .IX Item "-mabi=eabi"
5627 Generate code for the indicated \s-1ABI\s0.  The default instruction level is
5628 \&\fB\-mips1\fR for \fB32\fR, \fB\-mips3\fR for \fBn32\fR, and
5629 \&\fB\-mips4\fR otherwise.  Conversely, with \fB\-mips1\fR or
5630 \&\fB\-mips2\fR, the default \s-1ABI\s0 is \fB32\fR; otherwise, the default \s-1ABI\s0
5631 is \fB64\fR.
5632 .Ip "\fB\-mmips-as\fR" 4
5633 .IX Item "-mmips-as"
5634 Generate code for the \s-1MIPS\s0 assembler, and invoke \fImips-tfile\fR to
5635 add normal debug information.  This is the default for all
5636 platforms except for the \s-1OSF/1\s0 reference platform, using the OSF/rose
5637 object format.  If the either of the \fB\-gstabs\fR or \fB\-gstabs+\fR
5638 switches are used, the \fImips-tfile\fR program will encapsulate the
5639 stabs within \s-1MIPS\s0 \s-1ECOFF\s0.
5640 .Ip "\fB\-mgas\fR" 4
5641 .IX Item "-mgas"
5642 Generate code for the \s-1GNU\s0 assembler.  This is the default on the \s-1OSF/1\s0
5643 reference platform, using the OSF/rose object format.  Also, this is
5644 the default if the configure option \fB\*(--with-gnu-as\fR is used.
5645 .Ip "\fB\-msplit-addresses\fR" 4
5646 .IX Item "-msplit-addresses"
5647 .PD 0
5648 .Ip "\fB\-mno-split-addresses\fR" 4
5649 .IX Item "-mno-split-addresses"
5651 Generate code to load the high and low parts of address constants separately.
5652 This allows \f(CW\*(C`gcc\*(C'\fR to optimize away redundant loads of the high order
5653 bits of addresses.  This optimization requires \s-1GNU\s0 as and \s-1GNU\s0 ld.
5654 This optimization is enabled by default for some embedded targets where
5655 \&\s-1GNU\s0 as and \s-1GNU\s0 ld are standard.
5656 .Ip "\fB\-mrnames\fR" 4
5657 .IX Item "-mrnames"
5658 .PD 0
5659 .Ip "\fB\-mno-rnames\fR" 4
5660 .IX Item "-mno-rnames"
5662 The \fB\-mrnames\fR switch says to output code using the \s-1MIPS\s0 software
5663 names for the registers, instead of the hardware names (ie, \fIa0\fR
5664 instead of \fI$4\fR).  The only known assembler that supports this option
5665 is the Algorithmics assembler.
5666 .Ip "\fB\-mgpopt\fR" 4
5667 .IX Item "-mgpopt"
5668 .PD 0
5669 .Ip "\fB\-mno-gpopt\fR" 4
5670 .IX Item "-mno-gpopt"
5672 The \fB\-mgpopt\fR switch says to write all of the data declarations
5673 before the instructions in the text section, this allows the \s-1MIPS\s0
5674 assembler to generate one word memory references instead of using two
5675 words for short global or static data items.  This is on by default if
5676 optimization is selected.
5677 .Ip "\fB\-mstats\fR" 4
5678 .IX Item "-mstats"
5679 .PD 0
5680 .Ip "\fB\-mno-stats\fR" 4
5681 .IX Item "-mno-stats"
5683 For each non-inline function processed, the \fB\-mstats\fR switch
5684 causes the compiler to emit one line to the standard error file to
5685 print statistics about the program (number of registers saved, stack
5686 size, etc.).
5687 .Ip "\fB\-mmemcpy\fR" 4
5688 .IX Item "-mmemcpy"
5689 .PD 0
5690 .Ip "\fB\-mno-memcpy\fR" 4
5691 .IX Item "-mno-memcpy"
5693 The \fB\-mmemcpy\fR switch makes all block moves call the appropriate
5694 string function (\fBmemcpy\fR or \fBbcopy\fR) instead of possibly
5695 generating inline code.
5696 .Ip "\fB\-mmips-tfile\fR" 4
5697 .IX Item "-mmips-tfile"
5698 .PD 0
5699 .Ip "\fB\-mno-mips-tfile\fR" 4
5700 .IX Item "-mno-mips-tfile"
5702 The \fB\-mno-mips-tfile\fR switch causes the compiler not
5703 postprocess the object file with the \fImips-tfile\fR program,
5704 after the \s-1MIPS\s0 assembler has generated it to add debug support.  If
5705 \&\fImips-tfile\fR is not run, then no local variables will be
5706 available to the debugger.  In addition, \fIstage2\fR and
5707 \&\fIstage3\fR objects will have the temporary file names passed to the
5708 assembler embedded in the object file, which means the objects will
5709 not compare the same.  The \fB\-mno-mips-tfile\fR switch should only
5710 be used when there are bugs in the \fImips-tfile\fR program that
5711 prevents compilation.
5712 .Ip "\fB\-msoft-float\fR" 4
5713 .IX Item "-msoft-float"
5714 Generate output containing library calls for floating point.
5715 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
5716 Normally the facilities of the machine's usual C compiler are used, but
5717 this can't be done directly in cross-compilation.  You must make your
5718 own arrangements to provide suitable library functions for
5719 cross-compilation.
5720 .Ip "\fB\-mhard-float\fR" 4
5721 .IX Item "-mhard-float"
5722 Generate output containing floating point instructions.  This is the
5723 default if you use the unmodified sources.
5724 .Ip "\fB\-mabicalls\fR" 4
5725 .IX Item "-mabicalls"
5726 .PD 0
5727 .Ip "\fB\-mno-abicalls\fR" 4
5728 .IX Item "-mno-abicalls"
5730 Emit (or do not emit) the pseudo operations \fB.abicalls\fR,
5731 \&\fB.cpload\fR, and \fB.cprestore\fR that some System V.4 ports use for
5732 position independent code.
5733 .Ip "\fB\-mlong-calls\fR" 4
5734 .IX Item "-mlong-calls"
5735 .PD 0
5736 .Ip "\fB\-mno-long-calls\fR" 4
5737 .IX Item "-mno-long-calls"
5739 Do all calls with the \fB\s-1JALR\s0\fR instruction, which requires
5740 loading up a function's address into a register before the call.
5741 You need to use this switch, if you call outside of the current
5742 512 megabyte segment to functions that are not through pointers.
5743 .Ip "\fB\-mhalf-pic\fR" 4
5744 .IX Item "-mhalf-pic"
5745 .PD 0
5746 .Ip "\fB\-mno-half-pic\fR" 4
5747 .IX Item "-mno-half-pic"
5749 Put pointers to extern references into the data section and load them
5750 up, rather than put the references in the text section.
5751 .Ip "\fB\-membedded-pic\fR" 4
5752 .IX Item "-membedded-pic"
5753 .PD 0
5754 .Ip "\fB\-mno-embedded-pic\fR" 4
5755 .IX Item "-mno-embedded-pic"
5757 Generate \s-1PIC\s0 code suitable for some embedded systems.  All calls are
5758 made using \s-1PC\s0 relative address, and all data is addressed using the \f(CW$gp\fR
5759 register.  No more than 65536 bytes of global data may be used.  This
5760 requires \s-1GNU\s0 as and \s-1GNU\s0 ld which do most of the work.  This currently
5761 only works on targets which use \s-1ECOFF\s0; it does not work with \s-1ELF\s0.
5762 .Ip "\fB\-membedded-data\fR" 4
5763 .IX Item "-membedded-data"
5764 .PD 0
5765 .Ip "\fB\-mno-embedded-data\fR" 4
5766 .IX Item "-mno-embedded-data"
5768 Allocate variables to the read-only data section first if possible, then
5769 next in the small data section if possible, otherwise in data.  This gives
5770 slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
5771 when executing, and thus may be preferred for some embedded systems.
5772 .Ip "\fB\-muninit-const-in-rodata\fR" 4
5773 .IX Item "-muninit-const-in-rodata"
5774 .PD 0
5775 .Ip "\fB\-mno-uninit-const-in-rodata\fR" 4
5776 .IX Item "-mno-uninit-const-in-rodata"
5778 When used together with \-membedded-data, it will always store uninitialized
5779 const variables in the read-only data section.
5780 .Ip "\fB\-msingle-float\fR" 4
5781 .IX Item "-msingle-float"
5782 .PD 0
5783 .Ip "\fB\-mdouble-float\fR" 4
5784 .IX Item "-mdouble-float"
5786 The \fB\-msingle-float\fR switch tells gcc to assume that the floating
5787 point coprocessor only supports single precision operations, as on the
5788 \&\fBr4650\fR chip.  The \fB\-mdouble-float\fR switch permits gcc to use
5789 double precision operations.  This is the default.
5790 .Ip "\fB\-mmad\fR" 4
5791 .IX Item "-mmad"
5792 .PD 0
5793 .Ip "\fB\-mno-mad\fR" 4
5794 .IX Item "-mno-mad"
5796 Permit use of the \fBmad\fR, \fBmadu\fR and \fBmul\fR instructions,
5797 as on the \fBr4650\fR chip.
5798 .Ip "\fB\-m4650\fR" 4
5799 .IX Item "-m4650"
5800 Turns on \fB\-msingle-float\fR, \fB\-mmad\fR, and, at least for now,
5801 \&\fB\-mcpu=r4650\fR.
5802 .Ip "\fB\-mips16\fR" 4
5803 .IX Item "-mips16"
5804 .PD 0
5805 .Ip "\fB\-mno-mips16\fR" 4
5806 .IX Item "-mno-mips16"
5808 Enable 16\-bit instructions.
5809 .Ip "\fB\-mentry\fR" 4
5810 .IX Item "-mentry"
5811 Use the entry and exit pseudo ops.  This option can only be used with
5812 \&\fB\-mips16\fR.
5813 .Ip "\fB\-EL\fR" 4
5814 .IX Item "-EL"
5815 Compile code for the processor in little endian mode.
5816 The requisite libraries are assumed to exist.
5817 .Ip "\fB\-EB\fR" 4
5818 .IX Item "-EB"
5819 Compile code for the processor in big endian mode.
5820 The requisite libraries are assumed to exist.
5821 .Ip "\fB\-G\fR \fInum\fR" 4
5822 .IX Item "-G num"
5823 Put global and static items less than or equal to \fInum\fR bytes into
5824 the small data or bss sections instead of the normal data or bss
5825 section.  This allows the assembler to emit one word memory reference
5826 instructions based on the global pointer (\fIgp\fR or \fI$28\fR),
5827 instead of the normal two words used.  By default, \fInum\fR is 8 when
5828 the \s-1MIPS\s0 assembler is used, and 0 when the \s-1GNU\s0 assembler is used.  The
5829 \&\fB\-G\fR \fInum\fR switch is also passed to the assembler and linker.
5830 All modules should be compiled with the same \fB\-G\fR \fInum\fR
5831 value.
5832 .Ip "\fB\-nocpp\fR" 4
5833 .IX Item "-nocpp"
5834 Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
5835 assembler files (with a \fB.s\fR suffix) when assembling them.
5836 .Ip "\fB\-mfix7000\fR" 4
5837 .IX Item "-mfix7000"
5838 Pass an option to gas which will cause nops to be inserted if
5839 the read of the destination register of an mfhi or mflo instruction
5840 occurs in the following two instructions.
5841 .Ip "\fB\-no-crt0\fR" 4
5842 .IX Item "-no-crt0"
5843 Do not include the default crt0.
5845 .I "Intel 386 Options"
5846 .IX Subsection "Intel 386 Options"
5848 These \fB\-m\fR options are defined for the i386 family of computers:
5849 .Ip "\fB\-mcpu=\fR\fIcpu type\fR" 4
5850 .IX Item "-mcpu=cpu type"
5851 Assume the defaults for the machine type \fIcpu type\fR when scheduling
5852 instructions.  The choices for \fIcpu type\fR are \fBi386\fR,
5853 \&\fBi486\fR, \fBi586\fR, \fBi686\fR, \fBpentium\fR,
5854 \&\fBpentiumpro\fR, \fBk6\fR, and \fBathlon\fR
5856 While picking a specific \fIcpu type\fR will schedule things appropriately
5857 for that particular chip, the compiler will not generate any code that
5858 does not run on the i386 without the \fB\-march=\fR\fIcpu type\fR option
5859 being used.  \fBi586\fR is equivalent to \fBpentium\fR and \fBi686\fR
5860 is equivalent to \fBpentiumpro\fR.  \fBk6\fR is the \s-1AMD\s0 chip as
5861 opposed to the Intel ones.
5862 .Ip "\fB\-march=\fR\fIcpu type\fR" 4
5863 .IX Item "-march=cpu type"
5864 Generate instructions for the machine type \fIcpu type\fR.  The choices
5865 for \fIcpu type\fR are the same as for \fB\-mcpu\fR.  Moreover, 
5866 specifying \fB\-march=\fR\fIcpu type\fR implies \fB\-mcpu=\fR\fIcpu type\fR.
5867 .Ip "\fB\-m386\fR" 4
5868 .IX Item "-m386"
5869 .PD 0
5870 .Ip "\fB\-m486\fR" 4
5871 .IX Item "-m486"
5872 .Ip "\fB\-mpentium\fR" 4
5873 .IX Item "-mpentium"
5874 .Ip "\fB\-mpentiumpro\fR" 4
5875 .IX Item "-mpentiumpro"
5877 Synonyms for \-mcpu=i386, \-mcpu=i486, \-mcpu=pentium, and \-mcpu=pentiumpro
5878 respectively.  These synonyms are deprecated.
5879 .Ip "\fB\-mintel-syntax\fR" 4
5880 .IX Item "-mintel-syntax"
5881 Emit assembly using Intel syntax opcodes instead of \s-1AT&T\s0 syntax.
5882 .Ip "\fB\-mieee-fp\fR" 4
5883 .IX Item "-mieee-fp"
5884 .PD 0
5885 .Ip "\fB\-mno-ieee-fp\fR" 4
5886 .IX Item "-mno-ieee-fp"
5888 Control whether or not the compiler uses \s-1IEEE\s0 floating point
5889 comparisons.  These handle correctly the case where the result of a
5890 comparison is unordered.
5891 .Ip "\fB\-msoft-float\fR" 4
5892 .IX Item "-msoft-float"
5893 Generate output containing library calls for floating point.
5894 \&\fBWarning:\fR the requisite libraries are not part of \s-1GCC\s0.
5895 Normally the facilities of the machine's usual C compiler are used, but
5896 this can't be done directly in cross-compilation.  You must make your
5897 own arrangements to provide suitable library functions for
5898 cross-compilation.
5900 On machines where a function returns floating point results in the 80387
5901 register stack, some floating point opcodes may be emitted even if
5902 \&\fB\-msoft-float\fR is used.
5903 .Ip "\fB\-mno-fp-ret-in-387\fR" 4
5904 .IX Item "-mno-fp-ret-in-387"
5905 Do not use the \s-1FPU\s0 registers for return values of functions.
5907 The usual calling convention has functions return values of types
5908 \&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
5909 is no \s-1FPU\s0.  The idea is that the operating system should emulate
5910 an \s-1FPU\s0.
5912 The option \fB\-mno-fp-ret-in-387\fR causes such values to be returned
5913 in ordinary \s-1CPU\s0 registers instead.
5914 .Ip "\fB\-mno-fancy-math-387\fR" 4
5915 .IX Item "-mno-fancy-math-387"
5916 Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
5917 \&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
5918 generating those instructions. This option is the default on FreeBSD.
5919 As of revision 2.6.1, these instructions are not generated unless you
5920 also use the \fB\-ffast-math\fR switch.
5921 .Ip "\fB\-malign-double\fR" 4
5922 .IX Item "-malign-double"
5923 .PD 0
5924 .Ip "\fB\-mno-align-double\fR" 4
5925 .IX Item "-mno-align-double"
5927 Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
5928 \&\f(CW\*(C`long long\*(C'\fR variables on a two word boundary or a one word
5929 boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two word boundary will
5930 produce code that runs somewhat faster on a \fBPentium\fR at the
5931 expense of more memory.
5932 .Ip "\fB\-m128bit-long-double\fR" 4
5933 .IX Item "-m128bit-long-double"
5934 .PD 0
5935 .Ip "\fB\-m128bit-long-double\fR" 4
5936 .IX Item "-m128bit-long-double"
5938 Control the size of \f(CW\*(C`long double\*(C'\fR type. i386 application binary interface
5939 specify the size to be 12 bytes, while modern architectures (Pentium and newer)
5940 preffer \f(CW\*(C`long double\*(C'\fR aligned to 8 or 16 byte boundary.  This is
5941 impossible to reach with 12 byte long doubles in the array accesses.
5943 \&\fBWarning:\fR if you use the \fB\-m128bit-long-double\fR switch, the
5944 structures and arrays containing \f(CW\*(C`long double\*(C'\fR will change their size as
5945 well as function calling convention for function taking \f(CW\*(C`long double\*(C'\fR
5946 will be modified. 
5947 .Ip "\fB\-m96bit-long-double\fR" 4
5948 .IX Item "-m96bit-long-double"
5949 .PD 0
5950 .Ip "\fB\-m96bit-long-double\fR" 4
5951 .IX Item "-m96bit-long-double"
5953 Set the size of \f(CW\*(C`long double\*(C'\fR to 96 bits as required by the i386
5954 application binary interface.  This is the default.
5955 .Ip "\fB\-msvr3\-shlib\fR" 4
5956 .IX Item "-msvr3-shlib"
5957 .PD 0
5958 .Ip "\fB\-mno-svr3\-shlib\fR" 4
5959 .IX Item "-mno-svr3-shlib"
5961 Control whether \s-1GCC\s0 places uninitialized locals into \f(CW\*(C`bss\*(C'\fR or
5962 \&\f(CW\*(C`data\*(C'\fR.  \fB\-msvr3\-shlib\fR places these locals into \f(CW\*(C`bss\*(C'\fR.
5963 These options are meaningful only on System V Release 3.
5964 .Ip "\fB\-mno-wide-multiply\fR" 4
5965 .IX Item "-mno-wide-multiply"
5966 .PD 0
5967 .Ip "\fB\-mwide-multiply\fR" 4
5968 .IX Item "-mwide-multiply"
5970 Control whether \s-1GCC\s0 uses the \f(CW\*(C`mul\*(C'\fR and \f(CW\*(C`imul\*(C'\fR that produce
5971 64 bit results in \f(CW\*(C`eax:edx\*(C'\fR from 32 bit operands to do \f(CW\*(C`long
5972 long\*(C'\fR multiplies and 32\-bit division by constants.
5973 .Ip "\fB\-mrtd\fR" 4
5974 .IX Item "-mrtd"
5975 Use a different function-calling convention, in which functions that
5976 take a fixed number of arguments return with the \f(CW\*(C`ret\*(C'\fR \fInum\fR
5977 instruction, which pops their arguments while returning.  This saves one
5978 instruction in the caller since there is no need to pop the arguments
5979 there.
5981 You can specify that an individual function is called with this calling
5982 sequence with the function attribute \fBstdcall\fR.  You can also
5983 override the \fB\-mrtd\fR option by using the function attribute
5984 \&\fBcdecl\fR.  
5986 \&\fBWarning:\fR this calling convention is incompatible with the one
5987 normally used on Unix, so you cannot use it if you need to call
5988 libraries compiled with the Unix compiler.
5990 Also, you must provide function prototypes for all functions that
5991 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
5992 otherwise incorrect code will be generated for calls to those
5993 functions.
5995 In addition, seriously incorrect code will result if you call a
5996 function with too many arguments.  (Normally, extra arguments are
5997 harmlessly ignored.)
5998 .Ip "\fB\-mregparm=\fR\fInum\fR" 4
5999 .IX Item "-mregparm=num"
6000 Control how many registers are used to pass integer arguments.  By
6001 default, no registers are used to pass arguments, and at most 3
6002 registers can be used.  You can control this behavior for a specific
6003 function by using the function attribute \fBregparm\fR.
6005 \&\fBWarning:\fR if you use this switch, and
6006 \&\fInum\fR is nonzero, then you must build all modules with the same
6007 value, including any libraries.  This includes the system libraries and
6008 startup modules.
6009 .Ip "\fB\-malign-loops=\fR\fInum\fR" 4
6010 .IX Item "-malign-loops=num"
6011 Align loops to a 2 raised to a \fInum\fR byte boundary.  If
6012 \&\fB\-malign-loops\fR is not specified, the default is 2 unless
6013 gas 2.8 (or later) is being used in which case the default is
6014 to align the loop on a 16 byte boundary if it is less than 8
6015 bytes away.
6016 .Ip "\fB\-malign-jumps=\fR\fInum\fR" 4
6017 .IX Item "-malign-jumps=num"
6018 Align instructions that are only jumped to to a 2 raised to a \fInum\fR
6019 byte boundary.  If \fB\-malign-jumps\fR is not specified, the default is
6020 2 if optimizing for a 386, and 4 if optimizing for a 486 unless
6021 gas 2.8 (or later) is being used in which case the default is
6022 to align the instruction on a 16 byte boundary if it is less
6023 than 8 bytes away.
6024 .Ip "\fB\-malign-functions=\fR\fInum\fR" 4
6025 .IX Item "-malign-functions=num"
6026 Align the start of functions to a 2 raised to \fInum\fR byte boundary.
6027 If \fB\-malign-functions\fR is not specified, the default is 2 if optimizing
6028 for a 386, and 4 if optimizing for a 486.
6029 .Ip "\fB\-mpreferred-stack-boundary=\fR\fInum\fR" 4
6030 .IX Item "-mpreferred-stack-boundary=num"
6031 Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
6032 byte boundary.  If \fB\-mpreferred-stack-boundary\fR is not specified,
6033 the default is 4 (16 bytes or 128 bits).
6035 The stack is required to be aligned on a 4 byte boundary.  On Pentium
6036 and PentiumPro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values should be
6037 aligned to an 8 byte boundary (see \fB\-malign-double\fR) or suffer
6038 significant run time performance penalties.  On Pentium \s-1III\s0, the
6039 Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR suffers similar
6040 penalties if it is not 16 byte aligned.
6042 To ensure proper alignment of this values on the stack, the stack boundary
6043 must be as aligned as that required by any value stored on the stack. 
6044 Further, every function must be generated such that it keeps the stack
6045 aligned.  Thus calling a function compiled with a higher preferred
6046 stack boundary from a function compiled with a lower preferred stack
6047 boundary will most likely misalign the stack.  It is recommended that
6048 libraries that use callbacks always use the default setting.
6050 This extra alignment does consume extra stack space.  Code that is sensitive
6051 to stack space usage, such as embedded systems and operating system kernels,
6052 may want to reduce the preferred alignment to
6053 \&\fB\-mpreferred-stack-boundary=2\fR.
6054 .Ip "\fB\-mpush-args\fR" 4
6055 .IX Item "-mpush-args"
6056 Use \s-1PUSH\s0 operations to store outgoing parameters. This method is shorter
6057 and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
6058 by default. In some cases disabling it may improve performance because of
6059 improved scheduling and reduced dependencies.
6060 .Ip "\fB\-maccumulate-outgoing-args\fR" 4
6061 .IX Item "-maccumulate-outgoing-args"
6062 If enabled, the maximum amount of space required for outgoing arguments will be
6063 computed in the function prologue. This in faster on most modern CPUs
6064 because of reduced dependencies, improved scheduling and reduced stack usage
6065 when preferred stack boundary is not equal to 2.  The drawback is a notable
6066 increase in code size. This switch implies \-mno-push-args.
6067 .Ip "\fB\-mthreads\fR" 4
6068 .IX Item "-mthreads"
6069 Support thread-safe exception handling on \fBMingw32\fR. Code that relies 
6070 on thread-safe exception handling must compile and link all code with the 
6071 \&\fB\-mthreads\fR option. When compiling, \fB\-mthreads\fR defines 
6072 \&\fB\-D_MT\fR; when linking, it links in a special thread helper library 
6073 \&\fB\-lmingwthrd\fR which cleans up per thread exception handling data.
6074 .Ip "\fB\-mno-align-stringops\fR" 4
6075 .IX Item "-mno-align-stringops"
6076 Do not align destination of inlined string operations. This switch reduces
6077 code size and improves performance in case the destination is already aligned,
6078 but gcc don't know about it.
6079 .Ip "\fB\-minline-all-stringops\fR" 4
6080 .IX Item "-minline-all-stringops"
6081 By default \s-1GCC\s0 inlines string operations only when destination is known to be
6082 aligned at least to 4 byte boundary. This enables more inlining, increase code
6083 size, but may improve performance of code that depends on fast memcpy, strlen
6084 and memset for short lengths.
6086 .I "\s-1HPPA\s0 Options"
6087 .IX Subsection "HPPA Options"
6089 These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
6090 .Ip "\fB\-march=\fR\fIarchitecture type\fR" 4
6091 .IX Item "-march=architecture type"
6092 Generate code for the specified architecture.  The choices for
6093 \&\fIarchitecture type\fR are \fB1.0\fR for \s-1PA\s0 1.0, \fB1.1\fR for \s-1PA\s0
6094 1.1, and \fB2.0\fR for \s-1PA\s0 2.0 processors.  Refer to
6095 \&\fI/usr/lib/sched.models\fR on an \s-1HP-UX\s0 system to determine the proper
6096 architecture option for your machine.  Code compiled for lower numbered
6097 architectures will run on higher numbered architectures, but not the
6098 other way around.
6100 \&\s-1PA\s0 2.0 support currently requires gas snapshot 19990413 or later.  The
6101 next release of binutils (current is 2.9.1) will probably contain \s-1PA\s0 2.0
6102 support.  
6103 .Ip "\fB\-mpa-risc-1\-0\fR" 4
6104 .IX Item "-mpa-risc-1-0"
6105 .PD 0
6106 .Ip "\fB\-mpa-risc-1\-1\fR" 4
6107 .IX Item "-mpa-risc-1-1"
6108 .Ip "\fB\-mpa-risc-2\-0\fR" 4
6109 .IX Item "-mpa-risc-2-0"
6111 Synonyms for \-march=1.0, \-march=1.1, and \-march=2.0 respectively.
6112 .Ip "\fB\-mbig-switch\fR" 4
6113 .IX Item "-mbig-switch"
6114 Generate code suitable for big switch tables.  Use this option only if
6115 the assembler/linker complain about out of range branches within a switch
6116 table.
6117 .Ip "\fB\-mjump-in-delay\fR" 4
6118 .IX Item "-mjump-in-delay"
6119 Fill delay slots of function calls with unconditional jump instructions
6120 by modifying the return pointer for the function call to be the target
6121 of the conditional jump.
6122 .Ip "\fB\-mdisable-fpregs\fR" 4
6123 .IX Item "-mdisable-fpregs"
6124 Prevent floating point registers from being used in any manner.  This is
6125 necessary for compiling kernels which perform lazy context switching of
6126 floating point registers.  If you use this option and attempt to perform
6127 floating point operations, the compiler will abort.
6128 .Ip "\fB\-mdisable-indexing\fR" 4
6129 .IX Item "-mdisable-indexing"
6130 Prevent the compiler from using indexing address modes.  This avoids some
6131 rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH\s0.
6132 .Ip "\fB\-mno-space-regs\fR" 4
6133 .IX Item "-mno-space-regs"
6134 Generate code that assumes the target has no space registers.  This allows
6135 \&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
6137 Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
6138 .Ip "\fB\-mfast-indirect-calls\fR" 4
6139 .IX Item "-mfast-indirect-calls"
6140 Generate code that assumes calls never cross space boundaries.  This
6141 allows \s-1GCC\s0 to emit code which performs faster indirect calls.
6143 This option will not work in the presence of shared libraries or nested
6144 functions.
6145 .Ip "\fB\-mlong-load-store\fR" 4
6146 .IX Item "-mlong-load-store"
6147 Generate 3\-instruction load and store sequences as sometimes required by
6148 the \s-1HP-UX\s0 10 linker.  This is equivalent to the \fB+k\fR option to
6149 the \s-1HP\s0 compilers.
6150 .Ip "\fB\-mportable-runtime\fR" 4
6151 .IX Item "-mportable-runtime"
6152 Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
6153 .Ip "\fB\-mgas\fR" 4
6154 .IX Item "-mgas"
6155 Enable the use of assembler directives only \s-1GAS\s0 understands.
6156 .Ip "\fB\-mschedule=\fR\fIcpu type\fR" 4
6157 .IX Item "-mschedule=cpu type"
6158 Schedule code according to the constraints for the machine type
6159 \&\fIcpu type\fR.  The choices for \fIcpu type\fR are \fB700\fR 
6160 \&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, and \fB8000\fR.  Refer to 
6161 \&\fI/usr/lib/sched.models\fR on an \s-1HP-UX\s0 system to determine the
6162 proper scheduling option for your machine.
6163 .Ip "\fB\-mlinker-opt\fR" 4
6164 .IX Item "-mlinker-opt"
6165 Enable the optimization pass in the \s-1HPUX\s0 linker.  Note this makes symbolic
6166 debugging impossible.  It also triggers a bug in the \s-1HPUX\s0 8 and \s-1HPUX\s0 9 linkers
6167 in which they give bogus error messages when linking some programs.
6168 .Ip "\fB\-msoft-float\fR" 4
6169 .IX Item "-msoft-float"
6170 Generate output containing library calls for floating point.
6171 \&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
6172 targets.  Normally the facilities of the machine's usual C compiler are
6173 used, but this cannot be done directly in cross-compilation.  You must make
6174 your own arrangements to provide suitable library functions for
6175 cross-compilation.  The embedded target \fBhppa1.1\-*\-pro\fR
6176 does provide software floating point support.
6178 \&\fB\-msoft-float\fR changes the calling convention in the output file;
6179 therefore, it is only useful if you compile \fIall\fR of a program with
6180 this option.  In particular, you need to compile \fIlibgcc.a\fR, the
6181 library that comes with \s-1GCC\s0, with \fB\-msoft-float\fR in order for
6182 this to work.
6184 .I "Intel 960 Options"
6185 .IX Subsection "Intel 960 Options"
6187 These \fB\-m\fR options are defined for the Intel 960 implementations:
6188 .Ip "\fB\-m\fR\fIcpu type\fR" 4
6189 .IX Item "-mcpu type"
6190 Assume the defaults for the machine type \fIcpu type\fR for some of
6191 the other options, including instruction scheduling, floating point
6192 support, and addressing modes.  The choices for \fIcpu type\fR are
6193 \&\fBka\fR, \fBkb\fR, \fBmc\fR, \fBca\fR, \fBcf\fR,
6194 \&\fBsa\fR, and \fBsb\fR.
6195 The default is
6196 \&\fBkb\fR.
6197 .Ip "\fB\-mnumerics\fR" 4
6198 .IX Item "-mnumerics"
6199 .PD 0
6200 .Ip "\fB\-msoft-float\fR" 4
6201 .IX Item "-msoft-float"
6203 The \fB\-mnumerics\fR option indicates that the processor does support
6204 floating-point instructions.  The \fB\-msoft-float\fR option indicates
6205 that floating-point support should not be assumed.
6206 .Ip "\fB\-mleaf-procedures\fR" 4
6207 .IX Item "-mleaf-procedures"
6208 .PD 0
6209 .Ip "\fB\-mno-leaf-procedures\fR" 4
6210 .IX Item "-mno-leaf-procedures"
6212 Do (or do not) attempt to alter leaf procedures to be callable with the
6213 \&\f(CW\*(C`bal\*(C'\fR instruction as well as \f(CW\*(C`call\*(C'\fR.  This will result in more
6214 efficient code for explicit calls when the \f(CW\*(C`bal\*(C'\fR instruction can be
6215 substituted by the assembler or linker, but less efficient code in other
6216 cases, such as calls via function pointers, or using a linker that doesn't
6217 support this optimization.
6218 .Ip "\fB\-mtail-call\fR" 4
6219 .IX Item "-mtail-call"
6220 .PD 0
6221 .Ip "\fB\-mno-tail-call\fR" 4
6222 .IX Item "-mno-tail-call"
6224 Do (or do not) make additional attempts (beyond those of the
6225 machine-independent portions of the compiler) to optimize tail-recursive
6226 calls into branches.  You may not want to do this because the detection of
6227 cases where this is not valid is not totally complete.  The default is
6228 \&\fB\-mno-tail-call\fR.
6229 .Ip "\fB\-mcomplex-addr\fR" 4
6230 .IX Item "-mcomplex-addr"
6231 .PD 0
6232 .Ip "\fB\-mno-complex-addr\fR" 4
6233 .IX Item "-mno-complex-addr"
6235 Assume (or do not assume) that the use of a complex addressing mode is a
6236 win on this implementation of the i960.  Complex addressing modes may not
6237 be worthwhile on the K-series, but they definitely are on the C-series.
6238 The default is currently \fB\-mcomplex-addr\fR for all processors except
6239 the \s-1CB\s0 and \s-1CC\s0.
6240 .Ip "\fB\-mcode-align\fR" 4
6241 .IX Item "-mcode-align"
6242 .PD 0
6243 .Ip "\fB\-mno-code-align\fR" 4
6244 .IX Item "-mno-code-align"
6246 Align code to 8\-byte boundaries for faster fetching (or don't bother).
6247 Currently turned on by default for C-series implementations only.
6248 .Ip "\fB\-mic-compat\fR" 4
6249 .IX Item "-mic-compat"
6250 .PD 0
6251 .Ip "\fB\-mic2.0\-compat\fR" 4
6252 .IX Item "-mic2.0-compat"
6253 .Ip "\fB\-mic3.0\-compat\fR" 4
6254 .IX Item "-mic3.0-compat"
6256 Enable compatibility with iC960 v2.0 or v3.0.
6257 .Ip "\fB\-masm-compat\fR" 4
6258 .IX Item "-masm-compat"
6259 .PD 0
6260 .Ip "\fB\-mintel-asm\fR" 4
6261 .IX Item "-mintel-asm"
6263 Enable compatibility with the iC960 assembler.
6264 .Ip "\fB\-mstrict-align\fR" 4
6265 .IX Item "-mstrict-align"
6266 .PD 0
6267 .Ip "\fB\-mno-strict-align\fR" 4
6268 .IX Item "-mno-strict-align"
6270 Do not permit (do permit) unaligned accesses.
6271 .Ip "\fB\-mold-align\fR" 4
6272 .IX Item "-mold-align"
6273 Enable structure-alignment compatibility with Intel's gcc release version
6274 1.3 (based on gcc 1.37).  This option implies \fB\-mstrict-align\fR.
6275 .Ip "\fB\-mlong-double-64\fR" 4
6276 .IX Item "-mlong-double-64"
6277 Implement type \fBlong double\fR as 64\-bit floating point numbers.
6278 Without the option \fBlong double\fR is implemented by 80\-bit
6279 floating point numbers.  The only reason we have it because there is
6280 no 128\-bit \fBlong double\fR support in \fBfp-bit.c\fR yet.  So it
6281 is only useful for people using soft-float targets.  Otherwise, we
6282 should recommend against use of it.
6284 .I "\s-1DEC\s0 Alpha Options"
6285 .IX Subsection "DEC Alpha Options"
6287 These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
6288 .Ip "\fB\-mno-soft-float\fR" 4
6289 .IX Item "-mno-soft-float"
6290 .PD 0
6291 .Ip "\fB\-msoft-float\fR" 4
6292 .IX Item "-msoft-float"
6294 Use (do not use) the hardware floating-point instructions for
6295 floating-point operations.  When \fB\-msoft-float\fR is specified,
6296 functions in \fIlibgcc1.c\fR will be used to perform floating-point
6297 operations.  Unless they are replaced by routines that emulate the
6298 floating-point operations, or compiled in such a way as to call such
6299 emulations routines, these routines will issue floating-point
6300 operations.   If you are compiling for an Alpha without floating-point
6301 operations, you must ensure that the library is built so as not to call
6302 them.
6304 Note that Alpha implementations without floating-point operations are
6305 required to have floating-point registers.
6306 .Ip "\fB\-mfp-reg\fR" 4
6307 .IX Item "-mfp-reg"
6308 .PD 0
6309 .Ip "\fB\-mno-fp-regs\fR" 4
6310 .IX Item "-mno-fp-regs"
6312 Generate code that uses (does not use) the floating-point register set.
6313 \&\fB\-mno-fp-regs\fR implies \fB\-msoft-float\fR.  If the floating-point
6314 register set is not used, floating point operands are passed in integer
6315 registers as if they were integers and floating-point results are passed
6316 in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence, so any
6317 function with a floating-point argument or return value called by code
6318 compiled with \fB\-mno-fp-regs\fR must also be compiled with that
6319 option.
6321 A typical use of this option is building a kernel that does not use,
6322 and hence need not save and restore, any floating-point registers.
6323 .Ip "\fB\-mieee\fR" 4
6324 .IX Item "-mieee"
6325 The Alpha architecture implements floating-point hardware optimized for
6326 maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating
6327 point standard.  However, for full compliance, software assistance is
6328 required.  This option generates code fully \s-1IEEE\s0 compliant code
6329 \&\fIexcept\fR that the \fIinexact flag\fR is not maintained (see below).
6330 If this option is turned on, the \s-1CPP\s0 macro \f(CW\*(C`_IEEE_FP\*(C'\fR is defined
6331 during compilation.  The option is a shorthand for: \fB\-D_IEEE_FP
6332 \&\-mfp-trap-mode=su \-mtrap-precision=i \-mieee-conformant\fR.  The resulting
6333 code is less efficient but is able to correctly support denormalized
6334 numbers and exceptional \s-1IEEE\s0 values such as not-a-number and plus/minus
6335 infinity.  Other Alpha compilers call this option
6336 \&\fB\-ieee_with_no_inexact\fR.
6337 .Ip "\fB\-mieee-with-inexact\fR" 4
6338 .IX Item "-mieee-with-inexact"
6339 This is like \fB\-mieee\fR except the generated code also maintains the
6340 \&\s-1IEEE\s0 \fIinexact flag\fR.  Turning on this option causes the generated
6341 code to implement fully-compliant \s-1IEEE\s0 math.  The option is a shorthand
6342 for \fB\-D_IEEE_FP \-D_IEEE_FP_INEXACT\fR plus the three following:
6343 \&\fB\-mieee-conformant\fR,
6344 \&\fB\-mfp-trap-mode=sui\fR, 
6345 and \fB\-mtrap-precision=i\fR.  
6346 On some Alpha implementations the resulting code may execute
6347 significantly slower than the code generated by default.  Since there
6348 is very little code that depends on the \fIinexact flag\fR, you should
6349 normally not specify this option.  Other Alpha compilers call this
6350 option \fB\-ieee_with_inexact\fR.
6351 .Ip "\fB\-mfp-trap-mode=\fR\fItrap mode\fR" 4
6352 .IX Item "-mfp-trap-mode=trap mode"
6353 This option controls what floating-point related traps are enabled.
6354 Other Alpha compilers call this option \fB\-fptm\fR \fItrap mode\fR.
6355 The trap mode can be set to one of four values:
6356 .RS 4
6357 .Ip "\fBn\fR" 4
6358 .IX Item "n"
6359 This is the default (normal) setting.  The only traps that are enabled
6360 are the ones that cannot be disabled in software (e.g., division by zero
6361 trap).
6362 .Ip "\fBu\fR" 4
6363 .IX Item "u"
6364 In addition to the traps enabled by \fBn\fR, underflow traps are enabled
6365 as well.
6366 .Ip "\fBsu\fR" 4
6367 .IX Item "su"
6368 Like \fBsu\fR, but the instructions are marked to be safe for software
6369 completion (see Alpha architecture manual for details).
6370 .Ip "\fBsui\fR" 4
6371 .IX Item "sui"
6372 Like \fBsu\fR, but inexact traps are enabled as well.
6374 .RS 4
6376 .Ip "\fB\-mfp-rounding-mode=\fR\fIrounding mode\fR" 4
6377 .IX Item "-mfp-rounding-mode=rounding mode"
6378 Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
6379 \&\fB\-fprm\fR \fIrounding mode\fR.  The \fIrounding mode\fR can be one
6381 .RS 4
6382 .Ip "\fBn\fR" 4
6383 .IX Item "n"
6384 Normal \s-1IEEE\s0 rounding mode.  Floating point numbers are rounded towards
6385 the nearest machine number or towards the even machine number in case
6386 of a tie.
6387 .Ip "\fBm\fR" 4
6388 .IX Item "m"
6389 Round towards minus infinity.
6390 .Ip "\fBc\fR" 4
6391 .IX Item "c"
6392 Chopped rounding mode.  Floating point numbers are rounded towards zero.
6393 .Ip "\fBd\fR" 4
6394 .IX Item "d"
6395 Dynamic rounding mode.  A field in the floating point control register
6396 (\fIfpcr\fR, see Alpha architecture reference manual) controls the
6397 rounding mode in effect.  The C library initializes this register for
6398 rounding towards plus infinity.  Thus, unless your program modifies the
6399 \&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
6401 .RS 4
6403 .Ip "\fB\-mtrap-precision=\fR\fItrap precision\fR" 4
6404 .IX Item "-mtrap-precision=trap precision"
6405 In the Alpha architecture, floating point traps are imprecise.  This
6406 means without software assistance it is impossible to recover from a
6407 floating trap and program execution normally needs to be terminated.
6408 \&\s-1GCC\s0 can generate code that can assist operating system trap handlers
6409 in determining the exact location that caused a floating point trap.
6410 Depending on the requirements of an application, different levels of
6411 precisions can be selected:
6412 .RS 4
6413 .Ip "\fBp\fR" 4
6414 .IX Item "p"
6415 Program precision.  This option is the default and means a trap handler
6416 can only identify which program caused a floating point exception.
6417 .Ip "\fBf\fR" 4
6418 .IX Item "f"
6419 Function precision.  The trap handler can determine the function that
6420 caused a floating point exception.
6421 .Ip "\fBi\fR" 4
6422 .IX Item "i"
6423 Instruction precision.  The trap handler can determine the exact
6424 instruction that caused a floating point exception.
6426 .RS 4
6428 Other Alpha compilers provide the equivalent options called
6429 \&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
6431 .Ip "\fB\-mieee-conformant\fR" 4
6432 .IX Item "-mieee-conformant"
6433 This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
6434 use this option unless you also specify \fB\-mtrap-precision=i\fR and either
6435 \&\fB\-mfp-trap-mode=su\fR or \fB\-mfp-trap-mode=sui\fR.  Its only effect
6436 is to emit the line \fB.eflag 48\fR in the function prologue of the
6437 generated assembly file.  Under \s-1DEC\s0 Unix, this has the effect that
6438 IEEE-conformant math library routines will be linked in.
6439 .Ip "\fB\-mbuild-constants\fR" 4
6440 .IX Item "-mbuild-constants"
6441 Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
6442 see if it can construct it from smaller constants in two or three
6443 instructions.  If it cannot, it will output the constant as a literal and
6444 generate code to load it from the data segment at runtime.
6446 Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
6447 using code, even if it takes more instructions (the maximum is six).
6449 You would typically use this option to build a shared library dynamic
6450 loader.  Itself a shared library, it must relocate itself in memory
6451 before it can find the variables and constants in its own data segment.
6452 .Ip "\fB\-malpha-as\fR" 4
6453 .IX Item "-malpha-as"
6454 .PD 0
6455 .Ip "\fB\-mgas\fR" 4
6456 .IX Item "-mgas"
6458 Select whether to generate code to be assembled by the vendor-supplied
6459 assembler (\fB\-malpha-as\fR) or by the \s-1GNU\s0 assembler \fB\-mgas\fR.
6460 .Ip "\fB\-mbwx\fR" 4
6461 .IX Item "-mbwx"
6462 .PD 0
6463 .Ip "\fB\-mno-bwx\fR" 4
6464 .IX Item "-mno-bwx"
6465 .Ip "\fB\-mcix\fR" 4
6466 .IX Item "-mcix"
6467 .Ip "\fB\-mno-cix\fR" 4
6468 .IX Item "-mno-cix"
6469 .Ip "\fB\-mmax\fR" 4
6470 .IX Item "-mmax"
6471 .Ip "\fB\-mno-max\fR" 4
6472 .IX Item "-mno-max"
6474 Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX\s0,
6475 \&\s-1CIX\s0, and \s-1MAX\s0 instruction sets.  The default is to use the instruction sets
6476 supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
6477 of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none was specified.
6478 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
6479 .IX Item "-mcpu=cpu_type"
6480 Set the instruction set, register set, and instruction scheduling
6481 parameters for machine type \fIcpu_type\fR.  You can specify either the
6482 \&\fB\s-1EV\s0\fR style name or the corresponding chip number.  \s-1GCC\s0
6483 supports scheduling parameters for the \s-1EV4\s0 and \s-1EV5\s0 family of processors
6484 and will choose the default values for the instruction set from
6485 the processor you specify.  If you do not specify a processor type,
6486 \&\s-1GCC\s0 will default to the processor on which the compiler was built.
6488 Supported values for \fIcpu_type\fR are
6489 .RS 4
6490 .Ip "\fBev4\fR" 4
6491 .IX Item "ev4"
6492 .PD 0
6493 .Ip "\fB21064\fR" 4
6494 .IX Item "21064"
6496 Schedules as an \s-1EV4\s0 and has no instruction set extensions.
6497 .Ip "\fBev5\fR" 4
6498 .IX Item "ev5"
6499 .PD 0
6500 .Ip "\fB21164\fR" 4
6501 .IX Item "21164"
6503 Schedules as an \s-1EV5\s0 and has no instruction set extensions.
6504 .Ip "\fBev56\fR" 4
6505 .IX Item "ev56"
6506 .PD 0
6507 .Ip "\fB21164a\fR" 4
6508 .IX Item "21164a"
6510 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
6511 .Ip "\fBpca56\fR" 4
6512 .IX Item "pca56"
6513 .PD 0
6514 .Ip "\fB21164pc\fR" 4
6515 .IX Item "21164pc"
6516 .Ip "\fB21164PC\fR" 4
6517 .IX Item "21164PC"
6519 Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
6520 .Ip "\fBev6\fR" 4
6521 .IX Item "ev6"
6522 .PD 0
6523 .Ip "\fB21264\fR" 4
6524 .IX Item "21264"
6526 Schedules as an \s-1EV5\s0 (until Digital releases the scheduling parameters
6527 for the \s-1EV6\s0) and supports the \s-1BWX\s0, \s-1CIX\s0, and \s-1MAX\s0 extensions.
6529 .RS 4
6531 .Ip "\fB\-mmemory-latency=\fR\fItime\fR" 4
6532 .IX Item "-mmemory-latency=time"
6533 Sets the latency the scheduler should assume for typical memory
6534 references as seen by the application.  This number is highly
6535 dependent on the memory access patterns used by the application
6536 and the size of the external cache on the machine.
6538 Valid options for \fItime\fR are
6539 .RS 4
6540 .Ip "\fInumber\fR" 4
6541 .IX Item "number"
6542 A decimal number representing clock cycles.
6543 .Ip "\fBL1\fR" 4
6544 .IX Item "L1"
6545 .PD 0
6546 .Ip "\fBL2\fR" 4
6547 .IX Item "L2"
6548 .Ip "\fBL3\fR" 4
6549 .IX Item "L3"
6550 .Ip "\fBmain\fR" 4
6551 .IX Item "main"
6553 The compiler contains estimates of the number of clock cycles for
6554 ``typical'' \s-1EV4\s0 & \s-1EV5\s0 hardware for the Level 1, 2 & 3 caches
6555 (also called Dcache, Scache, and Bcache), as well as to main memory.
6556 Note that L3 is only valid for \s-1EV5\s0.
6558 .RS 4
6561 .I "Clipper Options"
6562 .IX Subsection "Clipper Options"
6564 These \fB\-m\fR options are defined for the Clipper implementations:
6565 .Ip "\fB\-mc300\fR" 4
6566 .IX Item "-mc300"
6567 Produce code for a C300 Clipper processor. This is the default.
6568 .Ip "\fB\-mc400\fR" 4
6569 .IX Item "-mc400"
6570 Produce code for a C400 Clipper processor i.e. use floating point
6571 registers f8..f15.
6573 .I "H8/300 Options"
6574 .IX Subsection "H8/300 Options"
6576 These \fB\-m\fR options are defined for the H8/300 implementations:
6577 .Ip "\fB\-mrelax\fR" 4
6578 .IX Item "-mrelax"
6579 Shorten some address references at link time, when possible; uses the
6580 linker option \fB\-relax\fR.  
6581 .Ip "\fB\-mh\fR" 4
6582 .IX Item "-mh"
6583 Generate code for the H8/300H.
6584 .Ip "\fB\-ms\fR" 4
6585 .IX Item "-ms"
6586 Generate code for the H8/S.
6587 .Ip "\fB\-ms2600\fR" 4
6588 .IX Item "-ms2600"
6589 Generate code for the H8/S2600.  This switch must be used with \-ms.
6590 .Ip "\fB\-mint32\fR" 4
6591 .IX Item "-mint32"
6592 Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
6593 .Ip "\fB\-malign-300\fR" 4
6594 .IX Item "-malign-300"
6595 On the H8/300H and H8/S, use the same alignment rules as for the H8/300.
6596 The default for the H8/300H and H8/S is to align longs and floats on 4
6597 byte boundaries.
6598 \&\fB\-malign-300\fR causes them to be aligned on 2 byte boundaries.
6599 This option has no effect on the H8/300.
6601 .I "\s-1SH\s0 Options"
6602 .IX Subsection "SH Options"
6604 These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
6605 .Ip "\fB\-m1\fR" 4
6606 .IX Item "-m1"
6607 Generate code for the \s-1SH1\s0.
6608 .Ip "\fB\-m2\fR" 4
6609 .IX Item "-m2"
6610 Generate code for the \s-1SH2\s0.
6611 .Ip "\fB\-m3\fR" 4
6612 .IX Item "-m3"
6613 Generate code for the \s-1SH3\s0.
6614 .Ip "\fB\-m3e\fR" 4
6615 .IX Item "-m3e"
6616 Generate code for the SH3e.
6617 .Ip "\fB\-m4\-nofpu\fR" 4
6618 .IX Item "-m4-nofpu"
6619 Generate code for the \s-1SH4\s0 without a floating-point unit.
6620 .Ip "\fB\-m4\-single-only\fR" 4
6621 .IX Item "-m4-single-only"
6622 Generate code for the \s-1SH4\s0 with a floating-point unit that only
6623 supports single-precision arithmentic.
6624 .Ip "\fB\-m4\-single\fR" 4
6625 .IX Item "-m4-single"
6626 Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
6627 single-precision mode by default.
6628 .Ip "\fB\-m4\fR" 4
6629 .IX Item "-m4"
6630 Generate code for the \s-1SH4\s0.
6631 .Ip "\fB\-mb\fR" 4
6632 .IX Item "-mb"
6633 Compile code for the processor in big endian mode.
6634 .Ip "\fB\-ml\fR" 4
6635 .IX Item "-ml"
6636 Compile code for the processor in little endian mode.
6637 .Ip "\fB\-mdalign\fR" 4
6638 .IX Item "-mdalign"
6639 Align doubles at 64 bit boundaries.  Note that this changes the calling
6640 conventions, and thus some functions from the standard C library will
6641 not work unless you recompile it first with \-mdalign.
6642 .Ip "\fB\-mrelax\fR" 4
6643 .IX Item "-mrelax"
6644 Shorten some address references at link time, when possible; uses the
6645 linker option \fB\-relax\fR.
6646 .Ip "\fB\-mbigtable\fR" 4
6647 .IX Item "-mbigtable"
6648 Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
6649 16\-bit offsets.
6650 .Ip "\fB\-mfmovd\fR" 4
6651 .IX Item "-mfmovd"
6652 Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.
6653 .Ip "\fB\-mhitachi\fR" 4
6654 .IX Item "-mhitachi"
6655 Comply with the calling conventions defined by Hitachi.
6656 .Ip "\fB\-mnomacsave\fR" 4
6657 .IX Item "-mnomacsave"
6658 Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
6659 \&\fB\-mhitachi\fR is given.
6660 .Ip "\fB\-misize\fR" 4
6661 .IX Item "-misize"
6662 Dump instruction size and location in the assembly code.
6663 .Ip "\fB\-mpadstruct\fR" 4
6664 .IX Item "-mpadstruct"
6665 This option is deprecated.  It pads structures to multiple of 4 bytes,
6666 which is incompatible with the \s-1SH\s0 \s-1ABI\s0.
6667 .Ip "\fB\-mspace\fR" 4
6668 .IX Item "-mspace"
6669 Optimize for space instead of speed.  Implied by \fB\-Os\fR.
6670 .Ip "\fB\-mprefergot\fR" 4
6671 .IX Item "-mprefergot"
6672 When generating position-independent code, emit function calls using
6673 the Global Offset Table instead of the Procedure Linkage Table.
6674 .Ip "\fB\-musermode\fR" 4
6675 .IX Item "-musermode"
6676 Generate a library function call to invalidate instruction cache
6677 entries, after fixing up a trampoline.  This library function call
6678 doesn't assume it can write to the whole memory address space.  This
6679 is the default when the target is \f(CW\*(C`sh\-*\-linux*\*(C'\fR.
6681 .I "Options for System V"
6682 .IX Subsection "Options for System V"
6684 These additional options are available on System V Release 4 for
6685 compatibility with other compilers on those systems:
6686 .Ip "\fB\-G\fR" 4
6687 .IX Item "-G"
6688 Create a shared object.
6689 It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
6690 .Ip "\fB\-Qy\fR" 4
6691 .IX Item "-Qy"
6692 Identify the versions of each tool used by the compiler, in a
6693 \&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
6694 .Ip "\fB\-Qn\fR" 4
6695 .IX Item "-Qn"
6696 Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
6697 the default).
6698 .Ip "\fB\-YP,\fR\fIdirs\fR" 4
6699 .IX Item "-YP,dirs"
6700 Search the directories \fIdirs\fR, and no others, for libraries
6701 specified with \fB\-l\fR.
6702 .Ip "\fB\-Ym,\fR\fIdir\fR" 4
6703 .IX Item "-Ym,dir"
6704 Look in the directory \fIdir\fR to find the M4 preprocessor.
6705 The assembler uses this option.
6707 .I "TMS320C3x/C4x Options"
6708 .IX Subsection "TMS320C3x/C4x Options"
6710 These \fB\-m\fR options are defined for TMS320C3x/C4x implementations:
6711 .Ip "\fB\-mcpu=\fR\fIcpu_type\fR" 4
6712 .IX Item "-mcpu=cpu_type"
6713 Set the instruction set, register set, and instruction scheduling
6714 parameters for machine type \fIcpu_type\fR.  Supported values for
6715 \&\fIcpu_type\fR are \fBc30\fR, \fBc31\fR, \fBc32\fR, \fBc40\fR, and
6716 \&\fBc44\fR.  The default is \fBc40\fR to generate code for the
6717 \&\s-1TMS320C40\s0.
6718 .Ip "\fB\-mbig-memory\fR" 4
6719 .IX Item "-mbig-memory"
6720 .PD 0
6721 .Ip "\fB\-mbig\fR" 4
6722 .IX Item "-mbig"
6723 .Ip "\fB\-msmall-memory\fR" 4
6724 .IX Item "-msmall-memory"
6725 .Ip "\fB\-msmall\fR" 4
6726 .IX Item "-msmall"
6728 Generates code for the big or small memory model.  The small memory
6729 model assumed that all data fits into one 64K word page.  At run-time
6730 the data page (\s-1DP\s0) register must be set to point to the 64K page
6731 containing the .bss and .data program sections.  The big memory model is
6732 the default and requires reloading of the \s-1DP\s0 register for every direct
6733 memory access.
6734 .Ip "\fB\-mbk\fR" 4
6735 .IX Item "-mbk"
6736 .PD 0
6737 .Ip "\fB\-mno-bk\fR" 4
6738 .IX Item "-mno-bk"
6740 Allow (disallow) allocation of general integer operands into the block
6741 count register \s-1BK\s0. 
6742 .Ip "\fB\-mdb\fR" 4
6743 .IX Item "-mdb"
6744 .PD 0
6745 .Ip "\fB\-mno-db\fR" 4
6746 .IX Item "-mno-db"
6748 Enable (disable) generation of code using decrement and branch,
6749 \&\fIDBcond\fR\|(D), instructions.  This is enabled by default for the C4x.  To be
6750 on the safe side, this is disabled for the C3x, since the maximum
6751 iteration count on the C3x is 2^23 + 1 (but who iterates loops more than
6752 2^23 times on the C3x?).  Note that \s-1GCC\s0 will try to reverse a loop so
6753 that it can utilise the decrement and branch instruction, but will give
6754 up if there is more than one memory reference in the loop.  Thus a loop
6755 where the loop counter is decremented can generate slightly more
6756 efficient code, in cases where the \s-1RPTB\s0 instruction cannot be utilised.
6757 .Ip "\fB\-mdp-isr-reload\fR" 4
6758 .IX Item "-mdp-isr-reload"
6759 .PD 0
6760 .Ip "\fB\-mparanoid\fR" 4
6761 .IX Item "-mparanoid"
6763 Force the \s-1DP\s0 register to be saved on entry to an interrupt service
6764 routine (\s-1ISR\s0), reloaded to point to the data section, and restored on
6765 exit from the \s-1ISR\s0.  This should not be required unless someone has
6766 violated the small memory model by modifying the \s-1DP\s0 register, say within
6767 an object library.
6768 .Ip "\fB\-mmpyi\fR" 4
6769 .IX Item "-mmpyi"
6770 .PD 0
6771 .Ip "\fB\-mno-mpyi\fR" 4
6772 .IX Item "-mno-mpyi"
6774 For the C3x use the 24\-bit \s-1MPYI\s0 instruction for integer multiplies
6775 instead of a library call to guarantee 32\-bit results.  Note that if one
6776 of the operands is a constant, then the multiplication will be performed
6777 using shifts and adds.  If the \-mmpyi option is not specified for the C3x,
6778 then squaring operations are performed inline instead of a library call.
6779 .Ip "\fB\-mfast-fix\fR" 4
6780 .IX Item "-mfast-fix"
6781 .PD 0
6782 .Ip "\fB\-mno-fast-fix\fR" 4
6783 .IX Item "-mno-fast-fix"
6785 The C3x/C4x \s-1FIX\s0 instruction to convert a floating point value to an
6786 integer value chooses the nearest integer less than or equal to the
6787 floating point value rather than to the nearest integer.  Thus if the
6788 floating point number is negative, the result will be incorrectly
6789 truncated an additional code is necessary to detect and correct this
6790 case.  This option can be used to disable generation of the additional
6791 code required to correct the result.
6792 .Ip "\fB\-mrptb\fR" 4
6793 .IX Item "-mrptb"
6794 .PD 0
6795 .Ip "\fB\-mno-rptb\fR" 4
6796 .IX Item "-mno-rptb"
6798 Enable (disable) generation of repeat block sequences using the \s-1RPTB\s0
6799 instruction for zero overhead looping.  The \s-1RPTB\s0 construct is only used
6800 for innermost loops that do not call functions or jump across the loop
6801 boundaries.  There is no advantage having nested \s-1RPTB\s0 loops due to the
6802 overhead required to save and restore the \s-1RC\s0, \s-1RS\s0, and \s-1RE\s0 registers.
6803 This is enabled by default with \-O2.
6804 .Ip "\fB\-mrpts=\fR\fIcount\fR" 4
6805 .IX Item "-mrpts=count"
6806 .PD 0
6807 .Ip "\fB\-mno-rpts\fR" 4
6808 .IX Item "-mno-rpts"
6810 Enable (disable) the use of the single instruction repeat instruction
6811 \&\s-1RPTS\s0.  If a repeat block contains a single instruction, and the loop
6812 count can be guaranteed to be less than the value \fIcount\fR, \s-1GCC\s0 will
6813 emit a \s-1RPTS\s0 instruction instead of a \s-1RPTB\s0.  If no value is specified,
6814 then a \s-1RPTS\s0 will be emitted even if the loop count cannot be determined
6815 at compile time.  Note that the repeated instruction following \s-1RPTS\s0 does
6816 not have to be reloaded from memory each iteration, thus freeing up the
6817 \&\s-1CPU\s0 buses for operands.  However, since interrupts are blocked by this
6818 instruction, it is disabled by default.
6819 .Ip "\fB\-mloop-unsigned\fR" 4
6820 .IX Item "-mloop-unsigned"
6821 .PD 0
6822 .Ip "\fB\-mno-loop-unsigned\fR" 4
6823 .IX Item "-mno-loop-unsigned"
6825 The maximum iteration count when using \s-1RPTS\s0 and \s-1RPTB\s0 (and \s-1DB\s0 on the C40)
6826 is 2^31 + 1 since these instructions test if the iteration count is
6827 negative to terminate the loop.  If the iteration count is unsigned
6828 there is a possibility than the 2^31 + 1 maximum iteration count may be
6829 exceeded.  This switch allows an unsigned iteration count.
6830 .Ip "\fB\-mti\fR" 4
6831 .IX Item "-mti"
6832 Try to emit an assembler syntax that the \s-1TI\s0 assembler (asm30) is happy
6833 with.  This also enforces compatibility with the \s-1API\s0 employed by the \s-1TI\s0
6834 C3x C compiler.  For example, long doubles are passed as structures
6835 rather than in floating point registers.
6836 .Ip "\fB\-mregparm\fR" 4
6837 .IX Item "-mregparm"
6838 .PD 0
6839 .Ip "\fB\-mmemparm\fR" 4
6840 .IX Item "-mmemparm"
6842 Generate code that uses registers (stack) for passing arguments to functions.
6843 By default, arguments are passed in registers where possible rather
6844 than by pushing arguments on to the stack.
6845 .Ip "\fB\-mparallel-insns\fR" 4
6846 .IX Item "-mparallel-insns"
6847 .PD 0
6848 .Ip "\fB\-mno-parallel-insns\fR" 4
6849 .IX Item "-mno-parallel-insns"
6851 Allow the generation of parallel instructions.  This is enabled by
6852 default with \-O2.
6853 .Ip "\fB\-mparallel-mpy\fR" 4
6854 .IX Item "-mparallel-mpy"
6855 .PD 0
6856 .Ip "\fB\-mno-parallel-mpy\fR" 4
6857 .IX Item "-mno-parallel-mpy"
6859 Allow the generation of MPY||ADD and MPY||SUB parallel instructions,
6860 provided \-mparallel-insns is also specified.  These instructions have
6861 tight register constraints which can pessimize the code generation
6862 of large functions.
6864 .I "V850 Options"
6865 .IX Subsection "V850 Options"
6867 These \fB\-m\fR options are defined for V850 implementations:
6868 .Ip "\fB\-mlong-calls\fR" 4
6869 .IX Item "-mlong-calls"
6870 .PD 0
6871 .Ip "\fB\-mno-long-calls\fR" 4
6872 .IX Item "-mno-long-calls"
6874 Treat all calls as being far away (near).  If calls are assumed to be
6875 far away, the compiler will always load the functions address up into a
6876 register, and call indirect through the pointer.
6877 .Ip "\fB\-mno-ep\fR" 4
6878 .IX Item "-mno-ep"
6879 .PD 0
6880 .Ip "\fB\-mep\fR" 4
6881 .IX Item "-mep"
6883 Do not optimize (do optimize) basic blocks that use the same index
6884 pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
6885 use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
6886 option is on by default if you optimize.
6887 .Ip "\fB\-mno-prolog-function\fR" 4
6888 .IX Item "-mno-prolog-function"
6889 .PD 0
6890 .Ip "\fB\-mprolog-function\fR" 4
6891 .IX Item "-mprolog-function"
6893 Do not use (do use) external functions to save and restore registers at
6894 the prolog and epilog of a function.  The external functions are slower,
6895 but use less code space if more than one function saves the same number
6896 of registers.  The \fB\-mprolog-function\fR option is on by default if
6897 you optimize.
6898 .Ip "\fB\-mspace\fR" 4
6899 .IX Item "-mspace"
6900 Try to make the code as small as possible.  At present, this just turns
6901 on the \fB\-mep\fR and \fB\-mprolog-function\fR options.
6902 .Ip "\fB\-mtda=\fR\fIn\fR" 4
6903 .IX Item "-mtda=n"
6904 Put static or global variables whose size is \fIn\fR bytes or less into
6905 the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
6906 area can hold up to 256 bytes in total (128 bytes for byte references).
6907 .Ip "\fB\-msda=\fR\fIn\fR" 4
6908 .IX Item "-msda=n"
6909 Put static or global variables whose size is \fIn\fR bytes or less into
6910 the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
6911 area can hold up to 64 kilobytes.
6912 .Ip "\fB\-mzda=\fR\fIn\fR" 4
6913 .IX Item "-mzda=n"
6914 Put static or global variables whose size is \fIn\fR bytes or less into
6915 the first 32 kilobytes of memory.
6916 .Ip "\fB\-mv850\fR" 4
6917 .IX Item "-mv850"
6918 Specify that the target processor is the V850.
6919 .Ip "\fB\-mbig-switch\fR" 4
6920 .IX Item "-mbig-switch"
6921 Generate code suitable for big switch tables.  Use this option only if
6922 the assembler/linker complain about out of range branches within a switch
6923 table.
6925 .I "\s-1ARC\s0 Options"
6926 .IX Subsection "ARC Options"
6928 These options are defined for \s-1ARC\s0 implementations:
6929 .Ip "\fB\-EL\fR" 4
6930 .IX Item "-EL"
6931 Compile code for little endian mode.  This is the default.
6932 .Ip "\fB\-EB\fR" 4
6933 .IX Item "-EB"
6934 Compile code for big endian mode.
6935 .Ip "\fB\-mmangle-cpu\fR" 4
6936 .IX Item "-mmangle-cpu"
6937 Prepend the name of the cpu to all public symbol names.
6938 In multiple-processor systems, there are many \s-1ARC\s0 variants with different
6939 instruction and register set characteristics.  This flag prevents code
6940 compiled for one cpu to be linked with code compiled for another.
6941 No facility exists for handling variants that are \*(L"almost identical\*(R".
6942 This is an all or nothing option.
6943 .Ip "\fB\-mcpu=\fR\fIcpu\fR" 4
6944 .IX Item "-mcpu=cpu"
6945 Compile code for \s-1ARC\s0 variant \fIcpu\fR.
6946 Which variants are supported depend on the configuration.
6947 All variants support \fB\-mcpu=base\fR, this is the default.
6948 .Ip "\fB\-mtext=\fR\fItext section\fR" 4
6949 .IX Item "-mtext=text section"
6950 .PD 0
6951 .Ip "\fB\-mdata=\fR\fIdata section\fR" 4
6952 .IX Item "-mdata=data section"
6953 .Ip "\fB\-mrodata=\fR\fIreadonly data section\fR" 4
6954 .IX Item "-mrodata=readonly data section"
6956 Put functions, data, and readonly data in \fItext section\fR,
6957 \&\fIdata section\fR, and \fIreadonly data section\fR respectively
6958 by default.  This can be overridden with the \f(CW\*(C`section\*(C'\fR attribute.
6960 .I "\s-1NS32K\s0 Options"
6961 .IX Subsection "NS32K Options"
6963 These are the \fB\-m\fR options defined for the 32000 series.  The default
6964 values for these options depends on which style of 32000 was selected when
6965 the compiler was configured; the defaults for the most common choices are
6966 given below.
6967 .Ip "\fB\-m32032\fR" 4
6968 .IX Item "-m32032"
6969 .PD 0
6970 .Ip "\fB\-m32032\fR" 4
6971 .IX Item "-m32032"
6973 Generate output for a 32032.  This is the default
6974 when the compiler is configured for 32032 and 32016 based systems.
6975 .Ip "\fB\-m32332\fR" 4
6976 .IX Item "-m32332"
6977 .PD 0
6978 .Ip "\fB\-m32332\fR" 4
6979 .IX Item "-m32332"
6981 Generate output for a 32332.  This is the default
6982 when the compiler is configured for 32332\-based systems.
6983 .Ip "\fB\-m32532\fR" 4
6984 .IX Item "-m32532"
6985 .PD 0
6986 .Ip "\fB\-m32532\fR" 4
6987 .IX Item "-m32532"
6989 Generate output for a 32532.  This is the default
6990 when the compiler is configured for 32532\-based systems.
6991 .Ip "\fB\-m32081\fR" 4
6992 .IX Item "-m32081"
6993 Generate output containing 32081 instructions for floating point.
6994 This is the default for all systems.
6995 .Ip "\fB\-m32381\fR" 4
6996 .IX Item "-m32381"
6997 Generate output containing 32381 instructions for floating point.  This
6998 also implies \fB\-m32081\fR. The 32381 is only compatible with the 32332
6999 and 32532 cpus. This is the default for the pc532\-netbsd configuration.
7000 .Ip "\fB\-mmulti-add\fR" 4
7001 .IX Item "-mmulti-add"
7002 Try and generate multiply-add floating point instructions \f(CW\*(C`polyF\*(C'\fR
7003 and \f(CW\*(C`dotF\*(C'\fR. This option is only available if the \fB\-m32381\fR
7004 option is in effect. Using these instructions requires changes to to
7005 register allocation which generally has a negative impact on
7006 performance.  This option should only be enabled when compiling code
7007 particularly likely to make heavy use of multiply-add instructions.
7008 .Ip "\fB\-mnomulti-add\fR" 4
7009 .IX Item "-mnomulti-add"
7010 Do not try and generate multiply-add floating point instructions
7011 \&\f(CW\*(C`polyF\*(C'\fR and \f(CW\*(C`dotF\*(C'\fR. This is the default on all platforms.
7012 .Ip "\fB\-msoft-float\fR" 4
7013 .IX Item "-msoft-float"
7014 Generate output containing library calls for floating point.
7015 \&\fBWarning:\fR the requisite libraries may not be available.
7016 .Ip "\fB\-mnobitfield\fR" 4
7017 .IX Item "-mnobitfield"
7018 Do not use the bit-field instructions. On some machines it is faster to
7019 use shifting and masking operations. This is the default for the pc532.
7020 .Ip "\fB\-mbitfield\fR" 4
7021 .IX Item "-mbitfield"
7022 Do use the bit-field instructions. This is the default for all platforms
7023 except the pc532.
7024 .Ip "\fB\-mrtd\fR" 4
7025 .IX Item "-mrtd"
7026 Use a different function-calling convention, in which functions
7027 that take a fixed number of arguments return pop their
7028 arguments on return with the \f(CW\*(C`ret\*(C'\fR instruction.
7030 This calling convention is incompatible with the one normally
7031 used on Unix, so you cannot use it if you need to call libraries
7032 compiled with the Unix compiler.
7034 Also, you must provide function prototypes for all functions that
7035 take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
7036 otherwise incorrect code will be generated for calls to those
7037 functions.
7039 In addition, seriously incorrect code will result if you call a
7040 function with too many arguments.  (Normally, extra arguments are
7041 harmlessly ignored.)
7043 This option takes its name from the 680x0 \f(CW\*(C`rtd\*(C'\fR instruction.
7044 .Ip "\fB\-mregparam\fR" 4
7045 .IX Item "-mregparam"
7046 Use a different function-calling convention where the first two arguments
7047 are passed in registers.
7049 This calling convention is incompatible with the one normally
7050 used on Unix, so you cannot use it if you need to call libraries
7051 compiled with the Unix compiler.
7052 .Ip "\fB\-mnoregparam\fR" 4
7053 .IX Item "-mnoregparam"
7054 Do not pass any arguments in registers. This is the default for all
7055 targets.
7056 .Ip "\fB\-msb\fR" 4
7057 .IX Item "-msb"
7058 It is \s-1OK\s0 to use the sb as an index register which is always loaded with
7059 zero. This is the default for the pc532\-netbsd target.
7060 .Ip "\fB\-mnosb\fR" 4
7061 .IX Item "-mnosb"
7062 The sb register is not available for use or has not been initialized to
7063 zero by the run time system. This is the default for all targets except
7064 the pc532\-netbsd. It is also implied whenever \fB\-mhimem\fR or
7065 \&\fB\-fpic\fR is set.
7066 .Ip "\fB\-mhimem\fR" 4
7067 .IX Item "-mhimem"
7068 Many ns32000 series addressing modes use displacements of up to 512MB.
7069 If an address is above 512MB then displacements from zero can not be used.
7070 This option causes code to be generated which can be loaded above 512MB.
7071 This may be useful for operating systems or \s-1ROM\s0 code.
7072 .Ip "\fB\-mnohimem\fR" 4
7073 .IX Item "-mnohimem"
7074 Assume code will be loaded in the first 512MB of virtual address space.
7075 This is the default for all platforms.
7077 .I "\s-1AVR\s0 Options"
7078 .IX Subsection "AVR Options"
7080 These options are defined for \s-1AVR\s0 implementations:
7081 .Ip "\fB\-mmcu=\fR\fImcu\fR" 4
7082 .IX Item "-mmcu=mcu"
7083 Specify \s-1ATMEL\s0 \s-1AVR\s0 instruction set or \s-1MCU\s0 type.
7085 Instruction set avr1 is for the minimal \s-1AVR\s0 core, not supported by the C
7086 compiler, only for assembler programs (\s-1MCU\s0 types: at90s1200, attiny10,
7087 attiny11, attiny12, attiny15, attiny28).
7089 Instruction set avr2 (default) is for the classic \s-1AVR\s0 core with up to
7090 8K program memory space (\s-1MCU\s0 types: at90s2313, at90s2323, attiny22,
7091 at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515,
7092 at90c8534, at90s8535).
7094 Instruction set avr3 is for the classic \s-1AVR\s0 core with up to 128K program
7095 memory space (\s-1MCU\s0 types: atmega103, atmega603).
7097 Instruction set avr4 is for the enhanced \s-1AVR\s0 core with up to 8K program
7098 memory space (\s-1MCU\s0 types: atmega83, atmega85).
7100 Instruction set avr5 is for the enhanced \s-1AVR\s0 core with up to 128K program
7101 memory space (\s-1MCU\s0 types: atmega161, atmega163, atmega32, at94k).
7102 .Ip "\fB\-msize\fR" 4
7103 .IX Item "-msize"
7104 Output instruction sizes to the asm file.
7105 .Ip "\fB\-minit-stack=\fR\fIN\fR" 4
7106 .IX Item "-minit-stack=N"
7107 Specify the initial stack address, which may be a symbol or numeric value,
7108 _\|_stack is the default.
7109 .Ip "\fB\-mno-interrupts\fR" 4
7110 .IX Item "-mno-interrupts"
7111 Generated code is not compatible with hardware interrupts.
7112 Code size will be smaller.
7113 .Ip "\fB\-mcall-prologues\fR" 4
7114 .IX Item "-mcall-prologues"
7115 Functions prologues/epilogues expanded as call to appropriate
7116 subroutines. Code size will be smaller.
7117 .Ip "\fB\-mno-tablejump\fR" 4
7118 .IX Item "-mno-tablejump"
7119 Do not generate tablejump insns which sometimes increase code size.
7120 .Ip "\fB\-mtiny-stack\fR" 4
7121 .IX Item "-mtiny-stack"
7122 Change only the low 8 bits of the stack pointer.
7124 .I "MCore Options"
7125 .IX Subsection "MCore Options"
7127 These are the \fB\-m\fR options defined for the Motorola M*Core
7128 processors.  
7129 .Ip "\fB\-mhardlit\fR" 4
7130 .IX Item "-mhardlit"
7131 .PD 0
7132 .Ip "\fB\-mhardlit\fR" 4
7133 .IX Item "-mhardlit"
7134 .Ip "\fB\-mno-hardlit\fR" 4
7135 .IX Item "-mno-hardlit"
7137 Inline constants into the code stream if it can be done in two
7138 instructions or less.
7139 .Ip "\fB\-mdiv\fR" 4
7140 .IX Item "-mdiv"
7141 .PD 0
7142 .Ip "\fB\-mdiv\fR" 4
7143 .IX Item "-mdiv"
7144 .Ip "\fB\-mno-div\fR" 4
7145 .IX Item "-mno-div"
7147 Use the divide instruction.  (Enabled by default).
7148 .Ip "\fB\-mrelax-immediate\fR" 4
7149 .IX Item "-mrelax-immediate"
7150 .PD 0
7151 .Ip "\fB\-mrelax-immediate\fR" 4
7152 .IX Item "-mrelax-immediate"
7153 .Ip "\fB\-mno-relax-immediate\fR" 4
7154 .IX Item "-mno-relax-immediate"
7156 Allow arbitrary sized immediates in bit operations.
7157 .Ip "\fB\-mwide-bitfields\fR" 4
7158 .IX Item "-mwide-bitfields"
7159 .PD 0
7160 .Ip "\fB\-mwide-bitfields\fR" 4
7161 .IX Item "-mwide-bitfields"
7162 .Ip "\fB\-mno-wide-bitfields\fR" 4
7163 .IX Item "-mno-wide-bitfields"
7165 Always treat bitfields as int-sized.
7166 .Ip "\fB\-m4byte-functions\fR" 4
7167 .IX Item "-m4byte-functions"
7168 .PD 0
7169 .Ip "\fB\-m4byte-functions\fR" 4
7170 .IX Item "-m4byte-functions"
7171 .Ip "\fB\-mno-4byte-functions\fR" 4
7172 .IX Item "-mno-4byte-functions"
7174 Force all functions to be aligned to a four byte boundary.
7175 .Ip "\fB\-mcallgraph-data\fR" 4
7176 .IX Item "-mcallgraph-data"
7177 .PD 0
7178 .Ip "\fB\-mcallgraph-data\fR" 4
7179 .IX Item "-mcallgraph-data"
7180 .Ip "\fB\-mno-callgraph-data\fR" 4
7181 .IX Item "-mno-callgraph-data"
7183 Emit callgraph information.
7184 .Ip "\fB\-mslow-bytes\fR" 4
7185 .IX Item "-mslow-bytes"
7186 .PD 0
7187 .Ip "\fB\-mslow-bytes\fR" 4
7188 .IX Item "-mslow-bytes"
7189 .Ip "\fB\-mno-slow-bytes\fR" 4
7190 .IX Item "-mno-slow-bytes"
7192 Prefer word access when reading byte quantities.
7193 .Ip "\fB\-mlittle-endian\fR" 4
7194 .IX Item "-mlittle-endian"
7195 .PD 0
7196 .Ip "\fB\-mlittle-endian\fR" 4
7197 .IX Item "-mlittle-endian"
7198 .Ip "\fB\-mbig-endian\fR" 4
7199 .IX Item "-mbig-endian"
7201 Generate code for a little endian target.
7202 .Ip "\fB\-m210\fR" 4
7203 .IX Item "-m210"
7204 .PD 0
7205 .Ip "\fB\-m210\fR" 4
7206 .IX Item "-m210"
7207 .Ip "\fB\-m340\fR" 4
7208 .IX Item "-m340"
7210 Generate code for the 210 processor.
7212 .I "\s-1IA-64\s0 Options"
7213 .IX Subsection "IA-64 Options"
7215 These are the \fB\-m\fR options defined for the Intel \s-1IA-64\s0 architecture.
7216 .Ip "\fB\-mbig-endian\fR" 4
7217 .IX Item "-mbig-endian"
7218 Generate code for a big endian target.  This is the default for \s-1HPUX\s0.
7219 .Ip "\fB\-mlittle-endian\fR" 4
7220 .IX Item "-mlittle-endian"
7221 Generate code for a little endian target.  This is the default for \s-1AIX5\s0
7222 and Linux.
7223 .Ip "\fB\-mgnu-as\fR" 4
7224 .IX Item "-mgnu-as"
7225 .PD 0
7226 .Ip "\fB\-mno-gnu-as\fR" 4
7227 .IX Item "-mno-gnu-as"
7229 Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
7230 .Ip "\fB\-mgnu-ld\fR" 4
7231 .IX Item "-mgnu-ld"
7232 .PD 0
7233 .Ip "\fB\-mno-gnu-ld\fR" 4
7234 .IX Item "-mno-gnu-ld"
7236 Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
7237 .Ip "\fB\-mno-pic\fR" 4
7238 .IX Item "-mno-pic"
7239 Generate code that does not use a global pointer register.  The result
7240 is not position independent code, and violates the \s-1IA-64\s0 \s-1ABI\s0.
7241 .Ip "\fB\-mvolatile-asm-stop\fR" 4
7242 .IX Item "-mvolatile-asm-stop"
7243 .PD 0
7244 .Ip "\fB\-mno-volatile-asm-stop\fR" 4
7245 .IX Item "-mno-volatile-asm-stop"
7247 Generate (or don't) a stop bit immediately before and after volatile asm
7248 statements.
7249 .Ip "\fB\-mb-step\fR" 4
7250 .IX Item "-mb-step"
7251 Generate code that works around Itanium B step errata.
7252 .Ip "\fB\-mregister-names\fR" 4
7253 .IX Item "-mregister-names"
7254 .PD 0
7255 .Ip "\fB\-mno-register-names\fR" 4
7256 .IX Item "-mno-register-names"
7258 Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
7259 the stacked registers.  This may make assembler output more readable.
7260 .Ip "\fB\-mno-sdata\fR" 4
7261 .IX Item "-mno-sdata"
7262 .PD 0
7263 .Ip "\fB\-msdata\fR" 4
7264 .IX Item "-msdata"
7266 Disable (or enable) optimizations that use the small data section.  This may
7267 be useful for working around optimizer bugs.
7268 .Ip "\fB\-mconstant-gp\fR" 4
7269 .IX Item "-mconstant-gp"
7270 Generate code that uses a single constant global pointer value.  This is
7271 useful when compiling kernel code.
7272 .Ip "\fB\-mauto-pic\fR" 4
7273 .IX Item "-mauto-pic"
7274 Generate code that is self-relocatable.  This implies \fB\-mconstant-gp\fR.
7275 This is useful when compiling firmware code.
7276 .Ip "\fB\-minline-divide-min-latency\fR" 4
7277 .IX Item "-minline-divide-min-latency"
7278 Generate code for inline divides using the minimum latency algorithm.
7279 .Ip "\fB\-minline-divide-max-throughput\fR" 4
7280 .IX Item "-minline-divide-max-throughput"
7281 Generate code for inline divides using the maximum throughput algorithm.
7282 .Ip "\fB\-mno-dwarf2\-asm\fR" 4
7283 .IX Item "-mno-dwarf2-asm"
7284 .PD 0
7285 .Ip "\fB\-mdwarf2\-asm\fR" 4
7286 .IX Item "-mdwarf2-asm"
7288 Don't (or do) generate assembler code for the \s-1DWARF2\s0 line number debugging
7289 info.  This may be useful when not using the \s-1GNU\s0 assembler.
7290 .Ip "\fB\-mfixed-range=\fR\fIregister range\fR" 4
7291 .IX Item "-mfixed-range=register range"
7292 Generate code treating the given register range as fixed registers.
7293 A fixed register is one that the register allocator can not use.  This is
7294 useful when compiling kernel code.  A register range is specified as
7295 two registers separated by a dash.  Multiple register ranges can be
7296 specified separated by a comma.
7298 .I "D30V Options"
7299 .IX Subsection "D30V Options"
7301 These \fB\-m\fR options are defined for D30V implementations:
7302 .Ip "\fB\-mextmem\fR" 4
7303 .IX Item "-mextmem"
7304 Link the \fB.text\fR, \fB.data\fR, \fB.bss\fR, \fB.strings\fR,
7305 \&\fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections into external
7306 memory, which starts at location \f(CW\*(C`0x80000000\*(C'\fR.
7307 .Ip "\fB\-mextmemory\fR" 4
7308 .IX Item "-mextmemory"
7309 Same as the \fB\-mextmem\fR switch.
7310 .Ip "\fB\-monchip\fR" 4
7311 .IX Item "-monchip"
7312 Link the \fB.text\fR section into onchip text memory, which starts at
7313 location \f(CW\*(C`0x0\*(C'\fR.  Also link \fB.data\fR, \fB.bss\fR,
7314 \&\fB.strings\fR, \fB.rodata\fR, \fB.rodata1\fR, \fB.data1\fR sections
7315 into onchip data memory, which starts at location \f(CW\*(C`0x20000000\*(C'\fR.
7316 .Ip "\fB\-mno-asm-optimize\fR" 4
7317 .IX Item "-mno-asm-optimize"
7318 .PD 0
7319 .Ip "\fB\-masm-optimize\fR" 4
7320 .IX Item "-masm-optimize"
7322 Disable (enable) passing \fB\-O\fR to the assembler when optimizing.
7323 The assembler uses the \fB\-O\fR option to automatically parallelize
7324 adjacent short instructions where possible.
7325 .Ip "\fB\-mbranch-cost=\fR\fIn\fR" 4
7326 .IX Item "-mbranch-cost=n"
7327 Increase the internal costs of branches to \fIn\fR.  Higher costs means
7328 that the compiler will issue more instructions to avoid doing a branch.
7329 The default is 2.
7330 .Ip "\fB\-mcond-exec=\fR\fIn\fR" 4
7331 .IX Item "-mcond-exec=n"
7332 Specify the maximum number of conditionally executed instructions that
7333 replace a branch.  The default is 4.
7334 .Sh "Options for Code Generation Conventions"
7335 .IX Subsection "Options for Code Generation Conventions"
7336 These machine-independent options control the interface conventions
7337 used in code generation.
7339 Most of them have both positive and negative forms; the negative form
7340 of \fB\-ffoo\fR would be \fB\-fno-foo\fR.  In the table below, only
7341 one of the forms is listed\-\-\-the one which is not the default.  You
7342 can figure out the other form by either removing \fBno-\fR or adding
7344 .Ip "\fB\-fexceptions\fR" 4
7345 .IX Item "-fexceptions"
7346 Enable exception handling. Generates extra code needed to propagate
7347 exceptions.  For some targets, this implies \s-1GNU\s0 \s-1CC\s0 will generate frame
7348 unwind information for all functions, which can produce significant data
7349 size overhead, although it does not affect execution.  If you do not
7350 specify this option, \s-1GNU\s0 \s-1CC\s0 will enable it by default for languages like
7351 \&\*(C+ which normally require exception handling, and disable itfor
7352 languages like C that do not normally require it.  However, you may need
7353 to enable this option when compiling C code that needs to interoperate
7354 properly with exception handlers written in \*(C+.  You may also wish to
7355 disable this option if you are compiling older \*(C+ programs that don't
7356 use exception handling.
7357 .Ip "\fB\-funwind-tables\fR" 4
7358 .IX Item "-funwind-tables"
7359 Similar to \fB\-fexceptions\fR, except that it will just generate any needed
7360 static data, but will not affect the generated code in any other way.
7361 You will normally not enable this option; instead, a language processor
7362 that needs this handling would enable it on your behalf.
7363 .Ip "\fB\-fpcc-struct-return\fR" 4
7364 .IX Item "-fpcc-struct-return"
7365 Return ``short'' \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
7366 longer ones, rather than in registers.  This convention is less
7367 efficient, but it has the advantage of allowing intercallability between
7368 GCC-compiled files and files compiled with other compilers.
7370 The precise convention for returning structures in memory depends
7371 on the target configuration macros.
7373 Short structures and unions are those whose size and alignment match
7374 that of some integer type.
7375 .Ip "\fB\-freg-struct-return\fR" 4
7376 .IX Item "-freg-struct-return"
7377 Use the convention that \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values are
7378 returned in registers when possible.  This is more efficient for small
7379 structures than \fB\-fpcc-struct-return\fR.
7381 If you specify neither \fB\-fpcc-struct-return\fR nor its contrary
7382 \&\fB\-freg-struct-return\fR, \s-1GCC\s0 defaults to whichever convention is
7383 standard for the target.  If there is no standard convention, \s-1GCC\s0
7384 defaults to \fB\-fpcc-struct-return\fR, except on targets where \s-1GCC\s0
7385 is the principal compiler.  In those cases, we can choose the standard,
7386 and we chose the more efficient register return alternative.
7387 .Ip "\fB\-fshort-enums\fR" 4
7388 .IX Item "-fshort-enums"
7389 Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
7390 declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
7391 will be equivalent to the smallest integer type which has enough room.
7392 .Ip "\fB\-fshort-double\fR" 4
7393 .IX Item "-fshort-double"
7394 Use the same size for \f(CW\*(C`double\*(C'\fR as for \f(CW\*(C`float\*(C'\fR.
7395 .Ip "\fB\-fshared-data\fR" 4
7396 .IX Item "-fshared-data"
7397 Requests that the data and non-\f(CW\*(C`const\*(C'\fR variables of this
7398 compilation be shared data rather than private data.  The distinction
7399 makes sense only on certain operating systems, where shared data is
7400 shared between processes running the same program, while private data
7401 exists in one copy per process.
7402 .Ip "\fB\-fno-common\fR" 4
7403 .IX Item "-fno-common"
7404 Allocate even uninitialized global variables in the data section of the
7405 object file, rather than generating them as common blocks.  This has the
7406 effect that if the same variable is declared (without \f(CW\*(C`extern\*(C'\fR) in
7407 two different compilations, you will get an error when you link them.
7408 The only reason this might be useful is if you wish to verify that the
7409 program will work on other systems which always work this way.
7410 .Ip "\fB\-fno-ident\fR" 4
7411 .IX Item "-fno-ident"
7412 Ignore the \fB#ident\fR directive.
7413 .Ip "\fB\-fno-gnu-linker\fR" 4
7414 .IX Item "-fno-gnu-linker"
7415 Do not output global initializations (such as \*(C+ constructors and
7416 destructors) in the form used by the \s-1GNU\s0 linker (on systems where the \s-1GNU\s0
7417 linker is the standard method of handling them).  Use this option when
7418 you want to use a non-GNU linker, which also requires using the
7419 \&\fBcollect2\fR program to make sure the system linker includes
7420 constructors and destructors.  (\fBcollect2\fR is included in the \s-1GCC\s0
7421 distribution.)  For systems which \fImust\fR use \fBcollect2\fR, the
7422 compiler driver \fBgcc\fR is configured to do this automatically.
7423 .Ip "\fB\-finhibit-size-directive\fR" 4
7424 .IX Item "-finhibit-size-directive"
7425 Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
7426 would cause trouble if the function is split in the middle, and the
7427 two halves are placed at locations far apart in memory.  This option is
7428 used when compiling \fIcrtstuff.c\fR; you should not need to use it
7429 for anything else.
7430 .Ip "\fB\-fverbose-asm\fR" 4
7431 .IX Item "-fverbose-asm"
7432 Put extra commentary information in the generated assembly code to
7433 make it more readable.  This option is generally only of use to those
7434 who actually need to read the generated assembly code (perhaps while
7435 debugging the compiler itself).
7437 \&\fB\-fno-verbose-asm\fR, the default, causes the
7438 extra information to be omitted and is useful when comparing two assembler
7439 files.
7440 .Ip "\fB\-fvolatile\fR" 4
7441 .IX Item "-fvolatile"
7442 Consider all memory references through pointers to be volatile.
7443 .Ip "\fB\-fvolatile-global\fR" 4
7444 .IX Item "-fvolatile-global"
7445 Consider all memory references to extern and global data items to
7446 be volatile.  \s-1GCC\s0 does not consider static data items to be volatile
7447 because of this switch.
7448 .Ip "\fB\-fvolatile-static\fR" 4
7449 .IX Item "-fvolatile-static"
7450 Consider all memory references to static data to be volatile.
7451 .Ip "\fB\-fpic\fR" 4
7452 .IX Item "-fpic"
7453 Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
7454 library, if supported for the target machine.  Such code accesses all
7455 constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
7456 loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
7457 loader is not part of \s-1GCC\s0; it is part of the operating system).  If
7458 the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
7459 maximum size, you get an error message from the linker indicating that
7460 \&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
7461 instead.  (These maximums are 16k on the m88k, 8k on the Sparc, and 32k
7462 on the m68k and \s-1RS/6000\s0.  The 386 has no such limit.)
7464 Position-independent code requires special support, and therefore works
7465 only on certain machines.  For the 386, \s-1GCC\s0 supports \s-1PIC\s0 for System V
7466 but not for the Sun 386i.  Code generated for the \s-1IBM\s0 \s-1RS/6000\s0 is always
7467 position-independent.
7468 .Ip "\fB\-fPIC\fR" 4
7469 .IX Item "-fPIC"
7470 If supported for the target machine, emit position-independent code,
7471 suitable for dynamic linking and avoiding any limit on the size of the
7472 global offset table.  This option makes a difference on the m68k, m88k,
7473 and the Sparc.
7475 Position-independent code requires special support, and therefore works
7476 only on certain machines.
7477 .Ip "\fB\-ffixed-\fR\fIreg\fR" 4
7478 .IX Item "-ffixed-reg"
7479 Treat the register named \fIreg\fR as a fixed register; generated code
7480 should never refer to it (except perhaps as a stack pointer, frame
7481 pointer or in some other fixed role).
7483 \&\fIreg\fR must be the name of a register.  The register names accepted
7484 are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
7485 macro in the machine description macro file.
7487 This flag does not have a negative form, because it specifies a
7488 three-way choice.
7489 .Ip "\fB\-fcall-used-\fR\fIreg\fR" 4
7490 .IX Item "-fcall-used-reg"
7491 Treat the register named \fIreg\fR as an allocable register that is
7492 clobbered by function calls.  It may be allocated for temporaries or
7493 variables that do not live across a call.  Functions compiled this way
7494 will not save and restore the register \fIreg\fR.
7496 It is an error to used this flag with the frame pointer or stack pointer.
7497 Use of this flag for other registers that have fixed pervasive roles in
7498 the machine's execution model will produce disastrous results.
7500 This flag does not have a negative form, because it specifies a
7501 three-way choice.
7502 .Ip "\fB\-fcall-saved-\fR\fIreg\fR" 4
7503 .IX Item "-fcall-saved-reg"
7504 Treat the register named \fIreg\fR as an allocable register saved by
7505 functions.  It may be allocated even for temporaries or variables that
7506 live across a call.  Functions compiled this way will save and restore
7507 the register \fIreg\fR if they use it.
7509 It is an error to used this flag with the frame pointer or stack pointer.
7510 Use of this flag for other registers that have fixed pervasive roles in
7511 the machine's execution model will produce disastrous results.
7513 A different sort of disaster will result from the use of this flag for
7514 a register in which function values may be returned.
7516 This flag does not have a negative form, because it specifies a
7517 three-way choice.
7518 .Ip "\fB\-fpack-struct\fR" 4
7519 .IX Item "-fpack-struct"
7520 Pack all structure members together without holes.  Usually you would
7521 not want to use this option, since it makes the code suboptimal, and
7522 the offsets of structure members won't agree with system libraries.
7523 .Ip "\fB\-fcheck-memory-usage\fR" 4
7524 .IX Item "-fcheck-memory-usage"
7525 Generate extra code to check each memory access.  \s-1GCC\s0 will generate
7526 code that is suitable for a detector of bad memory accesses such as
7527 \&\fIChecker\fR.
7529 Normally, you should compile all, or none, of your code with this option.
7531 If you do mix code compiled with and without this option,
7532 you must ensure that all code that has side effects
7533 and that is called by code compiled with this option
7534 is, itself, compiled with this option.
7535 If you do not, you might get erroneous messages from the detector.
7537 If you use functions from a library that have side-effects (such as
7538 \&\f(CW\*(C`read\*(C'\fR), you might not be able to recompile the library and
7539 specify this option.  In that case, you can enable the
7540 \&\fB\-fprefix-function-name\fR option, which requests \s-1GCC\s0 to encapsulate
7541 your code and make other functions look as if they were compiled with
7542 \&\fB\-fcheck-memory-usage\fR.  This is done by calling ``stubs'',
7543 which are provided by the detector.  If you cannot find or build
7544 stubs for every function you call, you might have to specify
7545 \&\fB\-fcheck-memory-usage\fR without \fB\-fprefix-function-name\fR.
7547 If you specify this option, you can not use the \f(CW\*(C`asm\*(C'\fR or
7548 \&\f(CW\*(C`_\|_asm_\|_\*(C'\fR keywords in functions with memory checking enabled.  \s-1GNU\s0
7549 \&\s-1CC\s0 cannot understand what the \f(CW\*(C`asm\*(C'\fR statement may do, and therefore
7550 cannot generate the appropriate code, so it will reject it.  However, if
7551 you specify the function attribute \f(CW\*(C`no_check_memory_usage\*(C'\fR, \s-1GNU\s0 \s-1CC\s0 will disable memory checking within a
7552 function; you may use \f(CW\*(C`asm\*(C'\fR statements inside such functions.  You
7553 may have an inline expansion of a non-checked function within a checked
7554 function; in that case \s-1GNU\s0 \s-1CC\s0 will not generate checks for the inlined
7555 function's memory accesses.
7557 If you move your \f(CW\*(C`asm\*(C'\fR statements to non-checked inline functions
7558 and they do access memory, you can add calls to the support code in your
7559 inline function, to indicate any reads, writes, or copies being done.
7560 These calls would be similar to those done in the stubs described above.
7561 .Ip "\fB\-fprefix-function-name\fR" 4
7562 .IX Item "-fprefix-function-name"
7563 Request \s-1GCC\s0 to add a prefix to the symbols generated for function names.
7564 \&\s-1GCC\s0 adds a prefix to the names of functions defined as well as
7565 functions called.  Code compiled with this option and code compiled
7566 without the option can't be linked together, unless stubs are used.
7568 If you compile the following code with \fB\-fprefix-function-name\fR
7570 .Vb 6
7571 \&        extern void bar (int);
7572 \&        void
7573 \&        foo (int a)
7574 \&        {
7575 \&          return bar (a + 5);
7576 \&        }
7578 \&\s-1GCC\s0 will compile the code as if it was written:
7580 .Vb 6
7581 \&        extern void prefix_bar (int);
7582 \&        void
7583 \&        prefix_foo (int a)
7584 \&        {
7585 \&          return prefix_bar (a + 5);
7586 \&        }
7588 This option is designed to be used with \fB\-fcheck-memory-usage\fR.
7589 .Ip "\fB\-finstrument-functions\fR" 4
7590 .IX Item "-finstrument-functions"
7591 Generate instrumentation calls for entry and exit to functions.  Just
7592 after function entry and just before function exit, the following
7593 profiling functions will be called with the address of the current
7594 function and its call site.  (On some platforms,
7595 \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
7596 function, so the call site information may not be available to the
7597 profiling functions otherwise.)
7599 .Vb 2
7600 \&        void __cyg_profile_func_enter (void *this_fn, void *call_site);
7601 \&        void __cyg_profile_func_exit  (void *this_fn, void *call_site);
7603 The first argument is the address of the start of the current function,
7604 which may be looked up exactly in the symbol table.
7606 This instrumentation is also done for functions expanded inline in other
7607 functions.  The profiling calls will indicate where, conceptually, the
7608 inline function is entered and exited.  This means that addressable
7609 versions of such functions must be available.  If all your uses of a
7610 function are expanded inline, this may mean an additional expansion of
7611 code size.  If you use \fBextern inline\fR in your C code, an
7612 addressable version of such functions must be provided.  (This is
7613 normally the case anyways, but if you get lucky and the optimizer always
7614 expands the functions inline, you might have gotten away without
7615 providing static copies.)
7617 A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
7618 which case this instrumentation will not be done.  This can be used, for
7619 example, for the profiling functions listed above, high-priority
7620 interrupt routines, and any functions from which the profiling functions
7621 cannot safely be called (perhaps signal handlers, if the profiling
7622 routines generate output or allocate memory).
7623 .Ip "\fB\-fstack-check\fR" 4
7624 .IX Item "-fstack-check"
7625 Generate code to verify that you do not go beyond the boundary of the
7626 stack.  You should specify this flag if you are running in an
7627 environment with multiple threads, but only rarely need to specify it in
7628 a single-threaded environment since stack overflow is automatically
7629 detected on nearly all systems if there is only one stack.
7631 Note that this switch does not actually cause checking to be done; the
7632 operating system must do that.  The switch causes generation of code
7633 to ensure that the operating system sees the stack being extended.
7634 .Ip "\fB\-fstack-limit-register=\fR\fIreg\fR" 4
7635 .IX Item "-fstack-limit-register=reg"
7636 .PD 0
7637 .Ip "\fB\-fstack-limit-symbol=\fR\fIsym\fR" 4
7638 .IX Item "-fstack-limit-symbol=sym"
7639 .Ip "\fB\-fno-stack-limit\fR" 4
7640 .IX Item "-fno-stack-limit"
7642 Generate code to ensure that the stack does not grow beyond a certain value,
7643 either the value of a register or the address of a symbol.  If the stack
7644 would grow beyond the value, a signal is raised.  For most targets,
7645 the signal is raised before the stack overruns the boundary, so
7646 it is possible to catch the signal without taking special precautions.
7648 For instance, if the stack starts at address \fB0x80000000\fR and grows
7649 downwards you can use the flags
7650 \&\fB\-fstack-limit-symbol=_\|_stack_limit\fR
7651 \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR which will enforce a stack
7652 limit of 128K.
7653 .Ip "\fB\-fargument-alias\fR" 4
7654 .IX Item "-fargument-alias"
7655 .PD 0
7656 .Ip "\fB\-fargument-noalias\fR" 4
7657 .IX Item "-fargument-noalias"
7658 .Ip "\fB\-fargument-noalias-global\fR" 4
7659 .IX Item "-fargument-noalias-global"
7661 Specify the possible relationships among parameters and between
7662 parameters and global data.
7664 \&\fB\-fargument-alias\fR specifies that arguments (parameters) may
7665 alias each other and may alias global storage.
7666 \&\fB\-fargument-noalias\fR specifies that arguments do not alias
7667 each other, but may alias global storage.
7668 \&\fB\-fargument-noalias-global\fR specifies that arguments do not
7669 alias each other and do not alias global storage.
7671 Each language will automatically use whatever option is required by
7672 the language standard.  You should not need to use these options yourself.
7673 .Ip "\fB\-fleading-underscore\fR" 4
7674 .IX Item "-fleading-underscore"
7675 This option and its counterpart, \-fno-leading-underscore, forcibly
7676 change the way C symbols are represented in the object file.  One use
7677 is to help link with legacy assembly code.
7679 Be warned that you should know what you are doing when invoking this
7680 option, and that not all targets provide complete support for it.
7681 .SH "ENVIRONMENT"
7682 .IX Header "ENVIRONMENT"
7683 This section describes several environment variables that affect how \s-1GCC\s0
7684 operates.  Some of them work by specifying directories or prefixes to use
7685 when searching for various kinds of files. Some are used to specify other
7686 aspects of the compilation environment.
7688 Note that you can also specify places to search using options such as
7689 \&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
7690 take precedence over places specified using environment variables, which
7691 in turn take precedence over those specified by the configuration of \s-1GCC\s0.
7692 .Ip "\fB\s-1LANG\s0\fR" 4
7693 .IX Item "LANG"
7694 .PD 0
7695 .Ip "\fB\s-1LC_CTYPE\s0\fR" 4
7696 .IX Item "LC_CTYPE"
7697 .Ip "\fB\s-1LC_MESSAGES\s0\fR" 4
7698 .IX Item "LC_MESSAGES"
7699 .Ip "\fB\s-1LC_ALL\s0\fR" 4
7700 .IX Item "LC_ALL"
7702 These environment variables control the way that \s-1GCC\s0 uses
7703 localization information that allow \s-1GCC\s0 to work with different
7704 national conventions.  \s-1GCC\s0 inspects the locale categories
7705 \&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
7706 so.  These locale categories can be set to any value supported by your
7707 installation.  A typical value is \fBen_UK\fR for English in the United
7708 Kingdom.
7710 The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
7711 classification.  \s-1GCC\s0 uses it to determine the character boundaries in
7712 a string; this is needed for some multibyte encodings that contain quote
7713 and escape characters that would otherwise be interpreted as a string
7714 end or escape.
7716 The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
7717 use in diagnostic messages.
7719 If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
7720 of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
7721 and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
7722 environment variable.  If none of these variables are set, \s-1GCC\s0
7723 defaults to traditional C English behavior.
7724 .Ip "\fB\s-1TMPDIR\s0\fR" 4
7725 .IX Item "TMPDIR"
7726 If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
7727 files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
7728 compilation which is to be used as input to the next stage: for example,
7729 the output of the preprocessor, which is the input to the compiler
7730 proper.
7731 .Ip "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
7732 .IX Item "GCC_EXEC_PREFIX"
7733 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
7734 names of the subprograms executed by the compiler.  No slash is added
7735 when this prefix is combined with the name of a subprogram, but you can
7736 specify a prefix that ends with a slash if you wish.
7738 If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GNU\s0 \s-1CC\s0 will attempt to figure out
7739 an appropriate prefix to use based on the pathname it was invoked with.
7741 If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
7742 tries looking in the usual places for the subprogram.
7744 The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
7745 \&\fI\fIprefix\fI/lib/gcc-lib/\fR where \fIprefix\fR is the value
7746 of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
7748 Other prefixes specified with \fB\-B\fR take precedence over this prefix.
7750 This prefix is also used for finding files such as \fIcrt0.o\fR that are
7751 used for linking.
7753 In addition, the prefix is used in an unusual way in finding the
7754 directories to search for header files.  For each of the standard
7755 directories whose name normally begins with \fB/usr/local/lib/gcc-lib\fR
7756 (more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
7757 replacing that beginning with the specified prefix to produce an
7758 alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 will search
7759 \&\fIfoo/bar\fR where it would normally search \fI/usr/local/lib/bar\fR.
7760 These alternate directories are searched first; the standard directories
7761 come next.
7762 .Ip "\fB\s-1COMPILER_PATH\s0\fR" 4
7763 .IX Item "COMPILER_PATH"
7764 The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
7765 directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
7766 specified when searching for subprograms, if it can't find the
7767 subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
7768 .Ip "\fB\s-1LIBRARY_PATH\s0\fR" 4
7769 .IX Item "LIBRARY_PATH"
7770 The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
7771 directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
7772 \&\s-1GCC\s0 tries the directories thus specified when searching for special
7773 linker files, if it can't find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
7774 using \s-1GCC\s0 also uses these directories when searching for ordinary
7775 libraries for the \fB\-l\fR option (but directories specified with
7776 \&\fB\-L\fR come first).
7777 .Ip "\fBC_INCLUDE_PATH\fR" 4
7778 .IX Item "C_INCLUDE_PATH"
7779 .PD 0
7780 .Ip "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
7781 .IX Item "CPLUS_INCLUDE_PATH"
7782 .Ip "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
7783 .IX Item "OBJC_INCLUDE_PATH"
7785 These environment variables pertain to particular languages.  Each
7786 variable's value is a colon-separated list of directories, much like
7787 \&\fB\s-1PATH\s0\fR.  When \s-1GCC\s0 searches for header files, it tries the
7788 directories listed in the variable for the language you are using, after
7789 the directories specified with \fB\-I\fR but before the standard header
7790 file directories.
7791 .Ip "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
7792 .IX Item "DEPENDENCIES_OUTPUT"
7793 If this variable is set, its value specifies how to output dependencies
7794 for Make based on the header files processed by the compiler.  This
7795 output looks much like the output from the \fB\-M\fR option, but it goes to a separate file, and is
7796 in addition to the usual results of compilation.
7798 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
7799 which case the Make rules are written to that file, guessing the target
7800 name from the source file name.  Or the value can have the form
7801 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
7802 file \fIfile\fR using \fItarget\fR as the target name.
7803 .Ip "\fB\s-1LANG\s0\fR" 4
7804 .IX Item "LANG"
7805 This variable is used to pass locale information to the compiler. One way in
7806 which this information is used is to determine the character set to be used
7807 when character literals, string literals and comments are parsed in C and \*(C+.
7808 When the compiler is configured to allow multibyte characters,
7809 the following values for \fB\s-1LANG\s0\fR are recognized:
7810 .RS 4
7811 .Ip "\fBC-JIS\fR" 4
7812 .IX Item "C-JIS"
7813 Recognize \s-1JIS\s0 characters.
7814 .Ip "\fBC-SJIS\fR" 4
7815 .IX Item "C-SJIS"
7816 Recognize \s-1SJIS\s0 characters.
7817 .Ip "\fBC-EUCJP\fR" 4
7818 .IX Item "C-EUCJP"
7819 Recognize \s-1EUCJP\s0 characters.
7821 .RS 4
7823 If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
7824 compiler will use mblen and mbtowc as defined by the default locale to
7825 recognize and translate multibyte characters.
7827 .SH "BUGS"
7828 .IX Header "BUGS"
7829 For instructions on reporting bugs, see
7830 <\fBhttp://gcc.gnu.org/bugs.html\fR>.  Use of the \fBgccbug\fR
7831 script to report bugs is recommended.
7832 .SH "FOOTNOTES"
7833 .IX Header "FOOTNOTES"
7834 .Ip "1." 4
7835 On some systems, \fBgcc \-shared\fR
7836 needs to build supplementary stub code for constructors to work. On
7837 multi-libbed systems, \fBgcc \-shared\fR must select the correct support
7838 libraries to link against.  Failing to supply the correct flags may lead
7839 to subtle defects. Supplying them in cases where they are not necessary
7840 is innocuous.
7841 .SH "SEE ALSO"
7842 .IX Header "SEE ALSO"
7843 \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIg77\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1)
7844 and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR,
7845 \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
7846 .SH "AUTHOR"
7847 .IX Header "AUTHOR"
7848 See the Info entry for \fIgcc\fR, or
7849 <\fBhttp://gcc.gnu.org/thanks.html\fR>, for contributors to \s-1GCC\s0.
7850 .SH "COPYRIGHT"
7851 .IX Header "COPYRIGHT"
7852 Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
7853 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
7855 Permission is granted to make and distribute verbatim copies of this
7856 manual provided the copyright notice and this permission notice are
7857 preserved on all copies.
7859 Permission is granted to copy and distribute modified versions of this
7860 manual under the conditions for verbatim copying, provided also that the
7861 entire resulting derived work is distributed under the terms of a
7862 permission notice identical to this one.
7864 Permission is granted to copy and distribute translations of this manual
7865 into another language, under the above conditions for modified versions,
7866 except that this permission notice may be included in translations
7867 approved by the Free Software Foundation instead of in the original
7868 English.